AYUDA! problema con programas usando Estructuras de control selectivas

Iniciado por Ingrid1997, 11 Octubre 2015, 04:39 AM

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

Ingrid1997

Hola buenas noches, pues realice este codigo, me deja ingresar nombre y calificaciones pero se cierra despues y no me da ningun resultado, la verdad no se que hacer, les agradeceria mucho me ayudaran, mil gracias por leer :D Estoy trabajando con C++ y se supone debo usar Estructuras de control Selectivas

16.   Dado el nombre y calificaciones individuales de un alumno en laboratorio, examen trimestral y examen final calcule la calificación final con ponderaciones de 20%, 30% y 50% respectivamente. Mostrar su nombre, las calificaciones individuales, la calificación final y además clasificar la calificación de acuerdo a la siguiente tabla:
Calificación   Clasificación
80-100   1
70-79   2
60-69   3
50-59   4
Menos de 50      5.
Código (cpp) [Seleccionar]
#include <stdio.h>

int main () {

char cNombre;
int eLaboratorio, eExamentrimestral, eExamenfinal, eCalificacionfinal;

system ("cls");
printf ("Este programa calculará la calificación final de un alumno tomando en cuenta el 20 porciento de Laboratorio, 30 porciento del examen trimestral y 50 porciento del examen final y la calificación final será clasificada en un rango del 1 al 5 correspondiendo asi al 1 una calificación del 80 al 100 porciento, 2 del 70 al 79 porciento, 3 del 60 al 69 porciento, 4 del 50 al 59 porciento y 5 a menos del 50 porcient");

printf("\nIngrese el nombre del alumno:");
scanf("%s", &cNombre);
printf("\nIngrese la calificación del Laboratorio:");
scanf("%d", &eLaboratorio);
printf("\nIngrese la calificación del Examen Trimestral:");
scanf("%d", &eExamentrimestral);
printf("\nIngrese la calificación del Examen Final:");
scanf("%d", &eExamenfinal);

eCalificacionfinal = (eLaboratorio * 2) + (eExamentrimestral * 3) + (eExamenfinal * 5);


if (eCalificacionfinal<50){
printf("Clasificación 5");
}
   if (eCalificacionfinal=50 || eCalificacionfinal<=59){
   printf("Clasificación 4");
}
if (eCalificacionfinal=60 || eCalificacionfinal<=69){
   printf("Clasificación 3");
}
   if (eCalificacionfinal=70 || eCalificacionfinal<=79){
   printf("Clasificación 2");
}
if (eCalificacionfinal=80 || eCalificacionfinal<=100){
   printf("Clasificación 1");
}

printf("\nEl alumno(a) %s tiene %d en la calificación del laboratorio, %d en la calificación del examen trimestral y %d de calificación en el examen final, obteniendo así un promedio final de %d", cNombre, eLaboratorio, eExamentrimestral, eExamenfinal, eCalificacionfinal);
fflush(stdin);
getchar ();
return 0;
}


En este me pide :
19.   Lea un caracter y escriba si está antes o después de "m" en orden alfabético.

e hice este codigo: el problema esque escribo a por ejemplo y me dice que esta antes y despues, osea me imprime las dos acciones de las condiciones

Código (cpp) [Seleccionar]
#include <stdio.h>

int main (){
char cLetra;

system ("cls");

printf("Ingrese un caracter del alfabeto:");
scanf("%c", &cLetra);

if (cLetra = 'a' || 'b' || 'c' || 'd' || 'e' || 'f' || 'g' || 'h' || 'i' || 'j' || 'k' || 'l') {
printf("El carácter alfabético ingresado esta antes de 'm'");
}
if (cLetra = 'n' || 'ñ' || 'o' || 'p' || 'q' || 'r' || 's' || 't' || 'u' || 'v' || 'w' || 'x' || 'y' || 'z') {
printf("El carácter alfabético ingresado esta despues de 'm'");
}

fflush(stdin);
getchar ();
return 0;
}

Seyro97

#1
Respecto al primer código, hay varios errores:
1º Línea 5 - La variable 'cNombre', en el código, la usas cómo un string, pero aquí la declaras como un carácter. Solución, sustituir la línea por 'char cNombre[256];'
2º en las línea 12, tienes que quitar el '&', ya que la variable 'cNombre' ya es un puntero.
3º En las líneas 27, 30, 33 y 36 estás igualando, tienes que cambiar el operador '=' por el de igualación '=='

Otra cosa, aunque no sea un error de código, al calcular el promedio no divides entre la suma de todo. Sustituye la línea 21 por:
Código (cpp) [Seleccionar]
eCalificacionfinal = ((eLaboratorio * 2) + (eExamentrimestral * 3) + (eExamenfinal * 5))/10;
Carlos Peláez González. visita http://www.taringa.net/EnjoyC para muchos tutoriales!

Seyro97

Respecto al segundo código, hay muchas cosas mal. Los caracteres están codificados en un código. Es decir, a cada carácter le corresponde un número. La codificación normalmente usada es la ASCII extendida o la UTF-8(o 16).

En esta línea
Código (cpp) [Seleccionar]
cLetra = 'a' || 'b' || 'c' || 'd' || 'e' || 'f' || 'g' || 'h' || 'i' || 'j' || 'k' || 'l'
Estás igualando a 'cLetra' a, no estás comparando. Además, lo que se pone entre el operador || es una comparación. Como los caracteres equivalen a un número distinto de cero, entonces esta es la equivalencia:
Código (cpp) [Seleccionar]
true || true ||  true ||  true ||  true ||  true ||  true ||  true ||  true ||  true ||  true
Como ves, si o si, el if se va a cumplir, ya que el operador || dice que si alguno de las comparaciones vale true, todo vale true, es decir, el código de antes corresponde al siguiente:
Código (cpp) [Seleccionar]
if(true) {...}
Lo que tendrías que hacer es lo siguiente:
Código (cpp) [Seleccionar]
if(cLetra < 'm') {/* El código va aquí */}
Lo mismo pasa con el otro if
Carlos Peláez González. visita http://www.taringa.net/EnjoyC para muchos tutoriales!