Buscar

Aguém teria a reposta desta questão?

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.

💡 4 Respostas

User badge image

Joao Andre MArtins Dias

/*
 * 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);
    }

}

2
Dislike0
User badge image

Maria Helena Silva

#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( )*/

0
Dislike0
User badge image

RD Resoluções

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;

}

0
Dislike0

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis


✏️ Responder

SetasNegritoItálicoSublinhadoTachadoCitaçãoCódigoLista numeradaLista com marcadoresSubscritoSobrescritoDiminuir recuoAumentar recuoCor da fonteCor de fundoAlinhamentoLimparInserir linkImagemFórmula

Para escrever sua resposta aqui, entre ou crie uma conta.

User badge image

Outros materiais