Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ayuda urgente! en C

Estas en el tema de Ayuda urgente! en C en el foro de C/C++ en Foros del Web. Hola tendria una duda y a ver si podeis exarme una mano (estoy intentando aprender y ando bastante perdido). Tengo una archivo donde tengo una ...
  #1 (permalink)  
Antiguo 05/04/2008, 17:54
 
Fecha de Ingreso: abril-2008
Mensajes: 19
Antigüedad: 16 años, 1 mes
Puntos: 0
Ayuda urgente! en C

Hola tendria una duda y a ver si podeis exarme una mano (estoy intentando aprender y ando bastante perdido). Tengo una archivo donde tengo una serie de datos (numeros generados aleatoriamente por un programa y guardados en un archivo .txt o .dat, es indiferente el tipo de archivo). Y este archivo tiene ke ser abierto por otro programa y dar el valor maximo, valor minimo, la media y la desviacion estandar.

Se generar los numeros aleatorios y guardarlos en un archivo, se abrir el archivo y ke los datos sean leidos y por ultimo se dar el valor maximo, valor minixmo, la media... cuando yo introduzco los valores manuealmente...

Pero lo ke no se hacer es dar el valor min,max etc.. etc.. cuando los datos tienen ke ser tomados desde otro archivo ¿ Alguien me podria exar una mano?

Aki os dejo el codigo ke he escrito para dar valor min, max etc cuando introduzco los datos manualmente.

#include <stdio.h>
#include <stdlib.h>

int Suma(int *Vector,int iSize)
{
int i;
int iSum=0;
for(i=0;i<iSize;i++)
iSum+=Vector[i];

return iSum;
}
float Media(int *Vector,int iSize)
{
int i;
int iSum=0;
for(i=0;i<iSize;i++)
iSum+=Vector[i];


return (float)iSum/iSize;
}

int Max(int *Vector,int iSize)
{
int iMax=Vector[0],i;
for(i=0;i<iSize;i++){
if(Vector[i] > iMax)
iMax=Vector[i];
}
return iMax;
}

int Min(int *Vector,int iSize)
{
int iMin=Vector[0];
int i;
for(i=0;i<iSize;i++){
if(Vector[i] < iMin)
iMin=Vector[i];
}
return iMin;
}

int main()
{
int iSize,i;
system("cls");
printf("Numero de elementos del vector: ");
scanf("%d",&iSize);
/*Asigna memoria*/
int *Vector=(int*)malloc(iSize * sizeof(int));
if(!Vector){
printf("No hay memoria\n");
exit(1);
}
for(i=0;i<iSize;i++){
printf("Vector[%d]: ",i);
scanf("%d",&Vector[i]);
}
printf("\nEl valor minimo es: %d\n",Min(Vector,iSize));
printf("El valor maximo es: %d\n",Max(Vector,iSize));
printf("La suma: %d\n",Suma(Vector,iSize));
printf("La media es: %g\n",Media(Vector,iSize));
/*Libera memoria*/
if(Vector!=0)
free(Vector);

system("pause");
return 0;
}


muxas gracias de antemano! Ayudarme porfavor!
  #2 (permalink)  
Antiguo 05/04/2008, 17:56
 
Fecha de Ingreso: abril-2008
Mensajes: 19
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Ayuda urgente! en C

Y aki os dejo el codigo para generar los numeros y guadarlos en un archivo.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>


int main()
{
int i;
int num; /* Cuantos numeros que queremos obtener */
char ofilename[] = "resultado.txt";
FILE *archivo;

if((archivo = fopen(ofilename, "w+"))==NULL){
printf("Error en apertura de archivo");
}

int alea(int desde, int hasta)
{
return rand()%(hasta-desde+1)+desde;
}

srand(time(NULL)); /* Semilla */


printf("Escribe cuantos numeros aleatorios quieres obtener?\n");
scanf("%d",&num);

for(i=0;i<num;i++)
{

fprintf(archivo,"%i\n",alea(1,100));
}

getch();
fclose(archivo);
system("pause");
return 0;
}
  #3 (permalink)  
Antiguo 07/04/2008, 11:54
Avatar de Mephisto  
Fecha de Ingreso: enero-2006
Ubicación: Mexico DF
Mensajes: 184
Antigüedad: 18 años, 4 meses
Puntos: 3
Re: Ayuda urgente! en C

Código:
printf("Numero de elementos del vector: ");
scanf("%d",&iSize);
/*Asigna memoria*/
int *Vector=(int*)malloc(iSize * sizeof(int));
if(!Vector){
printf("No hay memoria\n");
exit(1);
}
for(i=0;i<iSize;i++){
printf("Vector[%d]: ",i);
scanf("%d",&Vector[i]);
}
Cambia esta parte y abre tu archivo en modo lectura, mediante un ciclo hasta el fin del archivo o sea EOF, almacenas los valores que estan en el archivo leyendolos linea por linea ya que cuando los almacenas utilizas este formato de separacion.
__________________
Saludos...

Todos somos sabios, solo que en diferentes disciplinas...
  #4 (permalink)  
Antiguo 07/04/2008, 12:32
 
Fecha de Ingreso: abril-2008
Mensajes: 19
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Ayuda urgente! en C

primero de todo muxas gracias mephisto por contestar, a ver si te he entendido (estoy bastante pez y me lio un poco con toda la informacion ke leo). Abro el archivo con el siguiente codigo no? (lo ke si lo lee linea por linea)

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
FILE *archivo;
char letra;

archivo = fopen("resultado.txt","r");
if (archivo==NULL)
{
printf( "No se puede abrir el fichero.\n" );
exit( 1 );
}
printf( "Contenido del fichero:\n" );
letra=getc(archivo);
while (feof(archivo)==0)
{
printf( "%c",letra );
letra=getc(archivo);
}
if (fclose(archivo)!=0)
printf( "Problemas al cerrar el fichero\n" );

system("PAUSE");
return 0;
}

la parte ke no entiendo de esto, es la parte ke me has dixo ke cambie. Como hago para ke cuando abra el archivo el segundo programa, tome los datos ke hay en el archivo generado por el primer programa? (digamos como hago ke se esos datos se pongan en una variable para luego aplicar el valor max, min, max etc etc..).

saludos y de nuevo gracias :)
  #5 (permalink)  
Antiguo 07/04/2008, 15:55
Avatar de Mephisto  
Fecha de Ingreso: enero-2006
Ubicación: Mexico DF
Mensajes: 184
Antigüedad: 18 años, 4 meses
Puntos: 3
Re: Ayuda urgente! en C

Espero explicarme bien y te pueda servir esto:

Como el numero aleatorio que generas es entre uno y cien lo mas que puedes tener por linea es un 100, o sea tres caracteres mas el salto de linea, o sea cuatro, mas el caracter nulo que todo string debe tener, con base en esto, en lugar de definir char letra, defines

Código:
char numero [5];
Para la lectura que tienes de esta manera

Código:
letra=getc(archivo);
while (feof(archivo)==0)
{
printf( "%c",letra );
letra=getc(archivo);
}
Lo que haces es leer cada carater del archivo de manera independiente, mejor cambialo por linea con un fgets.

Código:
memset(numero,'\0',sizeof(numero));//Con esto limpias el arreglo para que no te deje basura
while((fgets(numero,sizeof(numero),archivo))!=NULL){

   //Aqui hay que almacenar cada uno de los diferentes numeros que leeras
  memset(numero,'\0',sizeof(numero));
}

//Ya almacenados los numeros del archivo mandas llamar tus funciones de max, min, etc

Para almacenar los numeros es donde esta la siguiente encrucijada, jejejeje... Como no sabemos cuantos numeros vienen en el archivo, lo ams conveniente sería mediante una lista dinamica, pero creo que para que comiences, es mejor que limites la cantidad de numeros que vas a generar, por ejemplo 100. A partir de esto, declara tambien en la lectura un array y los vas almacenando conforme los lees, te apoyas en un contador para esto.


Espero te sea de utilidad todo el choro que me avente, jejejejejejej
__________________
Saludos...

Todos somos sabios, solo que en diferentes disciplinas...
  #6 (permalink)  
Antiguo 07/04/2008, 17:37
 
Fecha de Ingreso: abril-2008
Mensajes: 19
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Ayuda urgente! en C

ejejjej muxas gracias de nuevo :) ahora estoy modificando los codigos para ke solo genere 100 numeros y asi facilitar las cosas, porke vaya cacao mental llevo xDD
  #7 (permalink)  
Antiguo 07/04/2008, 19:48
 
Fecha de Ingreso: abril-2008
Mensajes: 19
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Ayuda urgente! en C

ejje mephisto creo ke soy tu pesadilla xDD porke tengo una preguntita mas, declraando un vector por ej: char vectorl[100] y con el comando fscanf(archivo,"%s", vectorl); ya tendria almacenado el vector noo¿¿ y el contador seria for ( j=0; j<100; i++) ??. Lo digo porke he puesto un printf("El valor del vector es: %s\n",vector); pero solo me muestra 99 numeros, el primer numero no me lo muestra.

ahhh otra cosita tengo ke liberar la memoria del vector?? o no hace falta??


asi kedaria las modificaciones ke me has dixo no?

if (archivo==NULL)
{
printf( "No se puede abrir el fichero.\n" );
exit( 1 );
}

memset(numero,'\0',sizeof(numero)); /*limpear arreglo*/

while((fgets(numero,sizeof(numero),archivo))!=NULL )
{
memset(numero,'\0',sizeof(numero)); /*almacenar numeros del archivo*/
fscanf(archivo,"%s", vectorl);

}
if (fclose(archivo)!=0)
printf( "Problemas al cerrar el fichero\n" );

Última edición por waneos; 08/04/2008 a las 08:45
  #8 (permalink)  
Antiguo 08/04/2008, 20:01
Avatar de Mephisto  
Fecha de Ingreso: enero-2006
Ubicación: Mexico DF
Mensajes: 184
Antigüedad: 18 años, 4 meses
Puntos: 3
Re: Ayuda urgente! en C

El que tu declares char vectorl[100] en realidad su nombre en C es una array o arreglo como lo quieras llamar, estos no tienen que ser liberados, solo cuando utilizas Alloc para reservar espacios de memoria

La situacion es que fgets y fscanf son funciones similares, el primer numero se te pierde en el fgets. Si vas a utilizar fscanf y ya limitaste tu codigo a 100 numeros cambia esto

Código:
while((fgets(numero,sizeof(numero),archivo))!=NULL )
{
memset(numero,'\0',sizeof(numero)); /*almacenar numeros del archivo*/
fscanf(archivo,"%s", vectorl); 

}
por esto

Código:
for(i=0;i<100;i++)
{
fscanf(archivo,"%s", vectorl[i]); 
}
__________________
Saludos...

Todos somos sabios, solo que en diferentes disciplinas...
  #9 (permalink)  
Antiguo 08/04/2008, 20:02
Avatar de Mephisto  
Fecha de Ingreso: enero-2006
Ubicación: Mexico DF
Mensajes: 184
Antigüedad: 18 años, 4 meses
Puntos: 3
Re: Ayuda urgente! en C

La funcion en C para alojar memoria es malloc, aunque tambien estan calloc y realloc, pero estas no aplican para arrays...
__________________
Saludos...

Todos somos sabios, solo que en diferentes disciplinas...
  #10 (permalink)  
Antiguo 09/04/2008, 17:11
 
Fecha de Ingreso: abril-2008
Mensajes: 19
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Ayuda urgente! en C

mmmm no encuentro la puta solucion :( cuando escribo esto: con el feof ( while(feof(archivo)==0)) compila, pero el programa peta.... y en cmabio cuando lo hago ocn un eof no peta. Da lo msimo dejarlo con el eof? o con el feof? (he leido ke feof es mas seguro).
Si lo dejo con el eof, ya tendria mi vector almacenado? o falta algo al codigo??

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
FILE *archivo;
char vect[100];
int i;

archivo = fopen("resultado.txt","r");
if (archivo==NULL)
{
printf( "No se puede abrir el fichero.\n" );
exit( 1 );
}

while(feof(archivo)==0)
{

for (i=0;i<100;i++);
{
fscanf(archivo,"%s",vect[i]);
}

}

if (fclose(archivo)!=0)
printf( "Problemas al cerrar el fichero\n" );

system("PAUSE");
return 0;
}



pd: mephisto, me sabe mal insistir tanto... pero no tengo valor de hacer este programa .
  #11 (permalink)  
Antiguo 10/04/2008, 16:15
Avatar de Mephisto  
Fecha de Ingreso: enero-2006
Ubicación: Mexico DF
Mensajes: 184
Antigüedad: 18 años, 4 meses
Puntos: 3
Re: Ayuda urgente! en C

cambia esto

Código:
while(feof(archivo)==0)
{

for (i=0;i<100;i++);
{
fscanf(archivo,"%s",vect[i]);
}

}
Por esto

Código:
for (i=0;i<100&&(feof(archivo)==0);i++);
{
fscanf(archivo,"%s",vect[i]);
}
Espero que ya con esto quede... jejejejje
__________________
Saludos...

Todos somos sabios, solo que en diferentes disciplinas...
  #12 (permalink)  
Antiguo 10/04/2008, 17:23
 
Fecha de Ingreso: abril-2008
Mensajes: 19
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Ayuda urgente! en C

jejejejeejej! me vas a cojeeer maniaa! ke lo see! por tanto preguntar :P pero me peta cuando intento compilar... :S (y en cambio si kito [i] de fscanf(archivo,"%s",vect[i]); no me peta...).

Última edición por waneos; 10/04/2008 a las 17:29
  #13 (permalink)  
Antiguo 11/04/2008, 11:13
Avatar de Mephisto  
Fecha de Ingreso: enero-2006
Ubicación: Mexico DF
Mensajes: 184
Antigüedad: 18 años, 4 meses
Puntos: 3
Re: Ayuda urgente! en C

Perdon, error mio, jejejejej

Código:
fscanf(archivo,"%s",&vect[i]);
Falta el & para referenciar la localidad del array....
__________________
Saludos...

Todos somos sabios, solo que en diferentes disciplinas...
  #14 (permalink)  
Antiguo 12/04/2008, 16:50
 
Fecha de Ingreso: abril-2008
Mensajes: 19
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Ayuda urgente! en C

jejejjejej graciaaas!!! ya pude almacenar el vector :D ahora me falta el valor max, min etc etc :D

muxas gracias mephisto por la ayuda :)
  #15 (permalink)  
Antiguo 13/04/2008, 16:27
 
Fecha de Ingreso: abril-2008
Mensajes: 19
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Ayuda urgente! en C

ejejej como dice una cancion de estopa.. vuelvo a las andadas....

#include <stdio.h>
#include <stdlib.h>
#define Size 10

int main(int argc, char *argv[])
{
int vector[Size];
short i;
FILE *archivo;
int max;
int imax;



archivo = fopen("resultado.txt", "r");

if(archivo == NULL)

{
printf("No se ha podido abrir el archivo.\n");
printf("Pulse una tecla para finalizar... ");
exit(1);
}


printf("Los valores guardados en el archivo son:\n");
i = 0;

while(fscanf(archivo,"%i",vector + i++)!= EOF);
for(i = 0 ; i < Size ; i++)
{
printf("Valor %d --> %i\n",i,vector[i]);
}
if (fclose(archivo)!=0){
printf( "Problemas al cerrar el fichero\n" );
}

// valor maximo

}
max = vector[0];
imax = 0;
for (i=0; i<SIZE ; i++) {
if (vector[i] > max) {
max = vector[i];
imax = i;
}

// mostrar valores

printf("\nEl máximo valor del conjunto es: %d.\n", max);


system("pause");
}


El programa no me deja compilar la parte nueva ke he añadido..... la del valor maximo, me dice ke hay un error y creo ke lo he exo bien... alguien me podria decir ke he exo mal??? y exarme una mano a corregirlo.
  #16 (permalink)  
Antiguo 14/04/2008, 11:00
Avatar de Mephisto  
Fecha de Ingreso: enero-2006
Ubicación: Mexico DF
Mensajes: 184
Antigüedad: 18 años, 4 meses
Puntos: 3
Re: Ayuda urgente! en C

A partir de este punto estan mal tus llaves

Código:
// valor maximo

} //Esta llave esta cerrando el main
max = vector[0];
imax = 0;
for (i=0; i<SIZE ; i++) {
if (vector[i] > max) {
max = vector[i];
imax = i;
}//Esta llave cierra el if

// mostrar valores

printf("\nEl máximo valor del conjunto es: %d.\n", max);


system("pause");
}
Ponlo de esta manera:

Código:
// valor maximo

max = vector[0];
imax = 0;
for (i=0; i<SIZE ; i++) {
if (vector[i] > max) {
max = vector[i];
imax = i;

}//Esta llave cierra el if
}//Esta llave cierra el for

// mostrar valores

printf("\nEl máximo valor del conjunto es: %d.\n", max);


system("pause");
}
__________________
Saludos...

Todos somos sabios, solo que en diferentes disciplinas...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:35.