A maior rede de estudos do Brasil

Grátis
120 pág.
ApostilaANSI-C

Pré-visualização | Página 23 de 27

tabela com o seguinte formato. 
 
 Dia 1 Dia 2 Dia 3 Dia 4 Dia 6 Dia 6 Dia 7 
Semana 1 
Semana 2 
Semana 3 
 
 ... 
 
Semana n 
 
Faça um programa que a partir dos dados contidos na tabela gere o seguinte 
relatório: 
 
----------------------------------------------------------------------------------------- 
RELATÓRIO DE PRODUÇÃO RELATIVO À n SEMANAS 
----------------------------------------------------------------------------------------- 
 
PRODUÇÃO DIÁRIA MÉDIA = xxxx.x 
NÚMERO DE DIAS COM PRODUÇÃO ACIMA DA MÉDIA = xx 
 
INDICAÇÃO DOS DIAS DE MÍNIMA PRODUÇÃO: 
 SEMANA 1 .......................................... DIA x 
 SEMANA 2 .......................................... DIA x 
SEMANA 3 .......................................... DIA x 
----------------------------------------------------------------------------------------- 
 
11.2 Elabore um programa que simule um sistema de emissão de bilhetes de uma 
companhia aérea. A companhia possui n vôos, onde em cada um deles existem m 
lugares disponíveis. Os primeiros m/2 lugares de cada vôo estão reservados para 
não fumantes e o restante para fumantes. Utilize uma matriz de n linhas por m 
colunas para representar os assentos dos vôos desta companhia. Inicialize os 
elementos da matriz com zero para indicar que todos os assentos de cada um dos 
n vôos estão disponíveis. À medida que os assentos forem sendo ocupados 
atribua 1 ao elemento correspondente da matriz. 
 
Devem ser gerados aleatoriamente: 
1. O número de vôos. 
 
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS 
Departamento de Ensino do 2o grau - Coordenação de Eletrônica 
Disciplina: Laboratório de Introdução a Programação 
Professora: Rosângela Fátima da Silva 
 
 
102 
2. O número de passagem do vôo. 
3. Se o passageiro é da área dos fumantes ou dos não fumantes. 
 
O programa devera imprimir no final da simulação: 
1. O número médio de passageiros por vôo. 
2. O número médio de passageiros por área em cada vôo 
3. O Número médio de passageiros não embarcados por falta de assento (observe 
que pode haver lugar no avião, mas não haver lugar na área correspondente) 
 
 
 
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS 
Departamento de Ensino do 2o grau - Coordenação de Eletrônica 
Disciplina: Laboratório de Introdução a Programação 
Professora: Rosângela Fátima da Silva 
 
 
103 
 
AULA PRÁTICA 12 
 
OBJETIVO: 
 
� Estudar ponteiros. 
 
INTRODUÇÃO 
 
Nos nossos estudos verificamos que existem variáveis que armazemam dados. 
Agora perceberemos que existem os ponteiros, variáveis que armazemam 
endereços de posições de memórias onde são armazenados os dados. Lembra-se 
quando estudamos vetores e matrizes? Seus nomes representam o endereço 
inicial do espaço de memória reservado, pelo compilador, para o vetor ou para a 
matriz. Tudo isso nos indica que os ponteiros são fundamentais, sem eles não 
podemos localizar os dados guardados em memória. 
 
A linguagem C é altamente dependente dos ponteiros, exigindo que você tenha 
um bom domínio sobre eles. Estude com carinho este capítulo, pois os ponteiros 
são tão importantes na linguagem C que vocês já os viu e nem percebeu. 
 
Atenção:Atenção:Atenção:Atenção: 
 
� O Ministério da Saúde adverte: o uso descuidado de ponteiros pode levar 
a sérios bugs e a dores de cabeça terríveis 
 
 
PONTEIROS 
 
Os ints guardam inteiros. Os floats números de ponto flutuante. Os chars 
guardam caracteres. Ponteiros guardam endereços de memória. Quando você 
anota o endereço de um colega você está criando um ponteiro. O ponteiro é este 
seu pedaço de papel. Ele tem anotado um endereço. Para que serve isto? 
Simples. Quando você anota o endereço de um colega, depois você vai usar este 
endereço para achá-lo. O C funciona assim, você anota o endereço de uma 
posição de memória, em uma variável ponteiro, para depois usar. 
 
Da mesma maneira, uma agenda, onde são guardados endereços de vários 
amigos, poderia ser vista como uma matriz de ponteiros em C. 
 
Um ponteiro também tem tipo, Veja quando você anota o endereço de um amigo 
você o trata diferente de quando você anota o endereço de uma firma. Apesar de 
o endereço dos dois locais ter o mesmo formato (rua, número, bairro, cidade, etc.) 
eles indicam locais cujos conteúdos são diferentes. Então os dois endereços são 
 
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS 
Departamento de Ensino do 2o grau - Coordenação de Eletrônica 
Disciplina: Laboratório de Introdução a Programação 
Professora: Rosângela Fátima da Silva 
 
 
104 
ponteiros de tipos diferentes. Na linguagem C, quando declaramos ponteiros nós 
informamos ao compilador para que tipo de variável vamos apontá-lo. Um int 
aponta para o inteiro, isto é, guarda um endereço de um dado tipo inteiro. 
 
Declaração de um ponteiro 
 
Para declarar um ponteiro temos a seguinte forma geral: 
 
<tipo_do_ponteiro> <*nome_do_ponteiro>; 
 
O operador unário asterísco (*) indica ao compilador que a variável declarada vai 
guardar um endereço para um tipo específico de dado. Vamos ver exemplos de 
declaração de ponteiros: 
 
Int *apt; 
 char *frases, *apt2; 
 
O primeiro exemplo declara um ponteiro para um inteiro. O segundo declra dois 
ponteiros para caracteres. Eles ainda não foram inicializados, apenas declarados. 
Isto significa que eles apontam para um lugar indefinido. Este lugar pode estar, por 
exemplo, na porção da memória reservada ao sistema operacional do 
computador. Usar o ponteiro nestas circunstâncias pode levar ao travamento do 
micro ou algo pior. 
 
 
Atenção:Atenção:Atenção:Atenção: 
 
� O ponteiro deve ser inicializado, ou seja, apontado par algum lugar 
conhecido, antes de ser usado. Isso é de suma importância. 
 
Para atribuir um valor a um ponteiro, poderíamos igualá-lo a um endereço de 
memória. Mas, como saber a posição na memória de uma variável do nosso 
programa? Seria muito difícil saber o endereço de cada variável que usamos, 
mesmo porque estes endereços são determinados pelo compilador na hora da 
compilação e realocados na execução. Podemos então deixar que o compilador 
faça este trabalho por nós. Para saber o endereço de uma variável basta usar o 
operador unário &. Veja o exemplo: 
 
Int cont = 10; 
Int *apt; 
apt = &cont; 
 
Criamos um inteiro cont com o valor 10 e um apontador para um inteiro apt. A 
expressão &cont nos dá o endereço de cont, o qual armazenamos em apt. 
 
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS 
Departamento de Ensino do 2o grau - Coordenação de Eletrônica 
Disciplina: Laboratório de Introdução a Programação 
Professora: Rosângela Fátima da Silva 
 
 
105 
Simples, não é? Repare que não alteramos o valor de cont, que continua valendo 
10. 
 
Como nós colocamos um endereço em apt, ele está agora “liberado” para ser 
usado. Podemos, por exemplo, alterar o valor de cont usando apt. Para tanto 
vamos usar o operador "inverso" do operador &. É o operador *. No exemplo 
anterior, uma vez que fizemos apt=&cont a expressão *apt é equivalente ao 
próprio cont. Isto significa que, se quisermos mudar o valor de cont para 12, basta 
fazer *apt=12. 
 
Atenção:Atenção:Atenção:Atenção: 
 
� Existe o operador unário pré-ficado “asterisco” e o operador binário 
“asterisco”. O primeiro refere-se a um ponteiro e o segundo à operação de 
multiplicação. Existe também o operador unário pré-ficado “&” e o operador 
binário “&”. O primeiro refere-se ao endereço de uma variável e o segundo 
à operação and bit a bit. 
 
Observe os exemplos a seguir: 
 
#include <stdio.h> 
#include <stdlib.h> 
 
/***************************************************************************** 
Programa 42 
Este programa mostra o .uso dos operadores unários “*” e “&”. 
 
******************************************************************************/ 
int main () 
{ 
 int var; 
 int *apt; //Declarar um