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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  no se como hacer una función correctamente con arreglos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: no se como hacer una función correctamente con arreglos  (Leído 2,966 veces)
condor7000

Desconectado Desconectado

Mensajes: 3


Ver Perfil
no se como hacer una función correctamente con arreglos
« en: 4 Diciembre 2016, 18:49 pm »

Cordial saludo,
podrían hacer el favor de ayudarme con esta agenda, es que no puedo hacer una función donde se consulte por nombre, estoy trabajando con falcon

Código
  1. #include<iostream>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #include <windows.h>
  5. #include <stdio.h>
  6. using namespace std;
  7.  
  8. char nombre[15][20];//Matriz tipo char bidimensional de 15 filas y 20 columnas.
  9.  
  10. int telefono[15]; //Matriz tipo enetro unidimensional.
  11.  
  12. void ingresar();
  13. void mostrar();
  14. void consulte();
  15. int norepeticion(int znum);
  16. void gotoxy(int x,int y)
  17. {
  18. HANDLE hCon;
  19. hCon = GetStdHandle(STD_OUTPUT_HANDLE);
  20. COORD dwPos;
  21. dwPos.X=x;
  22. dwPos.Y=y;
  23. SetConsoleCursorPosition(hCon,dwPos);
  24. }
  25.  
  26. int main()
  27.  
  28. {
  29.  
  30. int n;
  31.  
  32. int salida=0;
  33.  
  34. do
  35.  
  36. {
  37.  
  38. system("cls");
  39.  
  40. cout<<"\t\t******MENU******";
  41.  
  42. cout<<endl<<"1. INGRESAR CONTACTOS";
  43.  
  44. cout<<endl<<"2. MOSTRAR CONTACTOS";
  45.  
  46. cout<<endl<<"3. CONSULTE POR NOMBRE";
  47.  
  48. cout<<endl<<"4. SALIR";
  49.  
  50. cout<<endl<<"Elija una opci\xa2n : ";
  51.  
  52. cin>>n;
  53.  
  54. switch(n)
  55.  
  56. { case 1: ingresar();
  57.  break;
  58.   case 2: mostrar();
  59.  break;        
  60.   case 3: consulte();
  61.              break;
  62.  case 4: salida=1;
  63.   break;
  64.  default:
  65.  
  66.  
  67.   cout<<endl<<endl<<"Presione una de las teclas indicadas";
  68.  
  69.   cout<<endl<<endl;
  70.  
  71. system("pause");
  72.  
  73.   break;
  74. }
  75.  
  76. }
  77. while(salida==0);
  78.  
  79. cout<<endl<<endl;
  80.  
  81.  return 0;
  82.  
  83. }
  84.  
  85. void ingresar()
  86. {
  87. int i, znumtel, norepetir1 ;
  88. system("cls");
  89. for (i=0; i<5; i++)
  90. {
  91. telefono[i]=0;
  92. strcpy (nombre[i]," ");
  93. }
  94. cout<<endl<<"\t************  INGRESAR CONTACTOS  ***********";
  95. cout<<endl<<endl;
  96. for ( i=0; i<5 ; i++ )
  97. {
  98.              cout<<"\nDIGITE UN NOMBRE: ";
  99.              cin>>nombre[i];
  100.              cout<<"\nDIGITE UN NUMERO DE TELEFONO: ";
  101.              cin>>znumtel;
  102.              while(znumtel<1 or znumtel>8000000)
  103.  {
  104.   cout<<endl<<"\t******  NUMERO DE TELEFONO INCORRECTO...INGRESE OTRO NUMERO DE TELFONO";
  105.   cout<<"\nDIGITE UN NUMERO DE TELEFONO CORRECTO: ";
  106.   cin>>znumtel;
  107.  }
  108.  norepetir1=norepeticion(znumtel);
  109.  if(norepetir1==1)
  110.  {
  111.   cout<<endl<<endl<<"ESTE NUMERO TELEFONICO YA ESTA REGISTRADO...DIGITE OTRO NUMERO TELEFONICO",
  112.   i--;
  113.   cout<<endl;
  114.  }
  115.  else
  116.  {
  117.   telefono[i]=znumtel;
  118.  }
  119. }
  120. cout<<endl;
  121.    system("PAUSE");
  122.  
  123. }
  124.  
  125. int norepeticion(int znum)
  126. {
  127. int i, nor1=0;
  128. for (i=0; i<5; i++)
  129. {
  130. if(znum==telefono[i])
  131. {
  132. nor1=1;
  133. break;
  134. }
  135. }
  136. return (nor1);
  137. }
  138.  
  139. void mostrar()
  140. {
  141. int i;
  142. system("cls");
  143. cout<<"\t************  MOSTRAR CONTACTOS  ***********";
  144. gotoxy (3,3); cout<<"NOMBRE";
  145. gotoxy (15,3);cout<<"TELEFONO";
  146. for (i=0; i<5; i++)
  147. {
  148. gotoxy(3,i+5); cout<<nombre[i];
  149. gotoxy(15,i+5);cout<<telefono[i];
  150. }
  151. cout<<endl;
  152.    system("PAUSE");
  153. }
  154.  
  155. void consulte()
  156. {
  157. bool encontro=FALSE;
  158. int i;
  159. char busca[20];
  160. system("cls");
  161.    cout << "\t Busqueda por nombre: \n\n";
  162.    cout<<endl<<endl<<"digite nombre a buscar";
  163.    fflush(stdin);
  164. cin.getline(busca,20);
  165. for(i=0;i<5;i++)
  166. {
  167. if(strcmp(nombre[i],busca)==0)
  168. {
  169. cout<<endl<<endl"Tel\202fono:"<<i;
  170. encontro=TRUE;
  171. break;
  172. }
  173. }
  174. if(encontro==FALSE) cout<<"nombre no registrado";
  175. cout<<endl<<endl;
  176. system("PAUSE");
  177. }
  178.  


« Última modificación: 4 Diciembre 2016, 18:50 pm por engel lex » En línea

jvm1994

Desconectado Desconectado

Mensajes: 29



Ver Perfil
Re: no se como hacer una función correctamente con arreglos
« Respuesta #1 en: 6 Diciembre 2016, 05:34 am »

A ver, en primera instancia debo decirte que si vas a ser programador vas a tener que tabular y comentar como dios manda, por que tu código es ilegible.

Tenes que saber que un código se escribe 1 vez y se lee 1000 veces.

Además sería realmente útil que expliques la problemática.

Que es lo que intentaste hacer?
Que es lo que querés hacer realmente
Y que problema te surge.


En línea

"La posibilidad de crear tu mundo."
Código
  1. int main()
  2. {
  3. eMundo * Own = world_new();
  4. if(Own != NULL)
  5. {
  6.    world_create(Own);
  7. }
  8.  
  9. return 0;
  10. }
condor7000

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: no se como hacer una función correctamente con arreglos
« Respuesta #2 en: 6 Diciembre 2016, 22:33 pm »

lo que sucede es que soy estudiante de ingeniería y soy muy novato en esto, estoy empezando por lo básico, en la primera función se registra los nombres y teléfonos son 5 según el arreglo y en la segunda los lista o muestra, lo que yo necesito si podrían ayudarme es hacer que en la tercera función se pueda consultar por nombre y que me me muestre el teléfono que registre previamente, al consultar por ejemplo fulano aparezca el teléfono que registre. creo que la función consulte  esta errónea y no se como hacer que funcione, necesito una forma correcta de hacer el código.
 
la función consulte creo que esta errónea de que forma podría replantearla para que al escribir el nombre de la persona me aparezca el teléfono que registre previamente, tengo problemas en la sentencia if o no se si tenga que replantear toda la función consulte para que funcione.

CoAd: No hacer Doble post
« Última modificación: 6 Diciembre 2016, 23:24 pm por engel lex » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: no se como hacer una función correctamente con arreglos
« Respuesta #3 en: 6 Diciembre 2016, 23:25 pm »

te da error al compilar, no te da el nombre o cual es el problema?
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
condor7000

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: no se como hacer una función correctamente con arreglos
« Respuesta #4 en: 6 Diciembre 2016, 23:33 pm »

al ejecutarlo y escribir el nombre no me da el teléfono en la función consulte por ejemplo:
escribo el nombre de fulano y no me aparece el teléfono que se registro en la primera función.
En línea

jvm1994

Desconectado Desconectado

Mensajes: 29



Ver Perfil
Re: no se como hacer una función correctamente con arreglos
« Respuesta #5 en: 6 Diciembre 2016, 23:45 pm »

Veamos voy a explicarte que es lo que deberías hacer y además voy a darte un ejemplo para que entiendas el concepto.

A una función se le puede pasar como argumento un "valor" o una "referencia".

Cuando hablamos de valor nos referimos a el valor que almacena un elemento en sí, por ejemplo si tenes una funcion suma pasar algo por valor sería así.

Código
  1.  
  2. // Seguir estos pasos:
  3. // 1. Ver el prototipo de suma para entender que recibe
  4. // 2. Ver el desarrollo para ver como funciona
  5. // 3. Ver el main para entender el ejemplo de pasaje por valor.
  6. //
  7.  
  8. int suma(int a, int b); // Prototipo de la funcion suma.
  9.  
  10. int main()
  11. {
  12. // Declaramos dos enteros.
  13. int edad = 5;
  14. int altura = 7;
  15. int resultado;
  16.  
  17. resultado = suma(edad, altura);
  18. // Pasamos el VALOR DE EDAD y EL VALOR DE ALTURA.
  19. // Esto es un pasaje por valor.
  20.  
  21. return 0;
  22. }
  23.  
  24. // Desarrollo de la funcion suma
  25. int suma(int a, int b)
  26. {
  27. int suma;
  28. suma = a + b;
  29.  
  30. return suma; // retorno el resultado de la suma.
  31. }
  32.  

Viendo el pasaje por valor, que es el más común, ahora  podrías entender el pasaje por referencia.

Todas las variables poseen un espacio en memoria y un arreglo no es la excepción, un arreglo son un grupo de elementos del mismo tipo bajo el mismo nombre, almacenados en memoria en posiciones contiguas, siendo que dispones de un arreglo de 5 elementos vas a necesitar pasarle a tu función ese arreglo, siendo que ese arreglo esta constituido por cinco elementos será necesario que le pases "LA DIRECCION DE MEMORIA DEL ARREGLO" (Esto es pasaje por referencia) y además, como C no tiene manera de saber que tamaño mide el arreglo, deberas pasarle el tamaño del mismo (En este caso la cantidad de elementos) Así luego cuando llegue la hora de buscar dentro de la función vas a saber cuanto recorrer  sin pasarte y desbordar el arreglo. (Leer partes de memorias que no pertenecen al arreglo, excederse de la cant. de elementos almacenados)

Código
  1.  
  2. // Arrays paralelos (Se llama paralelo cuando utilizas el SUB INDICE para que estos se //pertenezcan.
  3.  
  4. char nombres[20][50];
  5. int telefonos[20];
  6.  
  7. // Prototipo de la función buscar telefono.
  8. int buscarTelefono(char *punteroA_Nombres, int cantidadElementos);
  9.  
  10. // En tu caso le vas a pasar nombres y 20.
  11. // Tene en cuenta que en un arreglo cuando se emplea "SOLO EL NOMBRE DE EL ARREGLO"
  12. // Automaticamente se recurre a la dirección de memoria inicial del mismo
  13. int main()
  14. {
  15. int idTelefono;
  16. idTelefono = buscarTelefono(nombre, 20);
  17. // Pasamos el puntero de nombre y la cantidad de nombres.
  18.  
  19. cout<<"Telefono encontrado: "<<telefonos[idTelefono]<<endl;
  20. // De esta manera mostrará el telefono encontrado.
  21.  
  22.  
  23. return 0;
  24. }
  25.  
  26. // En caso de error retornará -1.. en caso de encontrar algo retornará el INDICE DEL ELEMENTO
  27. int buscarTelefono(char *punteroA_Nombres, int cantidadElementos)
  28. {
  29. int posicionArreglo = -1;
  30. char busca[50];
  31. if(punteroA_Nombres != NULL && cantidadElementos > 0) // Validamos que la direccion exista.
  32. { // Y que el indice sea positivo.
  33.  
  34. int i;
  35. int posicionArreglo;
  36. cout << "\t Busqueda por nombre: \n\n";
  37. cout<<endl<<endl<<"digite nombre a buscar";
  38. fflush(stdin);
  39. cin.getline(busca,50);
  40.  
  41. for(i=0; i <= cantidadElementos; i++)
  42. {
  43.    if(strcmp(punteroA_Nombres[i], busca) == 0) // Obtenemos coincidencia
  44.    {
  45.        posicionArreglo = i; // Encontramos la posicion del arreglo.
  46.        break; // Salimos del for.
  47.    }
  48.  
  49. }
  50.  
  51. return posicionArreglo;
  52. }
  53.  

Espero que te sirva, ya no logré ver el pasaje de argumento a tus funciones, por lo que no entiendo como es que podías usar STRCMP para buscar coincidencias.

En línea

"La posibilidad de crear tu mundo."
Código
  1. int main()
  2. {
  3. eMundo * Own = world_new();
  4. if(Own != NULL)
  5. {
  6.    world_create(Own);
  7. }
  8.  
  9. return 0;
  10. }
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines