Jump to content
Fórum Script Brasil
  • 0

Ajuda Programando em C


Ajuda programando em c

Question

#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?
Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

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 , 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 by vangodp
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...