Baixe o app para aproveitar ainda mais
Prévia do material em texto
Introdução à Programação / Programação e Algoritmia Sumário Enumerações Arrays Declaração Leitura Escrita Processamento Arrays multidimensionais Estruturas (struct) Exercícios Enumerações Atribuir nomes a valores Enumerações Pretende representar variáveis que no mundo real não são numéricas Cores ( azul , verde , . . .) Dias da semana ( segunda, terça , . . . ) Clubes de futebol ( benfica, porto, sporting , braga, . . .) Instrução enum Define um novo tipo cor dia clube O novo tipo é definido em cima de inteiros Dias da semana enum dia { segunda , terca, quarta, quinta , sexta , sabado , domingo}; As definem um novo tipo de dados As enumerações atribuem nomes a valores inteiros … -1 0 1 2 3 4 5 6 7 … Segunda Terca Quarta Quinta Sexta Sabado Domingo Numeros Inteiros Enumerações É possível definir qual o valor que vai ter o nome segunda = 1; Dezembro = 12 Sempre que o valor é omitido o valor atribuído é o da enumeração anterior + 1 Ao primeiro é atribuído o valor zero … -1 0 1 2 3 4 5 6 7 … domingo Segunda Terca Quarta Quinta Sexta Sabado Numeros Inteiros Arrays 8 Arrays Conjunto de valores todos do mesmo tipo aos quais se dá um nome. Cada dado individual é chamado de elemento Pode conter elementos de qualquer tipo int , char, float, double, . . ., outros Os elementos ocupam posições contíguas de memória. O nome do array representa o conjunto de elementos. nota1 nota2 nota3 nota4 nota5 nota6 notas 9 Arrays Declaração tipo nome_variavel [numero de elementos]; tipo - Tipo de dados do array Qualquer tipo de dados ( int, float, char , . . . ) Nome - nome do array Respeita as regras da atribuição de nomes em C Numero de elementos Valor constante que indica quantos elementos tem o vector ERRO 10 Array int nota[7] Define um array com sete elementos do tipo inteiro São definidas 7 variáveis indexadas O índices começam em zero e acabam no número de elementos -1 nota[0] . . . nota[6] Acesso aos elementos do array Indexado pelo operador [ ] nota[5] = 3 soma = nota[0] + nota[1]; O compilador não verifica os índices nota[-1] =5 ; nota[7] =15; 15 11 Utilização de arrays Definir um array chamado nota com dez elementos do tipo inteiro int nota[10]; Colocar a nota 10 na primeira posição nota[0] = 10; Colocar a nota 5 na segunda posição nota[1] = 5; Colocar a média das duas primeiras na última nota[9] = (nota[0] + nota [1] ) / 2 nota[0] nota[1] nota[2] nota[3] nota[4] nota[5] nota[6] nota[7] nota[8] nota[9] nota 12 Ler arrays Ler as notas for( i=0; i< 10; i++) { scanf(“%d”, ¬a[i]) ; } i=0 i < 10 nota[i] i = i+1 sim não nota[0] nota[1] nota[2] nota[3] nota[4] nota[5] nota[6] nota[7] nota[8] nota[9] nota 13 Escrever arrays Ler as notas for( i=0; i< 10; i++) { printf(“ %d”, nota[i]) ; } i=0 i < 10 i = i+1 sim não nota[i] nota[0] nota[1] nota[2] nota[3] nota[4] nota[5] nota[6] nota[7] nota[8] nota[9] nota 14 Soma dos valores Calcular a soma do elementos int soma=0; for( i=0; i< 10; i++) { soma += nota[i] ; } i=0 i < 10 i = i+1 sim não soma=0 soma = soma + nota[i] nota[0] nota[1] nota[2] nota[3] nota[4] nota[5] nota[6] nota[7] nota[8] nota[9] nota soma 15 Máximo de um array i=1 i < 10 i = i+1 simnão maximo = nota[0] nota[i] > maximo maximo = nota[i] simnãonão Nota máxima Nota máxima maximo = nota[0]; for(i=1; i< 10; i++) { if(maximo < nota[i]) { maximo = nota[i]; } } 17 Exercício Para avaliar a regularidade de vendas de um trabalhador, escreva um programa que realize a leitura as comissões pagas a um trabalhador durante um ano, calcule a média de comissões pagas e o seus desvio padrão. N mediaix dp 2)][( 18 Resolução Declaração de variáveis double comissao[12]; //comissões do trabalhador int i ; // variavel auxiliar para iteração Introdução dos valores printf("Introduza as Comissoes n"); for(i=0; i< 12; i++){ printf(“mes %d :", i+1); scanf("%f",&comissao[i]); } ecra Introduza as comissoes mes 1: 10 mes 2: 15 mes 3: 5 mes 4: 8 mes 5: 10 mes 6: 12 mes 7: 16 mes 8: 8 mes 9: 5 mes 10: 12 mes 11: 11 mes 12: 10 0 1 2 3 4 5 6 7 8 9 10 11 19 Resolução Cálculo da média double soma = 0.0; for( int i=0 ; i < 12 ; i++) soma += comissao[i]; double media = soma / 12.0; printf( " Media : %lf“,media); ecra Media : 10.1667 Desvio Padrão double desv_pad = 0.0; for( int i=0 ; i < 12 ; i++) desv_pad += pow( comissao[i] - media , 2.0 ); desv_pad = sqrt ( desv_pad / 12.0 ); printf(" Desvio Padrão :%lf”,desv_pad); ecra Desvio Padrão : 3.26173 N mediaix dp 2)][( 20 Inicialização automática de vectores Quando não inicializados os arrays contêm LIXO. 11010000 11010000 11010000 11010000 11010000 11010000 11010001 notas[0] notas[1] notas[2] notas[3] notas[4] notas[5] notas[6] notas ERRO !!!!!!!! int notas[6]; int i; for(i=0; i< 6; i++) printf("%d\n",notas[i]); ecra 0 4202572 2147303424 844745036 1 256 21 Inicialização automática de vectores Inicialização tipo var[n] = { valor_1, valor_2, . . ., valor_n}; Exemplos int nota[7] = { 10 , 5, 18, 6, 19 ,17,18}; char vogal[5] = { ‘a’ , ‘e’, ‘i’, ‘o’, ‘u’}; 10 5 18 6 19 17 18 notas[0] notas[1] notas[2] notas[3] notas[4] notas[5] notas[6] notas 22 Inicialização automática Omitir a dimensão na inicialização char vogal[] = { ‘a’ , ‘e’, ‘i’, ‘o’, ‘u’}; O número de elementos é o número de valores da inicialização Valores insuficientes int nota[7] = { 10 , 5}; Os valores são introduzidos nos primeiros elementos e os restantes recebem o valor ZERO 23 Inicialização automática Exemplos correctos: •int v[3]={1,2,3}; •int v[10] = {0}; •int v[] ={1,2,3}; Exemplos Incorrectos: •int v[]; •int v[3]={}; •int v[2] = {1,3,5}; •int v={1,2,3}; 24 Matrizes (arrays multidimensionais) Não existe limite para o número de dimensões de um vector Sintaxe tipo nome_variavel[dim_1][dim_2]…[dim_n] Exemplos int notas[20][3] char galo[3][3] galo[0] galo[1] galo[2] o x o x o x o x galo[2][0]=‘O’ galo[2][2]=‘X’ 25 Matrizes (arrays multidimensionais) Inicialização char galo[3][3] = {{‘O’, ‘ ‘, ‘ ‘}, {‘ ’, ‘X ‘, ‘ ‘}, {‘O’, ‘ ‘, ‘X ‘}}; o x o x 26 Restrições ao uso de Arrays Não é permitido a utilização de operadores. Aritméticos ou lógicos NotasTotal = NotasPaulo + NotasMaria; Disponíveis apenas para cada um dos elementos NotasTotal[0] = NotasPaulo[0] + NotasMaria[0]; Exercício Totoloto Construa uma aplicação que permita gerar uma chave de totoloto. Valores aleatórios Função na biblioteca <stdlib.h> rand() devolve um número inteiro maior que zero Valores aleatórios entre dois limites min – minimo do intervalo max – maximo do intervalo Inicialização de números aletórios função void srand( int seed) inicializa os numeros aleotórios com a semente seed função long time(0) devolve o número de segundos desde o início da era UNIX (1-1- 1970) Definida na biblioteca time.h Estruturas (struct) Agrupamento de um conjunto de dados O que é uma estrutura Estrutura - conjunto de dados agrupados sobre um mesmo nome a:0 a:1 a:2 a:3 a:4 a:5 a:6 a:7 a:8 a:9a:10 a:11 b:0 b:1 b:3 b:4 b:5 b:6 b:7 b:8 b:9 b:10 b:11 c:0 c:1 c:2 c:3 m c:4 c:5 c:6 c:7 c:8 c:9 c:10 c:11 d:0 d:1 d:2 d:3 d:4 d:5 d:6 d:7 d:8 d:9 d:10 d:11 e:0 e:1 e:2 e:6 e:7 e:8 e:9 e:10 e:11 f:0 f:1 g:2 f:2 f:3 f:4 f:5 f:6 f:7 f:8 f:9 f:10 f:11 g:0 g:1 g:2 g:3 g:4 g:5 g:6 g:7 g:8 g:9 g:10 g:11 h:0 h:1 h:2 h:3 h:4 h:5 h:6 h:7 h:8 h:9 h:10 h:11 10 112 6 7 b c 0 a 1 idade 24 f d e 3 4 5 8 9 Peso g notas[0] notas[1] notas[2] 74.32 notas[1][1]notas[1][2] sexo notas h notas[1][0] As componentes armazenadas dentro de uma estrutura são vulgarmente senominados CAMPOS ou MEMBROS da estrutura M A R I A \0 Est_Civil C 123456 Nome F Sexo Salario PESSOA Declaração de estruturas dados de uma pessoa long identificacao; char sexo; float salario; char estado_civil; Estrutura pessoa struct pessoa { long identificacao; char sexo; float salario; char estado_civil; }; Definição de uma estrutura struct nome_da_estrutura { tipo1 campo1; tipo2 campo2; . . . }; Declaração de estruturas – Outro exemplo dados de uma data int dia; char mes[12]; int ano; Estrutura data struct data { int dia; char mes[12]; int ano; }; A definição de uma estrutura corresponde unicamente à definição de um novo tipo de dados Tipos de dados definidos no programa int double char … float struct pessoa struct data . . . 16 Dezembro 2003 Declaração de variáveis struct pessoa joao; struct pessoa pedro; struct pessoa maria; float peso; int idade; char sexo; struct pessoa ana; Declaração de arrays g:2 g:3 g:4 notas[1] notas[2]notas[0] char nota[3]; struct pessoa grupo[3]; Definição e declaração de variáveis Estrutura pessoa struct pessoa { long identificacao; char sexo; float salario; char estado_civil; } ana, pedro, maria, grupo[6]; Declaração da estrutura Declaração De variaveis Acesso aos membros Exercício: Defina uma variável chamada mary com os campos mother father e dog Resolução struct pessoa { char mother[100]; char father[100]; char dog[100]; } mary; nome’s característica mary.mother mary.father mary.dog Acesso aos membros Estrutura pessoa struct pessoa { long identificacao; char sexo; float salario; char estado_civil; }p; Atribuição de valores p.identificação = 12345678; p.sexo =‘F’; p.salario = 123456; p.estado_civil =‘C’; p Inicialização automática Inicialização de uma variável struct pessoa p = {12345678, ‘F’ , 123456 , ‘C’}; Inicialização de um array struct pessoa grupo[] = { {12345678, ‘F’ , 123456 , ‘C’}, {12345679, ‘M’ , 654321 , ‘S’}, }; Definição de tipos – typedef Declaração de variáveis necessita da palavra struct Seguida do nome da estrutura struct pessoa p A instrução typedef permite abreviar a declaração. typedef nome_antigo novo_nome typedef struct pessoa gente gente p; A palavra typedef não cria nenhum novo tipo de dados Permite apenas que um determinado tipo possa ser denominado de forma diferente Tipos de dados definidos no programa int double char … float struct pessoa struct data gente typedef na declaração da estrutura Estrutura pessoa struct pessoa { long identificacao; char sexo; float salario; char estado_civil; }joao; Definição de tipo typedef struct pessoa trabalhador Definição de variáveis trabalhador maria; trabalhador ana; trabalhador pedro; struct pessoa gerente Estrutura pessoa e tipo trabalhador typedef struct pessoa { long identificacao; char sexo; float salario; char estado_civil; }trabalhador; Definição de variáveis trabalhador maria; trabalhador ana; trabalhador pedro; trabalhador joao; struct pessoa gerente variável Nome do tipo tipo typedef – omissão do nome da estrutura Estrutura tipo trabalhador typedef struct { long identificacao; char sexo; float salario; char estado_civil; }trabalhador; Definição de variáveis trabalhador maria; trabalhador ana; trabalhador pedro; trabalhador joao; trabalhador gerente Na definição typedef struct não podem ser declaradas variáveis (apenas o nome do novo tipo) Estruturas dentro de Estruturas Estruturas dentro de estruturas Exercício: Defina um tipo chamado Estudante que possua como membros de dados o seu número, data de nascimento e da primeira matrícula Estrutura data typedef struct { int ano; int mes; int dia; }DATA; Estrutura pessoa typedef struct { int numero; DATA dn; DATA matricula; }Estudante; Dados de um estudante Numero Dia de nascimento Mês de nascimento Ano de nascimento Dia da 1ª matricula Mes da 1ª matricula Ano da 1ª matricula Estruturas dentro de estruturas Inicialização Estudante paulo= { 100, {1981,1,13} , {2000,10,1} }; Acesso aos membros de dados scanf(“%d”, &paulo.numero); printf (“%d %d %d, paulo.dn.dia , paulo.dn.mes , paulo.dn.ano); scanf(“%d”, &paulo.matricula.dia); scanf(“%d”, &paulo.matricula.mes );
Compartilhar