Autor Tema: C lenguajeC programa con menú ecuación segundo grado números primos factorial  (Leído 1690 veces)

rafavel

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 1
    • Ver Perfil
Hola, estoy haciendo un programa y el supuesto funcionamiento del programa debe ser el siguiente:

--------------------------------------------------------------------------------------------
MENU PRINCIPAL
A) OPERACIONES NUMERICAS
B) OPRACIONES ALFANUMERICAS
C) SALIR
MENU OPERACIONES NUMERICAS
a) RESOLUCION DE LA ECUACION GENERAL DE SEGUNDO GRADO
b) OBTENER LOR PRIMEROS 100 NUMEROS PRIMOS
c) OBTENER EL FACTORIAL DE UN NUMERO (NUMERO MAXIMO 50)
d) REGRESAR MENU ANTERIOR
MENU OPERACIONES ALFANUMERICAS
X ) LEER UN TEXTO MAXIMO 500 CARACTERES Y MOSTRAR TEXTO INTRODUCIDO Y
TEXTO AL REVES.
Y) LEER UN TEXTO MAXIMO 500 CARACTERES Y CONTAR Y MOSTRAR CUANTAS LETRAS
VOCALES HAY ESCRITAS (CUANTAS A, CUANTAS E, CUANTAS I, CUANTAS O, CUANTAS U).
Y CUANTOS SIGNOS DE PUNTUACION HAY.
Z) REGRESAR MENU ANTERIOR.
----------------------------------------------------------------------------------------------

Tengo varios problemas:

1.-NO FUNCIONA y lamentablemente mi profesor de asignatura no me ayuda

2.-En la situación "Y", no encuentro como hacerlo sin errores y ademas de eso no se como hacer la parte de los signos de puntuación.

3.-en las ultimas opciones de cada menú (SALIR O REGRESAR A LO ANTERIOR NO ME DA)

4.-Si hipotéticamente se resolvieran mis anteriores problemas las respuestas a los incisos solo se muestran 1ms y se van, no se como hacer que se queden ahí
ESPERO ME PUEDAN AYUDAR, GRACIAS (se que soy un asco en esto lol)


Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#define numVocales 5
#define tamFrase 500

int a,b,c,d;
int ipp,xpp,cont;
int xf,numerof;
int ivt = 0;
int j;
int vocales[5],xvv;
float xg,yg;
float factorial=1;
char m1, m2,sm1,sm2;
char cadena[500];
char frase[100];
enum {a1v,e1v,i1v,o1v,u1v};
void contar(char frase[500],int vocales[5]);
 

int main()
{
system("color f0");

do{
system("cls");
printf(" M E N U  P R I N C I P A L  ");
printf("\n A).-Operaciones Numericas");
printf("\n B).-Operaciones Alfa-Numericas");
printf("\n C).-Salir");
printf("\n\n Elija la opcion: ");
scanf("%c",&m1);

switch(m1)
{
case 'A':
do{
system("cls");

printf("\n OPERACIONES NUMERICAS");
            printf("\n a).-Resolucion de la ecuacion general de segundo grado \n");
            printf("\n b).-Obtener los primeros 100 numeros primos \n");
            printf("\n c).-Obtener el factorial de un numero (maximo:50) \n");
            printf("\n d).-Regresar al menu anterior \n");
            printf("\n\n Elija una opcion: ");
            scanf("%c",&sm1);
           
            switch(sm1)
            {
            case 'a':
            printf("Dame el valor de a: ");
                    scanf("%d",&a);
while (a == 0)
{
printf("Dame el valor de a: ");
scanf("%d",&a);}
printf("Dame el valor de b: ");
scanf("%d",&b);
printf("Dame elvalor de c: ");
scanf("%d",&c);
d = b*b-4*a*c;
if (d > 0)
{
xg = (-b+sqrt(d))/(2*a);
yg = (-b-sqrt(d))/(2*a);
printf("x1 = %.2f\n",xg);
printf("x2 = %.2f\n",yg);}
else if (d == 0) {
xg = (-b)/(2*a);
printf("x1 = %.2f\n",xg);}
else
printf("La ecuacion no tiene solucion");
           
        break;
       
        case 'b':
        for(ipp = 2 ; ipp <=542;ipp++)
{
    for(xpp = 2 ; xpp <= ipp;xpp++)
if(ipp % xpp == 0)
cont++;
if(cont == 1)
printf("%d-",ipp);
cont = 0 ;}
        break;
       
        case 'c':
        printf("Introduce un numero:");
                scanf("%d",&numerof);
                for(xf=numerof;xf>1;xf--)
{
  factorial=factorial*xf;
}
printf("%f",factorial);
        break;
       
        case 'd':break;
           
}
}while(sm1!='d');
   
case 'B':
system("cls");
printf("\n OPERACIONES ALFA-NUMERICAS");
printf("\n X).-Leer un texto (maximo 500 caracteres) y mostrar el texto introducido al reves \n");
printf("\n Y).-Leer un texto (maximo 500 caracteres) y contar cuantas letras vocales hay escritas \n");
printf("\n Z).-Regresar al menu anterior \n");
printf("\n\n Elija una opcion: ");
scanf("%c",&m2);

case 'X':
printf("Introduce tu texto: ");
gets(cadena);
printf("\nTu texto es: %s\n", cadena);
while(cadena[ivt]!='\0'){
ivt++;}
printf("El texto al rev\x82s es: ");
for (j=ivt-1; j>=0; j--){
printf("%c", cadena[j]);}
puts("");

    break;
       
    case 'Y':
for(xvv=0;xvv<5;xvv++){
vocales[xvv]=0;
}printf("ESCRIBA UNA FRASE: ");
gets(frase);
printf("\n La frase escrita es: %s",frase);
contar(frase,vocales);
printf("\n VOCAL \t Repite");
printf("\n A \t %d",vocales[a1v]);
printf("\n E \t %d",vocales[e1v]);
printf("\n I \t %d",vocales[i1v]);
printf("\n O \t %d",vocales[o1v]);
printf("\n U \t %d",vocales[u1v]);
getchar();
return 0;}
void contar(char frase[100], int vocales[5]);
{
for(int xvv=0;frase[xvv] !='\0' && frase[xvv] !='\n';xvv++){
switch(frase[xvv]){
case 'a': case 'A': vocales[a1v]++; break;
case 'e': case 'E': vocales[e1v]++; break;
case 'i': case 'I': vocales[i1v]++; break;
case 'o': case 'O': vocales[o1v]++; break;
case 'u': case 'U': vocales[u1v]++; break;}
}
    }
    break;




}while(m1!='C');

system("pause");
return 0;
}
« Última modificación: 27 de Octubre 2020, 20:57 por Ogramar »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Re:Ayuda porfavor, tengo un problema con mi codidigo en C
« Respuesta #1 en: 06 de Septiembre 2020, 16:46 »
Hola.
C no es mi fuerte, pero puedo ayudarte.

Creo que sería conveniente modular más el programa, es decir, repartir las tareas en distintas funciones, cada una que se ocupe de una cosa concreta y tenga sus propias variables.
Eso hace el programa más legible, especialmente en uno como este donde hay switchs anidados.

Para que las respuestas sean visibles y no desaparezcan en 1ms, puedes usar la instrucción system("pause").
Esto detiene la ejecución del programa hasta que el usuario pulsa una tecla, y así dispone de tiempo para ver el último mensaje aparecido en pantalla.

Lo de los signos de puntuación lo puedes resolver exactamente igual a como resuelves lo de las vocales.
En el switch, puedes añadir cases como
case '.':
case ',':

Para detectar puntos y comas, y más cases que puedas considerar necesarios para identificar signos de puntuación.

Te dejo un código hecho por mí para que veas cómo lo he resuelto.
He modulado el programa en distintas funciones, una para cada opción del menú.

El resto del código es casi igual al tuyo. Solo cambia que esta modulado, uso unas pocas variables menos, para contar vocales he preferido usar un vector de 5 elementos... y poco más.

Revísalo y pregunta cualquier cosa que no entiendas.
Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>

//Declaración de Funciones
void menuNumerico();
void ecuacionSegundoGrado();
void numerosPrimos();
void factorial();

void menuAlfanumerico();
void invertirTexto();
void contarLetrasSignos();

int main() {

system("color f0");
char opcion;

do {
system("cls");
printf(" M E N U  P R I N C I P A L  ");
printf("\n A).-Operaciones Numericas");
printf("\n B).-Operaciones Alfa-Numericas");
printf("\n C).-Salir");
printf("\n\n Elija la opcion: ");
scanf("%c",&opcion);

switch(opcion) {
case 'a':
menuNumerico();
break;
case 'b':
menuAlfanumerico();
break;
case 'c':
printf("\n\tFIN DE PROGRAMA\n");
}

} while(opcion !='c');

return 0;
} //Fin del main

//Definición de funciones
void menuNumerico() {
char opcion;

do {
system("cls");

printf("\n OPERACIONES NUMERICAS");
printf("\n a).-Resolucion de la ecuacion general de segundo grado \n");
printf("\n b).-Obtener los primeros 100 numeros primos \n");
printf("\n c).-Obtener el factorial de un numero (maximo:50) \n");
printf("\n d).-Regresar al menu anterior \n");
printf("\n\n Elija una opcion: ");
scanf("%c",&opcion);

switch(opcion) {
case 'a':
ecuacionSegundoGrado();
break;
case 'b':
numerosPrimos();
break;
case 'c':
factorial();
break;
case 'd':
printf("\nRegresando a menu principal\n");
}
}while(opcion != 'd');
system("pause");
}

void ecuacionSegundoGrado() {
int a, b, c, d;
float xg,yg;

printf("\n\tECUACION SEGUNDO GRADO\n");
printf("Dame el valor de a: ");
scanf("%d",&a);
while (a == 0)
{
printf("Dame el valor de a: ");
scanf("%d",&a);}
printf("Dame el valor de b: ");
scanf("%d",&b);
printf("Dame el valor de c: ");
scanf("%d",&c);
d = b*b-4*a*c;
if (d > 0)
{
xg = (-b+sqrt(d))/(2*a);
yg = (-b-sqrt(d))/(2*a);
printf("x1 = %.2f\n",xg);
printf("x2 = %.2f\n",yg);}
else if (d == 0) {
xg = (-b)/(2*a);
printf("x1 = %.2f\n",xg);}
else
printf("La ecuacion no tiene solucion");

system("pause");
}


void numerosPrimos() {
int ipp,xpp,cont;

printf("\n\t100 PRIMEROS NUMEROS PRIMOS\n");
for(ipp = 2 ; ipp <=542;ipp++) {
for(xpp = 2 ; xpp <= ipp;xpp++)
if(ipp % xpp == 0)
cont++;
if(cont == 1)
printf("%d-",ipp);
cont = 0 ;
}
printf("\n");
system("pause");
}

void factorial() {
int numerof, xf;
float factorial = 1;

printf("\n\tFACTORIAL\n");
printf("Introduce un numero:");
scanf("%d",&numerof);
for(xf=numerof;xf>1;xf--)
{
factorial=factorial*xf;
}
printf("%f\n",factorial);
system("pause");
}

void menuAlfanumerico() {
char opcion;

do {
system("cls");
printf("\n OPERACIONES ALFA-NUMERICAS");
printf("\n X).-Leer un texto (maximo 500 caracteres) y mostrar el texto introducido al reves \n");
printf("\n Y).-Leer un texto (maximo 500 caracteres) y contar cuantas letras vocales hay escritas \n");
printf("\n Z).-Regresar al menu anterior \n");
printf("\n\n Elija una opcion: ");
scanf("%c",&opcion);

switch(opcion) {
case 'x':
invertirTexto();
break;
case 'y':
contarLetrasSignos();
break;
case 'z':
printf("\nRegresando a menu principal\n");
}

}while (opcion != 'z');
system("pause");
}

void invertirTexto() {
char cadena[500];
int ivt = 0;

printf("\n\tINVERTIR TEXTO\n");
printf("Introduce tu texto: ");
fflush(stdin);
fgets(cadena, 500, stdin);
printf("\nTu texto es:\n%s\n", cadena);
while(cadena[ivt]!='\0'){
ivt++;}
printf("El texto al rev\x82s es: ");
for (int j=ivt-1; j>=0; j--){
printf("%c", cadena[j]);}
puts("");

system("pause");
}

void contarLetrasSignos() {
char cadena[500];
int vocales[] = {0, 0, 0, 0, 0};
int signos = 0;

printf("\nCONTAR VOCALES Y SIGNOS\n");
printf("Introduce tu texto: ");
fflush(stdin);
fgets(cadena, 500, stdin);

for(int i=0; cadena[i] !='\0' && cadena[i] !='\n'; i++){
switch(cadena[i]){
case 'a':
case 'A':
vocales[0]++;
break;
case 'e':
case 'E':
vocales[1]++;
break;
case 'i':
case 'I':
vocales[2]++;
break;
case 'o':
case 'O':
vocales[3]++;
break;
case 'u':
case 'U':
vocales[4]++;
break;
case ',':
case '.':
case ';':
signos++;
}
}

printf("\n VOCAL \t Repite");
printf("\n A \t %d",vocales[0]);
printf("\n E \t %d",vocales[1]);
printf("\n I \t %d",vocales[2]);
printf("\n O \t %d",vocales[3]);
printf("\n U \t %d",vocales[4]);
printf("\n\nSignos puntuacion encontrados: %d\n", signos);

system("pause");
}
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".