Baixe o app para aproveitar ainda mais
Prévia do material em texto
Algoritmo e Estruturas de dados Engenharia Elétrica Prof(a): Carla Ferreira Coelho 1 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 Listas encadeadas 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 único índice; 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. 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: Subtração Para y de 1 ate 10 faca vetS[y] vet1[y] – vet2[y] fimpara Multiplicação: Para y de 1 ate 10 faca vetS[y] vet1[y] * 20 Fimpara 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 fimpara 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 alunos soma soma + MD[X]; //somando as médias fimpara media soma/8; para X de 1 ate 8 faca escreva(“Média : “,X, “:”,MD[X]); //escrevendo na tela as médias informadas fimpara escreva(“Media geral da turma = “, media); Fimalgoritmo X=1 X=2 X=3 X=4 X=5 X=6 X=7 X=8 4.5 6.5 8.0 3.5 6.0 7.0 6.5 6.0 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 4.5 6.5 8.0 3.5 6.0 7.0 6.5 6.0 Exercícios 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.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. 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. A11 A12 A21 A22 A31 A32 Vetores bidimensionais: Matriz Matriz - 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]; String Nome[2][3]; 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: Exemplo: mat[3,4] 3.75 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 Fimalgoritmo 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. Faça um algoritmo que leia uma matriz 4x4 e mostra a escrita de sua diagonal principal.
Compartilhar