Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marcela Dutra

Exercício - arrays

Recommended Posts

Preciso de Ajuda nesse problema

 

Faça uma função que receba um vetor X de 30 elementos inteiros como parâmetro e retorne dois vetores A e B. O vetor A deve conter os elementos de X que sejam maiores do que zero e o vetor B, os elementos menores ou iguais a zero.

 

Não consigo retornar os vetores.

 

 

Meu Codigo

 

#include <stdio.h>

#include <stdlib.h>
int doisVetores (int vetorAB[]){
int i, posicaoA=0, posicaoB=0;
int vetorA [30], vetorB[30];
for (i=0;i<30;i++){
if (vetorAB>0){
vetorA[posicaoA]=vetorAB;
posicaoA++;
}
else{
vetorB[posicaoB]=vetorAB;
posicaoB++;
}
}
return vetorA[30],vetorB[30];
}
int main (){
int i, vetorAB[30], vetorA[30], vetorB[30];
for (i=0;i<30;i++){
printf ("Digite o numero %d: ", i+1);
scanf ("%d", &vetorAB);
}
vetorA,vetorB=doisVetores(vetorAB);
for (i=0;i<30;i++){
printf ("Vetor A: %d \n", vetorA);
}
for (i=0;i<30;i++){
printf ("Vetor B: %d \n", vetorB);
}
return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá. HÁ vários modos de fazer isto, Declarar vetor A e B como global ou passa-los como referencia em sua função.
Como o exercício pede para retornar, talvez vc poderia criar um vetor bidimensional e retorna-lo.

exemplo:

 

. . .
 
int bidimensional[2] =    {{3,4,5,6,7,9}, {-1, 0 ,-2}};
 
return bidimensional;

Depois era só pegar o resultado; :)

Como é exercício (suponho que de faculdade) não irei colocar o código pronto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ta, irei te dar um exemplo de como vc poderá fazer;

 

 

int doisVetores (int vetorAB[], *vA, *vB){
 
    int i, posicaoA=0, posicaoB=0;
 
    for (i=0;i<30;i++){
        if (vetorAB[i]>0){
            vA[posicaoA]=vetorAB[i];
            posicaoA++;
 
        }
        else{
            vB[posicaoB]=vetorAB[i];
            posicaoB++;
 
        }
 
    }
}
int main(){
 
int vetor[30];
int vetorA[30], vetorB[30];
 
for (i=0;i<30;i++){
        printf ("Digite o numero %d: ", i+1);
        scanf ("%d%*c", &vetor[i]);
 
    }
 
doisVetores(vetor, vetorA, vetorB); // Aqui não espera retorno
 
int tamanhoA = (sizeof(vetorA)/int);
int tamanhoB = (sizeof(vetorB)/int);
 
printf("Valor de A\n");
for(int i=0;i<tamanhoA;++i){
 printf("Posicao %d: %d \n", i+1, vetorA[i]);
}
printf("\n\nValor de B\n");
for(int i=0;i<tamanhoB;++i){
 printf("Posicao %d: %d \n", i+1, vetorB[i]);
}
 
getch();
return 0;
}

 

Passando por referencia consegui alterar o conteudo das variaveis vetorA e vetorB fora do escopo de origem, ou seja, alterei seu conteudo dentro da funcão doisVetores().

Compartilhar este post


Link para o post
Compartilhar em outros sites

amigo nao consegui entender essa parte

int tamanhoA = (sizeof(vetorA)/int); int tamanhoB = (sizeof(vetorB)/int);

 

poderia me ajudar nela, fui tentar executar o codigo para entender ela melhor mais não executou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hey, desconcidere meu último código, estava viajando na maionese.

Deu até vergonha quando vi o código que fiz....kkkkkkkkkkkkk

#include <stdio.h>
using namespace std;
int tamanhoA, tamanhoB; //Armazena o tamnho que deve ser lido das matrizes, GLOBAL;
void doisVetores(const int *vetorAB, int *vA, int *vB){
 
int posicaoA =0, posicaoB = 0;
 
    for (int i=0;i<30;i++){
        if (vetorAB[i]>0){
            vA[posicaoA]=vetorAB[i];
            posicaoA++;
 
        }
        else{
            vB[posicaoB]=vetorAB[i];
            posicaoB++;
 
        }
 
    }
    tamanhoA = posicaoA;
    tamanhoB = posicaoB;
}
int main(){
 
int vetor[30];
int vetorA[30], vetorB[30];
 
for (int i=0;i<30;i++){
        printf ("Digite o numero %d: ", i+1);
        scanf ("%d%*c", &vetor[i]);
 
    }
 
doisVetores(vetor, vetorA, vetorB); // Aqui não espera retorno
 
 
 
 
printf("Valor de A\n");
for(int i=0;i<tamanhoA;++i){
 printf("Posicao %d: %d \n", i+1, vetorA[i]);
}
 
printf("\n\nValor de B\n");
for(int i=0;i<tamanhoB;++i){
 printf("Posicao %d: %d \n", i+1, vetorB[i]);
}
 
return 0;
}


amigo nao consegui entender essa parte

int tamanhoA = (sizeof(vetorA)/int); int tamanhoB = (sizeof(vetorB)/int);

 

poderia me ajudar nela, fui tentar executar o codigo para entender ela melhor mais não executou.

fiz errado :assobiando:

era para ser assim

 

int tamanhoA = (sizeof(vetorA)/sizeof(int)); 
int tamanhoB = (sizeof(vetorB)/sizeof(int));
pega a quantidade de elementos no vetor, mas não iria funcionar corretamente neste código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

rsrs que isso amigo as vezes a gente da umas viajadas srsrsr sempre dou umas acontece srsrsrs.

 

Amigo muito obrigada você me ajudou muito a parte do sizeof já estava muito avançada para min srsrs.

 

Entendi tinha que ter declarado duas variáveis globais para pegar o tamanho nossa nunca iria adivinha isso.

 

Muito Obrigada salvou minha vida. Ótima Explicação



Tenha uma ótima noite amigo obrigada

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.