Ir para conteúdo
Entre para seguir isso  
Dark Skyllen

#8~1 - Vetores e Matrizes

Recommended Posts

Dark Skyllen    7
Dark Skyllen

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:

vetor.png

 

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 por Dark Skyllen

Compartilhar este post


Link para o post
Compartilhar em outros sites
Raphael Carnaúba    1
Raphael Carnaúba

#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 por Raphael Carnaúba

Compartilhar este post


Link para o post
Compartilhar em outros sites
dragonlorde    0
dragonlorde

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
Raphael Carnaúba

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
Dark Skyllen

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
dragonlorde

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
Dark Skyllen
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
dragonlorde

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 por dragonlorde

Compartilhar este post


Link para o post
Compartilhar em outros sites
Dark Skyllen    7
Dark Skyllen

@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 por Dark Skyllen

Compartilhar este post


Link para o post
Compartilhar em outros sites
Antharaz    4
Antharaz

@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
Lhg

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 por Lhg
Colocando a resposta da minha dúvida.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça login para comentar

Você vai ser capaz de deixar um comentário após fazer o login



Entrar Agora
Entre para seguir isso  

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×