Ir para conteúdo

POWERED BY:

Arquivado

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

Neji

[Resolvido] inserir/consultar valores num array

Recommended Posts

ola gente estou a ter um problema com os arrays.

 

É o seguinte na opção 3 quero inserir 5 valores e depois voltar ao menu e na opção 4 escolher a posição que quero consultar e ver por ex: o 2º valor que inseri. Eu sei que tenho de usar ponteiros mas tenho algumas duvidas acerca deles por isso gostava se não for muito incomodo que me esclarecessem.

 

esta aqui o código:

 

testes4.cpp : main project file.

	#include "stdafx.h"
	#include <iostream>


	using namespace System;
	using namespace std;


int valor1;
int cont;
int valores[5];


	int menu()
	{
		int op;
		do

	{
		Console::Clear();

		cout<<"1- Adicionar 1 valor\n";
		cout<<"2- Consultar 1 valor\n";
		cout<<"3- Adicionar varios\n";
		cout<<"4- Ler Varios\n";
		cout<<"5- Sair\n";
			cin>>op;
		if (op<1 || op>5)
			cout<<" \n opcao invalida ";
	}
	while (op<1 || op>5);

	return op;
	}


	void adicionar()
	{
		
		Console::Clear();
		cout<<"digite um valor \n";
		cin>>valor1;
		Console::ReadKey();

	}

	void ler()
	{
		Console::Clear();
		cout<<"o valor introduzido foi "<<valor1;
		Console::ReadKey();
		
	
	}

	void adicionav()
	{
		Console::Clear();

		int x;
        for (x=0;x<5;x++)
		{
		
		cout<<"introduza o um valor no array \n";
        cin>>valores[20];
       
		}
		while (x<5);
		
	}

	int lep()
	{
		Console::Clear();
		int l;
		for (l=0;l<20;l++)
			cout<<"os valores sao "<< valores[l];
	{
		
		
		Console::ReadKey();

	}
		while (l<20);
			return 0;
	}


	int main()

	{
		int op;
			do
	{
		op=menu();
		switch (op)
		{
			case 1: adicionar();break;
			case 2: ler();break;
			case 3: adicionav();break;
			case 4: lep();break;
		}


	  }
	while (op!=5);
	return menu();


	}


Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom fiz esse código meio que "porco", da uma olhada:

 

 

 

#include <iostream>

#include <cstdlib>

 

using namespace std;

 

int menu(){

int op;

do{

system("cls");

cout<<"1- Adicionar 1 valor\n";

cout<<"2- Visualizar 1 valor\n";

cout<<"3- Adicionar varios\n";

cout<<"4- Visualizar Varios\n";

cout<<"5- Sair\n";

cin>>op;

if (op<1 || op>5) cout<<" \n opcao invalida ";

}while (op<1 || op>5);

return op;

}

 

int adicionar(int N){

system("cls");

cout<<"digite um valor \n";

cin>>N;

return N;

}

 

void ler(int N){

scanf("%*c");

system("cls");

cout<<"o valor introduzido foi "<<N;

cout<<endl;

scanf("%*c");

}

 

int* adicionav(int *NN){

system("cls");

for (int i=0;i<5;i++){ //vamos ler apenas 5 valores

cout<<"introduza o um valor no array na posicao " << i << " : ";

cin>>NN;

}

return NN;

}

 

void lep(int *NN){

scanf("%*c");

system("cls");

for (int i=0;i<5;i++) cout<<"os valores sao "<< NN<<endl;;

scanf("%*c");

}

 

 

int main(){

int op;

int N=-1, *NN;

NN = (int *) malloc(sizeof(int)*20);

memset(NN,-1,20);

do{

op=menu();

switch (op){

scanf("%*c");

case 1: N=adicionar(N);break;

case 2: if (N == -1) cout<<"Nenhum numero armazenado"<<endl;

else ler(N);break;

case 3: adicionav(NN);break;

case 4: if (NN[0] == -1) cout<<"Nao ha numeros armazenados"<<endl;

else lep(NN);break;

}

}while (op!=5);

return 0;

}

 

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas na opcao 4 mostra todos os valores eu gostava de escolher por exemplo a posição 2 e ver o valor dessa posição =(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom primeiro refaça o código que pelo menos o meu deu pra ter uma noçaum de como é + fico muito feio =p

E para saber determinada posição, faz assim, crie + uma opção no menu para visualizar uma posição especifica, e passe como parametro a posição e o vetor, ai é soh:

cout<<NN[pos];

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu fiz assim e dá o mesmo que o seu (cada um tem a sua maneira de fazer embora o seu esteja mais completo) meti a opção 5 como você disse para ler apenas uma posição mas eu não estou usando o pos porque não sei bem usar ponteiros meu source é o seguinte:

 

	
 testes4.cpp : main project file.

	#include "stdafx.h"
	#include <iostream>


	using namespace System;
	using namespace std;


int valor1;
int cont;
int *pos;
int valores[5];


	int menu()
	{
		int op;
		do

	{
		Console::Clear();

		cout<<"1- Adicionar 1 valor\n";
		cout<<"2- Consultar 1 valor\n";
		cout<<"3- Adicionar varios\n";
		cout<<"4- Ler Varios\n";
		cout<<"5- Ler cada\n";
		cout<<"6- Sair\n";
			cin>>op;
		if (op<1 || op>6)
			cout<<" \n opcao invalida ";
	}
	while (op<1 || op>6);

	return op;
	}


	void adicionar()
	{
		
		Console::Clear();
		cout<<"digite um valor \n";
		cin>>valor1;
		Console::ReadKey();

	}

	void ler()
	{
		Console::Clear();
		cout<<"o valor introduzido foi "<<valor1;
		Console::ReadKey();
		
	
	}

	void adicionav()
	{
		Console::Clear();
      int x;
        for (x=1;x<6;x++)
		{
		
		cout<<"introduza um valor no array numero "<<x<<"\n";
		cin>>valores[x];
		
       
		}
		while (x<5);
		
	}

	int lertds()
	{
		Console::Clear();
		int l;
		for (l=1;l<6;l++)
			
	{
		cout<<"\n os valores sao "<< valores[l];
		

	}
		Console::ReadKey();
		while (l<5);
			return 0;
	}

	int lercada()
	{
		Console::Clear();
		
return 0;
	}


	int main()

	{
		int op;
			do
	{
		op=menu();
		switch (op)
		{
			case 1: adicionar();break;
			case 2: ler();break;
			case 3: adicionav();break;
			case 4: lertds();break;
			case 5: lercada();break;
		
		}


	  }
	while (op!=6);
	return menu();


	}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entaum do jeito que você está fazendo ñ precisa o uso de ponteiros, eu usei soh pra dar um exemplo da pra trabalhar de modo estatico msm..

Entaum sobre o pos é algo assim:

case 5: cout<<"digite a posicao: ";
        cint>>pos;
        lercada(pos);
        break;
ai na função soh você exibir como eu disse o valor que esta no vetor na posicao pos!! tendeu??

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

lol ja consegui fiz assim

 

	int lercada(int* pos=valores)
	{
		
		Console::Clear();
		cout<<"Introduza a posicao a consultar\n";
        cin>>*pos;
		cout<<"o valor da posicao e "<<valores[*pos];
		Console::ReadKey();

		
return 0;
	}

de qualquer modo muito obrigado eu estive vendo seu source e nao entedo uma parte

 

NN = (int *) malloc(sizeof(int)*20);

pode me explicar mas especificamente o uso de malloc?

Compartilhar este post


Link para o post
Compartilhar em outros sites

É também é uma maneira ;D

Só que pos n precisa ser um ponteiro, pode ser uma variavel inteira normal.

--

 

Esse malloc estã alocando dinamicamente memória para o seu int*;

nesse linha de comando oq ele faz, aloca memoria para 20 (espaços) do tipo int, tendeu??

 

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

ou você usa:

int *N;

ou

int N[20];

 

digamos que no primeiro o usuario vai determinar o tamanho do vetor, ai sim neh.

pois o segundo jah sai com um valor de posições definidas.

 

ponteiro tbm tem uma ou outra funcionalidade, + eu uso + pra isso.

e pelo menos pra mim, de tudo que eu aprendi, acho que ponteiro foi oq + demoro pra entrar na cabeça ;D

 

[]s

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.