problema ejercicio C

FiRpO

Buenas, mirad tengo un problema con un ejercicio de C y es que no tengo ni idea de como hacerlo :S
El ejercicio consiste en:
Teniendo en un fichero los numeros 3 8 1 0 4 12 9 3 7 128 34 2 3 1 12 8 4 4 hay que enseñar
por pantalla el entero leido y el numero de veces que esta repetido. Por ejemplo:
entero leido: 3 repetido: 3 veces
entero leido: 8 repetido: 2 veces
asi sucesivamente sin repetir ningun entero leido

si alguien tiene alguna idea de como hacerlo le agradeceria su ayuda

gracias de antemano ;D

PeLoTaSo

No te voy a poner el desarrollo pero lo que yo haría sería meterlos en un vector, luego inicializar una variable con la cantidad de números (pongamos Knum), después iría recorriendo el vector desde el principio hasta llegar al final o hasta que la variable llegue a 0, si encuentro un número en el registro lo que hago es borrarlo, buscarlo en el resto del vector y donde lo encuentre borrarlo también, disminuir Knum e ir aumentando un contador, luego muestro el número y el contador por pantalla, lo pongo a 0 y al siguiente registro.

Igual no me he explicado bien pero es mucho más difícil explicar el algoritmo que hacerlo xD.

DReaMeR99

Creas un array con 10 regs, de 0 a 9, dentro de array[i+1] meteras el numero de veces que ha sido repetido

Miras el tamaño del archivo

Bucle while, mientras i < tamaño del archivo

Dentro del bucle, lees los bytes de par en par (un int = 2bytes)
Pones un switch, según el numero leido aumentas d 1 un registro del array u otro.

Cierras bucle

Printeas

Ala, a picar que esta tirao

LOc0

Hice una chorradita parecida para Estadística. Adaptándolo un poco:


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

typedef struct numero
{
int numero;
int frecuencia;
}NUMERO;

int main(int argc, char **argv)
{

int total_num, total_sin_repetir, conta, conta2, auxiliar;
FILE *puntero_fichero;
NUMERO *vector;

puntero_fichero=fopen("fichero.txt", "r");

if(puntero_fichero!=NULL)
{

total_num=0;
while(!feof(puntero_fichero))
{
fscanf(puntero_fichero, "%d");
total_num++;
}

vector=(NUMERO)malloc(total_numsizeof(NUMERO));

rewind(puntero_fichero);

conta=0;
total_sin_repetir=0;

while(conta<total_num)
{
fscanf(puntero_fichero, "%d", &auxiliar);
conta2=0;

while(conta2<total_sin_repetir && vector[conta2].numero!=auxiliar)
	conta2++;

if(conta2<total_sin_repetir)
{
	vector[conta2].frecuencia++;
}
else
{
	total_sin_repetir++;
    vector[conta2].numero=auxiliar;
	vector[conta2].frecuencia=1;

}
	
conta++;

}

fclose(puntero_fichero);

conta=0;

while(conta<total_sin_repetir)
{

printf("\n\nNumero leido: %d", vector[conta].numero);
printf("\nRepetido: %d veces", vector[conta].frecuencia);

conta++;

}

free(vector);

}
else
printf("\n\nERROR: no se encuentra fichero.txt\n");

return 0;
}
[/i]

Sólo sirve si entre cada número hay ESPACIO(s).

Salu2 ;)

Usuarios habituales

  • LOc0
  • DReaMeR99
  • PeLoTaSo
  • FiRpO