Dark Skyllen 7 #1 Postado 27 Abril, 2010 (editado) Vetores e Matrizes Nessa aula iremos aprender um conceito MUITO utilizado C ou C++, que é o conceito de matrizes. Essa aula já era pra ter saído à muito tempo, mas por alguns imprevistos, não pude terminá-la antes. O que é um vetor?Vetores são variáveis que irão abrigar um coletivo de dados de um mesmo tipo. É como se ele "fatiace" a memória, para poder guardar vários valores dentro de uma única variável. Lembrando que os valores precisam ser do mesmo tipo. Vetores, também conhecidos como Arrays, são declarados normalmente, mas sempre contém [] depois do nome da variável. int vetor[10]; Nesse exemplo, abriremos 10 espacinhos para guardar dados na variável vetor. Quando você faz esse tipo de declaração, obrigatóriamente, o computador precisa interpretar quantos espaços ele precisa guardar e quantos bytes ele precisa reservar. Então quando declaramos o exemplo acima, o computador sabe que precisará fatiar em 10 pedaços e que no total essa variável usará 40 bytes da memória (4x10) onde 4 é o número de bytes que uma variável do tipo int ocupa. Para saber os valores que os tipos de dados ocupam na memória, utilize o comando abaixo: sizeof(int); Ao declarar o vetor, a variável fica parecendo isso: rere, mal feito o desenho, mas da pra entender. Essa seria nossa variável vetor, declarada com 10 posições. Sempre começamos a contar do 0. Vamos fazer um programa de exemplo para vocês entenderem como acessar os vetores: #include <iostream.h> int vetor[10]; int main() { cout << "Digite o valor do 1o elemento do vetor: "; cin >> vetor[0]; cout << "\nMostrando a 1a posicao do vetor: " << vetor[0] << endl; system("pause"); Preenchemos a primeira posição do vetor (lembrando que começa no 0) com o valor digitado pelo usuário e depois exibimos. Agora e para preenchermos o vetor inteiro? Simples, vamos usar um for: #include <iostream.h> int vetor[10]; int main() { /* Preenchendo vetor */ for (int i=0;i<10;i++) { cout << "Digite a " << i+1 << "a posicao do vetor: "; cin >> vetor[i]; } /* Exibindo o vetor */ for (int i=0; i<10;i++) { cout << "\n" << i+1 <<"a posicao: " << vetor[i];[/left][/center] } system("pause"); } A parte de vetor é isso, é de muito uso em C e em C++. Na próxima aula ensinarei Matrizes e calloc, que também são conceitos MUITO utilizados! Abraços! Agora alguns exercícios: Por favor, peço que pratiquem os exercícios e se puderem postem aqui para minha avaliação, talves possa lhes ajudar com novas informações! 1 - Faça um programa que multiplique os valores de dois vetores de 10 posições e exiba numa variável valorTotal. Um exemplo da multiplicação: vetor1[0] * vetor2[0], vetor1[0] * vetor2[1] .. Quando chegar em vetor1[0] * vetor2[9], sera necessário fazer isso: vetor[1] * vetor[0]... e assim por diante até que todos os elementos se multipliquem! OiaeuMae [spoiler=Resposta] #include <iostream.h> #include <conio.h> void preencherVetor(int* vetor, int tam); int vetor1[10], vetor2[10]; int valorTotal; int main() { preencherVetor(vetor1, 10); preencherVetor(vetor2, 10); /* Era isso que eu queria! */ for (int i=0; i < 10; i++) for (int j=0; j<10; j++) valorTotal += vetor1[i] * vetor2[j]; printf("O valor total foi de: %d", valorTotal); getch(); } void preencherVetor(int* vetor, int tam) { for(int i=0; i< tam; i++) { printf("Digite a %d posicao do vetor: ", i+1); scanf("%d", &vetor[i]); } } Editado 29 Abril, 2010 por Dark Skyllen Compartilhar este post Link para o post Compartilhar em outros sites
Raphael Carnaúba 1 #2 Postado 27 Abril, 2010 (editado) #include <iostream> using namespace std; int main(int argc, char *argv[]) { int vTotal = 0; int vetor[10]; memset(vetor, 0, sizeof(vetor)); for (int i=0;i<10;i++) { cout << "Digite a " << i+1 << "a posicao do vetor: "; cin >> vetor[i]; } for(int i=0;i<10;i++) { vTotal = sqrt(pow((vetor[0] * vetor[i]), i+1)); } cout << "vTotal " << vTotal << endl; return 1; } Tá certo tiu? =** Editado 27 Abril, 2010 por Raphael Carnaúba Compartilhar este post Link para o post Compartilhar em outros sites
dragonlorde 0 #3 Postado 27 Abril, 2010 Bom eu fiz assim #include <iostream> using namespace std; int main() { int vec1[10]; int vec2[10]; int valortotal; for(int i=0;i<=10;i++) { valortotal=vec1[i]*vec2[i]; cout << valortotal; } system("PAUSE"); return EXIT_SUCCESS; } Se tiver algum problema me avisa... Compartilhar este post Link para o post Compartilhar em outros sites
Raphael Carnaúba 1 #4 Postado 27 Abril, 2010 dragonlorde, em que parte você atribuiu valores aos vetores? vec1, vec2... Compartilhar este post Link para o post Compartilhar em outros sites
Dark Skyllen 7 #5 Postado 28 Abril, 2010 Na verdade, o que eu queria mesmo era uma multiplicação assim: vetor1[0] * vetor2[0], vetor1[0] * vetor2[1] ... vetor1[0] * vetor2[9].. Quando acabar a multiplicação dos 9 termos do vetor 2 ele faria o seguinte: vetor[1] * vetor2[0] ... vetor1[1] * vetor2[9] .. vetor1[2] * vetor2[0] ... E assim em diante.. Compartilhar este post Link para o post Compartilhar em outros sites
dragonlorde 0 #6 Postado 28 Abril, 2010 Mas dai num precisaria muitas variaveis pra armazenar os resultados? @Raphel Carnauba 1 - Faça um programa que multiplique os valores de dois vetores de 10 posições e exiba numa variável valorTotal. Um exemplo da multiplicação:vetor1[0] * vetor2[0], vetor1[0] * vetor2[1] .. e assim por diante até que todos os elementos se multipliquem! OiaeuMae Eu nao achei a parte de atribuir valores...se voce achar me avisa.. Compartilhar este post Link para o post Compartilhar em outros sites
Dark Skyllen 7 #7 Postado 28 Abril, 2010 Mas dai num precisaria muitas variaveis pra armazenar os resultados? @Raphel Carnauba Eu nao achei a parte de atribuir valores...se voce achar me avisa.. Mas como você vai multiplicar os vetores sem atribuir valores a eles? Compartilhar este post Link para o post Compartilhar em outros sites
dragonlorde 0 #8 Postado 28 Abril, 2010 (editado) Hm sim mas voce esqueceu de falar :coolface: #include <iostream> using namespace std; int main() { int vec1[10]; int vec2[10]; int valortotal; for (int i=0;i<10;i++) { cout << "Digite a " << i+1 << "a posicao do vec1: "; cin >> vec1; cout << "Digite a " << i+1 << "a posicao do vec2: "; cin >> vec2; } for(int i=0;i<=10;i++) { valortotal=vec1*vec2; cout << valortotal; } system("PAUSE"); return EXIT_SUCCESS; } Editado 28 Abril, 2010 por dragonlorde Compartilhar este post Link para o post Compartilhar em outros sites
Dark Skyllen 7 #9 Postado 29 Abril, 2010 (editado) @dragonlorde e Rapha A multiplicação de vocês ta errada, me expressei muito mal no exercício. Na verdade o que eu queria era isso: #include <iostream.h> #include <conio.h> void preencherVetor(int* vetor, int tam); int vetor1[10], vetor2[10]; int valorTotal; int main() { preencherVetor(vetor1, 10); preencherVetor(vetor2, 10); /* Era isso que eu queria! */ for (int i=0; i < 10; i++) for (int j=0; j<10; j++) valorTotal += vetor1[i] * vetor2[j]; printf("O valor total foi de: %d", valorTotal); getch(); } void preencherVetor(int* vetor, int tam) { for(int i=0; i< tam; i++) { printf("Digite a %d posicao do vetor: ", i+1); scanf("%d", &vetor[i]); } } Editado 29 Abril, 2010 por Dark Skyllen Compartilhar este post Link para o post Compartilhar em outros sites
Antharaz 4 #10 Postado 8 Agosto, 2010 @Dark Skyllen Me corrija se eu estiver errado, mas o resultado está errado, pois você coloca valorTotal += vetor1 * vetor2[j]; sendo que a variável valorTotal não tem valor definido, logo não dará certo ao somá-la com a multiplicação. Para corrigir deveria por =0 ao declarar esta variável, ficando assim: int valorTotal = 0; Compartilhar este post Link para o post Compartilhar em outros sites
Lhg 0 #11 Postado 2 Novembro, 2010 (editado) Muito legal teus tópicos em relação ao C, estou migrando do C# para o C++ e tem algumas coisas que não consegui acompanhar. Exemplo, tanto em C#, java, quando se cria um vetor, você instancia ele para poder utilizá-lo, ou seja aloca um espaço na Heap, porém, no C/C++ isso não acontece, de fato nunca vi o construtor em ação, por quê? C# - int[] nome = new nome[10]; C++ - int nome[10]; O C++ declarou ela, da mesma forma que uma variavel, mas pelo que eu saiba uma variavel é armazenada simplesmente na pilha. Poderias me 'iluminar', heheh abraço. EDIT ------------------------------------------------------------------------------------------------------- Bom, ninguém respondeu as perguntas, mas eu encontrei as respostas ehehe, estarei postando abaixo: Em C++ você pode criar vetores tanto na pilha quanto na heap, diferente de algumas linguagens (ex: C#) que te forçam a criar na heap. Syntax: int iaVetor[10]; /* Aqui foi criado um vetor com 10 espaços. Este vetor está na pilha, ou seja conceitos de alocação dinâmica não são possiveis aqui.*/ int* iaVetor2 = new int[10]; /* Aqui também foi criado um vetor com 10 espaços, mas este utilizando o "new", está alocando na Heap, ou seja é uma alocação dinâmica, na qual você pode descartar depois utilizando um delete[] iaVetor2; Vale mencionar que você só pode criar um vetor com alocação dinamica utilizando ponteiros, exatamente como está no exemplo. */ Mas o quê é alocação dinâmica??!? /* Quando você compila um programa as variaveis estarão sendo colocadas na memoria "pilha" e ficarão lá até o término do programa... mas na pratica, as duas principais diferenças são que: 1- Utilizando o NEW (alocação dinamica), você pode criar o vetor com o tamanho de uma variavel, ou seja caso você não saiba o tamanho do vetor que necessitará, pois pode depender do usuario que estiver utilizando, basta utilizar a alocação dinamica. 2- Vetores utilizando o NEW, só irão ocupar espaço na memória no momento e pelo tempo que você desejar, tendo em vista que você pode usar um 'delete[] nomeVetor;' e então desocupar o espaço que ele ocupava na memoria, quando você utiliza o vetor da forma tradicional, não é possível fazer isto. */ Autor: Luís Henrique Goll. Quem sabe esclareça futuras dúvida de pessoas como eu, hahah. Abraço! Luís. Editado 16 Novembro, 2010 por Lhg Colocando a resposta da minha dúvida. Compartilhar este post Link para o post Compartilhar em outros sites