Dev - C++ - AYUDA POR FAVOR!! Tengo un problema con este programa.

 
Vista:

AYUDA POR FAVOR!! Tengo un problema con este programa.

Publicado por rafavel (2 intervenciones) el 05/09/2020 08:00:38
Este tiene que ser su funcionamiento
--------------------------------------------------------------------------------------------

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 problemas al momento de dar las respuestas de todos los incisos solo se muestran 1ms y se van
tambien mi progama no regresa al menu anterior dentro de los incisos A y B
y en el caso del inciso Y tengo 2 problemas mas, me marca el error: [Error] a label can only be part of a statement and a declaration is not a statement y el segundo problema es que no tengo ni idea de como contar los signos de puntuacion

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
//*                                    *//
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#define numVocales 5
#define tamFrase 500
 
int a,b,c,d;
int i,x,cont;
int x,numero;
int i = 0;
int j;
float xg,yg;
float factorial=1;
char m1, m2,sm1,sm2;
char cadena[200];
x=100;
cont=0;
 
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(i = 2 ; i <=542;i++)
				{
				    for(x = 2 ; x <= i;x++)
					if(i % x == 0)
					cont++;
					if(cont == 1)
					printf("%d-",i);
					cont = 0 ;}
		        break;
 
		        case 'c':
		        	printf("Introduce un numero:");
	                scanf("%d",&numero);
	                for(x=numero;x>1;x--)
					{
					  factorial=factorial*x;
					}
					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[i]!='\0'){
				i++;}
				printf("El texto al rev\x82s es: ");
				for (j=i-1; j>=0; j--){
				printf("%c", cadena[j]);}
				puts("");
 
		    break;
 
		    case 'Y':
		    	void cuentaVocales( char frase[] , char vocales[] )
{
    for( int i=0; i< numVocales; i++)
        vocales[i] = 0;
 
    for( int i=0; i < tamFrase; i++)
    {
        switch(frase[i])
        {
            case 'a': vocales[0]++; break;
            case 'e': vocales[1]++; break;
            case 'i': vocales[2]++; break;
            case 'o': vocales[3]++; break;
            case 'u': vocales[4]++; break;
        }
    }
}
 
 
void muestraVocales(char vocales[])
{
    printf(" a: %d\n", vocales[0] );
    printf(" e: %d\n", vocales[1] );
    printf(" i: %d\n", vocales[2] );
    printf(" o: %d\n", vocales[3] );
    printf(" u: %d\n", vocales[4] );
 
}
 
int main()
{
    float frase[tamFrase],
         vocales[numVocales];
 
    printf("Escribe tu texto :" );
    gets(frase);
 
    cuentaVocales(frase, vocales);
    muestraVocales(vocales);
		    break;
 
		    case 'Z':break;
		break;
 
		case 'C':break;
		}
 
	}while(m1!="C");
 
system("pause");
return (0);
 
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Rodrigo
Val: 1.755
Plata
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

AYUDA POR FAVOR!! Tengo un problema con este programa.

Publicado por Rodrigo (539 intervenciones) el 05/09/2020 10:35:44
Cuando compares un char contra alguna de las opciones elegidas, no uses comilla doble, usa comilla simple.
Comilla doble es para strings, comilla simple es para chars.
Ejemplo de uso incorrecto: linea 100 y linea 172

Aparentemente en la linea 164 borraste el comienzo de un switch. Te falta al menos: switch( variable ) { ...
o bien hay que borrar todo el resto del switch que no corresponde ahi.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 1.755
Plata
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

AYUDA POR FAVOR!! Tengo un problema con este programa.

Publicado por Rodrigo (539 intervenciones) el 05/09/2020 16:29:42
Mire el programa una segunda vez y descubri otra cosas:

- En la linea 125, en el cuerpo del caso 'Y' defines una funcion. Las funciones se definen independientemente y se invocan desde otros lugares. Osea en vez de:

1
2
3
4
5
6
tipo funcion1() {
   .. instrucciones
   tipo funcion2(parametros) {
      otras instrucciones
   }
}

se hace:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
tipo funcion2(parametros) ; // nombre y tipos de parametros y retornos al inicio
 
// definicion de funciones a continuacion
 
tipo funcion1() {
   .. instrucciones
   funcion2( valores );  // invocacion de la funcion
}
 
// definicion de la funcion
tipo funcion2(parametros) {
    otras instrucciones
}
 
... mas funciones, main es una de ellas, y es la que invoca inicialmente a alguna de las demas.

Parece que esto explica las lineas 164 y siguientes, supongo que estas son la continuacion del switch que se interrumpio en la linea 125?

- Cuando calculas el factorial, el valor que tiene la variable factorial deberias inicializarla cada vez que ingresas. De otra manera vas a tener problemas la segunda vez que ingreses a esa misma opcion, pues la variable factorial va a tener el valor anterior cada vez.
- Funciona bien para valores grandes?
50! = 30414093201713378043612608166064768844377641568960512000000000000
Posiblemente un valor grande como ese no quepa en un float.

- Para calcular los 100 primeros numeros primos deberias usar un contador que llegue a 100. En vez de esto, al parecer lo resolviste mentalmente o en otro lugar y el programa resuelve otro problema, en la linea 77: los primos menores o iguales que 542. Posiblemente esto de como resultado los 100 primeros numeros primos (no lo se), pero esto puede resolverse contando, en vez de hacerlo asi. Que pasa si en vez de los 100 primeros numeros primos te cambian el problema y son los 200 primeros? Si contaras, cambiarias en tu programa 100 por 200, como lo tienes tendrias que volver a calcularlo tu mismo en otro lado y cambiar el numero magico 542 por otro numero para que calcule bien.
No parece la mejor solucion.

-
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

AYUDA POR FAVOR!! Tengo un problema con este programa.

Publicado por rafavel (2 intervenciones) el 05/09/2020 19:34:26
Rodrigo, antes que nada gracias por tomar el tiempo de responder y ayudar.
Mi código despues de algunos cambios (y gracias a sus correcciones las cual aprecio) es este:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
//*                                    *//
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#define numVocales 5
#define tamFrase 500
 
int a,b,c,d;
int i,x,cont;
int x,numero;
int i = 0;
int j;
int vocales[5],x;
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[100],int vocales[5]);
x=100;
cont=0;
 
 
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(i = 2 ; i <=550;i++)
				{
				    for(x = 2 ; x <= i;x++)
					if(i % x == 0)
					cont++;
					if(cont == 1)
					printf("%d-",i);
					cont = 0 ;}
		        break;
 
		        case 'c':
		        	printf("Introduce un numero:");
	                scanf("%d",&numero);
	                for(x=numero;x>1;x--)
					{
					  factorial=factorial*x;
					}
					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[i]!='\0'){
				i++;}
				printf("El texto al rev\x82s es: ");
				for (j=i-1; j>=0; j--){
				printf("%c", cadena[j]);}
				puts("");
 
		    break;
 
		    case 'Y':
			for(x=0;x<5;x++)
			{
			vocales[x]=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 x=0;frase[x] !='\0' && frase[x] !='\n';x++){
			switch(frase[x]){
			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;
			case 'Z':
			break;
 
 
	}while(m1!='Z');
 
system("pause");
return (0);
 
}
Ahora el problema/error es: [Error] ld returned 1 exit status, lo que llama mi atencion es que algunas veces cambia y me dice que el error es en la linea 156 con el error:[Error] case label not within a switch statement
y por ultimo mis resultados se siguen mostrando muy poco tiempo, son imperceptibles al usuario.
Espero que me puedas ayudar, de antemano gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 1.755
Plata
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

AYUDA POR FAVOR!! Tengo un problema con este programa.

Publicado por Rodrigo (539 intervenciones) el 05/09/2020 23:22:16
La linea 146 es un nuevo ejemplo de lo que ya te dije que no deberias hacer.
Factorial no parece haber cambiado.

Tu programa seria mas facil de leer si crearas mas funciones que simplifiquen tu menu y facilitan la lectura

Imagina algo como:

1
2
3
4
5
switch(opcion) {
  case 'a': factorial(); break;
  case 'b': ecuacion(); break;
  ..
}

o algo parecido a esto. Sin mucho codigo en el menu mismo. Soio la invocacion de funciones.

Es mas facil descubrir problemas asi.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar