Advertisement
hmcristovao

Lista 07 - exercício 6

Jul 23rd, 2013
333
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.87 KB | None | 0 0
  1. // versão 4: modularizado (resposta completa do exercício 6 lista 07)
  2. #include <stdio.h>
  3. #include <string.h>
  4. #define MAX 10
  5.  
  6. struct TipoDado {
  7.    char nome[MAX];
  8.    int idade;
  9. };
  10.  
  11. // protótipos das funções
  12. void ordena(struct TipoDado dados[], char chave, int qtde);
  13. void exibe(struct TipoDado dados[], int qtde);
  14.  
  15. int main() {
  16.    struct TipoDado dados[] ={{"mateus",20},{"maria",25},{"marina",18},{"marcos",40}};
  17.  
  18.    int qtde = sizeof(dados)/sizeof(dados[0]);  // no gcc win: 64/16 = 4
  19.  
  20.    printf("Dados sem ordenacao:\n");
  21.    exibe(dados,qtde);
  22.  
  23.    ordena(dados,'n',qtde);  // ordena pelo nome
  24.    printf("\nDados ordenados pelo nome:\n");
  25.    exibe(dados, qtde);
  26.  
  27.    ordena(dados,'i',qtde);  // ordena pela idade
  28.    printf("\nDados ordenados pela idade:\n");
  29.    exibe(dados,qtde);
  30.  
  31.    return 0;
  32. }
  33.  
  34. void ordena(struct TipoDado dados[], char chave, int qtde) {
  35.    int trocou, i;
  36.    struct TipoDado aux;
  37.    // ordena pelo nome
  38.    if(chave=='n') {
  39.        trocou=1;
  40.        while(trocou) {
  41.           trocou = 0;
  42.           for(i=0; i<qtde-1; i++) {
  43.              if(strcmp(dados[i].nome,dados[i+1].nome)>0) {
  44.                 aux = dados[i];
  45.                 dados[i] = dados[i+1];
  46.                 dados[i+1] = aux;
  47.                 trocou = 1;
  48.              }
  49.           }
  50.        }
  51.    }
  52.    else {
  53.        // ordena pela idade
  54.        trocou=1;
  55.        while(trocou) {
  56.           trocou = 0;
  57.           for(i=0; i<qtde-1; i++) {
  58.              if(dados[i].idade > dados[i+1].idade) {
  59.                 aux = dados[i];
  60.                 dados[i] = dados[i+1];
  61.                 dados[i+1] = aux;
  62.                 trocou = 1;
  63.              }
  64.           }
  65.        }
  66.    }
  67.    return;
  68. }
  69.  
  70. void exibe(struct TipoDado dados[], int qtde) {
  71.    int i;
  72.    for(i=0; i<qtde; i++)
  73.       printf("\n%d - %s \t %d",i+1,dados[i].nome,dados[i].idade);
  74.  
  75.    printf("\n");
  76.    return;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement