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

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  problema con array de punteros a cadenas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: problema con array de punteros a cadenas  (Leído 5,400 veces)
MessageBoxA

Desconectado Desconectado

Mensajes: 229


ayudame a ayudarte


Ver Perfil WWW
problema con array de punteros a cadenas
« en: 10 Julio 2014, 23:27 pm »

tengo el problema con esta linea
Código
  1. char *paises_miembros[] = {"Argentina","Belgica","Estados Unidos","Francia","Reino Unido",
  2. "Grecia","Hungria","Italia","Nueva Zelanda","Rusia","Suecia","Japon"};
  3.  
y es que el compilador me da un error


Código
  1. 9 77 C:\Users\Nerys\Desktop\main.cpp [Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]


En línea

SI LA MATRIX FUERA PERFECTA.... ESTARÍA ESCRITA EN C++
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: problema con array de punteros a cadenas
« Respuesta #1 en: 10 Julio 2014, 23:33 pm »

el array así declarado apunta a cadenas que se encuentran en una zona de la memoria que es de solo lectura... te está diciendo que tienes que poner el modificador const a paises_miembros.

Código
  1. const char *paises_miembros[] = {"Argentina","Belgica","Estados Unidos","Francia","Reino Unido",
  2. "Grecia","Hungria","Italia","Nueva Zelanda","Rusia","Suecia","Japon"};


En línea

MessageBoxA

Desconectado Desconectado

Mensajes: 229


ayudame a ayudarte


Ver Perfil WWW
Re: problema con array de punteros a cadenas
« Respuesta #2 en: 11 Julio 2014, 08:11 am »

entiendo ya hice la modificacion pero tengo otro problema y no hayo la solucion y es que cuando llamo a la funcion mayor_menor el programa se me congela, dejo lo que llevo hecho

Código
  1. #include <stdio.h>
  2. #include <conio.h>
  3.  
  4. /* run this program using the console pauser or add your own getch, system("pause") or input loop */
  5.  
  6. const char *paises_miembros[] = {"Argentina","Belgica","Estados Unidos","Francia","Reino Unido",
  7. "Grecia","Hungria","Italia","Nueva Zelanda","Rusia","Suecia","Japon"};
  8.  
  9. const char *paises_postulados[] = {"Japon","Brasil","Suecia","Mexico"};
  10.  
  11. int contador=0;
  12.  
  13. void mayor_menor(int array[]);
  14.  
  15. int main() {
  16.  
  17.  
  18.  
  19. int votos[]={0,0,0,0};
  20.  
  21. printf("BIENVENIDO AL SISTEMA DE VOTACION PARA LA ELECCION DE LA SEDE DE LOS JUEGOS OLIMPICOS\n");
  22.  
  23. printf("\npara iniciar las votaciones presiones cualquier tecla...");
  24.  
  25. getch();
  26.  
  27.  
  28. printf("\n\nlos paises miembros del comite son los siguientes: ");
  29.  
  30.  
  31.  
  32. for(contador=0;contador<12;contador++)
  33. {
  34. printf(" %s ",paises_miembros[contador]);
  35. }
  36.  
  37. getch();
  38.  
  39. printf("\n\nlos paises postulados son los siguientes: ");
  40.  
  41. for(contador=0;contador<4;contador++)
  42. {
  43. printf(" %s ",paises_postulados[contador]);
  44. }
  45.  
  46. getch();
  47.  
  48.  
  49. printf("\n\n \t\t\t INICIA PROCESO DE VOTACION");
  50.  
  51. getch();
  52. contador=0;
  53. int opcion=0;
  54.  
  55. while(contador<10)
  56. {
  57. opcion=0;
  58. printf("\n\n %s cual de las siguientes opciones elige para que sea la sede de los proximos juegos olimpicos?",paises_miembros[contador]);
  59. printf ("\n\n 1.%s 2.%s 3.%s 4.%s",paises_postulados[0],paises_postulados[1],paises_postulados[2],paises_postulados[3]);
  60. printf("\n elija una opcion del 1 al 4: ");
  61. scanf("%d",&opcion);
  62. if(opcion>0 && opcion<5)
  63. {
  64. votos[opcion-1]=votos[opcion-1]+1;
  65. contador++;
  66. }
  67. else
  68. {
  69. printf("\n\nOPCION INVALIDA!!!");
  70. }
  71.  
  72. }
  73.  
  74.   mayor_menor(votos);
  75.  
  76. return 0;
  77. }
  78.  
  79.  
  80. void mayor_menor(int array[])
  81. {
  82.  
  83.   int  mayor,menor,*posicion1=0, *posicion2=0;
  84.  
  85. mayor=votos[0];
  86.  
  87. for(contador=1;contador<4;contador++)
  88. {
  89. if (votos[contador]>mayor)
  90. {
  91. mayor=votos[contador];
  92. *posicion1=contador;
  93. }
  94. }
  95.  
  96. menor=votos[0];
  97.  
  98. for(contador=1;contador<4;contador++)
  99. {
  100. if (votos[contador]<menor)
  101. {
  102. menor=votos[contador];
  103. *posicion2=contador;
  104. }
  105. }  
  106.   printf("\n\nEL PAIS GANADOR ES %s con %d votos",paises_postulados[*posicion1], mayor);
  107.  
  108.  
  109.       printf("\n\nEL PAIS CON MENOS VOTOS ES %s con %d votos",paises_postulados[*posicion2],menor);
  110.  
  111. }
« Última modificación: 11 Julio 2014, 09:45 am por MessageBoxA » En línea

SI LA MATRIX FUERA PERFECTA.... ESTARÍA ESCRITA EN C++
CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: problema con array de punteros a cadenas
« Respuesta #3 en: 11 Julio 2014, 13:49 pm »

Quitale el * a las variables posicion1 y posicion2. Las usas como indices, asi que son enteros, no punteros.
En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: problema con array de punteros a cadenas
« Respuesta #4 en: 11 Julio 2014, 15:31 pm »

Antes que nada debes cambiar la función mayor_menor a algo como esto:

Código
  1. void mayor_menor(int votos[])

ya que haces uso del array votos en ella.

Y el array votos lo puedes inicializar de forma más simple:

Código
  1. int votos[10]={0};

Si quieres usar punteros, por lo que sea, en lugar de :

Código
  1. *posicion1=contador;

deberías hacer:

Código
  1. posicion1 = &mayor_;

Pero ello se traduce en un error lógico y es que el puntero posicion1 apuntaría siempre a contador, con lo que su valor sería siempre 4.

En su lugar habría que usar unas nuevas variables donde guardar el mayor valor de contador y hacer que el puntero apunte a esa variable. Y lo mismo con la posicion2.

Algo como, y aprovecha el for para calcular tanto el mayor como el menor, en lugar de dos for:

Código
  1. ****************************************
  2.  int mayor_= 0, menor_= 0;
  3.  mayor = votos[0];
  4.  menor = votos[0];
  5.  posicion1 = &mayor_, posicion2 = &menor_;
  6.  for( contador = 1 ; contador < 4 ; contador++ ){
  7.    if ( votos[contador] > mayor){
  8. mayor_= contador ;
  9. mayor = votos[mayor_];
  10. posicion1 = &mayor_;
  11.    }
  12.    else{
  13. menor_= contador ;
  14. menor = votos[menor_];
  15. posicion2 = &menor_;
  16.    }
  17. }
  18. ***************************
  19.  

Pero doctores tiene el foro en punteros y yo no soy uno de ellos, así que es muy posible que lo que propongo sea mejorable.

En cualquier caso la propuesta de CalgaryCorpus es la más razonable, sólo pongo lo anterior si es que sí o sí debes  usar punteros.

¡¡¡¡ Saluditos! ..... !!!!


En línea

CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: problema con array de punteros a cadenas
« Respuesta #5 en: 11 Julio 2014, 16:30 pm »

Es superfluo asignar los punteros en cada vuelta.
Si se eliminan esas asignaciones el resultado será el mismo.
En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
MessageBoxA

Desconectado Desconectado

Mensajes: 229


ayudame a ayudarte


Ver Perfil WWW
Re: problema con array de punteros a cadenas
« Respuesta #6 en: 11 Julio 2014, 16:38 pm »

ok me quedo mejor con la segunda sugerencia. ahora como para imprimir el pais que esta en la posicion del mayor y menor??

e intentado de varias formas pero nada

Código
  1. printf("\n\nEL PAIS GANADOR ES %s con %d votos",paises_postulados[(int)posicion1], mayor);
  2. printf("\n\nEL PAIS GANADOR ES %s con %d votos",paises_postulados[posicion1], mayor);
  3. printf("\n\nEL PAIS GANADOR ES %s con %d votos",paises_postulados[*posicion1], mayor);



Es superfluo asignar los punteros en cada vuelta.
Si se eliminan esas asignaciones el resultado será el mismo.


si eso lo acabo de notar, donde me dices que quite los asteriscos? en la declaracion o en la asignacion dentro del for??
« Última modificación: 11 Julio 2014, 20:13 pm por Eternal Idol » En línea

SI LA MATRIX FUERA PERFECTA.... ESTARÍA ESCRITA EN C++
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: problema con array de punteros a cadenas
« Respuesta #7 en: 11 Julio 2014, 16:43 pm »

Es superfluo asignar los punteros en cada vuelta.
Si se eliminan esas asignaciones el resultado será el mismo.


Ya, estoy "totalmente" de acuerdo contigo. Sólo era una opción por si "sí o sí" tenía que usar punteros. No sé, a lo mejor era una tarea en la que obligaban a hacer uso de los mismos.

Si no es así es una redundancia su uso y tu propuesta es más que suficiente.

ok me quedo mejor con la segunda sugerencia. ahora como para imprimir el pais que esta en la posicion del mayor y menor??

e intentado de varias formas pero nada

Código
  1. printf("\n\nEL PAIS GANADOR ES %s con %d votos",paises_postulados[(int)posicion1], mayor);
  2. printf("\n\nEL PAIS GANADOR ES %s con %d votos",paises_postulados[posicion1], mayor);
  3. printf("\n\nEL PAIS GANADOR ES %s con %d votos",paises_postulados[*posicion1], mayor);

Sería:

Código
  1. printf("\n\nEL PAIS GANADOR ES %s con %d votos",paises_postulados[*posicion1], mayor);
  2.  printf("\n\nEL PAIS CON MENOS VOTOS ES %s con %d votos",paises_postulados[*posicion2],menor);

si eso lo acabo de notar, donde me dices que quite los asteriscos? en la declaracion o en la asignacion dentro del for??

En ese caso de todos los lados.


¡¡¡¡ Saluditos! ..... !!!!



En línea

MessageBoxA

Desconectado Desconectado

Mensajes: 229


ayudame a ayudarte


Ver Perfil WWW
Re: problema con array de punteros a cadenas
« Respuesta #8 en: 11 Julio 2014, 16:56 pm »

agradecido por su colaboracion, ahora piensen en eso... creo que en el segundo for para evaluar el menor tiene un error y es que de manera premeditada asigne votacion de la siguiente manera. japon =7  brazil=2 suecia=1 mexico=0
y me sale bien el del mayor pero en el menor me imprime que el de menor votos es suecia con 1 voto cuando en realidad es mexico
En línea

SI LA MATRIX FUERA PERFECTA.... ESTARÍA ESCRITA EN C++
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: problema con array de punteros a cadenas
« Respuesta #9 en: 11 Julio 2014, 18:13 pm »

............................................
y es que de manera premeditada asigne votacion de la siguiente manera. japon =7  brazil=2 suecia=1 mexico=0
y me sale bien el del mayor pero en el menor me imprime que el de menor votos es suecia con 1 voto cuando en realidad es mexico

Pues a mi con:

Código
  1. for( contador = 1 ; contador < 4 ; contador++ ){
  2.    if ( votos[contador] > mayor){
  3.      mayor=votos[contador];
  4.     posicion1=contador;
  5.    }
  6.   if ( votos[contador] < menor){
  7.      menor=votos[contador];
  8.      posicion2=contador;
  9.    }
  10. }

me da una solución correcta:

Código
  1. votos[0]=7
  2. votos[1]=2
  3. votos[2]=1
  4. votos[3]=0
  5.  
  6. EL PAIS GANADOR ES Japon con 7 votos
  7.  
  8. EL PAIS CON MENOS VOTOS ES Mexico con 0 votos
  9.  

¡¡¡¡ Saluditos! ..... !!!!



EDITADO: Con la perspicaz observación de CalgaryCorpus. ;)
« Última modificación: 11 Julio 2014, 22:29 pm por leosansan » En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con array de punteros al pasarlo como argumento en una fucnion (Solved)
Programación C/C++
vikour92 4 3,476 Último mensaje 4 Febrero 2012, 17:09 pm
por vikour92
Duda Punteros Dobles/Array de punteros
Programación C/C++
MisterJava 2 5,163 Último mensaje 30 Diciembre 2012, 20:19 pm
por MisterJava
Problema con array de punteros
Programación C/C++
NathanD 4 2,821 Último mensaje 26 Marzo 2013, 21:13 pm
por amchacon
Problema con for y array de cadenas.
Programación C/C++
jomag 3 2,194 Último mensaje 7 Febrero 2014, 02:18 am
por jomag
Cadenas de caracteres con punteros
Programación C/C++
pedroedlp 4 2,272 Último mensaje 12 Abril 2014, 17:25 pm
por rir3760
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines