Neji 0 Denunciar post Postado Outubro 7, 2009 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
quitZAUMMM 18 Denunciar post Postado Outubro 8, 2009 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
Neji 0 Denunciar post Postado Outubro 8, 2009 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
quitZAUMMM 18 Denunciar post Postado Outubro 8, 2009 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
Neji 0 Denunciar post Postado Outubro 8, 2009 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
quitZAUMMM 18 Denunciar post Postado Outubro 8, 2009 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
Neji 0 Denunciar post Postado Outubro 8, 2009 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
quitZAUMMM 18 Denunciar post Postado Outubro 8, 2009 É 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
Neji 0 Denunciar post Postado Outubro 8, 2009 sim entendi o que ele faz mas não o porque de o usar no meu int =/ Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Outubro 8, 2009 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
Neji 0 Denunciar post Postado Outubro 8, 2009 muito obrigado pela ajuda =) Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Outubro 8, 2009 http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites