[Solucionado] Hacer un programa que responda preguntas

Iniciado por Caster, 21 Diciembre 2011, 20:56 PM

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

Caster

Hola, estoy empezando a programar en C, nose mucho pero creo que con lo que se puedo hacer lo que tengo en mente, quiero hacer un programa al que le introduzcas una pregunta y tenga una respuesta(esas respuestas las habre puesto yo cuando lo haga), y si la respuesta no esta grabada pues que diga que no tiene respuesta, pero no se me ocurre la forma de hacerlo, estoy bloqueado, necesito ayuda.
Gracias.

crazykenny

Hola; a mi se me ocurre una opcion; quizas sea algo limitada en cuanto a que preguntas puedes hacerle, pero bueno, ahi va; podrias hacer una base de datos con una serie de preguntas a la cual le añades una respuesta, y todo en una matriz de dos niveles; en el primero, tendria un numero X, el cual haria referencia al numero de preguntas con respuesta (por ejemplo, si tiene 2 preguntas, X seria 1, y si tuvieses 5 preguntas, X seria 4; y ten en cuenta que las matrices empiezan siempre desde 0), y el segundo nivel, tendria dos valores; el primero para las preguntas que tiene guardadas, y el segundo para la respuesta a dicha pregunta; por otra parte, si quieres ahorrarte el hecho de repetir una misma respuesta para dos preguntas mas o menos similares y/o parecidas, podrias crear una segunda matriz con una serie de respuestas, y la primera dejarla como esta, pero en el segundo valor del segundo nivel de la matriz, podrias ponerle un valor, el cual seria la posicion de la segunda matriz; he de mencionar que los dos metodos son validos en el primer caso, pero con el primer metodo ahorrarias algo de memoria al no crear una segunda matriz, o eso creo. Eso si, recuerda que todas las matrices han de ser strings.
Quizas sea algo simple, pero es lo que se me ocurre.
Saludos.
A nivel personal, lo que me da mas miedo no son los planteamientos y acciones individuales, sino las realizadas en grupo, ya que estas ultimas pueden acabar con consecuencias especialmente nefastas para todos.
Se responsable, consecuente y da ejemplo.
http://informaticayotrostemas.blogspot.com.es/2013/12/situacion-de-la-educacion-actual-en.html
https://informaticayotrostemas.blogspot.com/

Caster

Simple para tí, jejej
No he entendido nada de nada, voy a ser sincero.
Solo me he leído dos páginas de un manual que he encontrado bastante bueno, lo unico que se es asignar valor a a constantes, crear variables, hacer una estructura condicional muy simple y poco más, pense que con esos conocimientos basicos podría hacer algo.
Mi idea era que le programa cogiese los datos que le doy yo( la pregunta) y con esa pregunta crear una condicional, si es la pregunta adecuada se responde, sino pues no tiene respuesta, el problema es que con el comando que uso yo para introducir caracteres(scanf, nose si hay alguno mas) solo lee numeros, texto no.

..:ALT3RD:..

Crep que para lo que quieres hacer te bastaría con aprender los controladores de flujo (if,switch...etc) busca sobre eso.
"Mañana sabrás que hoy no sabes nada"

crazykenny

Tambien puedes utilizar el comando input() asignado a una variable, que quedaria asi:
variable$=input()
No se si en C/C++ es asi, pero lo pongo a modo de ejemplo.
Luego, una matriz es como una variable que se repite varias veces, donde le puedes poner varios valores, y cada valor esta puesto en una posicion; por ejemplo
matriz$(22) -> esto seria una matriz, donde le puedes poner hasta 23 valores; si, ya se que hay un 22, y quizas parezca que solo se pueden poner 22, pero tambien esta la posicion 0.
Cabe destacar que una matriz puede tener varios niveles, en el sentido de, por ejemplo; matriz$(10,1) -> esto seria una matriz de dos niveles.
Entonces, volviendo a lo que te he comentado al principio; puedes crear una matriz (en bliz 3D se hace poniendo "Dim matriz$(X,Y); pero no se como se hace en C/C++), y luego, con el comando input() le vas poniendo las preguntas y respuestas.
Tambien te recomiendo utilizar bucles for para ampliar la matriz, en el sentido de que, si tienes valores asignados en una posicion de la matriz, y la vuelves a crear con nuevos valores, los que estaban inicialmente desapareceran, por lo que te recomiendo volcar previamente los valores de la matriz en otra identica excepto en el nombre para luego, cuando la hayas ampliado, volver a pasar los datos de la segunda matriz a la primera utilizando un bucle for con el tamaño de la segunda, el cual deberia ser identico al de la primera antes de redimensionarla, o, mejor dicho, volverse a crear con un valor superior; te lo comento porque es el metodo que utilizo siempre para añadir mas datos a una matriz; tambien puedes crear archivos en el disco duro  guardando los datos de la matriz, pero prefiero sacrificar algo de memoria a que me vaya algo mas lento el programa por escribir datos en el disco duro (en mi caso, en el pendrive).
Saludos.
A nivel personal, lo que me da mas miedo no son los planteamientos y acciones individuales, sino las realizadas en grupo, ya que estas ultimas pueden acabar con consecuencias especialmente nefastas para todos.
Se responsable, consecuente y da ejemplo.
http://informaticayotrostemas.blogspot.com.es/2013/12/situacion-de-la-educacion-actual-en.html
https://informaticayotrostemas.blogspot.com/

BioHazardTM

Hola preython, lo que necesitas para tu programa es una instrucción 'switch' o un conjunto de instrucciones 'if' anidadas.

Mira está pagina que explica de forma fácil la sentencia 'switch': http://www.bloginformatico.com/sentencia-switch-lenguaje-de-programacion-c.php

Si no quieres usar un 'switch', podrías hacer algo parecido a esto:
int main(void)
{
  int op;

  printf("Introduce una opcion: \n");
  scanf("%d", &op)

  if (op = 1) printf("Respuesta 1");
  if (op = 2) printf("Respuesta 2");
  if (op = 3) printf("Respuesta 3");

  if (op != 1) && (op != 2) && (op != 3) printf("No se encuentra la respuesta");

  return 0;
}


Te recomiendo que mires un poco está página: http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Instrucciones_de_control

Saludos.

Caster

#6
Dos cositas:

1ª: He probado a crear un switch
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  int dia;
  printf("elige un dia: \n");
  scanf("%d" , &dia);
  switch (dia) {
              case 1:
                   printf("Lunes\n");
                   break;
              case 2: 
                   printf("Martes\n");
                   break;
                   }
  system("PAUSE");
  return 0;
}


Mi pregunta es, como hago para que sino son ninguna de las dos opciones, escriba, sin respuest o algo asi?

2ª: En el caso anterior, cuando escribo "case 1" ¿Significa que es lo que pasara si pulso tecla "1"? y si es así ¿Podría, en vez de numero, poner texto?.

BioHazardTM

#7
Para que cuando introduzcas un número distinto de 1 o 2 te escriba un mensaje tienes que poner esto:
switch (dia) {
             case 1:
                  printf("Lunes\n");
                  break;
             case 2:  
                  printf("Martes\n");
                  break;
     default:
  printf("Introduce un numero valido\n");
                  break;
                  }


En 'default' pones las instrucciones que quieres que se ejecuten cuando no se introduzca ninguno de los números anteriores.

Sobre la segunda pregunta: no se pueden evaluar strings en C, puedes evaluar numeros y letras.
Para evaluar letras:
char dia;
printf("Elige un dia: \n");
scanf("%c" , &dia);
switch (dia) {
case 'A': printf("Lunes\n");
  break;
case 'B': printf("Martes\n");
  break;
default: printf("Introduce una letra valida");
}


Mira esta página si quieres ver como evaluar cadenas: http://foro.elhacker.net/programacion_cc/iquestse_puede_hacer_switch_a_una_cadena_de_caracteres-t215028.0.html

Saludos