elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda ejercicio en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda ejercicio en C  (Leído 1,710 veces)
miguel95

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Duda ejercicio en C
« en: 28 Junio 2017, 23:57 pm »

Buenas a todos, estoy realizando un ejercicio de clase y me he encontrado con un problema. Estoy aquí para ver si me podeis echar un cable.
El ejercicio trata de crear una tabla hash con poblaciones y su número de habitantes. La dificultad reside en que para introducir los nombre y los habitantes tengo que hacerlo todo de seguido y parar al escribir FIN. Por ejempo: Madrid 400 Barcelona 700 FIN

Uso contadores para detectar si hay un espacio y saber a que columna asignarlo, pero algo falla y salen simbolos raros y no coge bien los nombres. Ahí va la parte del código en la que aparece:
Código
  1. case 2: printf("Introduzca poblaciones: ");
  2.        fflush(stdin);
  3. gets(linea);
  4.         cont=0;
  5.         c=0;
  6.  
  7.         for(i=0;i<strlen(linea);i++)
  8. {
  9.  
  10.         if (linea[i]!=' ')
  11. {
  12.         cadena[c]=linea[i];
  13.         c++;
  14. }
  15. else
  16. {
  17. if (cont==0){
  18. //es la ciudad
  19.  strcpy(pob,cadena);
  20. cont++;
  21. }
  22. else{
  23. //es el nº de habitantes
  24.   habitantes=atoi(cadena);//convertir el string a int
  25.   insertar(t,pob,habitantes);
  26.   cont=0;
  27. }
  28.  
  29. if (strcmp(cadena,"FIN")==0)
  30. {
  31.     break;
  32.      }
  33.  
  34.      strcpy(cadena," ");//inicializar la cadena a la caderna vacia, para obtener la siguiente palabra
  35.  
  36.  c=0;
  37. }
  38.  
  39. break;
  40.  
  41. }

La función insertar es esta:
Código
  1. int insertar(tablahash t, char poblacion[30], int habitantes){
  2. int i=hash(poblacion) % TABLA;
  3.  
  4. while(i<=TABLA){
  5. if(strcmp(t[i].poblacion,"")==0){//si la posicion esta vacia
  6. strcpy(t[i].poblacion, poblacion);
  7. t[i].habitantes=habitantes;
  8. break;
  9. }
  10. else if(strcmp(t[i].poblacion,poblacion)==0){//si ya existe
  11. printf("YA INSERTADO\n");
  12. break;
  13. }
  14. if(strcmp(t[i].poblacion,"")!=0){//si la clave esta ya usada
  15. i=i*i;
  16. }
  17. }
  18. }


¿Alguien podría orientarme o decirme donde esta el fallo?
Gracias de antemano.


En línea

migueluc

Desconectado Desconectado

Mensajes: 4



Ver Perfil
Re: Duda ejercicio en C
« Respuesta #1 en: 30 Junio 2017, 19:04 pm »

Yo hice algo parecido en Java: lo que hice fue un bucle que cogiera una linea de entrada por consola (es decir, que cogiera lo último escrito antes de pulsar ENTER) y que divida la línea en 2 trozos. Compruebas el primer "trozo" para ver que no sea "FIN" y haces con él lo pertinente.

Código:
public void run(){

Scanner scanner = new Scanner(System.in);

while(true){

System.out.println("Introduzca el nombre del comando y sus argumentos");

String comando = scanner.nextLine();

String[] comandos = comando.split(" ");

// Si se introduce un enter: return (fin)
if(comando.isEmpty()){
return;
}

Function func = commands.get(comandos[0]);

if (func == null){

System.out.println("Comandos disponibles:");

ArrayList<String> lista = new ArrayList<String>(commands.keySet());

for (String nombre : lista){

System.out.println(nombre);

}

}else{

if(comandos.length == 1){
func.execute();
}else if (comandos.length > 2){
throw new IllegalArgumentException("Numero de argumentos introducidos invalido");
}else
func.execute(comandos[1]);
}


}


}


Sé que seguramente no sepas Java pero quizás te ayude visualizarlo desde otra perspectiva. Al fin y al cabo tu ejercicio se puede hacer en varios lenguajes, por lo que el algoritmo es similar.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda en ejercicio++
Ejercicios
Lamarkus 1 3,283 Último mensaje 1 Diciembre 2010, 17:31 pm
por [L]ord [R]NA
Duda con un ejercicio
Programación C/C++
goll9d 4 2,084 Último mensaje 13 Mayo 2012, 01:47 am
por goll9d
DUDA. Ejercicio en C.
Ejercicios
mariota1 7 5,530 Último mensaje 20 Septiembre 2012, 15:04 pm
por Stakewinner00
Duda con un ejercicio
Programación C/C++
lJvRl 3 2,005 Último mensaje 21 Abril 2013, 13:29 pm
por lJvRl
Duda ejercicio C
Programación C/C++
dennis094 4 2,101 Último mensaje 20 Diciembre 2013, 16:06 pm
por leosansan
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines