linguagem de programação ii parte vii professora: flávia balbino da costa
TRANSCRIPT
Linguagem de Programação IIParte VII
Professora: Flávia Balbino da Costa
Conteúdo Programático:
• Revisão (estruturas de decisão e repetição, procedimentos e funções )
• Trabalhando com a Linguagem C• Estrutura de dados homogêneas I - vetores• Estrutura de dados homogêneas II - matrizes• Estrutura de dados heterogêneas - registros• Recursividade• Ponteiros, alocação dinâmica, listas
Estrutura de dados heterogêneas REGISTROS
• Os registros são chamados de tipos estruturados
heterogêneos porque estes têm como objetivo fazer
com que uma variável do tipo registro possa armazenar
ao mesmo tempo diversos valores que podem ser de
tipos distintos.
• Chamaremos cada elemento de um registro de campo e
para cada campo teremos que definir o seu tipo e o seu
identificador. Podemos definir quantos campos forem
necessários.
• Em C, declaramos inicialmente o tipo registro,
normalmente, após a definição das constantes do
seguinte modo:
struct NOME_TIPO{tipo campo1;tipo campo2;...tipo campoN;
};
Estrutura de dados heterogêneas REGISTROS
• Note que a definição dos campos é similar à declaração de
variáveis. Portanto, assim, como na declaração das
variáveis podemos declarar campos do mesmo tipo, na
mesma linha, separados por vírgulas.
• Declaramos uma variável registro, na própria declaração
de variáveis do seguinte modo:
struct NOME_TIPO varReg1, varReg2, ..., varRegN;
Estrutura de dados heterogêneas REGISTROS
• Para manipularmos um registro temos que,
normalmente, fazê-lo campo a campo, como no caso
dos elementos dos vetores.
• A única coisa que temos de diferente é que podemos
fazer atribuição direta entre variáveis registros, o que
não pode ser feito entre vetores.
Estrutura de dados heterogêneas REGISTROS
• Ao se fazer uma atribuição entre duas variáveis
registros, automaticamente o conteúdo de todos os
campos (mesmo que alguns deles sejam vetores) de
uma variável é copiado para os campos da outra
variável.
Estrutura de dados heterogêneas REGISTROS
• Para se ter acesso a um campo de uma variável registro,
seja para utilizar o valor desse campo ou alterar o seu
conteúdo, faremos do seguinte modo:
varReg.campo
Estrutura de dados heterogêneas REGISTROS
• Registros (ou estruturas, como também são chamados
em C) são geralmente utilizados quando queremos
trabalhar com tabelas heterogêneas ou quando estamos
trabalhando com arquivos binários.
• Esta última situação será vista mais tarde com arquivos.
• Quanto à primeira situação, criamos uma tabela
heterogênea simplesmente criando-se um vetor de
registros.
Estrutura de dados heterogêneas REGISTROS
• Veja o exemplo a seguir de como isso pode ser feito:
struct Aluno {char nome[80], curso[30];long matricula;int anoIngresso;
};...void main () {
struct Aluno tab[1000];...
}
Estrutura de dados heterogêneas REGISTROS
• Neste exemplo, foi definido um tipo registro Aluno, com
quatro campos (duas strings, um inteiro longo e um
inteiro simples) e, no início do programa principal, está
sendo declarado um vetor de 1000 registros.
• Podemos pensar nesse vetor de registros como sendo
uma tabela de 1000 linhas e quatro colunas (as duas
primeiras colunas para guardar valores strings, a terceira
para guardar um inteiro longo e a quarta para guardar um
inteiro simples).
Estrutura de dados heterogêneas REGISTROS
Estrutura de dados heterogêneas REGISTROS
Nome Curso Matricula AnoIngresso
• Faça um programa em C que leia do teclado os nomes e
as notas das duas provas de cada aluno de uma turma
de 80 alunos, calcule a média de cada um deles e liste
na tela todos os dados de todos os alunos em ordem
alfabética crescente.
Exemplo de REGISTROS
Solução – parte 1:
Solução – parte 2:
Tratamento de Strings:• Como já foi diversas vezes informado, string não é
um tipo básico do C, sendo que, para se trabalhar
com uma variável string temos que defini-la como um
vetor de caracteres.
• Com isso, algumas operações básicas, como
atribuição e comparação, não podem ser realizadas
diretamente como podem ser realizadas com uma
variável inteira, por exemplo.
Tratamento de Strings:• Para corrigir tal problema, um conjunto de funções
foi definido no C padrão para fazer tratamento de
variáveis strings. Tais funções fazem parte da
biblioteca string.h, e listaremos algumas delas a
seguir:
1)strlen(VAR_STR) – função que retorna a quantidade
de caracteres que o valor armazenado em VAR_STR
possui;
2) strcpy(VAR_STR1, VAR_STR2) – comando para copiar o
conteúdo de VAR_STR2 para VAR_STR1 (ou seja, faz o papel
da atribuição);
3) strcat(VAR_STR1, VAR_STR2) – comando que concatena os
valores contidos nas duas variáveis, armazenando o
resultado na primeira;
4) strupr(VAR_STR) – comando para converter todos os
caracteres letras minúsculas contidos em VAR_STR para
letras maiúsculas;
5) strlwr(VAR_STR) – comando para converter todos os
caracteres letras maiúsculas contidos em VAR_STR para
letras minúsculas.
6) strcmp(VAR_STR1, VAR_STR2) – função que retorna um
valor inteiro de acordo com o resultado da comparação
lexicográfica (isto é, de acordo com a ordem alfabética)
entre os valores contidos nas duas variáveis strings. Se
este valor retornado for negativo, significa que o primeiro
é menor que o segundo; se for igual a 0, significa que os
valores das variáveis são iguais e, se o valor retornado for
positivo, significa que o valor contido na primeira variável
é maior que o valor contido na segunda;strcat(VAR_STR1,
VAR_STR2) – comando que concatena os valores contidos
nas duas variáveis, armazenando o resultado na primeira;
Exercícios:
1) Faça um programa que leia dados de apenas uma Nota Fiscal. Esta NF
é composta por um conjunto de produtos vendidos, onde são
armazenadas as seguintes informações para cada produto:
• Código do produto;
• Nome do produto;
• Preço unitário; e
• Quantidade.
O programa deverá inserir novos produtos enquanto o usuário digitar o código do
produto diferente de 0. A cada loop, mostre o valor total de cada produto
(quantidade * preço unitário). OBS: não usar vetor neste exercício).
Exercícios:
2)Agora faça um programa que leia 5 Notas Fiscais (crie um vetor
de registro de 5 posições) compostas de alguns produtos
vendidos, com as seguintes informações: cod_produto,
nome_produto, valor_unit, quant e valor_total_prod.
No final, mostre o valor total por produto, o valor total de cada
Nota Fiscal (total de valores dos produtos) e o valor total das 5
Notas Fiscais.
Exercícios:
3)Faça um programa que leia as seguintes informações sobre uma
turma:• número da turma;• número de aulas dadas;• número de alunos inscritos.
Deve ser lido também para cada aluno inscrito o seu número de faltas.
O programa deve imprimir o percentual de faltas para cada aluno e ao final do processamento o total de alunos reprovados por falta (25% de faltas).
Exercícios:
4)Faça um programa que leia um número indeterminado de
cartões contendo cada um a idade de uma pessoa e o sexo (0 -
masculino, 1 - feminino). O último cartão (que não entrará nos
cálculos) contém o valor da idade igual a zero. Calcule e imprima
a idade média destas pessoas, quantas pessoas do sexo feminino
estão na faixa dos 18 aos 25 anos e o número total de pessoas
do sexo masculino.