Autor
|
Tema: Como ordenar las notas de las Alumnas de M ayor a Menor (Leído 1,957 veces)
|
Gabriele7
Desconectado
Mensajes: 3
|
Hola a Todos. Bueno mi problema es que tengo las sig preguntas de un trabajo pero hay una que no pude resolver, y quisiera saber si ustedes me podrian dar una mano, la pregunta que no entiendo es la N°2, que es imprimir la lista de las 10 mejores Alumnas (no Alumnos). Acá les dejo cuales son las preguntas asi entienden mejor el codigo: N1° : Ingresar los datos de los alumnos de un establecimiento consistentes en NOMBRE(string de30 caracteres) ; Sexo (char) ; Y NOTAS de 10 materias codificadas de 0 a 9 (int).El ingreso terminara cuando se ingrese el nombre "FIN".Se sabe que el establecimiento no tiene mas de 1000 Alumnos. N2° : IMPRIMIR LA LISTA DE LAS 10 MEJORES ALUMNAS. (ESTE ES EL QUE NO EINTIENDO) N°3: Indicar cuantos alumnos hay en el establecimiento cuyo promedio sea mayor o igual que 4 y menor que 7. N°4: Permitir el ingreso de un nombre y mostrar la totalidad de sus datos, o bien si no pertenece al establecimiento. Acá les dejo el código que hice : #include<stdio.h> #include<string.h> #include<ctype.h> #include<ncurses.h>
#define MAX_ALUMNOS 3
#define MAX_NOTAS 3
struct alumno { char nombre[20]; char sexo; int notas[MAX_NOTAS]; float promedio_final; };
char nombre_a_buscar[20];
int main() { struct alumno alumnos[MAX_ALUMNOS]; int num_alumnos;
for(num_alumnos=0; num_alumnos<MAX_ALUMNOS; num_alumnos++) { printf("Nombre del alumno (para terminar teclee FIN): "); scanf("%s",alumnos[num_alumnos].nombre); if( strcmp(alumnos[num_alumnos].nombre,"FIN") == 0 ) break;
// else .... // nota que como el if tiene un break no es necesario el else do { char sexo; printf("Sexo: M o F: "); scanf("%s",&sexo); alumnos[num_alumnos].sexo = toupper(sexo); }
while(alumnos[num_alumnos].sexo != 'M' && alumnos[num_alumnos].sexo !='F'); float prom = 0.0; int sum = 0;
for (int j=0; j<MAX_NOTAS; j++) { printf("Ingrese nota #%d: ",j+1); scanf("%d",&alumnos[num_alumnos].notas[j]); sum += alumnos[num_alumnos].notas[j];
} prom = (float) sum / MAX_NOTAS; printf("Promedio de este alumno: %.2f \n", prom);
}
int total = 0;
for (int i=0; i<num_alumnos; i++) { int suma = 0; float promedio = 0.0;
for (int j=0; j<MAX_NOTAS; j++) suma += alumnos[i].notas[j];
promedio = (float) suma / MAX_NOTAS; alumnos[i].promedio_final = promedio;
if (promedio >= 4.0 && promedio < 7.0 ) total++; }
printf("Total de alumnos con promedio >= 4 y promedio < 7 = "); printf("%d \n", total);
do { printf("Ingrese un nombre para mostrar datos: "); scanf("%s", nombre_a_buscar);
bool hay_coincidencia = false;
for(int i=0;i<MAX_ALUMNOS;i++){
if(strcmp(alumnos[i].nombre, nombre_a_buscar) == 0) { hay_coincidencia = true; printf("Nombre: %s \nSexo: %c \n", alumnos[i].nombre, alumnos[i].sexo); for(int j=0;j<MAX_NOTAS;j++) printf("Nota: #%d: %d \n", j+1, alumnos[i].notas[j]); printf("Promedio: %.2f \n", alumnos[i].promedio_final); } } if(!hay_coincidencia) printf("El nombre ingresado no se encuentra en la lista\n"); } while(true); return 0; }
|
|
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
Como ves pides un dato que es el sexo del alumno. Ahora viene cuándo debes hacer uso de este dato para mostrar solo el resultado de las alumnas.
|
|
|
En línea
|
|
|
|
arcanaer
Desconectado
Mensajes: 5
|
Hice un problema similar hace un tiempo, das el numero de cuenta de un alumno y este puede tener varias calificaciones, despues ordena las calificaciones mas altas y las imprime, es un programa un poco completo, te dejo el codigo para que lo cheques. #include <stdio.h> #include "stdafx.h" #include <windows.h>
void main(void) { int dat, i, j, k1, aux; int num[2000]; float cal[2000], aux1; float mayor = 0;
//printf("Dame el numero de datos: "); scanf_s("%i", &dat); int k[2000];
for (i = 0; i < dat; i++) { //printf("Dame el numero de cuenta numero %i: ", i+1); scanf_s("%i", &num[i]); //printf("Dame la calificacion numero %i: ", i+1); scanf_s("%f", &cal[i]);
}
for (i = 0;i<dat;i++) { for (j = 0;j<dat - 1;j++) { if (num[j] >= num[j + 1]) { aux = num[j]; num[j] = num[j + 1]; num[j + 1] = aux;
aux1 = cal[j]; cal[j] = cal[j + 1]; cal[j + 1] = aux1;
} } } //printf("Ordenados de manera Ascendente\n"); for (i = 0;i<dat;i++) { //printf("%i %f\n", num[i], cal[i]); } //printf("\n"); //printf("Ordenados de manera descendente\n"); for (i = dat - 1;i >= 0;i--) { //printf("%i %f\n", num[i], cal[i]); } for (i = 0;i<dat;i++) { k[i] = 0 ; for (j = 0;j<dat;j++) { if (num[i] == num[j]) { k[i]++; }
}
} //printf("\n"); i = 0; while (i<dat) { if (k[i] != 1) { //printf("El numero de cuenta %i se repite %i veces\n", num[i], k[i]); } else { //printf("El numero de cuenta %i solo se encuentra una vez\n", num[i]); }
i = i + k[i]; } //printf("\n"); k1 = 0; for (i = 0;i<dat;i++) { if (num[i] != num[i + 1]) { k1++; } } //Programa realizado por Carlos Valdes printf("%i\n", k1); i = 0; while (i<dat) { if (k[i] != 1) { for (j = i;j<k[i];j++) {
if (cal[j] >= mayor) { mayor = cal[j]; } else { mayor = mayor; } } } else { mayor = cal[i]; } //checa que aqui se imprimen solo una calificacion, si se repite solo mostrara la mas alta printf("%i %.2f\n", num[i], mayor); i = i + k[i]; } }
El programa puede tener un alumno repetido con varias calificciones distintas, las ordena y despues toma solo la calificacion mas alta de ese alumno y los imprime en orden de menor a mayor.
|
|
« Última modificación: 4 Noviembre 2016, 02:26 am por arcanaer »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
programa en vb (ordenar de mayor a menor)
Programación Visual Basic
|
jjam45
|
1
|
9,601
|
19 Febrero 2006, 18:36 pm
por jjam45
|
|
|
Ordenar número de mayor a menor
« 1 2 »
Programación Visual Basic
|
Nessito
|
14
|
16,353
|
19 Mayo 2007, 20:09 pm
por Nessito
|
|
|
ordenar de mayor a menor 5 numeros ingresados x el teclado!!!
ASM
|
XxArCaNgElxX
|
0
|
19,307
|
20 Mayo 2011, 21:19 pm
por XxArCaNgElxX
|
|
|
Menor fue obligado a destruir su Xbox por malas notas
« 1 2 »
Foro Libre
|
Br1ant
|
17
|
4,371
|
29 Mayo 2015, 23:03 pm
por scott_
|
|
|
Ordenar valores de menor a mayor en una LisBox
.NET (C#, VB.NET, ASP)
|
Usuario 202
|
5
|
9,005
|
16 Junio 2016, 23:42 pm
por Eleкtro
|
|