Criar um programa utilizando a linguagem de programação C/C++ que seja capaz de armazenar, em uma matriz 3x20, o peso (linha 0), a altura (linha 1) e a idade (linha 2) de 20 pessoas. Após armazenado, o programa oferecer ao usuário a possibilidade de ordenar a matriz pela idade, pela altura e pelo peso. Uma vez que a forma de ordenação seja selecionada, o programa deverá exibir a matriz ordenada.
/*
* File: main.cpp
* Author: joao
*
* Created on 20 de junho de 2017, 15:35
* criar um progrma utilizando a linguagem de programaçao c/c++ que seja capaz de armazenar
* em uma matriz 3x20 o peso(linha 0), a altura (linha 1) e idade (linha 2)
* de 20 pessoas. apos armazenado o programa deve oferecer ao usuario a
* possibilidade de ordenar a matriz pela idade pela altura e pelo peso
* uma vez que a forma de ordenaçao seja selecionada, o programa deve exibir a matriz ordenada.
*/
#include <stdlib.h>
#include <stdio.h>
#include<math.h>
using namespace std;
void preencheMatriz(int mat[20][3], int m, int n) {
int randon;
for (int i = 0; i < m; i++) {
for (int k = 0; k < n; k++) {
switch (k) {
case 0:
randon = (rand() % ((150 - 1) + 1)) + 1;
break;
case 1:
randon = (rand() % ((200 - 1) + 1)) + 1;
break;
case 2:
randon = (rand() % ((99 - 1) + 1)) + 1;
break;
}
mat[i][k] = randon;
}
}
}
void exibeMatriz(int mat[20][3], int m, int n) {
printf("\nPeso - Altura - Idade\n");
for (int i = 0; i < m; i++) {
printf("\n");
for (int j = 0; j < n; j++) {
printf("[%d] ", mat[i][j]);
}
}
}
void gnomeSort(int vet[20][3], int m, int n, int posChave) {
int i = 1, j = 2, aux;
while (i < m) {
if (vet[i - 1][posChave] <= vet[i][posChave]) {
i = j;
j++;
} else {//copia do vetor na posição i(linha) em l (colunas)
for (int l = 0; l < n; l++) {
aux = vet[i][l];
vet[i][l] = vet[i - 1][l];
vet[i - 1][l] = aux;
}
i--;
if (i == 0) {
i = j;
j++;
}
}
}
}
int main(int argc, char** argv) {
int cont = 0;
int matriz[20][3];
preencheMatriz(matriz, 20, 3);
exibeMatriz(matriz, 20, 3);
for (int i = 0; i < 3; i++) {
gnomeSort(matriz, 20, 3, i);
exibeMatriz(matriz, 20, 3);
}
}
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
#define QTDPESSOA 3
#define NUMLINHAS 3
//protótipos
void carregar(float pes[][QTDPESSOA]);
void mostrar(float pes[][QTDPESSOA]);
void ordenar(float pes[][QTDPESSOA], int );
int menu();
int main()
{
int op = 1, c = 0;
float pes[NUMLINHAS][QTDPESSOA];
// inserir dados e testar a ordenação
carregar(pes);
// a opção 3 do menu sai do laço de repetição
//então repetirá o menu a cada opção do usuário
while (op != 3) {
op = menu();
if ((op >= 0) && (op < 3))
ordenar(pes, op);
mostrar(pes);
}// fim while
return 0;
}/*fim main( )*/
int menu() {
int c = 0, op = 0;
printf("0 - Ordenar por PESO: \n");
printf("1 - Ordenar por ALTURA: \n");
printf("2 - Ordenar por IDADE: \n");
printf("3 - SAIR: \n");
scanf_s("%d", &op);
while ((c = getchar()) != '\n' && c != EOF) {}
return(op);
}/*fim menu( )*/
void carregar(float pes[][QTDPESSOA]) {
int c = 0;
for (int i = 0; i < QTDPESSOA; i++)
{
printf("Informe o PESO %d: ", i + 1);
scanf_s("%f", &pes[0][i]);
while ((c = getchar()) != '\n' && c != EOF) {}
printf("Informe a ALTURA %d: ", i + 1);
scanf_s("%f", &pes[1][i]);
while ((c = getchar()) != '\n' && c != EOF) {}
printf("Informe a IDADE %d: ", i + 1);
scanf_s("%f", &pes[2][i]);
while ((c = getchar()) != '\n' && c != EOF) {}
printf("\n");
}
}/*fim void carregar( )*/
void mostrar(float pes[][QTDPESSOA]){
for (int i = 0; i < QTDPESSOA; i++)
{
printf("Pessoa %d, PESO: %0.2f\n", i, pes[0][i]);
printf("Pessoa %d, ALTURA: %0.2f\n", i, pes[1][i]);
printf("Pessoa %d, IDADE: %0.2f\n", i, pes[2][i]);
printf("\n");
}
system("Pause");
}/*fim void mostrar()*/
void ordenar(float pes[][QTDPESSOA], int op){
int y, flag = 1;
float aux;
while (flag)
{
flag = 0;
for (int y = 0; y < QTDPESSOA - 1; y++)
if (pes[op][y] > pes[op][y + 1])
{
aux = pes[0][y];
pes[0][y] = pes[0][y + 1];
pes[0][y + 1] = aux;
aux = pes[1][y];
pes[1][y] = pes[1][y + 1];
pes[1][y + 1] = aux;
aux = pes[2][y];
pes[2][y] = pes[2][y + 1];
pes[2][y + 1] = aux;
flag = 1;
}
}/*fim while()*/
}/*fim void ordenar( )*/
Inicialmente devemos criar a matriz que será utilizada e definir as variáveis de controle utilizadas:
#include <stdio.h>
int main()
{
int matriz[3][20];
int i, j, ordem, aux, k;
Com isso devemos preencher a matriz com os dados necessários, onde i percorre as linhas e j as colunas. Assim:
for(i=0;i<3;i++){
for(j=0;j<20;j++){
printf("Digite o valor da matriz[%i][%i]",i,j);
scanf("%i",&matriz[i][j]);
}
}
Agora o usuário precisa definir qual o critério de ordenação. Com isso exibiremos as opções e aguardamos o comando.
printf(" Qual a ordenação?");
printf(" 1-Idade 2-altura 3-peso");
scanf("%i",&ordem);
Com a opção definida podemos usar o comando switch para verificar o critério de ordenação e assim realiza-lo
switch(ordem){
Caso o critério for a idade, nos percorremos a linha 0, comparando todos os valores, caso o valor da matriz na coluna i seja menor que na coluna j, o maior valor será passado para direita em todas as linhas representadas por k.
case 1:
for ( i = 0; i < 20; i++)
{
for (j = 0; j < 20; j++)
{
if (matriz[0][i] < matriz[0][j])
{
for (k = 0; k < 3; k++){
aux = matriz[k][i];
matriz[k][i] = matriz[k][j];
matriz[k][j] = aux;
}
}
}
}
break;
As demais opções seguem o mesmo raciocínio, a mudança está apenas na linha que os valores são comparados. Assim para a opção idade:
case 2:
for ( i = 0; i < 20; i++)
{
for (j = 0; j < 20; j++)
{
if (matriz[1][i] < matriz[1][j])//mudança
{
for (k = 0; k < 3; k++){
aux = matriz[k][i];
matriz[k][i] = matriz[k][j];
matriz[k][j] = aux;
}
}
}
}
break;
Por fim, a terceira opção e o default que apresenta a mensagem caso a opção escolhida seja inválida.
case 3:
for ( i = 0; i < 20; i++)
{
for (j = 0; j < 20; j++)
{
if (matriz[2][i] < matriz[2][j])
{
for (k = 0; k < 3; k++){
aux = matriz[k][i];
matriz[k][i] = matriz[k][j];
matriz[k][j] = aux;
}
}
}
}
break;
default:
printf("Opção invalida");
}
Agora devemos apenas apresentar a matriz ordenada, com isso realizamos uma quebra de linha quando i for acrescido, para o formato da matriz ser preservado.
for ( i = 0; i < 3; i++)
{
printf(" ");
for (j = 0; j < 20; j++){
printf(" %i ",matriz[i][j]);
}
}
return 0;
}
Para escrever sua resposta aqui, entre ou crie uma conta.
Compartilhar