Ajuda programando em c Posted April 25, 2015 Report Share Posted April 25, 2015 #include<stdio.h> void adiciona_elementos (int v[]){/*int v[] deve valer tanto para os casos em que adicionamos ao A quanto ao B*/ int i, e, adiciona=0, j=0, N, x; scanf("%d", &N); for(i=0;i<N;i++){ scanf("%d", &x); adiciona=1; for(e=0;e<1000;e++){ if(v[e]==x){ adiciona=0; break; } } if((adiciona==1)&&(v[j]==-1)){ v[j]=x; j++; } } } void remove_elementos (int v[]){/*a mesma coisa sobre o int v[]*/ int i, N, x, e; scanf("%d", &N); for(i=0;i<N;i++){ scanf("%d", &x); for(e=0;e<1000;e++){ if(v[e]==x) v[e]=-1; } } } int BubbleSort (int v[], int tam){ int i, j, aux; for (i=tam-1; i>0; i--){ for (j=0; j<i; j++){ if (v[j] > v[j+i]){ aux = v[j]; v[j] = v[j+1]; v[j+1] = aux; } } } return 0; } void imprime_elementos (int v[]){ int i, j, A[1000], B[1000]; BubbleSort(A, 1000);/*organize os elementos do vetor A*/ BubbleSort(B[j], 1000);/*e também do vetor B*/ for(i=0;i<1000;i++){ if(v!=-1)/*só imprima os elemntos que forem diferente de -1*/ printf("%d\n", v); } } void igualdade(int v[]){ int i, A[1000], B[1000]; BubbleSort(v, 1000);/*antes de comparar os dois conjuntos, ordene os mesmos para que identifique logo se são iguais ou diferentes*/ for(i=0;i<1000;i++) if (A == B) printf("Conjuntos iguais.\n"); else printf("Conjuntos diferentes.\n"); } int main (){ int A[1000],B[1000], i, j; char opcao, conjunto; A=-1; B[j]=-1; scanf(" %c", &opcao); scanf(" %c", &conjunto); switch(conjunto){ case 'A':/*no caso da ação ser para o conjunto A*/ A; break; case 'B':/*se a ação for para o conjunto B*/ B[j]; break; default: printf("Comando invalido. Entre com outro comando, ou 'F' para terminar."); } do{ switch (opcao){ case 'A': adiciona_elementos(v[]);/*adicione elementos em v[] que pode ser tanto v[A] quanto v*/ break; case 'R': remove_elementos(v[]); break; case 'p': imprime_elementos(v[]); break; case 'e': igualdade(v[]); break; case 'F': case 'f': break; default: printf("Comando invalido. Entre com outro comando, ou 'F' para terminar."); } }while((opcao!='F')&&(opcao!='f')); return 0; } não consigo compilar. Alguém me ajuda? O que está errado? Quote Link to comment Share on other sites More sharing options...
0 vangodp Posted April 25, 2015 Report Share Posted April 25, 2015 (edited) você esta fazendo muito mal nessa parte: int A[1000], B[1000], i, j; A = -1; B[j] = -1; Quando você guarda -1 na posição i de A e posiçao j de B nessa hora você não sabe que valor podem conter tanto i como j, i pode ser 500000 e fazer o seu programa sair de rango já que você só declarou A como 1000 inteiros. Para solventar esse problema de un valor inicial a i, algo assim: int A[1000], B[1000], i=0, j=0; Quando você criar uma funçao que espera um array de esta forma: void imprime_elementos ( int v[] ), tenha em conta que int v[] tem o comportamento de um ponteiro, então você deve enviar a ele algo como v e não v. enviar v não é ilegal porem a função espera um ponteiro a inteiro que nada más é que a primeira posição de um array, más podemos passar a 2º, 3º ou a que quiser, mas tenha isso claro. As linhas 91, 94, 97 e 100 dizem que v não foi declarado, por tanto você esta passando um array a uma função e ele não foi declarado dentro de main, e si fosse pouco você esta passando ele errado. Lembre-se do que eu falei no apartado anterior sobre si uma função espera int v[], você pode enviar A /*aponta o inicio do array*/ ou A[3] por exemplo, mas dessa ultima forma vai dar avisos, porque não esta pensado para usar desta forma. Esse código esta arrumado para que compile corretamente. Resta você ir solucionando o as questões que se propõe. #include<stdio.h> void adiciona_elementos ( int v[] ) { /*int v[] deve valer tanto para os casos em que adicionamos ao A quanto ao B*/ int i=0, e=0, adiciona = 0, j = 0, N=0, x=0; scanf ( "%d", &N ); for ( i = 0; i < N; i++ ) { scanf ( "%d", &x ); adiciona = 1; for ( e = 0; e < 1000; e++ ) { if ( v[e] == x ) { adiciona = 0; break; } } if ( ( adiciona == 1 ) && ( v[j] == -1 ) ) { v[j] = x; j++; } } } void remove_elementos ( int v[] ) { /*a mesma coisa sobre o int v[]*/ int i=0, N=0, x=0, e=0; scanf ( "%d", &N ); for ( i = 0; i < N; i++ ) { scanf ( "%d", &x ); for ( e = 0; e < 1000; e++ ) { if ( v[e] == x ) v[e] = -1; } } } int BubbleSort ( int v[], int tam ) { int i=0, j=0, aux=0; for ( i = tam - 1; i > 0; i-- ) { for ( j = 0; j < i; j++ ) { if ( v[j] > v[j + i] ) { aux = v[j]; v[j] = v[j + 1]; v[j + 1] = aux; } } } return 0; } void imprime_elementos ( int v[] ) { int i=0, j=0, A[1000], B[1000]; //###j nao se esta usando BubbleSort ( A, 1000 ); /*organize os elementos do vetor A*/ BubbleSort ( B, 1000 ); /*e também do vetor B*/ for ( i = 0; i < 1000; i++ ) { if ( v[i] != -1 ) /*só imprima os elemntos que forem diferente de -1*/ printf ( "%d\n", v[i] ); } } void igualdade ( int v[] ) { int i=0, A[1000], B[1000]; //aqui nao faz falta i=0 mas ponho mesmo assim ;) BubbleSort ( v, 1000 ); /*antes de comparar os dois conjuntos, ordene os mesmos para que identifique logo se são iguais ou diferentes*/ for ( i = 0; i < 1000; i++ ) if ( A[i] == B[i] ) printf ( "Conjuntos iguais.\n" ); else printf ( "Conjuntos diferentes.\n" ); } int main () { //mostra aviso que A e B nao se usam int A[1000]={0}, B[1000]={0}, i=0, j=0; // Com A[1000]={0} damos a todo o array um valor nulo. igual que j e i char opcao, conjunto; A[i] = -1; B[j] = -1; scanf ( " %c", &opcao ); scanf ( " %c", &conjunto ); switch ( conjunto ) { case 'A':/*no caso da ação ser para o conjunto A*/ // A[i]; //<-para que serve isso??? Si nao estiver pronto deixe assim comentado para evitar erros break; case 'B':/*se a ação for para o conjunto B*/ // B[j]; //<-para que serve isso??? break; default: printf ( "Comando invalido. Entre com outro comando, ou 'F' para terminar." ); } do { switch ( opcao ) { case 'A': // adiciona_elementos ( v[] ); /*adicione elementos em v[] que pode ser tanto v[A] quanto v[B]*/ break; case 'R': // remove_elementos ( v[] ); break; case 'p': // imprime_elementos ( v[] ); break; case 'e': // igualdade ( v[] ); break; case 'F': case 'f': break; default: printf ( "Comando invalido. Entre com outro comando, ou 'F' para terminar." ); } } while ( ( opcao != 'F' ) && ( opcao != 'f' ) ); return 0; } Edited April 25, 2015 by vangodp Quote Link to comment Share on other sites More sharing options...
Question
Ajuda programando em c
Link to comment
Share on other sites
1 answer to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.