Ayuda con C++ , no encuentro un error

Iniciado por Ozharu-Ad, 14 Noviembre 2013, 03:16 AM

0 Miembros y 1 Visitante están viendo este tema.

Ozharu-Ad

Hola , me han pedido desarrollar un examen en c++ , es decir, escribir los reactivos y las posibles respuestas y que al ejecutarse se selecciones una respuesta, de ser correcta en pantalla se debe mostrar "Felicidades, respuesta correcta" , o "Respuesta incorrecta" , además de mostrarle la calificacion obtenida al usuario.

me gusta ir "por partes" , ir comprobando que algo me quedó bien para continuar con lo que siguiera , he escrito mis 10 reactivos y mis 10 respuestas, pero aqui viene el problema, al "contruir" esta parte no me marca errores , pero al ejecutar el programa me escribe los 10 reactivos y HASTA las respuestas que le corresponden al 9, me marca error en el programa (ventana emergente en windows "el pprograma no funciona correctamente..").

Ya he intantido quitar y poner por todos lados ,¿ me podrían ayudar?

El código que llevo es:

#include <stdio.h>
#include <string.h>
#include <math.h>


char* Reactivos[9];
char* Incisos[9];
char Respuestas[2];
int promedio;


int main()
{

Reactivos[0]="\n1.Aportacion de Jon Von Neumann a la computacion";
Reactivos[1]="\n2.El numero decimal 257 convertido en numero hexadecimal es:";
Reactivos[2]="\n3. Cual es el Codigo Estandar Estadounidense para el Intercambio de Informacion.";
Reactivos[3]="\n4.  Dispositivos auxiliares e independientes conectados a la unidad central de procesamiento de una computadora.";
Reactivos[4]="\n5. Indicar cual de los siguientes no es un dispositivo de entrada";
Reactivos[5]="\n6. Compuerta logica que realiza la funcion de producto logico";
Reactivos[6]="\n7. Lenguaje de programacion orientado a manipulacion de objetos";
Reactivos[7]="\n8. Instruccion que no es de utilidad para elaborar un ciclo";
Reactivos[8]="\n9. Cuantos errores tiene la siguiente linea de codigo : printf(Hay dos errores);";
Reactivos[9]="\n10.int es una variable de tipo";

Incisos[0]="\na)Desarrollo el codigo binario\nb)Establecio la arquitectura de computadoras \nc)Fabricacion del primer chip.";
Incisos[1]="\na)AB01\nb) 101\nc) 30B";
Incisos[2]="\na)Codigo Madre\nb)Codigo ASCII\nc)Lenguaje Maquina.";
Incisos[3]="\na)Tomas de corriente\nb)Perifericos\nc)Puertos USB";
Incisos[4]="\na)Mouse\nb)Monitor\nc)Teclado";
Incisos[5]="\na)OR\nb)AND\nc)CROSS";
Incisos[6]="\na) Pascal\nb)C++\nd)C";
Incisos[7]="\na)for\nb)strcpy\nc)while do";
Incisos[8]="\na)1\nb)2\nc)3";
Incisos[9]="\na)flotante \nb)entero \nc)caracter";

Respuestas[0]="a";
Respuestas[1]="b";
Respuestas[2]="c";

int i;
for ( i=0; i<10; i++)
{
printf("%s\n",Reactivos);
     printf("%s\n",Incisos);
}
return (0);
}

vangodp

de esta manera si que me va bien. :-*
Código (cpp) [Seleccionar]

#include <iostream>

#include <stdio.h>
#include <math.h>
using namespace std;


char* Reactivos[9];
char* Incisos[9];
char Respuestas[2];
int promedio;


int main()
{

Reactivos[0]="\n1.Aportacion de Jon Von Neumann a la computacion";
Reactivos[1]="\n2.El numero decimal 257 convertido en numero hexadecimal es:";
Reactivos[2]="\n3.Cual es el Codigo Estandar Estadounidense para el Intercambio de Informacion.";
Reactivos[3]="\n4.Dispositivos auxiliares e independientes conectados a la unidad central de procesamiento de una computadora.";
Reactivos[4]="\n5.Indicar cual de los siguientes no es un dispositivo de entrada";
Reactivos[5]="\n6.Compuerta logica que realiza la funcion de producto logico";
Reactivos[6]="\n7.Lenguaje de programacion orientado a manipulacion de objetos";
Reactivos[7]="\n8.Instruccion que no es de utilidad para elaborar un ciclo";
Reactivos[8]="\n9.Cuantos errores tiene la siguiente linea de codigo : printf(Hay dos errores);";
Reactivos[9]="\n10.int es una variable de tipo";

Incisos[0]="\na)Desarrollo el codigo binario\nb)Establecio la arquitectura de computadoras \nc)Fabricacion del primer chip.";
Incisos[1]="\na)AB01\nb) 101\nc) 30B";
Incisos[2]="\na)Codigo Madre\nb)Codigo ASCII\nc)Lenguaje Maquina.";
Incisos[3]="\na)Tomas de corriente\nb)Perifericos\nc)Puertos USB";
Incisos[4]="\na)Mouse\nb)Monitor\nc)Teclado";
Incisos[5]="\na)OR\nb)AND\nc)CROSS";
Incisos[6]="\na) Pascal\nb)C++\nd)C";
Incisos[7]="\na)for\nb)strcpy\nc)while do";
Incisos[8]="\na)1\nb)2\nc)3";
Incisos[9]="\na)flotante \nb)entero \nc)caracter";



int i;
for ( i=0; i<10; i++){
    cout << Reactivos[i];
    cout << Incisos[i];
    cout << endl;
     //printf("%s\n",Reactivos);
     //printf("%s\n",Incisos);
}
return (0);
}


Ozharu-Ad

Muchas gracias , en verdad me ha ayudado, y como lo has dico, funciona sin problemas, ahora a insertarle el loop para las respuestas, a que las contabilice y sacar el promedio.

Por cierto, se que es mucho pedir, pero ¿no hay forma de que no me marque el error anterior sin usar iostream?

vangodp

Lo eh echo asi por encima y apesar de que me funciona en dev me da avisos.
A ver si alguien echa un ojo por que hasta la tarde no tengo tiempo. :D

Código (cpp) [Seleccionar]

    //#include <iostream>
    #include <strings.h>
    #include <stdio.h>
    #include <math.h>
    using namespace std;
     
     
    char* Reactivos[9];
    char* Incisos[9];
    char Respuestas[2];
    int promedio;
     
     
    int main()
    {
     
    Reactivos[0]="\n1.Aportacion de Jon Von Neumann a la computacion";
    Reactivos[1]="\n2.El numero decimal 257 convertido en numero hexadecimal es:";
    Reactivos[2]="\n3.Cual es el Codigo Estandar Estadounidense para el Intercambio de Informacion.";
    Reactivos[3]="\n4.Dispositivos auxiliares e independientes conectados a la unidad central de procesamiento de una computadora.";
    Reactivos[4]="\n5.Indicar cual de los siguientes no es un dispositivo de entrada";
    Reactivos[5]="\n6.Compuerta logica que realiza la funcion de producto logico";
    Reactivos[6]="\n7.Lenguaje de programacion orientado a manipulacion de objetos";
    Reactivos[7]="\n8.Instruccion que no es de utilidad para elaborar un ciclo";
    Reactivos[8]="\n9.Cuantos errores tiene la siguiente linea de codigo : printf(Hay dos errores);";
    Reactivos[9]="\n10.int es una variable de tipo";
     
    Incisos[0]="\na)Desarrollo el codigo binario\nb)Establecio la arquitectura de computadoras \nc)Fabricacion del primer chip.";
    Incisos[1]="\na)AB01\nb) 101\nc) 30B";
    Incisos[2]="\na)Codigo Madre\nb)Codigo ASCII\nc)Lenguaje Maquina.";
    Incisos[3]="\na)Tomas de corriente\nb)Perifericos\nc)Puertos USB";
    Incisos[4]="\na)Mouse\nb)Monitor\nc)Teclado";
    Incisos[5]="\na)OR\nb)AND\nc)CROSS";
    Incisos[6]="\na) Pascal\nb)C++\nd)C";
    Incisos[7]="\na)for\nb)strcpy\nc)while do";
    Incisos[8]="\na)1\nb)2\nc)3";
    Incisos[9]="\na)flotante \nb)entero \nc)caracter";
     
     
     
    int i;
    for ( i=0; i<10; i++){
       //cout << Reactivos[i];
       //cout << Incisos[i];
       //cout << endl;
        printf("%s\n",Reactivos[i]);
        printf("%s\n",Incisos[i]);
    }
    return (0);
    }



BlackM4ster

Cita de: Ozharu-Ad en 14 Noviembre 2013, 04:56 AM
Muchas gracias , en verdad me ha ayudado, y como lo has dico, funciona sin problemas, ahora a insertarle el loop para las respuestas, a que las contabilice y sacar el promedio.

Por cierto, se que es mucho pedir, pero ¿no hay forma de que no me marque el error anterior sin usar iostream?

Que promedio?
- Pásate por mi web -
https://codeisc.com

rir3760

Cita de: Ozharu-Ad en 14 Noviembre 2013, 03:16 AMme han pedido desarrollar un examen en c++
Un problema con el programa es que no tiene nada de C++, después de solucionar los errores compila como C sin generar mensajes de error.


Cita de: Ozharu-Ad en 14 Noviembre 2013, 03:16 AMal ejecutar el programa me escribe los 10 reactivos y HASTA las respuestas que le corresponden al 9, me marca error en el programa (ventana emergente en windows "el pprograma no funciona correctamente..").
Eso sucede porque en C y C++ cuando se declara un array se indica su numero de elementos "N":
char* Reactivos[9];
char* Incisos[9];
char Respuestas[2];

Y se accede a los elementos del array mediante los indices 0 .. N-1.

No se puede, como es tu caso, utilizar el indice N porque ese elemento no existe:
Reactivos[9] = "\n10.int es una variable de tipo";
Incisos[9] = "\na)flotante \nb)entero \nc)caracter";
Respuestas[2] = "c";

La solución aquí es declarar los tres arrays con un elemento adicional.

Otro error se encuentra en las asignaciones utilizando el array "Respuestas":
char Respuestas[2]; /* Hay que cambiar el numero de elementos a tres */

/* ... */

Respuestas[0] = "a";
Respuestas[1] = "b";
Respuestas[2] = "c";

Ya que es un array de caracteres debes asignar caracteres literales y estos se delimitan con la comilla simple, en otras palabras debes utilizar 'a', 'b' y 'c'.

Un saludo
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

Ozharu-Ad

Cita de: BlackM4ster en 14 Noviembre 2013, 12:13 PM
Que promedio?

Lo que me pide hacer es "un exámen" mstrarle al usuario las preguntas y las opciones, y dependiendo si responde bien, en pantalla debe aparecer el mensaje de felicidades o que se ha equivocado.
Al final debo promediar las respuestas correctas y en el mismo programa mostrarle la calificación

Cita de: rir3760 en 14 Noviembre 2013, 17:52 PM
Un problema con el programa es que no tiene nada de C++, después de solucionar los errores compila como C sin generar mensajes de error.

Eso sucede porque en C y C++ cuando se declara un array se indica su numero de elementos "N":
char* Reactivos[9];
char* Incisos[9];
char Respuestas[2];

Y se accede a los elementos del array mediante los indices 0 .. N-1.

No se puede, como es tu caso, utilizar el indice N porque ese elemento no existe:
Reactivos[9] = "\n10.int es una variable de tipo";
Incisos[9] = "\na)flotante \nb)entero \nc)caracter";
Respuestas[2] = "c";

La solución aquí es declarar los tres arrays con un elemento adicional.

Otro error se encuentra en las asignaciones utilizando el array "Respuestas":
char Respuestas[2]; /* Hay que cambiar el numero de elementos a tres */

/* ... */

Respuestas[0] = "a";
Respuestas[1] = "b";
Respuestas[2] = "c";

Ya que es un array de caracteres debes asignar caracteres literales y estos se delimitan con la comilla simple, en otras palabras debes utilizar 'a', 'b' y 'c'.

Un saludo

Gracias , bueno, ese es como un "roce" con el profesor , el dice que nos "enseña" c++ , pero por lo que he investigado nos quedamos en c , por eso agradezco al usuario vangodp para guiarme y no usar iostream.

En lo de los arrays, no encontré la falla en el primer bosquejo que hice , no se que haya hecho vangodp pero ya me "muestra" las 10 preguntas con sus opciones sin necesidad de un elemento extra , aun asi, si en lo que sigo observo fallas tomare eso en cuenta.

Y bueno, estoy empezando con C , C++ , pero creo que lo de una comillar un carácter si fue un buen resbalón , muchas gracias a todos por su ayuda. Aunque parece que d enuevo estoy atorado, intentaré ver como salir

Ozharu-Ad

#7
Hola de nuevo , ya pude hacer que el programa me compare las respuestas y muestre en pantalla si es o no correcto.
Pero no logro hacer que haga el promedio de las respuestas, o por lo menos que muestre la suma (ayuda mucho que me pidieron 10 ya que el resultado de la suma seria la calificación). intenté guardar un 1 si se selecciona la opcion correcta para despues sumarlos y que me muestre el resultado, pero no me lo da correctamente, el compilador no me marca error, pero siempre me da que "Tu calificacion es 34".
El código que llevo es:

#include <strings.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>


char* Reactivos[9];
char* Incisos[9];
int promedio;
int x[9];

int func()
{
int i=0;
   int a=1;
   int b=2;
   int c=3;
   int resp;
   printf("Escribe tu respuesta");
   scanf("%i",&resp);


   if (resp==2)
   {
       printf("Respuesta correcta");

       x=1;

   }
   else{
       printf("Incorrecto , la respuesta es 2");
       x=0;

   }
   system("pause");

}
int promd()
{
   int R;

   R=x[0]+x[1]+x[2]+x[3]+x[4]+x[5]+x[6]+x[7]+x[8]+x[9];

}

   int main()
   {

   Reactivos[0]="\n1.Aportacion de Jon Von Neumann a la computacion";
   Reactivos[1]="\n2.El numero decimal 257 convertido en numero hexadecimal es:";
   Reactivos[2]="\n3.Cual es el Codigo Estandar Estadounidense para el Intercambio de Informacion.";
   Reactivos[3]="\n4.Dispositivos auxiliares e independientes conectados a la unidad central de procesamiento de una computadora.";
   Reactivos[4]="\n5.Indicar cual de los siguientes no es un dispositivo de entrada";
   Reactivos[5]="\n6.Compuerta logica que realiza la funcion de producto logico";
   Reactivos[6]="\n7.Lenguaje de programacion orientado a manipulacion de objetos";
   Reactivos[7]="\n8.Instruccion que no es de utilidad para elaborar un ciclo";
   Reactivos[8]="\n9.Cuantos errores tiene la siguiente linea de codigo : printf(Hay dos errores);";
   Reactivos[9]="\n10.int es una variable de tipo";

   Incisos[0]="\n1)Desarrollo el codigo binario\n2)Establecio la arquitectura de computadoras \n3)Fabricacion del primer chip.";
   Incisos[1]="\n1)AB01\n2) 101\n3) 30B";
   Incisos[2]="\n1)Codigo Madre\n2)Codigo ASCII\n3)Lenguaje Maquina.";
   Incisos[3]="\n1)Tomas de corriente\n2)Perifericos\n3)Puertos USB";
   Incisos[4]="\n1)Mouse\n2)Monitor\n3)Teclado";
   Incisos[5]="\n1)OR\n2)AND\n3)CROSS";
   Incisos[6]="\n1) Pascal\n2)C++\n3)C";
   Incisos[7]="\n1)for\n2)strcpy\n3)while do";
   Incisos[8]="\n1)1\n2)2\n3)3";
   Incisos[9]="\n1)flotante \n2)entero \n3)caracter";


int R;
int i;
   for ( i=0; i<10; i++){

       printf("%s\n",Reactivos);
       printf("%s\n",Incisos);
       func();
       promd ();


}
printf("Tu calificacion es %i",R);
   return (0);
   }

.
.
después de analizarlo por mas tiempo ya vi mi error , mi funcion func la movi a main , es decir, puse a que ahi contara las x y si funcionó , ahora para pulir mi programa veré como en ves de incisos 1 2 3 queden a b c