Baixe o app para aproveitar ainda mais
Prévia do material em texto
Estruturas de dados homogêneas Prof. Daniel Aguiar daniel.aguiar@ifrn.edu.br O problema u Como você resolveria o seguinte problema: u Ler 6 números inteiros u Calcular a média desses seis números u Imprimir os números maiores que a média? O problema u Como você resolveria o seguinte problema: u Ler 6 números inteiros u Calcular a média desses seis números u Imprimir os números maiores que a média? u Solução simples: u Declarar 6 variáveis do tipo int, ler seu valores, somar seus valores e dividir por 6 ... O problema u Como você resolveria o seguinte problema: u Ler 6 números inteiros u Calcular a média desses seis números u Imprimir os números maiores que a média? u Solução simples: u Declarar 6 variáveis do tipo int, ler seu valores, somar seus valores e dividir por 6 ... u Mas se ao invés de 6 fossem 1000 números? O problema u Como você resolveria o seguinte problema: u Ler 6 números inteiros u Calcular a média desses seis números u Imprimir os números maiores que a média? u Solução simples: u Declarar 6 variáveis do tipo int, ler seu valores, somar seus valores e dividir por 6 ... u Mas se ao invés de 6 fossem 1000 números? u Solução é utilizar uma estrutura de dados homogêneas. Estruturas de dados homogêneas u Também chamadas de variáveis compostas; u Representam um conjunto de variáveis identificadas por um mesmo nome; u São posições da memória identificadas por um único nome; u Podem ser classificadas em dois tipo: unidimensionais e multidimensional; u Unidimensionais: vetores; u Multidimensionais: matrizes; u Não trabalharemos com matrizes. Estruturas de dados homogêneas u Unidimensionais: vetores; u Multidimensionais: matrizes; Vetores u Declaração: tipo identificador [tamanho]; u Corresponderá a posições da memória identificadas por um mesmo nome, individualizadas por índices e de um mesmo tipo; float nota[5]; 0 1 2 3 4 Índices Vetores (Exemplo) u Considere que vamos armazenar 5 notas: u Armazenamos um valor no vetor indicando: u identificador [índice] u O último índice sempre é o número de posições do vetor menos 1 u Então, se queremos armazenar o valor 6.5 na primeira nota, faremos: float nota[5]; nota[0] = 6.5; Vetores (Exemplo) u E assim sucessivamente... nota[0] = 6.5; nota[1] = 6.4; nota[2] = 7.5; nota[4] = 5.5; nota[3] = 9.5; 0 1 2 3 4 6.5 6.4 7.5 9.5 5.5 Vetores u No nosso exemplo, precisávamos somente de 5 notas, mas se fossem 50 notas? u Digitar 50 linhas de códigos, uma para cada nota, não é uma maneira inteligente de utilizar um vetor. u Vetores são, na maioria das vezes, utilizados juntamente com estruturas de repetição; float nota[5]; for (int i = 0; i < 5; i++) { scanf(“%f”, ¬a[i]); } for (int i = 0; i < 5; i++) { printf(“%f”, nota[i]); } Cadeias de caracteres u Diferentemente do Portugol, em C não temos um tipo para representar uma cadeia de caracteres; u São chamadas de strings; u Em C, as strings são representadas por um vetor de caracteres; char nome[10]; Cadeias de caracteres u Em C, As strings sempre terminam com ‘\0’; u Então, sempre o nosso vetor deve ter pelo menos uma posição a mais do o necessário; u Por exemplo, para armazenar a string “Daniel” precisaremos de um vetor de 7 espaços; u O compilador C não acusará erro por isto, mas pode ser que em algum momento ocorra um erro de execução em seu programa; u Por exemplo, pegar um lixo de memória; u Dica: na dúvida, declare um vetor com tamanho maior. Lendo cadeias de caracteres u Em C, vamos ler strings de duas maneiras: u scanf e gets; char nome[10]; scanf (“%s”, nome); char nome[10]; gets (nome); Não utilizaremos o &. Lendo cadeias de caracteres u Qual é a diferença entre scanf e gets? u scanf não vai capturar corretamente strings que possuam espaço em branco; u Por exemplo, se informarmos “Daniel Aguiar” ele só ira capturar “Daniel”. u Ao contrario do scanf, o gets, captura corretamente a string. u Porém existe um problema com o gets, ele também captura mais que o necessário; u Por exemplo, se definirmos uma string com tamanho 6 e lermos uma string com tamanho maior, ele continuará lendo. u Por isso, alguns compiladores do C, o colocam como função insegura; Imprimindo cadeias de caracteres u Para imprimir as cadeias de caracteres utilizaremos as funções printf e puts; char nome[10]; scanf (“%s”, nome); puts (nome); Não utilizaremos o &. char nome[10]; scanf (“%s”, nome); printf (“%s”, nome); Função strlen u Se declaramos vetor maior do que a string que vamos ler, como vamos saber qual é o tamanho real da string? u Para isto, utilizaremos a função strlen; u Ela informa o tamanho da string. char nome[10]; gets (nome); printf (“%d”, strlen(nome)); Dúvidas?
Compartilhar