ALGORITMO E ESTRUTURAS
DE DADOS
Engenharia Elétrica
Objetivo
Identificar as possíveis estruturas e técnicas
que podem ser utilizadas no projeto de
algoritmos
Ajudar a desenvolver o raciocínio lógico e a
capacidade de abstração do aluno através da
solução de problemas técnicos e científicos.
Ementa
Vetores
Vetores unidimensionais Vetores bidimensionais Cadeias de caracteres Estruturas
Definição de estruturas Estruturas simples Conjunto de estruturas Módulos de programas
Conceito de modularização Funções que retornam valor
Funções que não retornam valor
Passagem de parâmetro
Recursividade
Estruturas de dados estáticas
Pilhas Filas
Vetores
Vetores são estruturas de dados compostas e
homogêneas, o que significa que podem
armazenar diferentes dados simultaneamente
desde que os dados sejam do mesmo tipo.
O número de variáveis indexadas de um vetor,
ou o número de posições de um vetor é
denominado tamanho declarado de um vetor
e depende exclusivamente da forma como foi
realizada a declaração do vetor.
Vetores unidimensionais:
Definição
Alguns tipos de vetores são descritos como
variáveis
compostas,
homogêneas
e
unidimensionais;
Unidimensionais porque são endereçadas por um
Vetores unidimensionais:
declaração de vetor
Português estruturado:
<identificador>:vetor[tamanho] de < tipo >
Onde:
Identificador= nome da variável
Tamanho [VI..VF]
VI=Valor inicial do índice VF=valor Final do índice
Exemplos:
Notas:vetor [1..10] de real;
Sorteio:vetor [1..500] de inteiro;
Nome:vetor [1..50] de caractere;
C++
<tipo> identificador [tamanho]
Onde:
Identificador= nome da variável
Tamanho = quantidade de posições Exemplos: Float Notas[10]; Int Sorteio[500]; String Nome[50];
Vetores unidimensionais:
atribuição direta de valores
Exemplo: Calcular e apresentar a média geral de uma
turma de 8 alunos. A média a ser obtida deve ser a
média geral de cada aluno obtida durante o ano
letivo.
Aluno
Nota1
Nota2
Nota3
Nota4
Média
1
4.0
6.0
5.0
3.0
4.5
2
6.0
7.0
5.0
8.0
6.5
3
9.0
8.0
9.0
6.0
8.0
4
3.0
5.0
4.0
2.0
3.5
5
4.0
6.0
6.0
8.0
6.0
6
7.0
7.0
7.0
7.0
7.0
7
8.0
7.0
6.0
5.0
6.5
8
6.0
7.0
2.0
9.0
6.5
Vetores unidimensionais:
atribuição direta de valores
No caso do exemplo do cálculo da média dos 8 alunos, teremos então
uma única variável indexada contendo todos os valores das 8 notas. Isto
seria representado da seguinte forma:
Declaração:
MD: vetor [1..8] de real;
Atribuição direta:
MD[
1
] 4.5
MD[
2
] 6.5
MD[
3
] 8.0
MD[
4
] 3.5
MD[
5
] 6.0
MD[
6
] 7.0
MD[
7
] 6.5
MD[
8
] 6.0
Observe que o nome é um só, o que
muda é a informação indicada dentro dos
colchetes. A esta informação dá-se o
nome de índice, sendo este o endereço
onde o elemento está armazenado.
Observe que o nome é um só, o que
muda é a informação indicada dentro dos
colchetes. A esta informação dá-se o
nome de índice, sendo este o endereço
onde o elemento está armazenado.
Vetores unidimensionais:
atribuição de dados lidos
A leitura de um vetor é processada passo a passo,
um elemento por vez. Para isso é necessário a
utilização de um laço de repetição.
A instrução de leitura é leia seguida da variável
mais o índice.
Exemplo:
Para
X
de 1 ate 8 faca
leia(MD[
X
]);
fimpara
X
1;
Enquanto (
X
<=8) faca
leia(MD[
X
]);
X
X
+ 1;
fimenquanto
Vetores unidimensionais:
impressão dos dados do vetor
O processo de escrita de uma matriz é bastante
parecido com o processo de leitura de seus
elementos.
Para esta ocorrência deve ser utilizada a
instrução escreva seguida da indicação da
variável e seu índice.
Exemplo:
Para
X
de 1 ate 8 faca
escreva(MD[
X
]);
fimpara
X
1;
Enquanto (
X
<=8) faca
escreva(MD[
X
]);
X
X
+1;
fimenquanto
Vetores unidimensionais:
impressão dos dados do vetor
Escrevendo o vetor na ordem inversa.
Exemplo:
Para
X
de 8 ate 1 passo -1 faca
escreva(MD[
X
]);
Fimpara
X
8;
Enquanto (
X
>=1) faca
escreva(MD[
X
]);
X
X
- 1;
fimenquanto
Vetores unidimensionais:
operações com vetor
É possível executar operações matemáticas com
os dados armazenados no vetor.
No caso do nosso exemplo é necessário calcular a
média geral de uma turma de 8 alunos. Portanto
será necessário somar a média de cada aluno e
dividir pela quantidade de alunos.
Exemplos:
Para
X
de 1 ate 8 faca
soma soma + MD[
X
];
Fimpara
Media soma/8;
X
1;
Enquanto (
X
<=8) faca
soma soma + MD[
X
];
X
X
+1;
Fimenquanto
Media soma/8;
Vetores unidimensionais:
operações com vetor
Outros tipos de operações que são possíveis com
vetores: subtração, multiplicação, união, divisão
entre outros.
Exemplos:
1)
Subtração
Para
y
de 1 ate 10 faca
vetS[
y
] vet1[
y
] – vet2[
y
]
fimpara
2)
Multiplicação:
Para
y
de 1 ate 10 faca
vetS[
y
] vet1[
y
] * 20
Fimpara
3)
União:
Para
y
de 1 ate 5 faca
vetS[
y
] vet1[
y
]
Fimpara
X
1;
Para
y
de 6 ate 10 faca
vetS[
y
] vet2[
X
]
X
X
+1
Vetores unidimensionais:
exemplo completo
algoritmo "Vetor_exemplo1" var
vet: vetor [1..10] de inteiro
//declaração de variável
i: inteiro inicio
para i de 1 ate 10 faca
vet[i] i * 2 //atribuição direta fimpara
para i de 1 ate 10 faca
escreva (“Valores do vetor: “,vet[i]) fimpara
fimalgoritmo
i=1
i=2
i=3
i=4
i=5
i=6
i=7
i=8 i=9 i=10
2
4
6
8
10
12
14
16
18
20
#include <iostream> using namespace std; main(){
int vet[10],i; //declaração de variável for(i=1;i<=10;i++)
vet[i]= i * 2; //atribuição direta for(i=1;i<=10;i++)
cout<<"Valores do vetor ["<<i<<"]: "<<vet[i]<<endl;
system("pause"); }
Vetores unidimensionais:
exemplo completo
algoritmo "Vetor_exemplo2" var
vet: vetor [1..10] de inteiro //declaração de variável i: inteiro
inicio
para i de 1 ate 10 faca
escreva ("Digite um numero para o Vetor: ") leia (vet[i]) //atribuição de dados lidos
fimpara
para i de 1 ate 10 faca
escreva (“Valores no vetor: “,vet[i]) fimpara
fimalgoritmo
i=1
i=2
i=3
i=4
i=5
i=6
i=7
i=8
i=9
i=10
6
15
22
1
0
9
31
75
105
88
#include <iostream> using namespace std; main(){
int vet[10],i; //declaração de variável for(i=1;i<=10;i++){
cout<<"Valores do vetor ["<<i<<"]: "; cin>>vet[i]; //atribuição de dados lidos }
for(i=1;i<=10;i++)
cout<<"Valores do vetor ["<<i<<"]: "<<vet[i]<<endl;
system("pause"); }
Vetores unidimensionais:
exemplo completo
Algoritmo “media_turma”
Var
MD:
vetor
[1..8] de real; //declaração de variável
soma, media: real;
X: inteiro;
Inicio
para
X
de 1 ate 8 faca
escreva(“Informe a média do aluno:”);
leia(MD[
X
]);
//fazendo leitura das médias dos alunossoma soma + MD[
X
];
//somando as médiasfimpara
media soma/8;
para
X
de 1 ate 8 faca
escreva(“Média : “,
X
, “:”,MD[
X
]);
//escrevendo na tela as médias informadasfimpara
escreva(“Media geral da turma = “, media);
Fimalgoritmo
X=1
X=2
X=3
X=4
X=5
X=6
X=7
X=8
Vetores unidimensionais:
exemplo completo
#include <iostream> using namespace std; main(){
float md[10]; //declaração de variável float soma,media;
soma=0; int x;
for(x=1;x<=8;x++){
cout<<"Informe a media aluno: ";
cin>>md[x]; //atribuição de dados lidos soma=soma+md[x];
}
media=soma/(x-1); for(x=1;x<=8;x++)
cout<<"Media ["<<x<<"]: "<<md[x]<<endl; cout<<"Media geral da turma= "<<media<<endl; system("pause");
}
X=1
X=2
X=3
X=4
X=5
X=6
X=7
X=8
Exercícios
1.
Desenvolver um algoritmo que efetue a leitura de 10 elementos
inteiro de um vetor A. Construir o vetor B de mesmo tipo,
observando a seguinte lei de formação: se o valor do índice for
par, o valor do vetor A deverá ser multiplicado por 5; sendo
impar, deverá ser somado com 5. Ao final, mostrar os
conteúdos dos 2 vetores.
2.
Ler dois vetores A e B com 20 elementos. Construir um vetor C,
onde cada elemento é a subtração do elemento de A com B.
3.
Ler dois vetores, vetor A com 20 elementos e B com 30
elementos. Construir o vetor C, sendo este a união dos dois
vetores. Desta forma, C deverá ter a capacidade de armazenar
50 elementos.
Vetores bidimensionais:
Matriz
Os
vetores,
ou
variáveis
compostas
unidimensionais,
têm
como
principal
característica a necessidade de apenas um
índice para endereçamento. Uma estrutura que
precise de mais de um índice será denominada
estrutura composta multidimensional.
As variáveis compostas multidimensionais,
mais utilizadas são as bidimensionais, ou
matrizes.
Geralmente, utilizamos matrizes em situações
que precisam de linhas e colunas para a
identificação de elementos.
Exemplo de uma matriz A(3x2)
A =
Os números subscritos indicam os índices
dos elementos da matriz.
A
11A
12A
21A
22A
31A
32Matriz -
Declaração
Declaração de uma matriz em português estruturado
<identificador>: vetor [<número de linhas>, <número
de colunas>] de <tipo>;
Onde:
Identificador: nome da variável
números de linhas: quantidade de linhas da matriz número de colunas: quantidade de colunas da matriz Exemplos:
A:vetor [1..3,1..2] de real;
mat:vetor [1..10,1..5] de inteiro;
Nome:vetor [1..2,1..3] de caractere;
Matriz -
Declaração
Declaração de uma matriz em C++
<tipo> identificador [<número de linhas>][ <número de
colunas>] ;
Onde:
Identificador: nome da variável
números de linhas: quantidade de linhas da matriz número de colunas: quantidade de colunas da matriz Exemplos:
Float A[3][2];
Int mat[10][5];
Matriz –
atribuição de matriz
A atribuição é uma das formas de qualquer variável armazenar algum
valor. Como não operamos diretamente com a matriz, somente seus
elementos armazenam valores numa atribuição.
Exemplos:
1)
Exemplo:
mat[3,4] 3.75
2)
Exemplo:
Para (i de 1 ate 10) faca
Para (j de 1 ate 10) faca
Se (i = j) entao
x[i,j] 1
Senao
x[i,j] 0
FimSe
FimPara
FimPara
Matriz –
leitura de matriz
Utiliza-se dois laços para a leitura de matrizes.
Exemplo:
Algoritmo “Leitura_matriz”
var
i, j: inteiro
M: vetor [1..2,1..3] de real
Inicio
Para i de 1 ate 2 faca
// controla quantidade de linhas
Para j de 1 ate 3 faca
//controla quantidade de colunas
Escreva (“Entre com o elemento da linha ”, i ,“coluna”, j, “ : ” )
Leia (M[i, j])
FimPara
FimPara
Matriz –
leitura de matriz
Utiliza-se dois laços para a leitura de matrizes.
Exemplo:
#include <iostream> using namespace std; main(){
int m[2][3]; //declaração de variável int i,j;
for(i=1;i<=2;i++){ for(j=1;j<=3;j++){
cout<<"Entre com elemento da linha: "<<i<<" coluna "<<j<<": "; cin>>m[i][j]; //atribuição de dados lidos
} }
system("pause"); }
Matriz –
escrita de matriz
É semelhante a leitura de matrizes.
Algoritmo “Leitura_e_escrita_matriz” var
i, j: inteiro;
M: vetor [1..2,1..3] de real Inicio
Para i de 1 ate 2 faca Para j de 1 ate 3 faca
Escreva (“Entre com o elemento da linha ”, i, “coluna”, j, “ : ” ) Leia (M[i, j])
FimPara FimPara
Para i de 1 ate 2 faca Para j de 1 ate 3 faca
Escreva( “M[”, i, “,”, j, “] =”, M[i,j] ) FimPara
FimPara Fimalgoritmo
Matriz –
escrita de matriz
É semelhante a leitura de matrizes.
#include <iostream> using namespace std; main(){
int m[2][3]; //declaração de variável int i,j;
for(i=1;i<=2;i++){ for(j=1;j<=3;j++){
cout<<"Entre com elemento da linha: "<<i<<" coluna "<<j<<": "; cin>>m[i][j]; //atribuição de dados lidos
} } for(i=1;i<=2;i++){ for(j=1;j<=3;j++){ cout<<"M["<<i<<","<<j<<"] = "<<m[i][j]<<endl; } } system("pause"); }
Exercícios
Escreva um algoritmo que armazene valores inteiros em
uma matriz 3 x 4 e calcule e mostre a média aritmética dos
valores digitados.
Faça um algoritmo que inverta uma matriz de tamanho 3 x
3, ou seja, dê sua matriz transposta.