Baixe o app para aproveitar ainda mais
Prévia do material em texto
Algoritmos Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com ESTRUTURAS DE DADOS HOMOGÊNEA Características das Estruturas de Dados Homogêneas É uma coleção de variáveis do mesmo tipo (homogênea) que é referenciada por um nome comum. Ocupa posições contíguas da memória. O endereço mais baixo corresponde ao primeiro elemento e mais alto ao último. Possui número de elementos fixo, ou seja, a variável desse tipo é declarada com uma quantidade de elementos que não pode ser alterada durante a execução do programa. Estrutura de Dados Homogênea Uma estrutura de dados homogênea é também conhecida como vetor, matriz, variável indexada ou array Um elemento específico do vetor é acessado por meio de um índice (ou subscrito). O indíce é um número inteiro que corresponde a posição de um elemento dentro do vetor. 0 1 2 3 4 5 6 7 8 9 7,5 8,0 3,5 10,0 6,0 8,0 9,0 6,5 7,5 4,5 posição 9 1a. posição 10a. posição 2a. posição posição 0 posição 1 Estruturas de Dados Homogênea A figura acima poderia representar as notas de 10 alunos. Geralmente associamos as posições a alguma entidade do mundo real. Neste caso associamos cada posição a um aluno: posição 0 armazena a nota do 1º aluno, posição 1 armazena nota do aluno 2º aluno e assim por diante. Observação: Em C, todo vetor tem 0 como o índice do seu primeiro elemento. 0 1 2 3 4 5 6 7 8 9 7,5 8,0 3,5 10,0 6,0 8,0 9,0 6,5 7,5 4,5 Declaração de um Vetor Unidimensional Sintaxe : tipo nome-variável[tamanho] Exemplo: double notas[10]; No exemplo acima é declarado um vetor de nome notas com 10 elementos do tipo double. Se os elementos do vetor ocupam posições contiguas da memória, porque os endereços não são consecutivos? A nota 8,0 da posição 1, por exemplo, não deveria estar no endereço 1001, porque ela está no endereço 1008? A linguagem C não realiza verificação de limites em vetores. Se durante uma operação o limite for transposto, acarretará resultados imprevisíveis . 0 1 2 3 4 5 6 7 8 9 7,5 8,0 3,5 10,0 6,0 8,0 9,0 6,5 7,5 4,5 1000 1008 1016 1024 1032 1040 1048 1056 1064 1072 Endereços de memória Manipulação de Vetor O trecho de programa abaixo prenche um vetor com os 5 primeiros múltiplos de 10. main(){ int num[5]; int i; for (i = 1; i <= 5; i++){ num[i-1] = i * 10; } } 0 1 2 3 4 num i Manipulação de Vetor O trecho de programa abaixo prenche um vetor com os 5 primeiros múltiplos de 10. main(){ int num[5]; int i; for (i = 1; i <= 5; i++){ num[i-1] = i * 10; } } 0 1 1 2 3 4 num i Manipulação de Vetor O trecho de programa abaixo prenche um vetor com os 5 primeiros múltiplos de 10. main(){ int num[5]; int i; for (i = 1; i <= 5; i++){ num[i-1] = i * 10; } } 0 10 1 1 2 3 4 num i Manipulação de Vetor O trecho de programa abaixo prenche um vetor com os 5 primeiros múltiplos de 10. main(){ int num[5]; int i; for (i = 1; i <= 5; i++){ num[i-1] = i * 10; } } 0 10 1 1 2 2 3 4 num i Manipulação de Vetor O trecho de programa abaixo prenche um vetor com os 5 primeiros múltiplos de 10. main(){ int num[5]; int i; for (i = 1; i <= 5; i++){ num[i-1] = i * 10; } } 0 10 1 1 2 2 3 4 num i Manipulação de Vetor O trecho de programa abaixo prenche um vetor com os 5 primeiros múltiplos de 10. main(){ int num[5]; int i; for (i = 1; i <= 5; i++){ num[i-1] = i * 10; } } 0 10 1 1 20 2 2 3 4 num i Manipulação de Vetor O trecho de programa abaixo prenche um vetor com os 5 primeiros múltiplos de 10. main(){ int num[5]; int i; for (i = 1; i <= 5; i++){ num[i-1] = i * 10; } } 0 10 1 1 20 2 2 3 3 4 num i Manipulação de Vetor O trecho de programa abaixo prenche um vetor com os 5 primeiros múltiplos de 10. main(){ int num[5]; int i; for (i = 1; i <= 5; i++){ num[i-1] = i * 10; } } 0 10 1 1 20 2 2 3 3 4 num i Manipulação de Vetor O trecho de programa abaixo prenche um vetor com os 5 primeiros múltiplos de 10. main(){ int num[5]; int i; for (i = 1; i <= 5; i++){ num[i-1] = i * 10; } } 0 10 1 1 20 2 2 30 3 3 4 num i Manipulação de Vetor O trecho de programa abaixo prenche um vetor com os 5 primeiros múltiplos de 10. main(){ int num[5]; int i; for (i = 1; i <= 5; i++){ num[i-1] = i * 10; } } 0 10 1 1 20 2 2 30 3 3 4 4 num i Manipulação de Vetor O trecho de programa abaixo prenche um vetor com os 5 primeiros múltiplos de 10. main(){ int num[5]; int i; for (i = 1; i <= 5; i++){ num[i-1] = i * 10; } } 0 10 1 1 20 2 2 30 3 3 4 4 num i Manipulação de Vetor O trecho de programa abaixo prenche um vetor com os 5 primeiros múltiplos de 10. main(){ int num[5]; int i; for (i = 1; i <= 5; i++){ num[i-1] = i * 10; } } 0 10 1 1 20 2 2 30 3 3 40 4 4 num i Manipulação de Vetor O trecho de programa abaixo prenche um vetor com os 5 primeiros múltiplos de 10. main(){ int num[5]; int i; for (i = 1; i <= 5; i++){ num[i-1] = i * 10; } } 0 10 1 1 20 2 2 30 3 3 40 4 4 5 num i Manipulação de Vetor O trecho de programa abaixo prenche um vetor com os 5 primeiros múltiplos de 10. main(){ int num[5]; int i; for (i = 1; i <= 5; i++){ num[i-1] = i * 10; } } 0 10 1 1 20 2 2 30 3 3 40 4 4 5 num i Manipulação de Vetor O trecho de programa abaixo prenche um vetor com os 5 primeiros múltiplos de 10. main(){ int num[5]; int i; for (i = 1; i <= 5; i++){ num[i-1] = i * 10; } } 0 10 1 1 20 2 2 30 3 3 40 4 4 50 5 num i Manipulação de Vetor O trecho de programa abaixo prenche um vetor com os 5 primeiros múltiplos de 10. main(){ int num[5]; int i; for (i = 1; i <= 5; i++){ num[i-1] = i * 10; } } 0 10 1 1 20 2 2 30 3 3 40 4 4 50 5 6 num i Manipulação de Vetor O trecho de programa abaixo prenche um vetor com os 5 primeiros múltiplos de 10. main(){ int num[5]; int i; for (i = 1; i <= 5; i++){ num[i-1] = i * 10; } } 0 10 1 1 20 2 2 30 3 3 40 4 4 50 5 6 num i Vetor Bidimensional (matriz) Declaração: tipo nome-variável [linhas][colunas] Exemplo: int notas [40][4]; Para acessar a nota do 40o. aluno no 3o. bimestre: printf(“%f”, notas[39][2]); // será mostrado 10.0 0 1 2 3 0 10,0 9,5 8,5 9,5 1 7,0 8,5 9,5 10,0 2 9,0 6,5 7,5 9,5 . . . 39 8,5 5,0 10,0 9,0 Neste exemplo, associamos as linhas aos alunos e as coluna aos bimestres Manipulação de vetor bidimensional main(){ int num[3][3]; int i, j, x; for (i = 0; i < 3; i++){ for (j = 0; j < 3; j++){ num[i][j] = i+j; } } } Neste exemplo cada elemento da matriz é calculado somando o número da linha ao número da coluna correspondente. 0 1 2 0 1 2 i j num Manipulação de vetor bidimensional main(){ int num[3][3]; int i, j, x; for (i = 0; i < 3; i++){ for (j = 0; j < 3; j++){ num[i][j] = i+j; } } } num 0 1 2 0 1 2 i j 0 Manipulação de vetor bidimensional main(){ int num[3][3]; int i, j, x; for (i = 0; i < 3; i++){ for (j = 0; j < 3; j++){ num[i][j] = i+j; } } } num 0 1 2 0 1 2 i j 0 0 Manipulação de vetor bidimensional main(){ int num[3][3]; int i, j, x; for (i = 0; i < 3; i++){ for (j = 0; j < 3; j++){ num[i][j] = i+j; } } } num 0 1 2 0 0 1 2 i j 0 0 Manipulação de vetor bidimensional main(){ int num[3][3]; int i, j, x; for (i = 0; i < 3; i++){ for (j = 0; j < 3; j++){ num[i][j] = i+j; } } } num0 1 2 0 0 1 2 i j 0 0 1 Manipulação de vetor bidimensional main(){ int num[3][3]; int i, j, x; for (i = 0; i < 3; i++){ for (j = 0; j < 3; j++){ num[i][j] = i+j; } } } num 0 1 2 0 0 1 1 2 i j 0 0 1 Manipulação de vetor bidimensional main(){ int num[3][3]; int i, j, x; for (i = 0; i < 3; i++){ for (j = 0; j < 3; j++){ num[i][j] = i+j; } } } num 0 1 2 0 0 1 1 2 i j 0 0 1 2 Manipulação de vetor bidimensional main(){ int num[3][3]; int i, j, x; for (i = 0; i < 3; i++){ for (j = 0; j < 3; j++){ num[i][j] = i+j; } } } num 0 1 2 0 0 1 2 1 2 i j 0 0 1 2 Manipulação de vetor bidimensional main(){ int num[3][3]; int i, j, x; for (i = 0; i < 3; i++){ for (j = 0; j < 3; j++){ num[i][j] = i+j; } } } num 0 1 2 0 0 1 2 1 2 i j 0 0 1 2 3 Manipulação de vetor bidimensional main(){ int num[3][3]; int i, j, x; for (i = 0; i < 3; i++){ for (j = 0; j < 3; j++){ num[i][j] = i+j; } } } num 0 1 2 0 0 1 2 1 2 i j 0 0 1 1 2 3 Manipulação de vetor bidimensional main(){ int num[3][3]; int i, j, x; for (i = 0; i < 3; i++){ for (j = 0; j < 3; j++){ num[i][j] = i+j; } } } num 0 1 2 0 0 1 2 1 2 i j 0 0 1 1 2 3 Manipulação de vetor bidimensional main(){ int num[3][3]; int i, j, x; for (i = 0; i < 3; i++){ for (j = 0; j < 3; j++){ num[i][j] = i+j; } } } num 0 1 2 0 0 1 2 1 1 2 i j 0 0 1 1 2 3 Manipulação de vetor bidimensional main(){ int num[3][3]; int i, j, x; for (i = 0; i < 3; i++){ for (j = 0; j < 3; j++){ num[i][j] = i+j; } } } num 0 1 2 0 0 1 2 1 1 2 i j 0 0 1 1 2 3 Manipulação de vetor bidimensional main(){ int num[3][3]; int i, j, x; for (i = 0; i < 3; i++){ for (j = 0; j < 3; j++){ num[i][j] = i+j; } } } num 0 1 2 0 0 1 2 1 1 2 2 i j 0 0 1 1 2 3 Manipulação de vetor bidimensional main(){ int num[3][3]; int i, j, x; for (i = 0; i < 3; i++){ for (j = 0; j < 3; j++){ num[i][j] = i+j; } } } num 0 1 2 0 0 1 2 1 1 2 2 i j 0 0 1 1 2 3 Manipulação de vetor bidimensional main(){ int num[3][3]; int i, j, x; for (i = 0; i < 3; i++){ for (j = 0; j < 3; j++){ num[i][j] = i+j; } } } num 0 1 2 0 0 1 2 1 1 2 3 2 i j 0 0 1 1 2 3 Manipulação de vetor bidimensional main(){ int num[3][3]; int i, j, x; for (i = 0; i < 3; i++){ for (j = 0; j < 3; j++){ num[i][j] = i+j; } } } num 0 1 2 0 0 1 2 1 1 2 3 2 i j 0 0 1 1 2 3 Manipulação de vetor bidimensional main(){ int num[3][3]; int i, j, x; for (i = 0; i < 3; i++){ for (j = 0; j < 3; j++){ num[i][j] = i+j; } } } num 0 1 2 0 0 1 2 1 1 2 3 2 i j 0 0 1 1 2 2 3 Manipulação de vetor bidimensional main(){ int num[3][3]; int i, j, x; for (i = 0; i < 3; i++){ for (j = 0; j < 3; j++){ num[i][j] = i+j; } } } num 0 1 2 0 0 1 2 1 1 2 3 2 i j 0 0 1 1 2 2 3 Manipulação de vetor bidimensional main(){ int num[3][3]; int i, j, x; for (i = 0; i < 3; i++){ for (j = 0; j < 3; j++){ num[i][j] = i+j; } } } num 0 1 2 0 0 1 2 1 1 2 3 2 2 i j 0 0 1 1 2 2 3 Manipulação de vetor bidimensional main(){ int num[3][3]; int i, j, x; for (i = 0; i < 3; i++){ for (j = 0; j < 3; j++){ num[i][j] = i+j; } } } num 0 1 2 0 0 1 2 1 1 2 3 2 2 i j 0 0 1 1 2 2 3 Manipulação de vetor bidimensional main(){ int num[3][3]; int i, j, x; for (i = 0; i < 3; i++){ for (j = 0; j < 3; j++){ num[i][j] = i+j; } } } num 0 1 2 0 0 1 2 1 1 2 3 2 2 3 i j 0 0 1 1 2 2 3 Manipulação de vetor bidimensional main(){ int num[3][3]; int i, j, x; for (i = 0; i < 3; i++){ for (j = 0; j < 3; j++){ num[i][j] = i+j; } } } num 0 1 2 0 0 1 2 1 1 2 3 2 2 3 i j 0 0 1 1 2 2 3 Manipulação de vetor bidimensional main(){ int num[3][3]; int i, j, x; for (i = 0; i < 3; i++){ for (j = 0; j < 3; j++){ num[i][j] = i+j; } } } num 0 1 2 0 0 1 2 1 1 2 3 2 2 3 4 i j 0 0 1 1 2 2 3 Manipulação de vetor bidimensional main(){ int num[3][3]; int i, j, x; for (i = 0; i < 3; i++){ for (j = 0; j < 3; j++){ num[i][j] = i+j; } } } num 0 1 2 0 0 1 2 1 1 2 3 2 2 3 4 i j 0 0 1 1 2 2 3 Manipulação de vetor bidimensional main(){ int num[3][3]; int i, j, x; for (i = 0; i < 3; i++){ for (j = 0; j < 3; j++){ num[i][j] = i+j; } } } num 0 1 2 0 0 1 2 1 1 2 3 2 2 3 4 i j 0 0 1 1 2 2 3 3 Configuração final do vetor Inicialização de Vetores C permite inicializarmos um vetor no momento da declaração. int i[10]={1,2,3,4,5,6,7,8,9,10} Isto siginifica que i[0] terá o valor 1, i[1] o valor 2 e assim sucessivamente. Vetores de caracteres (strings) devem ser inicializados assim: char str[18] = “Ifet Juiz de Fora”; Toda string possui no seu final um caracter nulo que sinaliza o seu fim (‘/0’). Por isso que dimensionamos o vetor str com tamanho 18 apesar de Ifet Juiz de Fora só possuir 17 caracteres. Inicialização de Vetores int quadrados[10][2] = {1,1,2,4,3,9,4,16,5,25, 6,36,7,49,8,64,9,81,10,100}; Vetor Não Dimensionado Se, em um comando de inicialização de vetor, seu tamanho não é especificado, o compilador C cria um vetor grande o bastante para conter todos os inicializadores presentes. Isto é chamado de vetor ou matriz não-dimensionada. main(){ char str1[18] = “Ifet Juiz de Fora”; char str1[] = “Ifet Juiz de Fora”; printf("\nTamanho de str1 (%s) e %d",str1,sizeof(str1)); printf("\nTamanho de str2 (%s) e %d",str2,sizeof(str2)); } As saídas do programa acima serão: Tamanho de str1 e 18 Tamanho de str2 e 18 A função sizeof() calcula o tamanho em bytes de uma variável String Muitas linguagens de programação fornecem o tipo String para que possamos armazenar uma cadeia de caracteres. Não é o caso da Linguagem C. Em C uma String é definida como um vetor de caracteres sendo seu último elemento o caracter nulo (\0). Por esta razão, você precisa declarar vetores de caracteres como um caractere mais longo que a maior string que elas devem guardar. Você não precisa adicionar o nulo no final das constantes string manualmente. O compilador C faz isso por você automaticamente. Por exemplo, para guardar uma string de 10 caracteres, devemos declarar assim: char str[11].Com isso reservamos espaço para o nulo no final da string. Embora C não tenha o tipo de dado string, ela permite constantes de strings. Exemplo: “jose da silva” A Entrada de uma String Para solicitar a entrada de uma string, utilize a função gets(): char frase[80]; printf("\nDigite uma frase: "); gets(frase); Procure saber sobre algumas funções pré-definidas em C para a manipulação de strings, como por exemplo funções para comparação de strings, cópia, etc. Vetor de String Usa-se um vetor bidimensional de caracteres. O tamanho do índice esquerdo indica o número de strings. O tamanho do índice direito especifica o comprimento máximo de cada string. Declaração de um vetor de 30 strings, cada qual com um comprimento máximo de 79 caracteres: char str[30][80]; Para acessar uma string individual, específicamos apenas o índice esquerdo: a instrução gets(str[2]) acessa a terceira string. Para acessar um caractere de uma string individual da matriz anterior, específicamos da seguinte forma: a instruçãoprintf(“%c”,str[2][5]) mostra o sexto caractere da terceira string. Vetor de String char cidades[5][20] declara o vetor (matriz) abaixo. gets(cidades[1]) lê do teclado uma string (barbacena por exemplo) e armazena na posição 1. Lendo e Exibindo Texto int i, j ; char texto [100][80] ; //permite a digitação do texto printf("\nDigite o texto e 1 linha em branco para encerrar\n" ); for (i=0; i<100; i++){ gets(texto[i]); if (texto[i][0] == '\0'){ break; } } //mostra o texto na tela for (i=0; i<100; i++){ if (texto[i][0] == '\0'){ break ; } printf("%s\n", texto[i]); } Qual a quantidade máxima de caracteres que poderão ser digitados?
Compartilhar