polska Posted August 2, 2013 at 02:48 AM Report #520660 Posted August 2, 2013 at 02:48 AM (edited) Boas pessoal, é possível usar a função qsort para ordenar matrizes? Se sim, podem-me ajudar com a função de comparação do qsort? Edited August 2, 2013 at 09:38 PM by brunoais titulo melhorado. Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.
HappyHippyHippo Posted August 2, 2013 at 07:41 AM Report #520662 Posted August 2, 2013 at 07:41 AM o que é uma matriz ordenada ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
polska Posted August 2, 2013 at 12:36 PM Author Report #520677 Posted August 2, 2013 at 12:36 PM o que é uma matriz ordenada ? Tens razão.. Quero ordenar uma matriz em ordem à primeira posição de cada elemento .. Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.
HappyHippyHippo Posted August 2, 2013 at 01:02 PM Report #520679 Posted August 2, 2013 at 01:02 PM o que é "primeira posição de cada elemento" ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
polska Posted August 2, 2013 at 01:29 PM Author Report #520682 Posted August 2, 2013 at 01:29 PM (edited) O que eu quero dizer, assim de uma forma mais simples, primeira coluna de cada linha da matriz... Edited August 2, 2013 at 01:41 PM by polska Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.
HappyHippyHippo Posted August 2, 2013 at 01:59 PM Report #520686 Posted August 2, 2013 at 01:59 PM #include <stdlib.h> #include <stdio.h> #include <string.h> #include <time.h> #define NROWS 3 #define NCOLUMNS 3 void populate(int matrix[][NCOLUMNS]) { int i, j; // iniciar o gerador de números pseudo-aleatórios srand(time(NULL)); // ciclo e linhas for (i = 0; i < NROWS; i++) { // ciclo das colunas for (j = 0; j < NCOLUMNS; j++) { // atribuir um número aleatório matrix[i][j] = rand() % 1000; } } } void output(int matrix[][NCOLUMNS]) { int i, j; // imprimir a matrix no stdout) printf("MATRIX : \n"); for (i = 0; i < NROWS; i++) { for (j = 0; j < NCOLUMNS; j++) printf("%3d ", matrix[i][j]); printf("\n"); } printf("\n"); } int my_compare(const void * elem1, const void * elem2) { // retornar a comparação dos primeiros elementos de cada linha return *(int *)elem1 - *(int *)elem2; } int main(void) { // isto só funciona se a matrix estiver codificada desta maneira : int matrix[NROWS][NCOLUMNS]; // se for ao contrário ([columna][matrix]) já não possivel fazer com qsort // pupolar a matrix com dados aleatórios populate(matrix); output(matrix); // ordenar as linhas da matrix pelo primeiro elemento de cada linha qsort(matrix, NROWS, sizeof(int) * NCOLUMNS, my_compare); output(matrix); return 0; } 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
polska Posted August 2, 2013 at 02:18 PM Author Report #520693 Posted August 2, 2013 at 02:18 PM Obrigado Happy, mas já agora, se eu quisesse ordenar em ordem da segunda coluna, na função compare bastava incrementar os apontadores e devolver a subtracção certo? Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.
HappyHippyHippo Posted August 2, 2013 at 02:23 PM Report #520694 Posted August 2, 2013 at 02:23 PM (edited) sim, mas lembra-te que estas a ordenar a matriz inteira para ordenar somente da linha n à n+m terias de alterar a chamada do qsort para : int n, m; qsort(&matrix[n], // a partir da linha "n" m, // "m" linhas sizeof(int) * NCOLUMNS, // tamanho de cada linha my_compare); // função de comparação ---- ps : cuidado com o "incremento" !! faz isso como deve ser 😄 Edited August 2, 2013 at 02:30 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
polska Posted August 2, 2013 at 02:38 PM Author Report #520697 Posted August 2, 2013 at 02:38 PM sim, mas lembra-te que estas a ordenar a matriz inteira para ordenar somente da linha n à n+m terias de alterar a chamada do qsort para : int n, m; qsort(&matrix[n], // a partir da linha "n" m, // "m" linhas sizeof(int) * NCOLUMNS, // tamanho de cada linha my_compare); // função de comparação Sim, eu sei 👍 ps : cuidado com o "incremento" !! faz isso como deve ser 😄 No problem 😄 Obrigado pela ajuda ! Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now