Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Em C, ficaria mais fácil trabalhar com structs, mas dá para trabalhar com vetores também, mas é mais rudimentar.
- Cabe observar que não se copia vetores usando '=', é preciso uma função para isso ('strcpy')
- Também não dá para comparar com '<' ou '==' ou '>', é preciso usar uma função 'strcmp' para isso.
- O exemplo abaixo usa um BUBBLE SORT simples para ordenar.
- Os vetores de nome e matricula precisam ser mexidos simultaneamente, senão não ficam sincronizados.
- Estude a rotina abaixo, pode ser que ajude.*/
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- int main() {
- // variaveis gerais
- char nome[5][15]; // vetor de vetores para acomodar os nomes (cinco nomes)
- int matr[5]; // vetor de inteiros para matricula
- int op = 0;
- // Ler nomes e matriculas
- for (int i=0; i<5; i++) {
- printf("\n Digite o nome %d: ", i + 1);
- scanf("%s", &nome[i]);
- printf("\n Digite a matr %d: ", i + 1);
- scanf("%d", &matr[i]);
- }
- // Mostrar dados lidos
- printf("\n\n Dados lidos: \n");
- for (int i=0; i<5; i++) {
- printf("\n Nome %d: %s, matricula: %d", i + 1, nome[i], matr[i]);
- }
- // Ordenação
- // Escolhe a campo de ordenação
- while (op != 1 && op != 2) { // validação da entrada
- printf("\n\n Ordenar por nome (digite 1) ou por matricula (digite 2): ");
- scanf("%d",&op);
- }
- // variaveis para o bubble sort
- int k, j, auxi;
- char auxc[15];
- if (op == 1) { // ordena por nome
- // bubble sort usando o nome como chave
- for (k = 1; k < 5; k++) {
- for (j = 0; j < 5 - k; j++) {
- if ( strcmp( nome[j], nome[j + 1]) > 0) { // esta linha que define a ordenação
- // ajusta nome
- strcpy( auxc, nome[j] );
- strcpy( nome[j], nome[j + 1] );
- strcpy( nome[j + 1], auxc );
- // ajusta matricula
- auxi = matr[j];
- matr[j] = matr[j+1];
- matr[j+1] = auxi;
- }
- }
- }
- }
- else { // ordena por matricula
- // Bubble sort usando a matricula como chave
- for (k = 1; k < 5; k++) {
- for (j = 0; j < 5 - k; j++) {
- if ( matr[j] > matr[j+1]) { // define a ordenação
- // ajusta nomes
- strcpy( auxc, nome[j] );
- strcpy( nome[j], nome[j + 1] );
- strcpy( nome[j + 1], auxc );
- // ajusta matricula
- auxi = matr[j];
- matr[j] = matr[j+1];
- matr[j+1] = auxi;
- }
- }
- }
- }
- // Mostrar dados ordenador
- printf("\n\n Dados ordenados: \n");
- for (int i=0; i<5; i++) {
- printf("\n Nome %d: %s, matricula: %d", i + 1, nome[i], matr[i]);
- }
- }
- for (int i=0; i<5; i++) {
- printf("\n Nome %d: %s, matricula: %d", i + 1, nome[i], matr[i]);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement