linguagem de programação ii parte vii professora: flávia balbino da costa

23
Linguagem de Programação II Parte VII Professora: Flávia Balbino da Costa

Upload: internet

Post on 18-Apr-2015

106 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Linguagem de Programação II Parte VII Professora: Flávia Balbino da Costa

Linguagem de Programação IIParte VII

Professora: Flávia Balbino da Costa

Page 2: Linguagem de Programação II Parte 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

Page 3: Linguagem de Programação II Parte VII Professora: Flávia Balbino da Costa

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.

Page 4: Linguagem de Programação II Parte VII Professora: Flávia Balbino da Costa

• 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

Page 5: Linguagem de Programação II Parte VII Professora: Flávia Balbino da Costa

• 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

Page 6: Linguagem de Programação II Parte VII Professora: Flávia Balbino da Costa

• 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

Page 7: Linguagem de Programação II Parte VII Professora: Flávia Balbino da Costa

• 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

Page 8: Linguagem de Programação II Parte VII Professora: Flávia Balbino da Costa

• 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

Page 9: Linguagem de Programação II Parte VII Professora: Flávia Balbino da Costa

• 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

Page 10: Linguagem de Programação II Parte VII Professora: Flávia Balbino da Costa

• 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

Page 11: Linguagem de Programação II Parte VII Professora: Flávia Balbino da Costa

• 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

Page 12: Linguagem de Programação II Parte VII Professora: Flávia Balbino da Costa

Estrutura de dados heterogêneas REGISTROS

Nome Curso Matricula AnoIngresso

Page 13: Linguagem de Programação II Parte VII Professora: Flávia Balbino da Costa

• 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

Page 14: Linguagem de Programação II Parte VII Professora: Flávia Balbino da Costa

Solução – parte 1:

Page 15: Linguagem de Programação II Parte VII Professora: Flávia Balbino da Costa

Solução – parte 2:

Page 16: Linguagem de Programação II Parte VII Professora: Flávia Balbino da Costa

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.

Page 17: Linguagem de Programação II Parte VII Professora: Flávia Balbino da Costa

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;

Page 18: Linguagem de Programação II Parte VII Professora: Flávia Balbino da Costa

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.

Page 19: Linguagem de Programação II Parte VII Professora: Flávia Balbino da Costa

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;

Page 20: Linguagem de Programação II Parte VII Professora: Flávia Balbino da Costa

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).

Page 21: Linguagem de Programação II Parte VII Professora: Flávia Balbino da Costa

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.

Page 22: Linguagem de Programação II Parte VII Professora: Flávia Balbino da Costa

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).

Page 23: Linguagem de Programação II Parte VII Professora: Flávia Balbino da Costa

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.