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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


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

Desconectado Desconectado

Mensajes: 101


Ver Perfil
Problema variable j
« en: 27 Octubre 2012, 17:48 pm »

Hola, tengo un problema con este programa, no entiendo bien el funcionamiento de la variable j y como se puede hacer para que algo que esta declarado en otra variable, la variable fin, se pueda usar en el printf de otros nombres, eso no lo entiendo. Si alguien pudiese explicarme el funcionamiento.. Esque me gusta acabar de entender los programas.

 #include  <stdio.h>
    #include  <string.h>
   
    main()
    {
                int  i,  j;
                char  nombres[10][10],  otrosNombres[10],  fin[]="fin";
               
                printf("\n  Escriba  10  nombres:  \n");
                for  (i=0;  i<10;  i++) 
                        scanf("%s",  &nombres);
                for  (i=0;  i<10;  i++)       
                        printf("%s    ",  nombres);
                do
                {     
                                  printf("\n  Escriba  otro  nombre,  o  \"fin\"  para  terminar:  ");
                                  scanf("%s",  otrosNombres);
                                 
                                  for  (i=0,j=0;  i<10;  i++,j++) 
                                  {
                                            if  (strcmp(otrosNombres,  nombres)  ==  0)
                                                      j--;   
                                  }
                                  if  (i  !=  j)
                                              printf("  Este  nombre  se  encuentra  en  la  lista\n");
                                  else       
                                              printf("  Este  nombre  no  se  encuentra  en  la  lista\n"); 
                                                   
                  }
                  while  (strcmp(otrosNombres,  fin)  !=  0);   
                       
                getchar();
    }


En línea

DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Problema variable j
« Respuesta #1 en: 27 Octubre 2012, 18:49 pm »

Hola.

Antes de responder a tu duda, comentaré algunos errores del programa:

Declaras la variable nombres[10][10]. Eso bien. Pero después, en el primer for, pides los nombres, haciendo esto:

Código
  1. for  (i=0;  i<10;  i++)  
  2.      scanf("%s",  &nombres);

Eso no es correcto. Para pedir un *char (cadena de caracteres), no se debe poner el & en el scanf, y para meter 10 nombres, uno en cada fila de la "matriz de letras", debes poner
Código
  1. scanf("%s", nombres[i]);
(para indicar el número del nombre que vas a pedir, es decir, empiezas por la fila 0 (o nombre 0), y vas así hasta el 9).

Por otra parte, para pedir cadenas de caracteres, te recomiendo usar gets() o fgets(), ya que son funciones específicas para dicha función, y pueden leer espacios, al contrario que scanf(), que cuando lee uno, para de leer los datos.

Código
  1. for  (i=0;  i<10;  i++)  
  2.                        scanf("%s",  nombres[i]);

Dicho esto, respondo a tu duda:

Situémonos en el bucle for que está en el do-while. Las variables i y j incrementan en 1 simultáneamente. Si la variable "otrosNombres" contiene la misma información que "nombres" (strcmp compara dos cadenas: devuelve 0 si ambas son iguales, u otro número si son diferentes), a j se le resta 1. Así, al terminar el bucle for, si i y j son iguales, ninguna cadena contenida en "nombres" será idéntica a "otrosNombres", y si su valor es diferente, sí que hay un nombre igual que a cadena "otrosNombres".

Un saludo.


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Problema variable j
« Respuesta #2 en: 27 Octubre 2012, 19:01 pm »

Solo agregar que no es necesario utilizar dos variables para buscar la cadena en el array, basta con revisar el valor del contador al final del bucle para conocer el resultado:
Código
  1. for (i = 0; i < 10 && strcmp(otrosNombres, nombres[ i ]) != 0; i++)
  2.   ;
  3. if (i != 10)
  4.   puts("Este nombre se encuentra en la lista");
  5. else
  6.   puts("Este nombre no se encuentra en la lista");
Y para imprimir una literal terminada con '\n' es mejor utilizar la función "puts".

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Ander123

Desconectado Desconectado

Mensajes: 101


Ver Perfil
Re: Problema variable j
« Respuesta #3 en: 27 Octubre 2012, 23:15 pm »

Pero como se relaciona la parte del for que compara con la variable i?
En línea

DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Problema variable j
« Respuesta #4 en: 28 Octubre 2012, 00:26 am »

¿Te refieres a esto?:

Código
  1. if  (i  !=  j)
  2.                   printf("  Este  nombre  se  encuentra  en  la  lista\n");
  3.             else        
  4.                   printf("  Este  nombre  no  se  encuentra  en  la  lista\n");  

Si es así, como ya te dije, dentro del bucle for, si las dos variables (i y j) incrementan en 1 simultáneamente, y si las dos cadenas que comparas son iguales, j decrementa, ergo si i != j, significa que hay una cadena en nombres igual idéntica a otrosNombres, y sino, no serán iguales.

Un saludo.
En línea

Ander123

Desconectado Desconectado

Mensajes: 101


Ver Perfil
Re: Problema variable j
« Respuesta #5 en: 28 Octubre 2012, 09:07 am »

Si pero en el ciclo for donde se inicializa i  y j etc no entiendo como se relaciona la variable i con las variables.. con la que se relacione, para posteriormente poder igualar a j.
En línea

DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Problema variable j
« Respuesta #6 en: 28 Octubre 2012, 12:57 pm »

Si pero en el ciclo for donde se inicializa i  y j etc no entiendo como se relaciona la variable i con las variables.. con la que se relacione, para posteriormente poder igualar a j.

Lo siento, pero no entiendo bien tu pregunta... Tanto i como j empiezan en 0. Si i != j significa "si i es distinto de j". Si son distintos, es que algún nombre coincide, sino, ninguno es igual.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
La variable de tipo Object o la variable de bloque With no está establecida
Programación Visual Basic
rubeng 5 11,362 Último mensaje 17 Septiembre 2007, 00:04 am
por rubeng
Error 91: Variable de tipo object o la variable de bloque with no esta estableci
Programación Visual Basic
brus_k10 2 5,784 Último mensaje 16 Junio 2009, 16:20 pm
por cassiani
[Problema] De buffer a variable « 1 2 »
ASM
Lewert 12 6,232 Último mensaje 13 Julio 2009, 02:38 am
por Arkangel_0x7C5
my.resources.source.replace(variable, variable) Ayuda codedom
.NET (C#, VB.NET, ASP)
70N1 4 4,171 Último mensaje 19 Octubre 2011, 12:57 pm
por 70N1
Problema inicializando una variable
Java
reygecko 2 1,789 Último mensaje 30 Diciembre 2012, 00:59 am
por reygecko
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines