Ir ao conteúdo
  • Cadastre-se

Função que retorna vetor...


rafael.kbeca

Posts recomendados

Boa noite...

Gostaria de uma ajuda de vocês...

Tenho duas lista de exercícios para resolver, porém tem uma questão que não estou dando conta de fazer é bem simples (menos para mim).

Tenho que criar um vetor de numero inteiro com o tamando definido pelo usuario, depois tenho que criar uma função para popular esse vetor com numeros inserido pelo usuario.

tenho que fazer outra função q receba esse vetor e dobre cada item..

Ae vem mais funções... porém minha duvida é como receber esse vetor, para depois fazer mais funçoes com esse vetor....

segue o codigo que fiz...


int funcao (int x)
{
int a[x];
for(int i=0; i<x; i++){
cout << "Digite um numero: ";
cin >> a[i];

}
return a[x];
}

int main (){
int x2,retorno;
cout << "Insira o tamanho do vetor";
cin >> x2;
funcao(x2);


system ("pause");
return 0;

}

Não sei mais o que fazer, já tentei muita coisa e nada deu certo..

Já tentei (retorno = funcao () ) e muitos outro jeitos..

Agradeço dezde já...

Link para o comentário
Compartilhar em outros sites

Aqui um exemplo bem simples da criação de um vetor com o tamanho definido por uma variável, depois a chamada de uma função que imprime depois altera o quarto elemento dele:


#include <stdio.h>
#include <stdlib.h>

void imprimeVetor(int *v) {
printf("%d\n", v[3]);
v[3] = 321;
printf("%d\n", v[3]);
}

int main() {
int *vetor;
int tamanho;

tamanho = 5;

vetor = (int*) calloc(5, sizeof(int));

vetor[3] = 123;

imprimeVetor(vetor);

return 0;
}

É só você alterar o código e fazer o usuário definir o valor de tamanho, e fazer as funções imprimirem e duplicarem os valores.

Link para o comentário
Compartilhar em outros sites

Por eu ser iniciante, não entendo muito C puro...

Tipow se a função tera que retornar para o main, ela nao poderia ser void, ou poderia normal ?

não entendi nem como você enviou a quantidade do vetor para função...

Desculpa, é que estou aprendendo direto do C++, não vi C...

Mais valeu por ajudar....

Link para o comentário
Compartilhar em outros sites

Pra retornar um vetor você utilizaria algo assim:

int* imprimeVetor(int *v) {    printf("%d\n", v[3]);    v[3] = 321;    printf("%d\n", v[3]);    return v;}

No entanto, nesse seu problema você não precisa retornar valor nenhum pela função. Pois os elementos do vetor já estão sendo alterados diretamente, então mesmo quando você sair da função sem retornar nada, eles continuarão alterados no main.

Ex:

// ...
void alteraVetor(int *v) {    v[3] = 321;}
int main() {
    // ...
    vetor[3] = 123;    printf("%d", vetor[3]; // vai imprimir 123
    alteraVetor(vetor);    printf("%d", vetor[3]; // vai imprimir 321
    return 0;}

Note que mesmo sem retornar nada, o valor de um dos elementos do vetor foi alterado depois de ter sido passado pra função.

Quanto a passar o tamanho do vetor pra função, você realmente precisa fazer isso. Na minha função eu não passei nada porque eu já sabia que o tamanho era 5, e que eu ia alterar apenas o [3]. Mas quando você pedir pro usuário digitar o tamanho do seu vetor, daí você vai precisar passar esse tamanho pra função, pra ter um controle na hora de alterar os elementos dele.

ex:

void imprimeVetor(int *v, int tamanho) {    int x;    for (x=0; x < tamanho; x++)        printf("%d\n", v[x]);}
Link para o comentário
Compartilhar em outros sites

Cara é isso mesmo, deu certinho...

Muito obrigado de verdade.... Pessoas humilde e com paciência como você costuma se ta super bem na vida... valeu mesmo...

segue o código que fiz...



#include <cstdlib>
#include <iostream>

using namespace std;


void alteraVetor(int *v,int tamanho) {//Funão para inserir valores
for(int i=0; i<tamanho; i++){ //ao vetor...
cout << "Digite um numero: ";
cin >> v[i];
}
}


int main() {
int tamanho;
cout << "Insira o tamanho do vetor: ";
cin >> tamanho;
int vetor [tamanho];
alteraVetor(vetor,tamanho);

for (int i=0; i<tamanho; i++){ //Listando os valores inseridos...
cout << "O numero "<<i+1<<" inserido foi: "
<<vetor[i]<<endl;
}



system ("pause");
return 0;
}

Me esclareça essa.. Porque a variavel v da funçao tem que ser um ponteiro ?

Qual quer duvida retornarei nesse poste, pois tem muita mais funções..

mais acho que não vou ter mas problemas nesse exercício...

abraçu...

Link para o comentário
Compartilhar em outros sites

ah é que dá pra definir o tamanho de uma matriz baseado no valor de uma variável em tempo real...? e pior que funcionou mesmo. Isso é novidade pra mim.

Do jeito como você fez não precisa ser ponteiro, a declaração pode ser também void alteraVetor(int v[],int tamanho), mas no final das contas é a mesma coisa com notação diferente, só começa a existir uma diferença real entre as duas notações com matrizes com 2 dimensões ou mais (** é totalmente diferente de [][], mas * é muito similar a []).

Você precisa passar o endereço (ou o ponteiro, dependendo da notação) porque não vale a pena ficar copiando vários valores de dentro de uma array só para executar uma função, você passa o endereço e faz as operações já na matriz original. Não tem como passar uma cópia dos valores de arrays em c ou c++.

Link para o comentário
Compartilhar em outros sites

Galera a questão é essa.. Olhe se o programa corresponde a questão..

Escreva um programa que faça o seguinte:

a) crie um vetor de números inteiros com tamanho definido pelo usuário.

B) crie uma função para popular esse vetor com dados fornecido pelo usuário.

c) crie uma função que receba esse vetor e dobre o valor de cada item.

d) crie uma função que liste esses valores.

e) crie uma função que liste os numeros ímpares desse vetor.

f) crie uma função que inverta os valores desse vetor, e coloque o primeiro como ultimo e o seundo como penultimo e assim por diante..

g) no final do programa lebere o espaço de me moria alocado pelo vetor..

segue o codigo..


#include <cstdlib>
#include <iostream>

using namespace std;


void alteraVetor(int *v,int tamanho) {//Funão para inserir valores
for(int i=0; i<tamanho; i++){ //ao vetor...
cout << "Digite um numero: ";
cin >> v[i];
}
}


void dobre(int *v, int tamanho) {//Funão para dobrar os valores
for(int i=0; i<tamanho; i++){//do vetor...
v[i]*=2;
}
}

void liste(int *v, int tamanho){// / Função que lista o dobro de cada valor inserido
for (int i=0; i<tamanho; i++){
cout << "O dobro do numero "<<i+1<<" inserido foi: "<<v[i]<<endl;
}
}

void primos(int *v, int tamanho){// função que identifica e lista
for(int i=0; i<tamanho; i++){//os numeros primos
v[i]/=2;
if((v[i]==3)||(v[i]%2!=0 && v[i]%3!=0)){
cout << "O numero "<< v[i]<< " e' primo...\n";
}

}
}



void inverter(int *v, int tamanho){// Função que inverte os numeros fornecido
for(int i=tamanho-1; i>=0;i-- ){
cout <<"O numero "<< i+1<<" inserido foi: "<<v[i]<<endl;
}


}


int main() {
int tamanho;
cout << "Insira o tamanho do vetor: ";
cin >> tamanho;
int vetor [tamanho];
alteraVetor(vetor,tamanho);
dobre(vetor,tamanho);
liste(vetor,tamanho);
primos(vetor,tamanho);
inverter(vetor,tamanho);
delete (vetor);

system ("pause");
return 0;
}

Link para o comentário
Compartilhar em outros sites

Cara você fez número primo (que está errado do mesmo jeito) e no e) fala pra listar os impares.

Para listar primos você vai ter que fazer dois laços.

Verdade... mais ja arrumei la fica ...


if(v[i]%2!=0) { cout << " impar \n";};

Muito obrigado cara... seila o que tava pensando... rssss..

abraçu..

Link para o comentário
Compartilhar em outros sites

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...