Seguimos buscando a Arshak. Ayudanos compartiendo!
Encuesta no oficial de docentes
Resultados de la encuesta no oficial de docentes
Probaste el SIGA Helper?

Donar $100 Donar $200 Donar $500 Donar mensualmente


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
[Informática 1] Ayuda con código en C.
Autor Mensaje
Alescaramanzia Sin conexión
Profesor del Modulo A
Dale que so vo
*****

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 309
Agradecimientos dados: 128
Agradecimientos: 3 en 3 posts
Registro en: May 2009
LinkedIn YouTube
Mensaje: #1
[Informática 1] Ayuda con código en C. Dudas y recomendaciones Informática I (Electrónica)
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

AtYVAN EHT NIOJAt
23-06-2011 13:53
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
cherkio Sin conexión
Empleado del buffet
Sin estado :(
*

Ing. Electrónica
Facultad Regional Haedo

Mensajes: 24
Agradecimientos dados: 0
Agradecimientos: 7 en 2 posts
Registro en: Apr 2009
Mensaje: #2
RE: [Informática 1] Ayuda con código en C.
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.
(Este mensaje fue modificado por última vez en: 23-06-2011 14:12 por cherkio.)
23-06-2011 14:12
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Alescaramanzia Sin conexión
Profesor del Modulo A
Dale que so vo
*****

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 309
Agradecimientos dados: 128
Agradecimientos: 3 en 3 posts
Registro en: May 2009
LinkedIn YouTube
Mensaje: #3
RE: [Informática 1] Ayuda con código en C.
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.

AtYVAN EHT NIOJAt
23-06-2011 14:30
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
cherkio Sin conexión
Empleado del buffet
Sin estado :(
*

Ing. Electrónica
Facultad Regional Haedo

Mensajes: 24
Agradecimientos dados: 0
Agradecimientos: 7 en 2 posts
Registro en: Apr 2009
Mensaje: #4
RE: [Informática 1] Ayuda con código en C.
mira me parece que era break; sin los parentesis como lo usas en el case switch
23-06-2011 14:38
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Feer Sin conexión
Presidente del CEIT
Ing. Electrónico
**********

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 4.672
Agradecimientos dados: 601
Agradecimientos: 2.969 en 451 posts
Registro en: Apr 2010
Mensaje: #5
RE: [Informática 1] Ayuda con código en C.
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!
(Este mensaje fue modificado por última vez en: 24-06-2011 00:05 por Feer.)
23-06-2011 23:46
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Aye Sin conexión
Rock Admin
.
**********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 2.143
Agradecimientos dados: 69
Agradecimientos: 466 en 54 posts
Registro en: Mar 2008
Mensaje: #6
RE: [Informática 1] Ayuda con código en C.
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

[Imagen: digitalizartransparent.png]
24-06-2011 00:46
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Feer Sin conexión
Presidente del CEIT
Ing. Electrónico
**********

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 4.672
Agradecimientos dados: 601
Agradecimientos: 2.969 en 451 posts
Registro en: Apr 2010
Mensaje: #7
RE: [Informática 1] Ayuda con código en C.
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)
24-06-2011 00:52
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Alescaramanzia Sin conexión
Profesor del Modulo A
Dale que so vo
*****

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 309
Agradecimientos dados: 128
Agradecimientos: 3 en 3 posts
Registro en: May 2009
LinkedIn YouTube
Mensaje: #8
RE: [Informática 1] Ayuda con código en C.
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

AtYVAN EHT NIOJAt
24-06-2011 01:15
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Anirus Sin conexión
Super Moderador
Sin estado :)
*********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.163
Agradecimientos dados: 81
Agradecimientos: 232 en 78 posts
Registro en: Nov 2009
Mensaje: #9
RE: [Informática 1] Ayuda con código en C.
(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



(Este mensaje fue modificado por última vez en: 24-06-2011 15:11 por Anirus.)
24-06-2011 15:10
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 3 invitado(s)