Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda Programando em C


Ajuda programando em c

Pergunta

#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 para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 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;
}
Editado por vangodp
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,9k
×
×
  • Criar Novo...