alphasil Posted June 16, 2012 at 01:42 PM Report Share #463265 Posted June 16, 2012 at 01:42 PM Oi ppl; De volta as minhas perguntas de principiante... Tenho uma função que ordena um vetor de 4 posições Quero é agora chamar esta função no main, isso faço bem, o que quero é que nesta função o utilizador ordene os números e que depois haja comparação entre o vetor ordenado e aquele que o utilizador prrencher, se for igual faz return, o que tenho é isto int main(int num[]) { int vet[3], i; system("cls"); vetor(); //chama a função vetor que onde está o bubblesort printf("\nOrdene os 4 primeiros numeros de forma ascendente\n"); for (i=0; i<=3; i++) { printf("Ordene estes numeros "); scanf("%d", &vet[i]); } if(vet[i]==vetor(num[i])) //aqui é onde quero comparar { printf("Acertou"); } } int vetor() { int num[TAM]; int i; int n=4; LeVetor(num,n); for(i=0;i<n;i++) printf("%d\n", num[i]); printf("\n"); bubbleSort(num, n); printf ("\n*=============================================================================*\n"); printf ("| >>>>Vetor ordenado<<<< |\n"); printf ("*=============================================================================*\n"); printf (" \n"); for(i=0; i<n; i++) { // printf("%d\n",num[i]); } return 0; } Sempre que uso a função main, depois de inserir números estoira (seg fault) Que se passa com isso? gmc11 Link to comment Share on other sites More sharing options...
pmg Posted June 16, 2012 at 01:47 PM Report Share #463268 Posted June 16, 2012 at 01:47 PM O teu vetor int vet[3] tem espaco para tres elementos. No entanto tu pretendes escrever no quarto elemento desse array for (i=0; i<=3; i++) { printf("Ordene estes numeros "); scanf("%d", &vet[i]); } Repara que a variavel i pode ter os valores 0, 1, 2, ou 3 ... para respectivamente o primeiro, o segundo, o terceiro, e o quarto elemento para o scanf. Nao facas isso. Se queres 4 elementos, declara o array como podendo ter 4 elementos! What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
alphasil Posted June 16, 2012 at 02:09 PM Author Report Share #463277 Posted June 16, 2012 at 02:09 PM Oi PMG Obrigado, alterei mas continua a dar-me seg fault nesta linha if(vet[i]==vetor(num[i])) Tentei com i<4, ou <=4....dá sempre seg fault gmc11 Link to comment Share on other sites More sharing options...
pmg Posted June 16, 2012 at 02:14 PM Report Share #463279 Posted June 16, 2012 at 02:14 PM Depois deste ciclo for for (i=0; i<=3; i++) { printf("Ordene estes numeros "); scanf("%d", &vet[i]); } a variavel i tem o valor 4. O teu programa pretende usar esse valor na instrucao if(vet[i]==vetor(num[i])) //aqui é onde quero comparar mas nem vet nem num tem 5 elementos!! What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
alphasil Posted June 16, 2012 at 02:36 PM Author Report Share #463284 Posted June 16, 2012 at 02:36 PM Sim estou a ver Mas se na função de cima tenho n=4, partindo do 0 tenho 0(1) , 1(2) 2(3), 3(4) Executando o bubble dá-me 4 números, portanto fiz a mesma coisa em baixo, um vetor que me dê 4 posições [3], partindo do [0][1][2][3] Não estou a perceber nada... 😞 Estive a ver mais uns aspetos e dá-me uns warnings warning: first argument of 'main' should be 'int' [-Wmain]| warning: 'main' takes only zero or two arguments [-Wmain]| Ou seja no protótipo do main quer um int e quer 2 argumentos, sinceramente estou perdido gmc11 Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted June 16, 2012 at 02:44 PM Report Share #463289 Posted June 16, 2012 at 02:44 PM epa ... tantos erros !!! e não estou a falar do teu ultimo post, estou a falar mesmo do primeiro ... o meu conselho é : faz um "hello world", compila e se der erros, corriges ... só depois deverias continuar na programação só esta linha faz revirar os olhos de muita gente: int main(int num[]) IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
alphasil Posted June 16, 2012 at 02:49 PM Author Report Share #463293 Posted June 16, 2012 at 02:49 PM (edited) É a ti e a mim mesmo, estava a falar com um colega que me disse que era isso e achei muito estranho...mas enfim deixei andar. A funções funcionam, as originais são estas: int LeVetor(int num[], int n) { int i, x, tmp; srand(time(NULL)); // Inicia o array for(i = 0;i < TAM;++i) num[i] = i; // Embaralha o array for (i = TAM; i > 1;) { x = rand() % i; --i; tmp = num[x]; num[x] = num[i]; num[i] = tmp; } for(i = 0;i<TAM;++i) printf("%d\n", num[i]); return 0; } int bubbleSort(int v[], int n) { int i, j, temp; for (i = n; i > 0; i--) for (j = 1; j < i; j++) if(v[j-1] > v[j]) { temp = v[j-1]; v[j-1] = v[j]; v[j] = temp; } return 0; } int vetorOrdenado() { int num[TAM]; int i; int n=4; LeVetor(num,n); printf ("\n*=============================================================================*\n"); printf ("| >>>>Numeros Selecionados<<<< |\n"); printf ("*=============================================================================*\n"); printf (" \n"); // Iteração através do array. Os números já estão random for(i=0;i<n;i++) printf("%d\n", num[i]); printf("\n"); bubbleSort(num, n); printf ("\n*=============================================================================*\n"); printf ("| >>>>Vetor ordenado<<<< |\n"); printf ("*=============================================================================*\n"); printf (" \n"); for(i=0; i<n; i++) { printf("%d\n",num[i]); } return 0; } Podem ser simplificadas, acredito, mas funcionam O que me está a baralhar é como chamar o vetor para a função main para poder comparar com a introdução do user. Edited June 16, 2012 at 02:50 PM by alphasil gmc11 Link to comment Share on other sites More sharing options...
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