UTNianos

Versión completa: [Informática 1] Ayuda con código en C.
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Gente, el pequeño problema que se me presenta es que no encuentro cómo poner en estos códigos (que según lo que pude hacer es lo más compacto que me sale) lo siguiente: en el primer código, que el problema me pide, dado el ingreso del legajo y de la nota, legajo igual a cero para finalizar, pide informar el promedio de la nota total, cantidad de alumnos del curso, cantidad de aprobados (se aprueba con más de 6), mayor nota, cantidad de alumnos con la mayor nota y según una tabla, una calificación conceptual; acá no sé cómo poder agregar la "cantidad de alumnos con mayor nota" u.u

Spoiler: Mostrar

#include<stdio.h>

int main ()

{
int contador=0, nota, legajo, aprobado=0, max=0, sobresaliente=0, muybueno=0, bueno=0, regular=0, insuficiente=0, contnota=0;
float total=0, promedio;

do{
printf("Ingrese el legajo del alumno de ocho cifras, cero para finalizar:\n");
scanf("%d", &legajo);
if(legajo!=0){
printf("Ingrese la nota del 1 al 10:\n");
scanf("%d", &nota);
contador++;
total=total+nota;
promedio=total/contador;

if(nota>max)
max=nota;

switch(nota){
case 10:
aprobado++;
sobresaliente++;
break;
case 9:
case 8:
aprobado++;
muybueno++;
break;
case 7:
case 6:
aprobado++;
bueno++;
break;
case 5:
case 4:
regular++;
}

}else
insuficiente++;

}while(legajo!=0);

printf("Se ha interrumpido la entrada de datos\n");
printf("La cantidad de alumnos es %d\n", contador);
printf("El promedio de las notas es de %.2f\n", promedio);
printf("La cantidad de alumnos aprobados es de %d\n", aprobado);
printf("La mayor nota es de %d\n", max);
printf("La cantidad de alumnos con la mayor nota es de %d\n", contnota);
printf("Según la tabla de calificaciones conceptuales, las mismas son:\nSobresaliente: %d\nMuy bueno: %d\nBueno: %d\nRegular: %d\nInsuficiente: %d\n", sobresaliente, muybueno, bueno, regular, insuficiente);

return 0;



Y en el siguiente, dado el ingreso de los coeficientes de una cuadrática, no puedo ingresar como condición de finalización, que el programa finalice cuando se ingresan coeficientes que dan raíces imaginarias dos veces consecutivas. La otra condición que ya viene en el código que hice es porque voy arrastrando modificaciones de problemas anteriores.

Spoiler: Mostrar

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

int main (void)

{
float A, B, C, raiz, x1, x2, x, bx, contador=0, cont=0;


do{
printf("Ingrese los coeficientes cuadráticos A, B y C separados por un espacio:\n");
scanf("%f""%f""%f", &A, &B, &C);

raiz=pow(B, 2)-(4*A*C);

if(A==0)
printf("Ingrese un valor diferente para A\n");
else if(raiz>0){
x1=(-B+sqrt(raiz))/(2*A);
x2=(-B-sqrt(raiz))/(2*A);
printf("Las raíces son %.1f y %.1f\n", x1, x2);
}
else if(raiz==0){
x=-B/(2*A);
printf("La raíz doble es %.1f\n", x);
}
else if(raiz<0)
printf("Las raíces son complejas, no existe solución real\n");
cont++;

}while((A!=0)||(B!=0)||(C!=0));

printf("Se ha interrumpido la entrada de datos\n");

return 0;

}



=D
No se si entendi bien lo que necesitas pero mi repuesta seria:

donde preguntas si nota es mayor que max pone un conatdor en cero o 1cuando sea verdadero, y cuando se falso pregunta sisi nota es igual a max y acumulas en un conatdor. Asi tendras la cantidad de alumnos con notas max.

En el otro cuando cont sea igual a 2 podes usar la sentencia break(); que tesaca del lazo o hacer falso lo que tenes de condicion en l while esdeci A=B=C

Espero te sirva y sino pregunta y trato de ayudarte.
No se si entendi bien lo que necesitas pero mi repuesta seria:

donde preguntas si nota es mayor que max pone un conatdor en cero o 1cuando sea verdadero, y cuando se falso pregunta sisi nota es igual a max y acumulas en un conatdor. Asi tendras la cantidad de alumnos con notas max.

En el otro cuando cont sea igual a 2 podes usar la sentencia break(); que tesaca del lazo o hacer falso lo que tenes de condicion en l while esdeci A=B=C

Espero te sirva y sino pregunta y trato de ayudarte.
Lo estoy probando, en el segundo intenté usar break() pero no sé de qué forma, lo voy a intentar. En cuanto al otro me dijeron algo similar y debería salir =D Mil gracias, en un rato veo qué sale.
mira me parece que era break; sin los parentesis como lo usas en el case switch
Te dejo el 2:

http://www.utnianos.com.ar/foro/tema-tra...-2010-2011


Bajatelo jaja, lo tengo aprobado, saludos.
pd: El 1 tengo uno parecido pero un poco mas completo y me la esta haciendo parir si no te ayudaria^^

Te dejo el codigo estoy aburrido



**
\file 37.c
\brief Se calculan las raices de la ecuacion cuadratica, se informan sus raices y finaliza el calculo de ec. cuando se insertan
\brief seguidas dos raices imaginarias.
\author
\date 2011.05.03
\version 1.0.0
*/
//--------------
//-- Includes --
//--------------
#include <stdio.h>
#include <math.h>

/**
\fn int main (void)
\brief Se calculan las raices de la ecuacion cuadratica, se informan sus raices y finaliza el calculo de ec. cuando se insertan
\brief seguidas dos raices imaginarias..
\author
\date 2011.05.03
\return Retorna siempre cero.
*/

int main (void){

float raiz,total1,total2,delta,A,B,C;
int contador = 0;

//Si contador (cantidad de veces que resulto imaginaria la raiz) es dos finaliza el programa.

while(contador < 2){

//Introduzco los valores de los coeficientes principales de la cuadrática.

printf ("Introduzca el valor de A: ");
scanf ("%f",&A);
printf ("Introduzca el valor de B: ");
scanf ("%f",&B);
printf ("Introduzca el valor de C: ");
scanf ("%f",&C);

//Calculo el delta (Operacion ubicada dentro de la raíz).

delta = (B * B) - (4 * A * C);

//Si el delta es mayor que cero se calculan los resultados.

if(delta >= 0){
raiz = sqrt (delta);
total1 = (-B + raiz)/(2*A);
total2 = (-B - raiz)/(2*A);
printf ("Los resultados son: %f v%f\r\n",total1,total2);

//Limpia el contador ya que el programa solo finaliza si se ingresan dos veces seguidas valores que caigan en raices imaginárias y
//no si se intercala entre dos ecuaciones sin resolución una solucion coherente de raices reales.

contador = 0;
}

//Si el delta es menor que cero entonces se incrementa el contador y se informa de un resultado de raices imaginárias.

else{
if (contador < 2){

printf ("Las raices son imaginarias\r\n");

//Se incrementa contador a fin de no permitir mas de dos que se ingresen valores los cuales den por resultado raices imaginárias.

contador = contador + 1;
}
}
}

printf ("Fin del programa\r\n");

return (0);
}



Comentario aparte:
El break es salto, no es una funcion.
Se utiliza para salir de un bucle por ejemplo...

Ejemplo:

case 1:
printf("hola mundo")

case 2:
printf("En el parcial me van a romper el totó");

case 3:
puts("aca no se que escribir");

Que pasa?, si no pones break el switch te va a hacer el case1, despues el 2, despues el 3, entonces usamos el break que se escribe:
break;
para saltar a la llave que cierra el bucle switch.
De todas formas fijate en mi programa no hace falta usarlo... si no entendes me decis!
un error que veo es que tenés una sentencia else que tiene un insuficiente++... Lo que yo me imagino que querés decir es que si no entra en ninguno de los casos que vos declarás en el switch, entonces sumás uno a insuficiente... El punto es que el "caso contrario" del switch no es un else sino un default, y va dentro de tu definición de switch... Vos ese else se lo estás poniendo al if del legajo... Se entiende???? Espero que si
A estaba pensando...
Que es mayor nota para vos? 10? 9?
Podrías ordenar el vector legajos, o alumnos...
Mismo podes tener 3 vectores: notas, alumnos, legajos.
Entonces lo que tendrias que hacer a lo casero es:
Ordenar el vector notas (sumas las notas y sacas el promedio de cada alumno), mostrar nombre de la persona a la que corresponde esas notas (matriz)
Gracias Aye por resaltar ese error, ya que sí, siempre se me sumaba uno de más, por eso usé el caso default y saqué el "else". Ahora voy a probar con el de las raíces, aunque lo estoy bajando. Y el tema es que no puedo usar punteros ni arrays así que por eso tanto bondi xD
(24-06-2011 00:52)Feer escribió: [ -> ]A estaba pensando...
Que es mayor nota para vos? 10? 9?
Podrías ordenar el vector legajos, o alumnos...
Mismo podes tener 3 vectores: notas, alumnos, legajos.
Entonces lo que tendrias que hacer a lo casero es:
Ordenar el vector notas (sumas las notas y sacas el promedio de cada alumno), mostrar nombre de la persona a la que corresponde esas notas (matriz)

No necesita vector, se soluciona así:


if(nota>mayorNota){ //Si supero la mayor nota
mayorNota= nota; //Esa pasa a ser la mayor
cantidad = 1; //Y la cantidad con esa nota es 1 (es la primera vez que apareció)
}else if(nota==mayorNota) cantidad++; //Si es igual a la mayor nota, entonces sumo uno a la cantidad de alumnos con esa nota



URLs de referencia