Cuando se tienen vectores y matrices paralelas y se ordena uno de ellos hay que tener la precauciĆ³n de intercambiar los elementos de los vectores o matrices paralelas.
Problema 1:
Confeccionar un programa que permita cargar los nombres de 5 alumnos y sus notas respectivas. Luego ordenar las notas de mayor a menor. Imprimir las notas y los nombres de los alumnos.
Programa: programa127.c
En la funciĆ³n main definimos la matriz y el vector:
int main()
{
char nombres[5][40];
int notas[5];
La funciĆ³n cargar recibe la matriz y el vector para proceder a su carga por teclado:
void cargar(char nombres[5][40],int notas[5])
{
int f;
for(f=0;f<5;f++)
{
printf("Ingrese el nombre del alumno:");
gets(nombres[f]);
printf("Ingrese la nota del alumno:");
scanf("%i",Ā¬as[f]);
fflush(stdin);
}
}
En el proceso de ordenamiento dentro de los dos for verificamos si debemos intercambiar los elementos del vector notas:
for(k=0;k<4;k++)
{
for(f=0;f<4-k;f++)
{
if (notas[f]<notas[f+1])
{
En el caso que la nota de la posiciĆ³n 'f' sea menor a de la posiciĆ³n siguiente 'f+1' procedemos a intercambiar las notas:
auxnota=notas[f];
notas[f]=notas[f + 1];
notas[f+1]=auxnota;
y simultĆ”nemamente procedemos a intercambiar los elementos de la matriz paralela (con esto logramos que el vector continĆŗen siendo paralelo a la matriz):
strcpy(auxnombre, nombres[f]);
strcpy(nombres[f], nombres[f+1]);
strcpy(nombres[f+1],auxnombre);
Como vemos utilizamos dos auxiliares distintos porque los elementos de la matriz y el vector son de distinto tipo (int y cadena de caracteres)
Si deseamos ordenar alfabĆ©ticamente la condiciĆ³n dependerĆ” de la matriz nombres.
Problema propuesto
- Cargar en una matriz los nombres de 5 paĆses y en un vector paralelo la cantidad de habitantes del mismo. Ordenar alfabĆ©ticamente e imprimir los resultados. Por Ćŗltimo ordenar con respecto a la cantidad de habitantes (de mayor a menor) e imprimir nuevamente.
programa128.c
#include<stdio.h>
#include<conio.h>
#include<string.h>
void cargar(char paises[5][40],int habitantes[5])
{
int f;
printf("Carga de paises y habitantes.\n");
for(f=0;f<5;f++)
{
printf("Ingrese el nombre del pais:");
gets(paises[f]);
printf("Ingrese la cantidad de habitantes:");
scanf("%i",&habitantes[f]);
fflush(stdin);
}
}
void ordenarPorNombres(char paises[5][40],int habitantes[5])
{
int k,f;
char auxpais[40];
int auxhabitante;
for (k=0;k<4;k++)
{
for(f=0;f<4-k;f++)
{
if (strcmp(paises[f],paises[f+1])>0)
{
strcpy(auxpais,paises[f]);
strcpy(paises[f],paises[f+1]);
strcpy(paises[f+1],auxpais);
auxhabitante=habitantes[f];
habitantes[f]=habitantes[f+1];
habitantes[f+1]=auxhabitante;
}
}
}
}
void ordenarPorHabitantes(char paises[5][40],int habitantes[5])
{
int k,f;
char auxpais[40];
int auxhabitante;
for (k=0;k<4;k++)
{
for(f=0;f<4-k;f++)
{
if (habitantes[f]<habitantes[f+1])
{
strcpy(auxpais,paises[f]);
strcpy(paises[f],paises[f+1]);
strcpy(paises[f+1],auxpais);
auxhabitante=habitantes[f];
habitantes[f]=habitantes[f+1];
habitantes[f+1]=auxhabitante;
}
}
}
}
void imprimir(char paises[5][40],int habitantes[5])
{
int f;
for(f=0;f<5;f++)
{
printf("%s - %i \n",paises[f],habitantes[f]);
}
}
int main()
{
char paises[5][40];
int habitantes[5];
cargar(paises,habitantes);
ordenarPorNombres(paises,habitantes);
printf("Ordenados alfabeticamente\n");
imprimir(paises,habitantes);
ordenarPorHabitantes(paises,habitantes);
printf("Ordenados por cantidad de habitantes\n");
imprimir(paises,habitantes);
getch();
return 0;
}
No hay comentarios:
Publicar un comentario