Autor
|
Tema: problema con array de punteros a cadenas (Leído 5,400 veces)
|
MessageBoxA
Desconectado
Mensajes: 229
ayudame a ayudarte
|
tengo el problema con esta linea char *paises_miembros[] = {"Argentina","Belgica","Estados Unidos","Francia","Reino Unido", "Grecia","Hungria","Italia","Nueva Zelanda","Rusia","Suecia","Japon"};
y es que el compilador me da un error 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
Mensajes: 1.248
|
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. const char *paises_miembros[] = {"Argentina","Belgica","Estados Unidos","Francia","Reino Unido", "Grecia","Hungria","Italia","Nueva Zelanda","Rusia","Suecia","Japon"};
|
|
|
En línea
|
|
|
|
MessageBoxA
Desconectado
Mensajes: 229
ayudame a ayudarte
|
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 #include <stdio.h> #include <conio.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ const char *paises_miembros[] = {"Argentina","Belgica","Estados Unidos","Francia","Reino Unido", "Grecia","Hungria","Italia","Nueva Zelanda","Rusia","Suecia","Japon"}; const char *paises_postulados[] = {"Japon","Brasil","Suecia","Mexico"}; int contador=0; void mayor_menor(int array[]); int main() { int votos[]={0,0,0,0}; printf("BIENVENIDO AL SISTEMA DE VOTACION PARA LA ELECCION DE LA SEDE DE LOS JUEGOS OLIMPICOS\n"); printf("\npara iniciar las votaciones presiones cualquier tecla..."); getch(); printf("\n\nlos paises miembros del comite son los siguientes: "); for(contador=0;contador<12;contador++) { printf(" %s ",paises_miembros[contador]); } getch(); printf("\n\nlos paises postulados son los siguientes: "); for(contador=0;contador<4;contador++) { printf(" %s ",paises_postulados[contador]); } getch(); printf("\n\n \t\t\t INICIA PROCESO DE VOTACION"); getch(); contador=0; int opcion=0; while(contador<10) { opcion=0; printf("\n\n %s cual de las siguientes opciones elige para que sea la sede de los proximos juegos olimpicos?",paises_miembros[contador]); printf ("\n\n 1.%s 2.%s 3.%s 4.%s",paises_postulados[0],paises_postulados[1],paises_postulados[2],paises_postulados[3]); printf("\n elija una opcion del 1 al 4: "); scanf("%d",&opcion); if(opcion>0 && opcion<5) { votos[opcion-1]=votos[opcion-1]+1; contador++; } else { printf("\n\nOPCION INVALIDA!!!"); } } mayor_menor(votos); return 0; } void mayor_menor(int array[]) { int mayor,menor,*posicion1=0, *posicion2=0; mayor=votos[0]; for(contador=1;contador<4;contador++) { if (votos[contador]>mayor) { mayor=votos[contador]; *posicion1=contador; } } menor=votos[0]; for(contador=1;contador<4;contador++) { if (votos[contador]<menor) { menor=votos[contador]; *posicion2=contador; } } printf("\n\nEL PAIS GANADOR ES %s con %d votos",paises_postulados[*posicion1], mayor); printf("\n\nEL PAIS CON MENOS VOTOS ES %s con %d votos",paises_postulados[*posicion2],menor); }
|
|
« Ú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
|
Quitale el * a las variables posicion1 y posicion2. Las usas como indices, asi que son enteros, no punteros.
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Antes que nada debes cambiar la función mayor_menor a algo como esto: 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: int votos[10]={0};
Si quieres usar punteros, por lo que sea, en lugar de : *posicion1=contador;
deberías hacer: 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: **************************************** int mayor_= 0, menor_= 0; mayor = votos[0]; menor = votos[0]; posicion1 = &mayor_, posicion2 = &menor_; for( contador = 1 ; contador < 4 ; contador++ ){ if ( votos[contador] > mayor){ mayor_= contador ; mayor = votos[mayor_]; posicion1 = &mayor_; } else{ menor_= contador ; menor = votos[menor_]; posicion2 = &menor_; } } ***************************
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
|
Es superfluo asignar los punteros en cada vuelta. Si se eliminan esas asignaciones el resultado será el mismo.
|
|
|
En línea
|
|
|
|
MessageBoxA
Desconectado
Mensajes: 229
ayudame a ayudarte
|
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 printf("\n\nEL PAIS GANADOR ES %s con %d votos",paises_postulados[(int)posicion1], mayor); printf("\n\nEL PAIS GANADOR ES %s con %d votos",paises_postulados[posicion1], mayor); 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
Mensajes: 1.314
|
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 printf("\n\nEL PAIS GANADOR ES %s con %d votos",paises_postulados[(int)posicion1], mayor); printf("\n\nEL PAIS GANADOR ES %s con %d votos",paises_postulados[posicion1], mayor); printf("\n\nEL PAIS GANADOR ES %s con %d votos",paises_postulados[*posicion1], mayor);
Sería: printf("\n\nEL PAIS GANADOR ES %s con %d votos",paises_postulados[*posicion1], mayor); 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
Mensajes: 229
ayudame a ayudarte
|
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
Mensajes: 1.314
|
............................................ 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: for( contador = 1 ; contador < 4 ; contador++ ){ if ( votos[contador] > mayor){ mayor=votos[contador]; posicion1=contador; } if ( votos[contador] < menor){ menor=votos[contador]; posicion2=contador; } }
me da una solución correcta: votos[0]=7 votos[1]=2 votos[2]=1 votos[3]=0 EL PAIS GANADOR ES Japon con 7 votos EL PAIS CON MENOS VOTOS ES Mexico con 0 votos
¡¡¡¡ Saluditos! ..... !!!! EDITADO: Con la perspicaz observación de CalgaryCorpus.
|
|
« Última modificación: 11 Julio 2014, 22:29 pm por leosansan »
|
En línea
|
|
|
|
|
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
|
4 Febrero 2012, 17:09 pm
por vikour92
|
|
|
Duda Punteros Dobles/Array de punteros
Programación C/C++
|
MisterJava
|
2
|
5,163
|
30 Diciembre 2012, 20:19 pm
por MisterJava
|
|
|
Problema con array de punteros
Programación C/C++
|
NathanD
|
4
|
2,821
|
26 Marzo 2013, 21:13 pm
por amchacon
|
|
|
Problema con for y array de cadenas.
Programación C/C++
|
jomag
|
3
|
2,194
|
7 Febrero 2014, 02:18 am
por jomag
|
|
|
Cadenas de caracteres con punteros
Programación C/C++
|
pedroedlp
|
4
|
2,272
|
12 Abril 2014, 17:25 pm
por rir3760
|
|