Você está na página 1de 98

Kesede R Julio

Suzete F Silva

kesedejulio@gmail.com, 2suzetefs@gmail.com

Apostila de
Linguagem

C/C++
Campinas So Paulo - Brasil

Sumrio
1.

Introduo....................................................................................................................3

2.

Comandos de Deciso...........................................................................................11

3.

Comandos de Repetio............................................................................................17

4.

Vetor............................................................................................................................25

5.

String...........................................................................................................................29

6.

Matriz..........................................................................................................................35

7.

Estruturas Heterogneas...........................................................................................37

8.

Funes.......................................................................................................................41

9.

TAD Tipo Abstrato de Dados.................................................................................46

10.

Arquivo.......................................................................................................................48

11.

Allegro.........................................................................................................................61

12.

Apndices A Algoritmos e Fluxogramas...............................................................65

13.

Apndices B Resumo de comandos e funes.......................................................72

14.

Apndices C Exerccios..........................................................................................74

15.

Apndices C Acesso a Portas de Comunicao....................................................87

16.

Bibliografia.................................................................................................................90

Linguagem de Programao C/C++


2

1. Introduo
1

Recomendaes ao Aluno

O estudo de programao requer uma boa dose de concentrao


na teoria e dedicao na execuo dos exerccios prticos. Por isso, de
fundamental importncia a digitao de todos os exemplos e o
desenvolvimento de todos os exerccios propostos. Suas dvidas devem
ser resolvidas assim que surgirem, no as adie, pois isto se tornar
uma "bola de neve", fatal para a compreenso e motivao da
continuidade do aprendizado. NO ESTUDE PARA A PROVA, estude
sempre. O estudo deve ser feito periodicamente. Seja disciplinado em
seus estudos para que voc possa colher bons frutos. Leia a teoria,
digite os exemplos, releia a teoria e encare os exerccios propostos. No
desanime nunca, persevere.

AVISO
O desespero causa bloqueio. Fique
calmo!
Ficar calmo no significa fazer nada.
Pesquise, estude, pergunte.
2

Ferramenta de programao: Linguagem C/C++

Para fazer nossos programas, usaremos a linguagem C e a


linguagem C++. A diferena entre elas o fato de esta ltima permitir
a orientao a objetos. Esta apostila no apresentar esse paradigma,
mas far uso de funes pr-definidas somente aceitas na orientao a
objetos. Para isso precisamos de um compilador, programa que
interpretar nossas instrues, e de um IDE (Interface Development
Environment), que permite escrever nossas instrues, corrigi-las e
execut-las. Existe certa influncia do compilador escolhido nas funes
oferecidas pela linguagem. Por isso, esta apostila est direcionada para
Linguagem de Programao C/C++
3

o C-Padro ANSI (American National Standards Institute), pois suas


funes so aceitas por todos os compiladores que seguem este padro.
O compilador escolhido pelo curso o gcc, este compilador j est
embutido no IDE que usaremos chamado Dev-c++ (ou Dev-cpp), o qual
pode ser baixado gratuitamente atravs do site
http://kent.dl.sourceforge.net/sourceforge/dev-cpp/devcpp-4.9.9.2_setup.exe

Atravs da digitao dos exemplos deste captulo, voc poder


praticar os recursos do ambiente de programao que utilizar durante
o curso, alm de aprender alguns conceitos bsicos da prpria
linguagem, como: estrutura de um programa, insero de bibliotecas de
funo, tipo de variveis, entrada e sada de dados em tela, operadores
aritmticos bsicos. Para comear a digitar um exemplo, abra o Dev que
voc acabou de instalar, selecione Arquivo/Novo/Arquivo Fonte. Digite
o programa completo e salve-o com a extenso .c para linguagem C
e .cpp para linguagem C++ (opo Arquivo/Salvar Como...). Agora voc
precisa compilar (verificar erros de escrita) o programa. Clique em
Executar/Compilar. Caso o programa apresente algum erro, ele
indicar a linha do erro atravs de um destaque colorido. Na aba
Compilador (parte inferior do IDE) aparecero a linha e a descrio do
erro ocorrido. Tente corrigi-lo e compile novamente. O programa s
poder ser executado se todos os erros de compilao forem retirados
do programa. Aps a compilao sem erros, voc poder executar o
programa. Clique em Executar/Executar. Aparecer um console
(janelinha preta) com a execuo do programa em andamento.
Aps verificar que o programa est correto, ou seja, fez
exatamente o que voc pediu que fizesse, voc poder abrir uma nova
aba (Arquivo/Novo/Arquivo fonte) para digitar o prximo exemplo.
Segue abaixo 3 exemplos para serem digitados, compilados e
executados. Nossos exemplos sempre seguiro este padro: um
enunciado dizendo o que deve ser feito, uma coluna com o nmero da
linha (ou do bloco) do cdigo, outra coluna para o cdigo que deve ser
digitado e outra com a descrio do que ele faz. Exercite digitando os
exemplos abaixo.
Digite o Exemplo 1.1(C):- Faa um programa que escreva seu nome na tela.

#include <stdio.h>

Permite o uso das funes printf().No precisam ser includos para


arquivos .c.

#include <conio.h>

Permite o uso da funo getch(). No precisam ser includos para


arquivos .c

int main(){

Abre a funo principal do programa

Linguagem de Programao C/C++


4

printf("Kesede R Julio");

Imprime a mensagem na tela

getch();

Para a execuo do programa

Fecha a funo principal

Digite o Exemplo 1.1(C++):- Faa um programa que escreva seu nome na tela.

#include <iostream>

Permite o uso de cout.

using namespace std;

Permite o uso de cout

int main(){

Abre a funo principal do programa

cout<<"Kesede R Julio";

Imprime a mensagem na tela

system(pause);

Para a execuo do programa

Fecha a funo principal

Digite o Exemplo 1.2(C):- Faa um programa que mostre uma mensagem de Ol personalizada. Permita
que o usurio digite seu nome.

#include <stdio.h>

Permite o uso das funes printf() e scanf().No precisam ser


includos para arquivos .c.

#include <conio.h>

Permite o uso da funo conio().


arquivos .c

int main(){

Abre a funo principal do programa

No precisam ser includos para

char nome[30];

Reserva um espao na memria para guardar at 29 caracteres.

scanf(%s,nome);

Recebe o nome do usurio e guarda na varivel nome

printf("Ola, %s, nome);

Imprime a mensagem na tela substituindo o formato (%s) pelo


contedo da varivel nome

getch();

Para a execuo do programa

Fecha a funo principal

Digite o Exemplo 1.2(C++):- Faa um programa que mostre uma mensagem de Ol personalizada.
Permita que o usurio digite seu nome.

#include <iostream>

Permite o uso cout e cin

using namespace std;

Permite o uso de cout e cin

int main(){

Abre a funo principal do programa

char nome[30];

Reserva um espao na memria para guardar at 29 caracteres.

cin>>nome;

Recebe o nome do usurio e guarda na varivel nome

cout<<"Ola, << nome;

Imprime a mensagem na tela substituindo a varivel nome pelo


seu contedo

system(pause);

Para a execuo do programa

Fecha a funo principal

Digite o Exemplo 1.3(C):- Um empregado da empresa Alfa tem dois vencimentos: salrio e gratificao.
Faa um programa que receba os vencimentos do empregado, e mostre o salrio que ele ir receber.

#include <stdio.h>

Linguagem de Programao C/C++


5

Permite o uso das funes printf() e scanf().No


precisam ser includos para arquivos .c.

#include <conio.h>

Permite o uso da funo conio().


includos para arquivos .c

int main(){

Abre a funo principal do programa

No precisam ser

float salario;

Define espao de memria chamado salario

float grat;

Define espao de memria chamado grat

float soma;

Define espao de memria chamado soma

printf(Digite o salario: ");

Imprime uma mensagem na tela

scanf(%f,&salario);

Recebe o que o usurio digitou e guarda em salario

printf("\nDigite a gratificacao: ");

Imprime uma mensagem na tela

10

scanf(%f,&grat);

Recebe o que o usurio digitou e guarda em grat

11

soma = salario + grat;

12

printf("\n\nO resultado eh: %f",


soma);

13
14

getch();

Soma o contedo de salrio e grat e guarda em soma


Imprime a mensagem na tela substituindo o formato %f
pelo contedo de soma
Para a execuo do programa
Fecha a funo principal

Digite o Exemplo 1.3(C++):- Um empregado da empresa Alfa tem dois vencimentos: salrio e
gratificao. Faa um programa que receba os vencimentos do empregado, e mostre o salrio que ele ir
receber.

#include <iostream>

Permite o uso cout e cin

using namespace std;

Permite o uso cout e cin

int main(){

Abre a funo principal do programa

float salario;

Define espao de memria chamado salario

float grat;

Define espao de memria chamado grat

float soma;

Define espao de memria chamado soma

cout<<Digite o salario: ";

Imprime uma mensagem na tela

cin>>salario;

Recebe o que o usurio digitou e guarda em salario

cout<<"\nDigite a gratificao: ";

Imprime uma mensagem na tela

10

cin>>grat;

Recebe o que o usurio digitou e guarda em grat

11

soma = salario + grat;

Soma o contedo de salrio e grat e guarda em


soma

12

cout<<"\n\nO resultado eh: "<< soma;

Imprime a mensagem na tela substituindo o formato


%f pelo contedo de soma

13

system(pause);

14

Estrutura de um Programa

Para a execuo do programa


Fecha a funo principal

A estrutura de um programa C/C++ , basicamente, realizada em


funes. A princpio, no se escreve nenhum comando que no esteja
Linguagem de Programao C/C++
6

dentro de uma funo. Na figura 1, a funo comea na linha int


main(){ e termina em }. Por isso, a estrutura de programa
apresentada a prpria estrutura da funo main().
<tipo de retorno> <nome da funo> (<argumento>,...)
{
<comandos e funes>
}
Onde:
Tipo de retorno: o tipo da informao que uma funo pode
retornar. Em nosso exemplo o retorno int. Voc poder
encontrar o tipo de retorno da main() como void, indicando
que no h retorno.
Nome da funo: o que identificar a funo. Se houver
apenas uma funo no programa, esta dever se chamar,
obrigatoriamente, main (principal).
Argumentos: so entradas de informaes recebidas por
outras funes. Na figura 1, no h entrada de argumentos.
Comandos e funes: a prpria lgica do programa.
Comandos, chamada de funes pr-definidas, chamada de
funes escritas pelo programador, colocadas em uma
sequencia lgica para ser obedecida pelo compilador.

Figura 1: Estrutura de um programa


Linguagem de Programao C/C++
7

Insero de Arquivos de Funo

So arquivos texto contendo os cabealhos das funes


fornecidas pelo prprio compilador. Para usar qualquer funo prdefinida, voc deve declarar o nome do arquivo entre aspas, atravs da
declarao include precedida pelo caractere #. No Apndice A,
listamos o nome de alguns desses arquivos e suas respectivas funes.
Em nosso exemplo da Figura 1 foram inseridas iostream, usada em
C++ e conio.h usada em C. Apesar de conio.h ter sido inserida, o
programa no usou uma de suas funes. A funo cout pertence a
iostream.
5

Entrada e Sada de dados em tela

As principais funes de entrada e sada de dados em tela foram


usadas nos exemplos anteriores e so descritas a seguir.

Figura 2: entrada e sada na tela na Linguagem C.


Exemplo de sada de dados na Linguagem C:
printf(Resultado da soma %d., soma);

Resultado da

Figura 3: sada em tela para soma=10

Linguagem de Programao C/C++


8

Caso a varivel soma seja 10, a mensagem mostrada para o


usurio ser a que se v na Figura 3.
Exemplo de entrada de dados na Linguagem C:
scanf(%f, &valor);
Neste exemplo, o programa ser interrompido para que o usurio
digite uma informao, que dever ser um nmero real. Este nmero
ser alocado em um espao de memria chamado valor, declarado
previamente como float (conjunto dos nmeros reais). A funo scanf
exige o endereo da varivel que dado pelo & antes da mesma.
Aparecer na tela apenas o que for digitado.
Quanto s funes de entrada e sada na linguagem C++,
observe a estrutura de cout e de cin na Figura 4.

Figura 4: entrada e sada em tela na linguagem C++


Exemplo de sada de dados na Linguagem C++:
cout<< Resultado da soma <<soma<< .;

Resultado da

Figura 3: sada em tela para soma=10

Exemplo de entrada de dados na Linguagem C++:


cin>>valor;
Neste exemplo, o programa ser interrompido para que o usurio
digite uma informao, que dever ser um nmero real. Este nmero
ser alocado em um espao de memria chamado valor, declarado
previamente como float.

Linguagem de Programao C/C++


9

Tipos e Variveis

Sempre que preciso manipular alguma informao, tenho que


reservar um espao para armazen-la na memria, determinando
tambm o tipo e tamanho da informao a ser armazenada.

Figura 5: Representao de Varivel.


Os tipos bsicos so apresentados na tabela abaixo:
Tipo
int
char
float
double

O que aceita
conjunto dos nmeros inteiros
qualquer caractere
conjunto dos nmeros reais
conjunto dos nmeros reais

tamanho
2 bytes com sinal
1 byte com sinal
4 bytes com sinal
8 bytes com sinal

Assim,
float salario;
reserva um espao de memria chamado salario do tipo float.
7

Operadores Bsicos

Existem 4 tipos de operadores como mostram as tabelas abaixo:


Aritmticos
Smbolo
Descrio
+
Soma
Subtrao
*
Multiplicao
/
Diviso
%
Resto da diviso
++
Incremento
-Decremento
Condicionais
Smbolo

Descrio

&&

Linguagem de Programao C/C++


||
Ou
10
Bit-a-bit

&

Ou

Lgicos
Smbolo

Descrio

==

Igualdade

!=

Diferente

<

Menor

<=

Menor ou igual

>

Maior

>=

Maior ou igual

Encerra-se aqui o Captulo 1.


Pratique e verifique seus conhecimentos fazendo os
exerccios de 1 a 16 que se encontram no Apndice 14.

Linguagem de Programao C/C++


11

2. Comandos de
Deciso

Comando if/else

Definio: Usado para


dependentes de condies.
Sintaxe simplificada:

executar

um

ou

mais

comandos

if (<condio> &&/|| <condio> ...){


<comandos e/ou funes>
}
else{
<comandos e/ou funes>
}
A palavra if obrigatria. Tudo que estiver entre < e > deve
ser substitudo pela informao pertinente. Os smbolos < e > no
devem ser digitados.
O else usado quando queremos executar algum comando caso a
condio do if seja falsa. Ele opcional.
O { e } pode ser dispensado quando temos apenas uma linha
de cdigo dentro da estrutura de deciso, porm caso voc sempre use,
nunca errar, ter uma regra a menos para guardar e ter seu
programa mais organizado (esta apenas minha opinio).
O if pode ser usado com duas ou mais condies amarradas com
um e lgico (&&) ou com um ou lgico (||). Abaixo apresentamos
alguns exemplos.
Digite o Exemplo 2.1(C):- Entre com o valor da nota de uma
determinada disciplina de um aluno e mostre a mensagem de Aprovado, se sua
nota for maior ou igual a 6, ou Reprovado, se sua nota for menor que 6.
1

Permite o uso das funes printf() e

#include <stdio.h>
scanf()

#include <conio.h>

Linguagem de Programao C/C++


12

Permite o uso da funo getch()

Abre a funo principal do programa

int main(){

Define espao de memria chamado

float nota;
nota

scanf(%f, &nota);

Recebe a nota do usurio

if (nota>=6){

Verifica se nota maior ou igual a 6

Caso seja, imprime mensagem na tela

printf(Aprovado);

Fecha o if

else{

10

printf(Reprovado);

Verifica se nota menor que 6 (caso


contrrio do if)
Caso

seja

menor

que

6.

imprime

mensagem
11

Fecha else

12

getch();

Para a execuo do programa

13 }

Fecha funo principal

Digite o Exemplo 2.1(C++):- Entre com o valor da nota de uma determinada disciplina
de um aluno e mostre a mensagem de Aprovado, se sua nota for maior ou igual a 6, ou Reprovado, se
sua nota for menor que 6.
1

#include <iostream>

Permite o uso cout e cin

using namespace std;

Permite o uso cout e cin

int main(){

Abre a funo principal do programa

float nota;

Define espao de memria chamado nota

cin >>nota;

Recebe a nota do usurio

if (nota>=6){

Verifica se nota maior ou igual a 6

Caso seja, imprime mensagem na tela

cout<<Aprovado;

else{

10

Fecha o if
if)

cout<<Reprovado;

Verifica se nota menor que 6 (caso contrrio do


Caso seja menor que 6. imprime mensagem

11

Fecha else

12

system(pause);

Para a execuo do programa

13

Fecha funo principal

No exemplo 2.1, o programa recebe do usurio um valor e atribui


este valor varivel nota, depois disso, testa se o valor digitado
maior ou igual a 6, se for verdadeira esta condio, o programa mostra
Aprovado na tela, caso contrrio, mostra Reprovado. Note que
apenas uma das mensagens ser mostrada, pois o else a negao
da condio.
Digite o Exemplo 2.2(C):- Entre com o valor da nota de uma
determinada disciplina de um aluno e mostre a mensagem de Aprovado, se sua

Linguagem de Programao C/C++


13

nota for maior ou igual a 6, Exame se sua nota estiver entre 4 e 5,9 ou
Reprovado, se sua nota for menor que 4.
1

#include <stdio.h>

#include <conio.h>

Permite o uso da funo getch()

int main(){

Abre a funo principal do programa

scanf()

Permite o uso das funes printf() e

float nota;

scanf(%f, &nota);

Recebe a nota do usurio

if (nota>=6){

Verifica se nota maior ou igual a 6

nota

Caso seja, imprime mensagem

printf(Aprovado);

else{

10

Define espao de memria chamado

Fecha o if
Verifica se nota menor que 6 (caso
contrrio do if)
Verifica se a nota maior que 4

if (nota>=4){

11

Caso seja, imprime mensagem

printf(Exame);

12

Fecha o if

13

else{

14

printf(Reprovado);

Verifica se nota menor que 4 (caso


contrrio do if)
Caso

seja

menor

que

4,

imprime

mensagem
15

Fecha else

16

Fecha else

17

getch();

Pra a execuo do programa

18 }

Fecha funo principal

Digite o Exemplo 2.2(C++):- Entre com o valor da nota de uma determinada disciplina
de um aluno e mostre a mensagem de Aprovado, se sua nota for maior ou igual a 6, Exame se sua
nota estiver entre 4 e 5,9 ou Reprovado, se sua nota for menor que 4.
1

#include <iostream>

Permite o uso cout e cin

using namespace std;

Permite o uso cout e cin

int main(){

Abre a funo principal do programa

float nota;

Define espao de memria chamado nota

cin>>nota;

Recebe a nota do usurio

if (nota>=6){

Verifica se nota maior ou igual a 6

7
8

else{

10

Fecha o if
Verifica se nota menor que 6 (caso contrrio do
if)

if (nota>=4){

11
12

Caso seja, imprime mensagem

cout<<Aprovado;

cout<<Exame;
}

Linguagem de Programao C/C++


14

Verifica se a nota maior que 4


Caso seja, imprime mensagem
Fecha o if

13

else{

14

cout<<Reprovado;

Caso seja menor que 4, imprime mensagem

15

Fecha else

if)

Verifica se nota menor que 4 (caso contrrio do

16

Fecha else

17

system(pause);

Para a execuo do programa

18

Fecha funo principal

No exemplo 2.2, o programa recebe do usurio um valor e atribui


este valor varivel nota, depois disso, testa se o valor digitado
maior ou igual a 6, se for verdadeira esta condio, o programa mostra
Aprovado na tela, caso contrrio, testa se a nota maior que 4, caso
seja mostra Exame na tela, caso contrrio, mostra Reprovado.
9

Switch

Definio: Usado para executar um ou mais comandos caso o


contedo da varivel testada seja igual ao valor de algum dos casos.
Sintaxe simplificada:
switch (<variavel testada>){
case <valor>:
<comandos e funes>
break;
case <valor>:
<comandos e funes>
break;
default:
<comandos e funes>
}

Como ltima funo para cada caso, utilizamos a funo "break"


para que o programa no precise testar o restante das condies.
O default (similar ao else do if) usado quando queremos
executar algum comando, caso o valor da varivel seja diferente de
todos os valores testados. Ele opcional.
Podemos substituir qualquer switch por ifs, porm nem todo if
pode ser substitudo por switchs. Isto acontece porque o switch no
verifica intervalos de valores, apenas igualdade.
O switch organiza melhor o programa quando temos uma
Linguagem de Programao C/C++
15

determinada varivel para ser verificada sua igualdade com diversos


valores.
Digite o exemplo 2.1(C): Faa um programa que permite que o
usurio entre com o cdigo do produto e o programa mostre o nome deste produto.
Os produtos so: cod. 1 cd, cod. 2 livro, cod. 3 revista, cod. 4 jornal.
1

Permite o uso das funes printf()

#include <stdio.h>
e scanf()

#include <conio.h>

int main(){

Permite o uso da funo getch()


programa

int codigo;

printf(Digite o codigo: );

scanf(%i,&codigo);

Abre

Define
chamado salario

funo
espao

principal
de

do

memria

Mostra mensagem na tela


Recebe

valor

do

cdigo

do

usurio
7

switch (codigo){

case 1:

Abre o
verificao do cdigo

comando

switch

Verifica se o cdigo igual a 1

printf(CD);

Caso seja, mostra mensagem

10

break;

Sai o switch

11

Verifica se o cdigo igual a 2

case 2:

12

printf(Livro);

Caso seja, mostra mensagem

13

break;

Sai o switch

14

Verifica se o cdigo igual a 3

case 3:

15

printf(Revista);

Caso seja, mostra mensagem

16

break;

Sai o switch

17

Verifica se o cdigo igual a 4

case 4:

18

printf(Jornal);

Caso seja, mostra mensagem

19

break;

Sai o switch

20

para

Verifica se diferente de todos os

default:
cases

21

printf(Opo Invlida);

Caso seja, mostra mensagem

22

Fecha switch()

23

getch();

Pra execuo do programa

24

Fecha funo principal

Digite o exemplo 2.1(C++): Faa um programa que permite que o usurio entre com
o cdigo do produto e o programa mostre o nome deste produto. Os produtos so: cod. 1 cd, cod. 2
livro, cod. 3 revista, cod. 4 jornal.
1

#include <iostream>

Linguagem de Programao C/C++


16

Permite o uso cout e cin

using namespace std;

Permite o uso cout e cin

int main(){

Abre a funo principal do programa

int codigo;

Define espao de memria chamado salario

cout<<Digite o codigo: ;

Mostra mensagem na tela

cin>>codigo;

Recebe o valor do cdigo do usurio

switch (codigo){

case 1:

cdigo

Abre o comando switch para verificao do


Verifica se o cdigo igual a 1

cout<<CD;

Caso seja, mostra mensagem

10

break;

Sai o switch

11

case 2:

Verifica se o cdigo igual a 2

12

cout<<Livro;

Caso seja, mostra mensagem

13

break;

Sai o switch

14

case 3:

Verifica se o cdigo igual a 3

15

cout<<Revista;

Caso seja, mostra mensagem

16

break;

Sai o switch

17

case 4:

Verifica se o cdigo igual a 4

18

cout<<Jornal;

Caso seja, mostra mensagem

19

break;

Sai o switch

20

default:

21

cout<<Opo Invlida;

Verifica se diferente de todos os cases


Caso seja, mostra mensagem

22

Fecha switch()

23

system(pause);

Para execuo do programa

24

Fecha funo principal

Encerra-se aqui o Captulo 2.


Pratique e verifique seus conhecimentos fazendo os
exerccios 17 e 18 usando switch-case e os exerccios de
19 a 28 usando if-else que se encontram no Apndice 14.

Linguagem de Programao C/C++


17

3. Comandos de
Repetio

10 Comando while

Sintaxe simplificada:
while (<condio>){
<comandos e funes>
}
Este comando executa os comandos e funes internos a ele
enquanto a condio for verdadeira. Diferente do if que, caso a
condio seja verdadeira, executa os comandos internos e segue
adiante, o while volta a executar a primeira linha do lao, ou seja, o
teste da condio. Ele continua testando e executando os comandos
internos at que a condio seja falsa. Existem outros comandos de
looping (for e do-while), porm se voc souber bem o while poder uslo em qualquer situao.
Digite o Exemplo 3.1(C):- Mostre os nmeros inteiros de 1 a 100.

#include <stdio.h>

Permite o uso das funes printf() e scanf()

#include <conio.h>

Permite o uso da funo getch()

int main(){

Abre a funo principal do programa

int i=1;

(declarao e inicializao da varivel i) Define


espao de memria chamado i e atribui 1 p/ este espao
Imprime mensagem na tela

printf(Imprimindo os
nmeros de 1 a 100);

Verifica se i menor ou igual a 100

while (i<=100){

printf(%i\n, i);

i=i+1;

Imprime o contedo da varivel i


prprio i

(contador) Soma 1 em i e atribui o resultado no

Fecha o while

10

getch();

Para a execuo do programa


Fecha a funo principal

11 }

Digite o Exemplo 3.1(C++):- Mostre os nmeros inteiros de 1 a 100.

#include <iostream>

Permite o uso cout e cin

using namespace std;

Permite o uso cout e cin

int main(){

Abre a funo principal do programa

Linguagem de Programao C/C++


18

4
5

int i=1;

(declarao e inicializao da varivel i) Define


espao de memria chamado i e atribui 1 p/ este espao
Imprime mensagem na tela

cout<<Imprimindo os
nmeros de 1 a 100;

Verifica se i menor ou igual a 100

while (i<=100){

cout<<\n<< i;

i=i+1;

Imprime o contedo da varivel i


prprio i

Fecha o while

10

(contador) Soma 1 em i e atribui o resultado no

Para a execuo do programa

system(pause);

Fecha a funo principal

11 }

No exemplo 3.1, a varivel i inicializada com o valor 1 e


incrementada dentro do lao do while. A condio do comando while
testa se o valor de i menor ou igual a 100 e enquanto isso for
verdade, a varivel mostrada na tela. Ao comando i=i+1
chamamos de contador. O contador um conceito importante na
programao, pois atravs dele podemos alterar o valor de uma varivel
atravs de um passo determinado. Podemos ter contadores que
somem com passo de 1 em 1 (como no caso do exemplo), de 2 em 2,
de 5 em 5, ou seja, como nos convier. Uma variao deste conceito o
acumulador. A diferena que, ao invs de contarmos (acumularmos)
constantes numricas (1, 2, 3 etc), acumulamos variveis, como:
salrios, notas, idades, prestaes etc.. O exemplo 3.2 mostra o uso de
um contador (cont) e de um acumulador (somaid).
Digite o Exemplo 3.2(C):- Faa um programa que receba a idade de 10 alunos de uma
academia e mostre a mdia das idades.

#include <stdio.h>

Permite o uso das funes printf() e scanf()

#include <conio.h>

Permite o uso da funo getch()

int main(){

Abre a funo principal do programa


Define espaos de memria inteiros para
guardar as idades, o contador (cont) e o acumulador
(somaid). O contador e acumulador devem ser inicializados.

int idade, cont=1, somaid=0;

float media;

printf(Digite as idades\n);

Imprime mensagem na tela

while (cont<=10){

Verifica se o contador menor ou igual a 10

a media

Define espao de memria float para guardar

scanf(%i, &idade);

Recebe a idade do usurio e guarda seu valor


na varivel idade

somaid=somaid+idade;

(acumulador) Soma a idade ao acumulador


(que vale zero da primeira vez) e guarda o resultado no
prprio acumulador. Na prxima iterao o acumulador j
estar atualizado.

10

cont=cont+1;

(contador) Soma 1 ao contador (que vale 1


da primeira vez) e guarda o resultado no prprio contador. Na

Linguagem de Programao C/C++


19

prxima iterao o contador j estar atualizado.

11

Fecha o while

12

media=somaid/10;

Calcula a media.

13

printf(A media eh %f,media);

Mostra a media na tela

14

getch();

Para a execuo do programa


Fecha a funo principal

15 }

Digite o Exemplo 3.2(C++):- Faa um programa que receba a idade de 10 alunos de


uma academia e mostre a mdia das idades.

#include <iostream>

Permite o uso cout e cin

using namespace std;

Permite o uso cout e cin

int main(){

Abre a funo principal do programa


Define espaos de memria inteiros para
guardar as idades, o contador (cont) e o acumulador
(somaid). O contador e acumulador devem ser inicializados.

int idade, cont=1, somaid=0;

float media;

cout<<Digite as idades\n;

Imprime mensagem na tela

while (cont<=10){

Verifica se o contador menor ou igual a 10

a media

Define espao de memria float para guardar

cin>>idade;

Recebe a idade do usurio e guarda seu valor


na varivel idade

somaid=somaid+idade;

(acumulador) Soma a idade ao acumulador


(que vale zero da primeira vez) e guarda o resultado no
prprio acumulador. Na prxima iterao o acumulador j
estar atualizado.

10

cont=cont+1;

(contador) Soma 1 ao contador (que vale 1


da primeira vez) e guarda o resultado no prprio contador. Na
prxima iterao o contador j estar atualizado.

11

Fecha o while

12

media=somaid/10;

Calcula a media.

13

cout<<A media eh <<media;

Mostra a media na tela

14

system(pause);

Para a execuo do programa

15 }

Fecha a funo principal

11 Comando do-while

Assim como o comando while, este comando permite a execuo


de comandos enquanto uma determinada condio for verdadeira.
Porm, a diferena que a condio testada no final do bloco de
comando e no no incio, permitindo assim, que pelo menos uma vez,
os comandos internos ao bloco de comandos sejam executados,
diferentemente do while, onde existe a possibilidade dos comandos
internos ao bloco de comandos nunca serem executados, caso a
Linguagem de Programao C/C++
20

condio seja falsa logo no primeiro teste.

Digite o Exemplo 3.3(C):- Faa um programa que receba o nome, a quantidade de


horas trabalhadas e o valor da hora de vrios funcionrios de uma empresa. Mostre, para cada funcionrio,
o seu salrio. Pergunte ao usurio se ele deseja continuar digitando dados de mais funcionrios.
Permite o uso das funes printf() e

#include <stdio.h>

#include <conio.h>

Permite o uso da funo getch()

int main(){

Abre a funo principal do programa

scanf()

Declara a varivel nome do tipo string


de 30 caracteres e a varivel resp com 1 caractere

char nome[30], resp;

float horas, valor_h, sal;

Declara variveis do tipo float

do{

Abre o do-while
Imprime mensagem (rotulo do que

printf(Nome:);

fflush(stdin);

Limpa buffer do teclado

gets(nome);

Recebe string toda do usurio

10

printf(Horas trabalhadas:);

11

scanf(%f, &horas);

12

printf(Valor hora:);

13

scanf(%f,&valor_h);

14

sal=horas * valor_h;

15

printf(Salario : %.2f\n, sal);

16

printf(Deseja continuar <s/n>?);

17

fflush(stdin);

18

resp=toupper(getchar());

19
20

}while (resp=='S');

ser digitado)

Imprime mensagem (rotulo do que

ser digitado)

Recebe horas trabalhadas do usurio


Imprime mensagem (rotulo do que

ser digitado)

Recebe valor das horas trabalhadas do

usurio

Multiplica quant de horas pelo valor e


guarda na varivel sal
Imprime a varivel sal
Pergunta

continuar

ao

usurio

se

deseja

Limpa buffer do teclado


Recebe a resposta
converte sua resposta para maiscula
seja, volta
novamente

no

do

usurio

Verifica se a resposta igual a S, caso


do para executar os comandos
Fecha a funo principal

Digite o Exemplo 3.3(C++):- Faa um programa que receba o nome, a quantidade de


horas trabalhadas e o valor da hora de vrios funcionrios de uma empresa. Mostre, para cada
funcionrio, o seu salrio. Pergunte ao usurio se ele deseja continuar digitando dados de mais
funcionrios.

#include <iostream>

Permite o uso cout e cin

using namespace std

Permite o uso cout e cin

int main(){

Linguagem de Programao C/C++


21

Abre
programa

funo

principal

do

Declara a varivel nome do tipo


string de 30 caracteres e a varivel resp com 1
caractere

char nome[30], resp;

float horas, valor_h, sal;

Declara variveis do tipo float

do{

Abre o do-while
Imprime mensagem (rtulo do
que ser digitado)

cout<<Nome:;

fflush(stdin);

Limpa buffer do teclado

cin>>nome;

Recebe string toda do usurio

10

cout<<Horas trabalhadas:;

11

cin>>horas;

12

cout<<Valor hora:;

Imprime mensagem (rotulo do


que ser digitado)

13

cin>>valor_h;

Recebe
trabalhadas do usurio

14

sal=horas * valor_h;

15

cout<<Salario : <<sal<<\n;

16

cout<<Deseja continuar <s/n>?;

17

fflush(stdin);

18

resp=toupper(cin>>resp);

19
20

}while (resp=='S');

Imprime mensagem (rotulo do


que ser digitado)
Recebe

horas

trabalhadas

do

usurio

valor

das

horas

Multiplica quant de horas pelo


valor e guarda na varivel sal
Imprime a varivel sal
Pergunta ao usurio se deseja
continuar
Limpa buffer do teclado
Recebe a resposta do usurio e
converte sua resposta para maiscula
Verifica se a resposta igual a S,
caso seja, volta no do para executar os
comandos novamente
Fecha a funo principal

A funo gets() utilizada para receber strings (cadeia de


caracteres), a partir do usurio.
Muitas vezes, quando utilizamos funes de entrada para receber
caracteres (getchar()) ou strings (gets()), alguns cdigos permanecem
na memria (buffer) do teclado. Utilizamos a funo fflush() para limpar
este buffer e permitir que o programa pare para receber novas
informaes.
A funo toupper() transforma qualquer letra em letra maiscula.
Quando usamos a funo getchar() como parmetro, apenas deixamos
de usar uma varivel para receber a eventual letra minscula digitada
pelo usurio.
12 Teste de mesa

Este tipo de teste muito til quando queremos verificar se a


Linguagem de Programao C/C++
22

lgica do nosso programa est correta. A compilao de um programa


verifica apenas erros de sintaxe, o que no significa que o nosso
programa funcione conforme planejamos que funcionasse. Bem, um
teste de mesa tarefa simples, porm requer cuidados. Voc assumir
o papel do compilador quando da execuo do programa, por isso no
podemos perder de vista a linha do programa que est sendo executada
em cada momento.
Comeamos um teste de mesa montando uma nica tabela
contendo uma coluna para cada varivel declarada e mais uma coluna
para o que for escrito na tela, de acordo com o modelo abaixo. Os
valores das variveis estaro sendo colocadas na tabela medida que o
programa for requerendo. Assim como tambm, as mensagens que
sero impressas na tela. Sempre que colocamos um novo valor em uma
varivel devemos riscar o anterior, dizendo a ns mesmos que o valor
mudou. Nunca apague os valores apenas risque-os.
Teste de mesa
Memria

Tela

<var. 1>

<var. 2>

<var. 3>

<var. 4>

<val. 1>

<val. 4>

<val. 5>

<val. 7>

<mensagem 1>

<val. 6>

<val. 8>

<mensagem 2>

<val. 2>
<val. 3>

Vamos agora verificar como acontece na prtica. Para isso,


usaremos a lgica do exemplo 3.3.4, modificado para 5 funcionrios.
Reproduziremos a tabela a cada passo para que voc entenda melhor.
Cdigo (C)
1

Cdigo (C++)

int idade, somaid, qtd;

int idade, somaid, qtd;


qtd=1;

qtd=1;

somaid=0;

somaid=0;

while (qtd<=5){

while (qtd<=5){

scanf("%i",&idade);

cin>>idade;

somaid=somaid+idade;

somaid=somaid+idade;

qtd=qtd+1;

8
9

printf("A soma das idades eh %i", somaid);

Linha 1 cria a coluna das variveis e a da


tela.

qtd=qtd+1;
}
cout<<"A soma das idades eh "<<somaid;

Linha 2 e 3 atribui 1 e 0 para as respectivas


variveis.

Teste de mesa
Memria
Idade

somaid

Teste de mesa
tela

qtd

Linguagem de Programao C/C++


23

Memria
Idade

somaid

tela
qtd

20

linha 4 Verifica se qtd menor ou igual a 5. O


retorno verdadeiro. Isto no gera alterao
na tabela, apenas define que executaremos a
linha 5.
linha 5 Simulamos um valor digitado pelo
usurio.
Teste de mesa
Memria
somaid

qtd

20

Teste de mesa

Idade

somaid

Teste de mesa
Memria

tela

Idade

somaid

qtd

20

0
20

1
2

Linha 8 fecha o looping e volta para linha


4

Linha 6 soma idade a somaid e guarda em


somaid

Memria

Linha 7 soma 1 em qtd

tela

Idade

0
20

tela

Linha 4 Verifica se qtd menor ou igual a 5.


O retorno verdadeiro. Isto no gera
alterao na tabela, apenas define que
executaremos a linha 5.

qtd

Linha 5 Simulamos um valor digitado pelo


usurio.
Teste de mesa
Memria

tela

Idade

somaid

qtd

20
25

0
20

1
2

O retorno verdadeiro. Isto no gera alterao


na tabela, apenas define que executaremos a
linha 5.
Linha 5 Simulamos um valor digitado pelo
usurio.
Teste de mesa
Memria

Linha 6 soma idade a somaid e guarda em


somaid
Teste de mesa
Memria

tela

Idade

somaid

qtd

20
25

0
20
45

1
2

tela

Idade

somaid

qtd

20
25
23

0
20
45

1
2
3

Linha 6 soma idade a somaid e guarda em


somaid
Teste de mesa
Memria

Linha 7 soma 1 em qtd


Teste de mesa
Memria

tela

Idade

somaid

qtd

20
25

0
20
45

1
2
3

Linha 8 fecha o looping e volta para linha 4


Linha 4 Verifica se qtd menor ou igual a 5.

Linguagem de Programao C/C++


24

tela

Idade

somaid

qtd

20
25
23

0
20
45
68

1
2
3

Linha 7 soma 1 em qtd


Teste de mesa
Memria

tela

Idade

somaid

qtd

20
25

0
20

1
2

23

45
68

3
4

Memria
Idade somaid

Linha 8 fecha o looping e volta para linha 4


Linha 4 Verifica se qtd menor ou igual a 5.
O retorno verdadeiro. Isto no gera
alterao na tabela, apenas define que
executaremos a linha 5.

20
25
23
30

0
20
45
68

tela
qtd
1
2
3
4

Linha 5 Simulamos um valor digitado pelo


usurio.
Teste de mesa

Memria

tela

Linha 6 soma idade a somaid e guarda em


somaid
Teste de mesa
Memria

tela

Idade

somaid

qtd

20
25
23
30

0
20
45
68
98

1
2
3
4

Teste de mesa
Memria

Linha 7 soma 1 em qtd


Teste de mesa
Memria

Linha 6 soma idade a somaid e guarda em


somaid

tela

Idade

somaid

qtd

20
25
23
30
28

0
20
45
68
98
126

1
2
3
4
5

tela

Idade

somaid

qtd

20
25
23
30

0
20
45
68
98

1
2
3
4
5

Linha 8 fecha o looping e volta para linha 4


Linha 4 Verifica se qtd menor ou igual a 5.
O retorno verdadeiro. Isto no gera alterao
na tabela, apenas define que executaremos a
linha 5.
Linha 5 Simulamos um valor digitado pelo
usurio.
Teste de mesa

Linguagem de Programao C/C++


25

Linha 7 soma 1 em qtd


Teste de mesa
Memria

tela

Idade

somaid

qtd

20
25
23
30
28

0
20
45
68
98
126

1
2
3
4
5
6

Linha 8 fecha o looping e volta para linha 4


Linha 4 Verifica se qtd menor ou igual a 5.
O retorno falso. Isto no gera alterao na
tabela, apenas define que executaremos a
linha 9.

Linha 9 Imprime a somatria na tela.


Teste de mesa
Memria

tela

Idade

somaid

qtd

20
25
23
30
28

0
20
45
68
98
126

1
2
3
4
5
6

A soma das idades eh


126

Linguagem de Programao C/C++


26

Aprenda a fazer teste de mesa em todos os programas que


desenvolver, isto far com que voc se certifique que seu programa est
correto e o ajudar a solidificar o aprendizado lgico.

Encerra-se aqui o Captulo 3.


Pratique e verifique seus conhecimentos fazendo os
exerccios de 29 a 44 que se encontram no Apndice 14.
4. Veto
r
At agora utilizamos estruturas nicas na memria, ou seja, um
nico espao foi alocado de cada vez. Porm, existem situaes nas
quais queremos agrupar sequencialmente na memria os nossos dados,
de forma a resgat-los de maneira mais fcil. Podemos fazer a seguinte
analogia: geralmente, alocamos uma nica casa e damos um nome
para ela. Quando queremos alocar um vetor, alocamos uma rua inteira e
damos um nico nome para ela. Como a rua tem vrias casas (neste
caso do mesmo tamanho), o compilador, automaticamente, atribui um
numero para cada casa, comeando do zero. Chamamos este nmero
de ndice. Assim:
int vet[5];
aloca 5 espaos contguos na memria, chamado vet, com seu ndice
variando de 0 4. A figura 4.1 mostra alguns elementos alocados
atravs desta definio.
10 15 7 4 34
0

Elementos do vetor
ndices do vetor

Figura 4.1 - Alocao de elementos em um vetor de 5 posies

Para manipular as informaes armazenadas no vetor, devemos


especificar o nome da varivel e o ndice referente ao espao que
queremos tratar, entre colchetes. Assim,
int a[10];
alocar 10 espaos de inteiros na memria e para acess-los basta
escrever o nome da varivel juntamente com o ndice da posio a qual
quer acessar. Ou seja,
a[0], para acessar o ndice 0,
a[1], para acessar o ndice 1,
a[2], para acessar o ndice 2,
Linguagem de Programao C/C++
27

e assim por diante.


Quando nosso vetor muito grande, fica invivel a utilizao de
constantes numricas como ndice (0, 1, 2, 3 etc), ao invs disso,
usamos variveis. Alis, esta a grande vantagem dos vetores:
manipularmos as variveis nos loopings para acessar as posies sem
precisar escrever cada posio. Um comando de looping muito utilizado
juntamente com vetores o FOR, pois atravs dele podemos controlar
melhor as variveis de controle dos ndices.
13 Comando For

Sintaxe:
for (<inicializao>;<condio>;<incremento>){
<comando>
}
Este comando permite repetir a execuo de um ou mais
comandos que estaro dentro do seu bloco de comandos. Como
podemos ver, tem a mesma funo que os comandos while e do-while.
Ele permite 3 argumentos; o 1 geralmente usado para inicializao
da varivel de controle (contador) do looping e executado apenas da
primeira vez; o 2 para a condio de execuo dos comandos e
testado todas as vezes e o 3 para incremento da varivel de controle e
executado todas as vezes. Ele geralmente usado quando sabemos
quantas repeties teremos.
Assim,
for (i=0;i<10;i++){
a[i]=0;
}
far a inicializao da varivel i com 0; testar se i menor que 10;
enquanto for menor, atribui 0 para a posio do vetor a[i] (onde i tem
um valor a cada looping); incrementa i e testa novamente at que a
condio seja falsa, ou seja, o valor de i seja 10 (posio invlida no
vetor).
Digite o Exemplo 4.1(C):- Faa um programa que receba as notas dos alunos de uma classe de 30
alunos e calcule a mdia da classe. Estas notas devem ser carregadas em um vetor.
1

/*-------------------------------------------------------Descrio: Calcula media das notas de 30 alunos


de uma classe
Data
: Agosto/2009
Autor
: Kesede R Julio
---------------------------------------------------------*/

Linguagem de Programao C/C++


28

O /* e o */, abre e fecha um bloco de


comentrios. Estes comentrios ajudam
muito em seus estudos. Faa isso em todos
os seus programas.

#include <stdio.h>

Permite incluso de funes de i/o

#include <conio.h>

Permite incluso da funo getch()

int main(){

Abre funo principal

float notas[30], media, soma=0;

Declara o vetor notas com 30 posies do


tipo float, assim como media e soma
(inicializada com 0)

int i;

Declara varivel i

for (i=0;i<30;i++){

Abre comando for. Inicializa i com 0, verifica


se i menor que 30, na primeira vez. Nas
outras vezes, soma 1 em i e torna a verificar
se i menor que 30

printf("Entre com a %i a. nota", i+1);

Mostra uma mensagem na tela

scanf(%f,&notas[i]);

Recebe valor digitado pelo usurio e guarda


na isima posio de notas. Da primeira
vez i igual a zero.

10

soma=soma+notas[i];

(acumulador) Acumula a nota recebida na


varivel soma (inicializada com zero) .

11

Fecha o comando for, fazendo o programa


voltar na linha 7

12

media= soma/i;

Divide soma por i (sai do looping


valendo 30) e guarda o resultado em
media

13

printf("A media da classe eh: %.1f", media);

Imprime o valor de media

14

getch();

Pra a execuo do programa

15

Fecha a funo principal

Digite o Exemplo 4.1(C++):- Faa um programa que receba as notas dos alunos de uma classe de 30
alunos e calcule a mdia da classe. Estas notas devem ser carregadas em um vetor.
1

/*-------------------------------------------------------Descrio: Calcula media das notas de 30 alunos


de uma classe
Data
: Agosto/2015
Autor
: Kesede R Julio
---------------------------------------------------------*/

O /* e o */, abre e fecha um bloco de


comentrios. Estes comentrios ajudam
muito em seus estudos. Faa isso em todos
os seus programas.

#include <iostream>

Permite o uso cout e cin

using namespace std;

Permite o uso cout e cin

int main(){

Abre funo principal

float notas[30], media, soma=0;

Declara o vetor notas com 30 posies do


tipo float, assim como media e soma
(inicializada com 0)

int i;

Declara varivel i

for (i=0;i<30;i++){

Abre comando for. Inicializa i com 0, verifica


se i menor que 30, na primeira vez. Nas
outras vezes, soma 1 em i e torna a verificar
se i menor que 30

cout<<"Entre com a <<i+1<< a. nota";

Mostra uma mensagem na tela

cin>>notas[i];

Recebe valor digitado pelo usurio e guarda


na isima posio de notas. Da primeira
vez i igual a zero.

10

soma=soma+notas[i];

(acumulador) Acumula a nota recebida na


varivel soma (inicializada com zero) .

Linguagem de Programao C/C++


29

11

Fecha o comando for, fazendo o programa


voltar na linha 7

12

media= soma/i;

Divide soma por i (sai do looping


valendo 30) e guarda o resultado em
media

13

cout<<"A media da classe eh: << media;

Imprime o valor de media

14

system(pause);

Para a execuo do programa

15

Fecha a funo principal

Encerra-se aqui o Captulo 4.


Pratique e verifique seus conhecimentos fazendo os
exerccios de 45 a 60 que se encontram no Apndice 14.

Linguagem de Programao C/C++


30

5. Strin
g
String uma cadeia de caracteres, ou seja, uma sequncia de
caracteres que so alocados na memria de forma contgua. Uma
caracterstica particular da string o seu terminador (\0), que
colocado na ltima posio da cadeia. Dessa forma, quando o printf()
imprime um string, ele imprime todos os caracteres at que encontre
um \0. Ns podemos declarar um string da seguinte forma:
char nome[10];
quando fazemos esta declarao, o compilador reserva um espao em
memria chamado nome com tamanho de 10 caracteres, e vincula a
cada posio um numero de identificao o qual chamamos de ndice. O
ndice da primeira posio ser sempre 0 (zero).
Quando pedimos para o usurio digitar algo em um string, o
compilador automaticamente aloca o terminador '\0' para a posio que
sucede o ltimo caractere digitado pelo usurio. Geralmente, utilizamos
a funo gets() para receber strings do usurio, pois esta funo
permite a digitao de vrias palavras no string, diferente do scanf()
que permite apenas uma. Assim:
gets(nome);
recebe um string do usurio e coloca, automaticamente, um terminador
no final.
Cada posio do string pode ser acessada separadamente, assim:
strcpy(nome,Isto e um string");
printf(%c,nome[2]); // imprimir o caractere 't'
A linguagem C/C++ fornece uma biblioteca de funes para
manipulao de strings. Para utiliza-la, voc deve incluir em seu
programa o header string.h. Algumas dessas funes so:
Funo
strcpy()
strcmp()
strlen()
strcat()

Descrio
copia o contedo de um string para outro.
compara o contedo de duas strings.
devolve o tamanho da string
concatena duas strings

Para verificar a relao de todas elas assim como sua sintaxe,


verifique a documentao do header string.h.
Digite o Exemplo 5.1(C):- Faa um programa que atribua o contedo de uma string para outra string e
mostre-a na tela.

#include <stdio.h>

Permite incluso de funes de i/o

#include <string.h>

Permite incluso de funes para manipulao de string

#include <conio.h>

Permite incluso da funo getch()

int main(){

Abre funo principal

Linguagem de Programao C/C++


31

char string[10];

Declara varivel string de 10 posies

char str1[10] = "abcdefghi";

Declara varivel str1 de 10 posies e inicializa com


abcdefghi

strcpy(string, str1);

Copia contedo de str1 para string

printf(%s,string);

Imprime o contedo de string

system(pause);

Para a execuo do programa

10

Fecha funo principal

Digite o Exemplo 5.1(C++):- Faa um programa que atribua o contedo de uma string para outra
string e mostre-a na tela.

#include <iostream>

Permite o uso do cin e cout

#include <string.h>

Permite incluso de funes para manipulao de string

using namespace std;

Permite o uso do cin e cout

int main(){

Abre funo principal

char string[10];

Declara varivel string de 10 posies

char str1[10] = "abcdefghi";

Declara varivel str1 de 10 posies e inicializa com


abcdefghi

strcpy(string, str1);

Copia contedo de str1 para string

cout<<string;

Imprime o contedo de string

system(pause);

Para a execuo do programa

10

Fecha funo principal

Digite o Exemplo 5.2(C):- Faa um programa que compare o contedo de strings e d mensagens
indicando o resultado da comparao.

#include <stdio.h>

Permite incluso de funes de i/o

#include <string.h>

Permite incluso de funes para manipulao de


string

#include <conio.h>

Permite incluso da funo getch()

int main(){

Abre funo principal

char buf1[4] = "aaa", buf2[4] = "bbb",


buf3[4] = "ccc";

Declara e inicializa variveis

int ptr;

Declara varivel ptr

ptr = strcmp(buf2, buf1);

Compara contedo de buf2 com contedo de


buf1. Atribui para ptr 0, 1 ou -1,caso sejam
iguais, buf2 maior que buf1 ou buf2 menor que
buf1, respectivamente.

if (ptr > 0){

printf("buffer 2 eh maior que buffer 1\n");

Verifica se ptr maior que 0 (buf2 maior que


buf1)
Caso seja, mostra mensagem

10

Fecha if

11

else{

Abre else

12
13

if (ptr == 0){
printf("buffer 2 eh igual ao buffer

Linguagem de Programao C/C++


32

Verifica se ptr igual a 0 (buf2 igual buf1)


Caso seja, mostra mensagem

1\n");
14

Fecha if

15

else{

Abre else

printf("buffer 2 eh menor que o buffer

Mostra mensagem, pois se entrou aqui porque


negou as duas condies acima (com certeza buf2
menor que buf1)

Fecha else

16
1\n");
17
18

Fecha else

19

ptr = strcmp(buf2, buf3);

Compara contedo de buf2 com contedo de


buf3. Atribui para ptr 0, 1 ou -1,caso sejam
iguais, buf2 maior que buf1 ou buf2 menor que
buf1, respectivamente.

20

if (ptr > 0){

Verifica se ptr maior que 0 (buf2 maior que


buf3)

21

printf("buffer 2 eh maior que buffer

Caso seja, mostra mensagem

3\n");
22

Fecha if

23

else{

Abre else

24

if (ptr == 0){

25

printf("buffer 2 eh igual ao buffer

Verifica se ptr igual a 0 (buf2 igual buf3)


Caso seja, mostra mensagem

3\n");
26

Fecha if

27

else{

Abre else

28

printf("buffer 2 eh menor que o


buffer 3\n");

29

30

31

getch();

Mostra mensagem, pois se entrou aqui porque


negou as duas condies acima (com certeza buf2
menor que buf3)
Fecha else
Fecha else
Par a execuo do programa
Fecha funo principal

32 }

Digite o Exemplo 5.2(C++):- Faa um programa que compare o contedo de strings e d mensagens
indicando o resultado da comparao.

#include <iostream>

Permite o uso do cin e cout

#include <string.h>

Permite incluso de funes para manipulao de


string

using namespace std;

Permite o uso do cin e cout

int main(){

Abre funo principal

char buf1[4] = "aaa", buf2[4] = "bbb",


buf3[4] = "ccc";

Declara e inicializa variveis

int ptr;

Declara varivel ptr

ptr = strcmp(buf2, buf1);

Compara contedo de buf2 com contedo de


buf1. Atribui para ptr 0, 1 ou -1,caso sejam
iguais, buf2 maior que buf1 ou buf2 menor que
buf1, respectivamente.

if (ptr > 0){

Linguagem de Programao C/C++


33

Verifica se ptr maior que 0 (buf2 maior que

buf1)

cout<<"buffer 2 eh maior que buffer


1\n";

Caso seja, mostra mensagem

10

Fecha if

11

else{

Abre else

12

if (ptr == 0){

13

cout<<"buffer 2 eh igual ao buffer

Verifica se ptr igual a 0 (buf2 igual buf1)


Caso seja, mostra mensagem

1\n";
14

Fecha if

15

else{

Abre else

16

cout<<"buffer 2 eh menor que o


buffer 1\n";

17

Mostra mensagem, pois se entrou aqui porque


negou as duas condies acima (com certeza buf2
menor que buf1)
Fecha else

18

Fecha else

19

ptr = strcmp(buf2, buf3);

Compara contedo de buf2 com contedo de


buf3. Atribui para ptr 0, 1 ou -1,caso sejam
iguais, buf2 maior que buf1 ou buf2 menor que
buf1, respectivamente.

20

if (ptr > 0){

Verifica se ptr maior que 0 (buf2 maior que


buf3)

21

cout<<"buffer 2 eh maior que buffer

Caso seja, mostra mensagem

3\n";
22

Fecha if

23

else{

Abre else

24

if (ptr == 0){

25

cout<<"buffer 2 eh igual ao buffer

Verifica se ptr igual a 0 (buf2 igual buf3)


Caso seja, mostra mensagem

3\n";
26

Fecha if

27

else{

Abre else

28

cout<<"buffer 2 eh menor que o


buffer 3\n";

29

30

31

system(pause);

32 }

Mostra mensagem, pois se entrou aqui porque


negou as duas condies acima (com certeza buf2
menor que buf3)
Fecha else
Fecha else
Para a execuo do programa
Fecha funo principal

Digite o Exemplo 5.3(C)- Faa um programa que mostre a quantidade de caracteres de uma string.

#include <stdio.h>

Permite incluso de funes de i/o

#include <string.h>

Permite incluso de funes para manipulao


de string

#include <conio.h>

Permite incluso da funo getch()

#include <string.h>

Permite incluso de funes para manipulao


de string

Linguagem de Programao C/C++


34

Abre funo principal

int main(){

char string[25] = "Kesede Rodrigues Julio";

Declara e inicializa varivel string de 25


posies

printf(%d,strlen(string));

Strlen() retorna a quantidade de caracteres


que a varivel string contm. O resultado
mostrado na tela

8
9

getch();

Para a execuo do programa


Fecha funo principal

Digite o Exemplo 5.3(C++)- Faa um programa que mostre a quantidade de caracteres de uma string.

#include <iostream>

Permite o uso do cin e cout

#include <string.h>

Permite incluso de funes para manipulao de


string

using namespace std;

Permite o uso do cin e cout

#include <string.h>

Permite incluso de funes para manipulao de


string

int main(){

Abre funo principal

char string[25] = "Kesede Rodrigues


Julio";

Declara e inicializa varivel string de 25 posies

cout<<strlen(string);

system(pause);

Strlen() retorna a quantidade de caracteres que a


varivel string contm. O resultado mostrado na
tela
Para a execuo do programa
Fecha funo principal

Digite o Exemplo 5.4(C):- Faa um programa que concatene duas strings e mostre o resultado da
concatenao na tela.

#include <stdio.h>

Permite incluso de funes de i/o

#include <string.h>

Permite incluso de funes para manipulao de


string

#include <conio.h>

Permite incluso da funo getch()

int main(){

Abre funo principal

5
6

char destino[25];
char espaco[2] = " ", sobrenome[10] =
"Rodrigues", nome[10] = "Kesede";

Declara e inicializa variavel destino de 25 posies


Declara variveis strings

strcpy(destino, nome);

Copia nome para destino

strcat(destino, espaco);

Concatena (junta) espao com destino

strcat(destino, sobrenome);

Concatena (junta) sobrenome com destino

10

printf(%s, destino);

Imprime destino

11

getch();

Para a execuo do programa

12

Linguagem de Programao C/C++


35

Fecha funo principal

Digite o Exemplo 5.4(C++):- Faa um programa que concatene duas strings e mostre o resultado da
concatenao na tela.

#include <iostream>

Permite o uso do cin e cout

#include <string.h>

Permite incluso de funes para manipulao de


string

using namespace std;

Permite o uso do cin e cout

int main(){

Abre funo principal

5
6

char destino[25];
char espaco[2] = " ", sobrenome[10] =
"Rodrigues", nome[10] = "Kesede";

Declara e inicializa variavel destino de 25 posies


Declara variveis strings

strcpy(destino, nome);

Copia nome para destino

strcat(destino, espaco);

Concatena (junta) espao com destino

strcat(destino, sobrenome);

Concatena (junta) sobrenome com destino

10

cout<< destino;

Imprime destino

11

system(pause);

Para a execuo do programa

12

Fecha funo principal

Encerra-se aqui o Captulo 5.


Pratique e verifique seus conhecimentos fazendo os
exerccios de 60 a 74 que se encontram no Apndice 14.

Linguagem de Programao C/C++


36

6. Matri
z

So vetores multi-dimensionais. Ao invs de trabalharmos com


um nico ndice, trabalhamos com vrios. Em nossa analogia com ruas
e casas, no caso dos vetores, teramos aqui a comparao com um
quarteiro. Assim, alm dos nmeros das casas teremos que saber o
nmero da rua onde ela se localiza. Desta forma,
a[3][3];
reserva 9 posies na memria, podendo, conceitualmente, considerar
o 1 ndice como linha e o segundo como coluna.
0
0 10
1 27
2 82

1
20
8
3

2
43
78
7

Figura 6.1 - Alocao de elementos em uma matriz 3x3.

Para acessarmos qualquer posio, basta escrever o nome da


varivel juntamente com o nmero do ndice da linha e o da coluna.
Assim,
a[1][2] = 78;
colocar o valor 78 para a 2 linha da 3 coluna. (o ndice comea em
0).
Geralmente, temos um nmero grande de posies e precisamos
de um comando de looping para nos ajudar a modificar os ndices sem
muita escrita de cdigo. Portanto,
for (i=0;i<10;i++){
for (j=0;j<10;j++){
a[i][j] = 0;
}
}
colocar o valor 0 (zero) para toda a matriz, percorrendo todas as
colunas de todas as linhas.
Digite o exemplo 6.1(C): Faa um programa que carregue, a partir do usurio, uma matriz 10x10
representando o centro de uma cidade. Cada ndice contm o nmero de acidentes anual ocorridos em
cada cruzamento. O programa deve mostrar a esquina (linha e coluna) que ocorreu o maior nmero de
acidentes.

#include <stdio.h>

Inclui arquivo de cabealho

int main(){

Abre funo principal

int ac[10][10], i_maior, j_maior, i, j, maior, tot=0;

Declara variveis.

for(i=0; i<10; i++){


for(j=0; j<10;j++){
scanf(%i, &ac[i][j]);
}

Carrega
usurio

Linguagem de Programao C/C++


37

matriz

partir

do

}
5

maior=ac[0][0];
for(i=0; i<10; i++){
for(j=0; j<10;j++){
if(ac[i][j] > maior){
i_maior=i;
j_maior=j;
maior=ac[i][j];
}
}
}
printf(A rua %i esquina com %i teve %i acidentes,
sendo a esquina com maior nr de acidentes do centro.,
i_maior,j_maior, maior);
getch();

Inicializa
a
varivel
auxiliar
maior com o primeiro elemento
da matriz. Em seguida, percorre a
matriz verificando se existe algum
elemento maior que o primeiro,
guardado na varivel maior.
Caso exista, atualiza maior e
guarda os ndices (esquina) deste
elemento. Ao final, imprime
e
para o programa.

Fecha main()

Digite o exemplo 6.1(C++): Faa um programa que carregue, a partir do usurio, uma matriz 10x10
representando o centro de uma cidade. Cada ndice contm o nmero de acidentes anual ocorridos em
cada cruzamento. O programa deve mostrar a esquina (linha e coluna) que ocorreu o maior nmero de
acidentes.

#include <iostream>
using namespace std;

Inclui arquivo de cabealho

int main(){

Abre funo principal

int ac[10][10], i_maior, j_maior, i, j, maior, tot=0;

Declara variveis.

for(i=0; i<10; i++){


for(j=0; j<10;j++){
cin>>ac[i][j];
}
}

Carrega
usurio

matriz

partir

do

maior=ac[0][0];
for(i=0; i<10; i++){
for(j=0; j<10;j++){
if(ac[i][j] > maior){
i_maior=i;
j_maior=j;
maior=ac[i][j];
}
}
}
cout<<A rua <<i<< esquina com <<maior<< teve
<<i << acidentes, sendo a esquina com maior nr de
acidentes do centro.;
system(pause);

Inicializa
a
varivel
auxiliar
maior com o primeiro elemento
da matriz. Em seguida, percorre a
matriz verificando se existe algum
elemento maior que o primeiro,
guardado na varivel maior.
Caso exista, atualiza maior e
guarda os ndices (esquina) deste
elemento. Ao final, imprime
e
para o programa.

Fecha main()

Encerra-se aqui o Captulo 6.


Pratique e verifique seus conhecimentos fazendo os
exerccios de 75 a 89 que se encontram no Apndice 14.
Linguagem de Programao C/C++
38

Linguagem de Programao C/C++


39

7. Estruturas
Heterogneas
Uma estrutura heterognea permitir agrupar variveis de tipos
diferentes em um espao contguo na memria, facilitando assim a
manipulao destas informaes.
Informaes pertencentes a mesma entidade so passveis de
serem agrupadas em uma estrutura heterognea, como: coordenadas
de um ponto, descries de uma mquina, score de um jogador etc.
Para construirmos estruturas heterogneas em linguagem C,
usamos uma struct. Ex.:
struct jogador{
char nome[40];
int scoreMensal;
int scoreDiario;
};
para podermos utilizar (incluir e consultar) estes informaes, devemos
declarar uma varivel do tipo struct, usando o nome da struct, neste
caso, jogador. Ex.:
jogador jog1, jog2;
Neste caso, instanciamos (declaramos) dois jogadores com a
mesma estrutura de dados. Agora, podemos atribuir valores para
nossas duas instncias. Ex.:
gets(jog1.nome);
jog1.scoreMensal=2500;
jog1.scoreDiario=150;
gets(jog2.nome);
jog2.scoreMensal=3400;
jog2.scoreDiario=100;
Note que temos que usar o . (ponto) para separar o nome da
varivel estrutura (varivel declarada do tipo estrutura) da varivel
membro (variveis internas).
Como uma estrutura funciona como um tipo, podemos declarar
vetores e at matrizes de estruturas. Por exemplo, se tivssemos 10 ou
100 jogadores, no seria prtico declararmos uma varivel para cada
jogador, assim poderamos declarar uma varivel vetor do tipo
estrutura. Ex.:
jogador jog[100];
Linguagem de Programao C/C++
40

Desta forma, fica fcil executar um looping que carregue, a partir


do usurio, o nome de todos os jogadores. Ex.:
for (c=0;c<100;c++){
gets(jog[c].nome);
}
Algumas consideraes devem ser relevadas, assim como:
a) Varivel estrutura pode receber, de uma s vez, todo o
contedo de outra varivel estrutura.
b) Uma estrutura pode conter outras estruturas, ou seja,
podemos ter estruturas aninhadas./
c) Podem ser passadas como parmetro, por valor ou por
referncia.
d) Varivel do tipo estrutura pode ser retornada de funes.
O Exemplo abaixo mostra um uso prtico.

Digite o exemplo 7.1(C): Faa um programa que carregue, a partir do usurio, os dados geogrficos das
cidades do Brasil. Inclua estas informaes em um vetor de estrutura. Os dados so: nome da cidade, x e
y (a origem 0,0 deste sistema Braslia). Aps a incluso destes dados, o programa deve permitir ao
usurio a digitao de uma cidade qualquer, sua referncia x e y, e listar a distncia desta cidade em
relao a cada cidade cadastrada.

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>
#include <math.h>

Include arquivos de cabealho

int main(){

Abre funo principal

typedef struct DadosGeo{


char nome[50];
int x, y;
};

Declara uma struct como tipo


contendo 3 informaes: nome, x, y

int i=0, xRef, yRef, qtdcid;


DadosGeo cidades[1000];
char nomeRef[50], resp;
float dist;

Declara variveis, inclusive o vetor


cidades do tipo DadosGeo

do{
system("cls");
printf("Nome: ");
fflush(stdin);
gets(cidades[i].nome);
printf("\nPosicao X: ");
scanf("%i",&cidades[i].x);
printf("\nPosicao Y: ");
scanf("%i",&cidades[i].y);
i++;
printf("Existem mais cidades? <S/N> ");
fflush(stdin);
resp=toupper(getch());

Carrega o vetor, a partir do usurio

Linguagem de Programao C/C++


41

}while (resp=='S');
5

qtdcid=i;

Guarda a quantidade de cidades


digitadas pelo usurio, para usar no
controle do FOR.

printf("\nEntre com o nome da cidade referencia: ");


gets(nomeRef);
printf("\nPosicao X: ");
scanf("%i",&xRef);
printf("\nPosicao Y: ");
scanf("%i",&yRef);

Recebe do usurio os dados da cidade


que ser referncia para o clculo das
distncias

printf("\n\nListagem das distancias\n");


for (i=0;i<qtdcid;i++){
dist=sqrt(pow(xRef-cidades[i].x,2)+pow(yRefcidades[i].y,2));
printf("%-10s - %.1f Km\n", cidades[i].nome, dist);
}
getch();

Percorre todo o vetor, calculando a


distncia para cada cidade. Mostra o
nome da cidade e a distncia.

Fecha main()

Digite o exemplo 7.1(C++): Faa um programa que carregue, a partir do usurio, os dados geogrficos
das cidades do Brasil. Inclua estas informaes em um vetor de estrutura. Os dados so: nome da cidade,
x e y (a origem 0,0 deste sistema Braslia). Aps a incluso destes dados, o programa deve permitir ao
usurio a digitao de uma cidade qualquer, sua referncia x e y, e listar a distncia desta cidade em
relao a cada cidade cadastrada.

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>
#include <math.h>
#include <iostream>
using namespace std;

Include arquivos de cabealho

int main(){

Abre funo principal

typedef struct DadosGeo{


char nome[50];
int x, y;
};

Declara uma struct como tipo


contendo 3 informaes: nome, x, y

int i=0, xRef, yRef, qtdcid;


DadosGeo cidades[1000];
char nomeRef[50], resp;
float dist;

Declara variveis, inclusive o vetor


cidades do tipo DadosGeo

do{
system("cls");
cout<<"Nome: ";
fflush(stdin);
gets(cidades[i].nome);
cout"\nPosicao X: ";
cin>>cidades[i].x;
cout<<"\nPosicao Y: ";
cin>>cidades[i].y;
i++;
cout<<"Existem mais cidades? <S/N> ";
fflush(stdin);
resp=toupper(getch());
}while (resp=='S');

Carrega o vetor, a partir do usurio

Linguagem de Programao C/C++


42

qtdcid=i;

Guarda a quantidade de cidades


digitadas pelo usurio, para usar no
controle do FOR.

cout<<"\nEntre com o nome da cidade referencia: ";


gets(nomeRef);
cout<<"\nPosicao X: ";
cin>>xRef;
cout<<"\nPosicao Y: ";
cin>>yRef;

Recebe do usurio os dados da cidade


que ser referncia para o clculo das
distncias

cout<<"\n\nListagem das distancias\n";


for (i=0;i<qtdcid;i++){
dist=sqrt(pow(xRef-cidades[i].x,2)+pow(yRefcidades[i].y,2));
cout<<cidades[i].nome<<" <<dist<< Km\n";
}
system(pause);

Percorre todo o vetor, calculando a


distncia para cada cidade. Mostra o
nome da cidade e a distncia.

Fecha main()

Encerra-se aqui o Captulo 7.


Pratique e verifique seus conhecimentos fazendo os
exerccios 90 e 91 que se encontram no Apndice 14.

Linguagem de Programao C/C++


43

8. Fun
es

At agora todos os nossos os comandos e funes pr-definidas


(printf(), scanf(), system(), pow(), sqrt() etc) que usamos estavam
dentro de uma nica funo (main()), que chamada de funo
principal. No entanto, podemos construir as nossas prprias funes e
montarmos nosso programa como sendo um conjunto de funes. At
agora os nossos programas continham uma nica funo chamada
main(), onde fazamos as chamadas das funes pr-definidas,
juntamente com os comandos (if, while etc) para compormos a nossa
lgica de programao. Para criarmos nossas prprias funes,
seguimos a mesma sintaxe da funo principal main(). Sempre que
escrevermos uma funo, uma boa prtica colocarmos o seu prottipo
(cabealho da funo seguido de ponto-e-vrgula) logo abaixo dos
includes. Abaixo segue um exemplo de estrutura de uma funo.
<tipo de retorno> <nome da funo>(<parametros>){
<declarao de variveis>
<comandos e chamadas de funes pr-definidas ou no>
}
Onde:
tipo de retorno: pode ser void, float, int, char
nome da funo: nome que ser usado ao chamarmos a
funo para execut-la.
parmetros: variveis que so recebidas de uma outra funo.
declarao de variveis: onde, geralmente, criam-se as
variveis (alocao de espao na memria)
<comandos e chamadas de funes pr-definidas ou no>:
onde a lgica codificada
}: fecha a funo
Digite o Exemplo 8.1(C): Faa um funo que receba dois valores inteiros do usurio, some-os e
mostre o resultado para o usurio.
1

void soma2(){

Abre a funo soma2

int val1, val2, soma;

Declara variveis val1 e val2 como inteiros

scanf(%i,&val1);

Usurio digita valores para val1 e val2

scanf(%i,&val2);

soma=val1+val2;

printf(%i,soma);

Soma val1 e val2 e guarda na varivel soma


Imprime soma
Fecha a funo soma2

Digite o Exemplo 8.1(C++): Faa um funo que receba dois valores inteiros do usurio, some-os e

Linguagem de Programao C/C++


44

mostre o resultado para o usurio.


1

void soma2(){

Abre a funo soma2

int val1, val2, soma;

Declara variveis val1 e val2 como inteiros

cin>>val1;

Usurio digita valores para val1 e val2

cin>>val2;

soma=val1+val2;

Soma val1 e val2 e guarda na varivel soma

cout<<soma;

Imprime soma

Fecha a funo soma2

No exemplo 8.1, a funo soma2() faz apenas o que se pede


dela, ou seja, recebe dois valores inteiros do usurio, soma-os e mostra
o resultado na tela. Claro que no conseguimos executar esta funo,
pois todo programa em C exige uma funo main() para iniciar sua
execuo e chamar a funo soma2() para ser executada. Acrescente
o cdigo no mesmo arquivo e logo abaixo da funo soma2(). Salve e
execute o programa.
Digite o Exemplo 8.1(C) e (C++) (continuao): Faa a funo main() para
chamar e executar soma2()
1

int main(){

5
7

Abre a funo principal

soma2();

Chama a funo soma2() para ser executada

Fecha a funo principal

14 Passagem de Parmetros por Valor e Retorno de Valor

Quando precisamos generalizar o uso de uma funo, enviamos


valores para a elas. Estes valores so enviados atravs de parmetros.
Ao chamarmos a funo, enviamos estes valores e declaramos, no
cabealho da funo, variveis para receber estes valores. Vamos supor
que queremos que a funo soma2() some dois valores provenientes de
qualquer lugar (do usurio, de arquivo, de clculos etc).
Digite o Exemplo 8.2(C): Faa um programa que recebe dois valores a partir do usurio, someos e mostre o resultado na tela. Os valores devem ser recebidos como parmetro em uma
funo que some-os e mostre o resultado.
1

#include <stdio.h>

Permite o uso da funo printf()

#include <conio.h>

Permite o uso da funo getch()

void soma2(int v1, int v2){

Abre a funo soma2() e recebe os valores de val1 e val2 em v1 e


v2, respectivamente. A quantidade de valores enviados deve ser a
quantidade de variveis aqui declaradas. A atribuio realizada da
esquerda para direita.

int soma;

Declara varivel local soma

soma=v1+v2;

Soma v1 e v2 e guarda resultado em soma

printf(%i,soma);

Imprime a varivel soma na tela

Linguagem de Programao C/C++


45

getch();

Para o programa

Fecha funo soma2()

int main(){

Abre funo principal

10

int val1, val2;

Declara variveis val1 2 val2 como inteiros

11

scanf(%i,&val1);

Recebe val1 do usurio

12

scanf(%i,&val2);

Recebe val2 do usurio

13

soma2(val1,val2);

Chama a funo soma2() para execuo, enviando os valores das


variveis val1 e val2.

14

Fecha a funo soma2()

Digite o Exemplo 8.2(C++): Faa um programa que recebe dois valores a partir do usurio,
some-os e mostre o resultado na tela. Os valores devem ser recebidos como parmetro em uma
funo que some-os e mostre o resultado.
1

#include <iostream>

Permite o uso do cin e cout

using namespace std;

Permite o uso do cin e cout

void soma2(int v1, int v2){

Abre a funo soma2() e recebe os valores de val1 e val2 em v1 e


v2, respectivamente. A quantidade de valores enviados deve ser a
quantidade de variveis aqui declaradas. A atribuio realizada da
esquerda para direita.

int soma;

Declara varivel local soma

soma=v1+v2;

Soma v1 e v2 e guarda resultado em soma

cout<<soma;

Imprime a varivel soma na tela

system(pause);

Para o programa

Fecha funo soma2()

int main(){

Abre funo principal

10

int val1, val2;

Declara variveis val1 2 val2 como inteiros

11

cin>>val1;

Recebe val1 do usurio

12

cin>>val2;

Recebe val2 do usurio

13

soma2(val1,val2);

Chama a funo soma2() para execuo, enviando os valores das


variveis val1 e val2.

14

Fecha a funo soma2()

Quando precisamos retornar um valor a partir de uma funo,


podemos usar o comando return e declarar o tipo do valor retornado
antes do nome da funo no lugar de void.
Para generalizar ainda mais a funo, alm de receber
parmetros, podemos retornar o valor calculado, atravs da palavra
reservada return. O valor do retorno enviado para a funo
chamadora, e assim, ao invs da funo soma2() mostrar o resultado
na tela, ela retornaria o resultado para a funo main() (funo
chamadora) para que a main() resolvesse o que fazer com o resultado,
no caso, imprimir na tela.
Linguagem de Programao C/C++
46

Digite o Exemplo 8.3(C): Faa um programa que recebe dois valores a partir do usurio, someos e mostre o resultado na tela. A soma deve ser feita em uma funo, que receber os valores
como parmetro e retornar o resultado.
1

#include <stdio.h>

Permite o uso da funo printf()

#include <conio.h>

Permite o uso da funo getch()

void soma2(int v1, int v2){

Abre a funo soma2() e recebe os valores de val1 e val2 em


v1 e v2, respectivamente. A quantidade de valores enviados
deve ser a quantidade de variveis aqui declaradas. A
atribuio realizao da esquerda para direita.

int soma;

Declara varivel local soma

soma = v1+v2;

Soma v1 e v2 e guarda resultado em soma

return

Retorna o valor de soma para a funo chamadora

Fecha funo soma2()

int main(){

Abre funo principal

10

int val1, val2, s;

Declara variveis val1 2 val2 como inteiros

11

scanf(%i,&val1);

Recebe val1 do usurio

12

scanf(%i,&val2);

Recebe val2 do usurio

13

s = soma2(val1,val2);

Chama a funo soma2() para execuo, enviando os valores


das variveis val1 e val2. Aps a execuo de soma2(), atribui
o valor de retorno na varivel s.

printf(%i,s);

Imprime a varivel s

getch();

Para o programa

14

Fecha a funo soma2()

Digite o Exemplo 8.3(C++): Faa um programa que recebe dois valores a partir do usurio,
some-os e mostre o resultado na tela. A soma deve ser feita em uma funo, que receber os
valores como parmetro e retornar o resultado.
1

#include <iostream>

Permite o uso do cin, cout

using namespace std;

Permite o uso do cin, cout

void soma2(int v1, int v2){

Abre a funo soma2() e recebe os valores de val1 e val2 em


v1 e v2, respectivamente. A quantidade de valores enviados
deve ser a quantidade de variveis aqui declaradas. A
atribuio realizao da esquerda para direita.

int soma;

Declara varivel local soma

soma = v1+v2;

Soma v1 e v2 e guarda resultado em soma

return

Retorna o valor de soma para a funo chamadora

Fecha funo soma2()

int main(){

Abre funo principal

10

int val1, val2, s;

Declara variveis val1 2 val2 como inteiros

11

cin>>val1;

Recebe val1 do usurio

12

cin>>val2;

Recebe val2 do usurio

13

s = soma2(val1,val2);

Chama a funo soma2() para execuo, enviando os valores


das variveis val1 e val2. Aps a execuo de soma2(), atribui
o valor de retorno na varivel s.

cout<<s;

Imprime a varivel s

Linguagem de Programao C/C++


47

system(pause);
14

Para o programa
Fecha a funo soma2()

15 Passagem de Parmetros por Referncia

Quando precisamos retornar mais de um valor, o return no


suficiente, pois ele s consegue retornar um nico valor. Nestes casos,
utilizamos a passagem de parmetro por referncia, que permite a
alterao do valor da varivel enviada funo. Ao invs de
mandarmos o valor da varivel, mandamos o seu endereo. Isto faz
com que possamos alterar o valor da varivel dentro da funo, ou seja,
o que fizermos com a referncia (endereo) da varivel dentro da
funo, refletido fora dela.
Digite o Exemplo 8.4(C): Faa uma funo que receba o valor do lado de um quadrado e devolva sua
rea e seu permetro.
1

#include <stdio.h>

Permite incluso de funes de i/o

#include <conio.h>

Permite incluso da funo getch()

void area_per(float l, float *a, float *p);

Declara o prottipo da funo

int main(){

Abre funo principal

float lado, perimetro, area;

Declarao das variveis locais

scanf(%f,&lado);

Recebe valor de lado do usurio

area_per(lado, &area, &perimetro);

Chama a funo area_per() e envia o valor


de lado, o endereo de area e o endereo
de perimetro.

printf(rea = %.2f permetro = %.2f, area,


perimetro);

getch();

Imprime o valor de area e


alterados na funo area_per()

perimetro,

Para a execuo do programa

10

Fecha funo principal

11

void area_per(float l, float *a, float *p){

Abre funo area_per() e recebe o valor


enviado de lado (linha 7) em l, o
endereo enviado de area (linha 7) em a
e o endereo enviado de perimetro (linha
7) em p

12

*p = l * 4;

Calcula o permetro e atribui o resultado no


contedo do endereo p (varivel permetro)

13

*a = l * l;

Calcula a rea e atribui o resultado no


contedo do endereo a (varivel area)

14

Fecha a funo area_per()

Digite o Exemplo 8.4(C++): Faa uma funo que receba o valor do lado de um quadrado e devolva
sua rea e seu permetro.

Linguagem de Programao C/C++


48

#include <iostream>

Permite o uso do cin e do cout

using namespace std;

Permite o uso do cin e do cout

void area_per(float l, float *a, float *p);

Declara o prottipo da funo

int main(){

Abre funo principal

float lado, perimetro, area;

Declarao das variveis locais

cin>>lado;

Recebe valor de lado do usurio

area_per(lado, &area, &perimetro);

Chama a funo area_per() e envia o valor


de lado, o endereo de area e o endereo
de perimetro.

cout<<rea = <<area<< permetro = <<


area;

system(pause);

Imprime o valor de area e


alterados na funo area_per()

perimetro,

Para a execuo do programa

10

Fecha funo principal

11

void area_per(float l, float *a, float *p){

Abre funo area_per() e recebe o valor


enviado de lado (linha 7) em l, o
endereo enviado de area (linha 7) em a
e o endereo enviado de perimetro (linha
7) em p

12

*p = l * 4;

Calcula o permetro e atribui o resultado no


contedo do endereo p (varivel permetro)

13

*a = l * l;

Calcula a rea e atribui o resultado no


contedo do endereo a (varivel area)

14

Fecha a funo area_per()

No exemplo 8.4, uma funo "rea_per()" chamada e so


enviados 3 parmetros: lado, rea e permetro. A varivel "lado" est
sendo enviada como parmetro por valor, ou seja, seu valor enviado
funo e no seu endereo. Uma varivel est declarada, na
implementao da funo, para receber este valor: "l". J as variveis
"area" e "perimetro" esto sendo enviadas como parmetro por
referncia (smbolo & antes do nome da varivel), e portanto, os seus
endereos esto sendo enviados. Declaramos duas variveis para
receber estes endereos: "a" e "p". Estas variveis so do tipo "ponteiro
para float". Este tipo de varivel prprio para guardar endereo.
Quando calculamos a rea e o permetro, atribumos seus resultados em
"*a" e "*p", respectivamente. Isto significa que, quem esto recebendo
os valores so as variveis que foram enviadas ("area" e "perimetro") e
no as variveis "a" e "p", pois "a" e "p" so apenas referncias
(endereos) de a e p.

Encerra-se aqui o Captulo 8.


Pratique e verifique seus conhecimentos fazendo os
exerccios de 92 a 96 que se encontram no Apndice 14.
Linguagem de Programao C/C++
49

Linguagem de Programao C/C++


50

9. TAD Tipo Abstrato de


Dados
Um TAD caracterizado pelo agrupamento de dados e funes
que manipulam estes dados. Assim, para construirmos um Tipo
Abstrato de Dados em C, devemos criar um arquivo separado. Podemos
fazer isso agrupando dados e funes em um arquivo .h, por exemplo.
Vamos fazer um exemplo para entender isso.
Exemplo 9.1(C): Crie um arquivo contendo uma estrutura e duas funes para manipula-la, uma para
carregar o vetor e outra para mostr-lo na tela. Grave este arquivo como Cor.h

#include <stdio.h>
#include <conio.h>

Inclui arquivos de prottipos.

typedef struct Cor{


int r,g,b;
}Cor;

Definio do tipo estrutura Cor,


a ser manipulada pelas
funes da TAD.

void Carregar(Cor *c){


scanf(%i,&c.r);
scanf(%i,&c.g);
scanf(%i,&c.b);
}

Funo que carregar os


dados na estrutura

void Mostrar(Cor c){


printf(\nCor R = %i,c.r);
printf(\nCor G = %i,c.g);
printf(\nCor B = %i,c.b);
}

Funo que mostrar os dados


da estrutura na tela.

Exemplo 9.1(C++): Crie um arquivo contendo uma estrutura e duas funes para manipula-la, uma
para carregar o vetor e outra para mostr-lo na tela. Grave este arquivo como Cor.h

#include <iostream>
using namespace std;

Inclui arquivos de prottipos.

typedef struct Cor{


int r,g,b;
}Cor;

Definio do tipo estrutura Cor,


a ser manipulada pelas
funes da TAD.

void Carregar(Cor *c){


cin>>c.r;
cin>>c.g;
cin>>c.b;
}

Funo que carregar os


dados na estrutura

void Mostrar(Cor c){


cout<<\nCor R = <<c.r;
cout<<\nCor G = <<c.g;
cout<<\nCor B = <<c.b;
}

Funo que mostrar os dados


da estrutura na tela.

Agora vamos criar uma aplicao que ir manipular a TAD do


exemplo 9.1. Este cdigo conter a funo main() e ter extenso .c.
Linguagem de Programao C/C++
51

Os dois arquivos (.h e .c) devem estar no mesmo diretrio.


Exemplo 9.2(C): Crie um arquivo Cor.c contendo que permita a entrada de cores (R, G e B) em uma
estrutura e logo em seguida mostre estas cores na tela. Use a TAD Cor.h

#include Cor.h

Incluso da TAD Cor.h que deve estar no mesmo diretrio deste


arquivo

void main(){

Abre a funo principal

Cor c;

Define varivel do tipo estrutura para uso na aplicao. Isto


possvel devido a incluso da TAD atravs do include.

Carregar(&c);

Chama a funo Carregar() enviando como parmetro por


referncia a varivel c. Isto possibilitar a alterao das variveis
internas da estrutura.

Mostrar(c);

Chama a funo Mostrar() enviando como parmetro por valor a


varivel c, pois apenas uma cpia da estrutura chegar na funo,
uma vez que a mesma no ser modificada por ela.

getch();

Para o programa

Finaliza a funo principal.

Exemplo 9.2(C++): Crie um arquivo Cor.c contendo que permita a entrada de cores (R, G e B) em uma
estrutura e logo em seguida mostre estas cores na tela. Use a TAD Cor.h

#include Cor.h

Incluso da TAD Cor.h que deve estar no mesmo diretrio deste


arquivo

void main(){

Abre a funo principal

Cor c;

Define varivel do tipo estrutura para uso na aplicao. Isto


possvel devido a incluso da TAD atravs do include.

Carregar(&c);

Chama a funo Carregar() enviando como parmetro por


referncia a varivel c. Isto possibilitar a alterao das variveis
internas da estrutura.

Mostrar(c);

Chama a funo Mostrar() enviando como parmetro por valor a


varivel c, pois apenas uma cpia da estrutura chegar na funo,
uma vez que a mesma no ser modificada por ela.

system(pause);

Para o programa

Finaliza a funo principal.

Encerra-se aqui o Captulo 9.


Pratique e verifique seus conhecimentos fazendo os
exerccios 97 e 98 que se encontram no Apndice 14.

Linguagem de Programao C/C++


52

10.
Arq
uivo
16 Armazenamento em disco

Podemos armazenar informaes em disco de duas formas: em


modo binrio ou em modo texto.
No modo binrio o arquivamento feito em bytes, ou seja,
guardamos um inteiro, float ou at mesmo um struct, que o mais
comum.
No modo texto o arquivamento feito em caracteres, ou seja,
guardamos dgito a dgito.
No modo podemos entender um arquivo de dados como uma
tabela onde as linhas so os registros e as colunas, os campos. Ex.:
Considere o arquivo dos alunos da disciplina Clculo.
Campo

RA

Nome

Nota

1231 Carlos 5,1

Registro

5432 Mnica 7,8


4533 Tnia

3,4

8754 Aurlio 6,9


Este caso, seria um tpico caso para usar arquivo binrio e no
texto, devido a natureza das informaes.
Para armazenarmos as nossas informaes em disco,
independente de ser binrio ou texto, devemos declarar uma varivel
ponteiro para uma estrutura FILE. Assim:
FILE *arq;
define a varivel que manipular o arquivo (pode ser tratada tambm
como nome interno do arquivo).
Algumas funes para manipulao de arquivo so fornecidas pelo
compilador. Apresentamos abaixo algumas funes para arquivo
Linguagem de Programao C/C++
53

binrio:

fopen: Abre o arquivo e vincula o arquivo externo ao interno.


<nome interno do arquivo>=fopen(<nome externo do
arquivo>,<tipo de abertura>)

fread: L uma estrutura do arquivo e aloca na memria.


fread(<endereo da estrutura>,<tamanho em bytes da
estrutura>,<qtd de estruturas a serem lidas>,<nome interno
do arquivo>)

fwrite: Grava uma estrutura no arquivo a partir da memria.


fwrite(<endereo da estrutura>,<tamanho em bytes da
estrutura>,<qtd de estruturas>,<nome interno do arquivo>)

fseek: Reposiciona o ponteiro do arquivo.


fseek(<nome
interno
do
arquivo>,<deslocamento
bytes>,<origem do deslocamento>)

ftell: Retorna quantidade de bytes do arquivo.


ftell(<arquivo>)

feof: Retorna true se o ponteiro estiver no final do arquivo e


false, caso contrrio.
feof(<nome interno do arquivo>)

fclose: Fecha o arquivo.:


fclose(<nome interno do arquivo>);

em

Na abertura do arquivo, devemos definir como este arquivo ser


manipulado (tipo de abertura). Para isso ns temos os seguintes
valores:

r :- abre apenas para leitura


w :- cria para gravao. Se o arquivo j existir ele ser
sobreposto.
a :- Abre para gravao no fim do arquivo, ou cria para
gravao se o arquivo no existir.
r+ :- abre um arquivo existente para alterao.(leitura e
gravao)
w+ :- cria um novo arquivo para alterao. (leitura e
gravao). Caso o arquivo j exista ele ser sobreposto.
a+ :- abre para alterao no fim do arquivo ou cria se o

Linguagem de Programao C/C++


54

arquivo no existir.
Para especificar se o arquivo ser manipulado como texto ou
binrio, acrescente a letra t ou b na string, respectivamente. (rt,
w+b etc). Caso no acrescente esta letra, o default binrio.
Os exemplos abaixo mostram como podemos gravar/consultar
dados em disco.
Digite o Exemplo 10.1(C): Faa um programa que receba do usurio o nmero do RA e o nome de 5
alunos e grave estas informaes em um arquivo no disco.

#include <stdio.h>

Inclui funo de i/o de arquivo

#define MAX 5

Define a macro MAX como 5

struct Aluno{
int ra;
char nome[30];
};

Declara o modelo Aluno para ser usado para


gravar os dados de cada aluno

int main(){

Incio da funo principal

FILE *ArqAlu;

Declara varivel ponteiro de arquivo

struct Aluno RegAlu;

Declara varivel de estrutura

int i;

Declara varivel i

ArqAlu=fopen("Alunos.dat","a");

Abre o arquivo para gravao de registros.


Vincula o arquivo interno (ArqAlu) com o arquivo
externo (Alunos.dat). O arquivo ser criado no
diretrio corrente, caso j nao exista.

for (i=0;i<MAX;i++){

Incio do looping (5x)

10

printf("Digite o RA do %i.o aluno: ",i+1);


scanf("%i",&RegAlu.ra);
printf("Digite o nome do %i.o aluno: ",i+1);
scanf(" %s",RegAlu.nome);

Recebe variveis (RA e nome) do usurio e


guarda nas variveis de registro. Note o espao
em branco antes do %, isto importante para
toda entrada de caracteres.

11

fwrite(&RegAlu,sizeof(RegAlu),1,ArqAlu);

Grava o registro no arquivo

12

Fim do looping

13

fclose(ArqAlu);

Fecha o arquivo
Fim da funo principal

14 }

Digite o Exemplo 10.1(C++): Faa um programa que receba do usurio o nmero do RA e o nome de 5
alunos e grave estas informaes em um arquivo no disco.

#include <iostream>
using namespace std;

Inclui funo de i/o de arquivo

#define MAX 5

Define a macro MAX como 5

struct Aluno{
int ra;
char nome[30];
};

Declara o modelo Aluno para ser usado para


gravar os dados de cada aluno

int main(){

Incio da funo principal

FILE *ArqAlu;

Declara varivel ponteiro de arquivo

struct Aluno RegAlu;

Declara varivel de estrutura

Linguagem de Programao C/C++


55

int i;

Declara varivel i

ArqAlu=fopen("Alunos.dat","a");

Abre o arquivo para gravao de registros.


Vincula o arquivo interno (ArqAlu) com o arquivo
externo (Alunos.dat). O arquivo ser criado no
diretrio corrente, caso j nao exista.

for (i=0;i<MAX;i++){

Incio do looping (5x)

10

cout<<"Digite o RA do <<(i+1)<<.o
aluno: ";
cin>>RegAlu.ra;
cout<<"Digite o nome do <<(i+1)<<.o
aluno: ";
cin>>RegAlu.nome;

11

fwrite(&RegAlu,sizeof(RegAlu),1,ArqAlu);

Recebe variveis (RA e nome) do usurio e


guarda nas variveis de registro. Note o espao
em branco antes do %, isto importante para
toda entrada de caracteres.

Grava o registro no arquivo

12

Fim do looping

13

fclose(ArqAlu);

Fecha o arquivo
Fim da funo principal

14 }

Digite o Exemplo 10.2(C): Faa um programa que mostre os dados gravados no exemplo 9.1.

#include <stdio.h>

Inclui funo de i/o de arquivo

struct Aluno{
int ra;
char nome[30];
};

Declara o modelo Aluno para ser usado para


gravar os dados de cada aluno

int main(){

Incio da funo principal

FILE *ArqAlu;

Declara varivel ponteiro de arquivo

struct Aluno RegAlu;

Declara varivel de estrutura

int i;

Declara varivel i

ArqAlu=fopen("Alunos.dat","r");

Abre o arquivo para leitura de registros.


Vincula o arquivo interno (ArqAlu) com o
arquivo externo (Alunos.dat). Caso o
arquivo no estiver criado no diretrio
corrente, devolver NULL para ArqAlu.

printf("RA

Imprime um cabealho para os dados

while (fread(&RegAlu,sizeof(RegAlu),1,ArqAlu)){

10

Nome\n");

printf("%i
", RegAlu.ra);
printf("%s\n", RegAlu.nome);

L um registro do arquivo e aloca na


estrutura de memria. O fread() retorna 1
(while torna-se verdadeiro) se conseguiu ler
um registro e zero (while torna-se falso),
caso contrrio.
Mostra dados alocados na estrutura da
memria pelo fread()

11

Finaliza o looping

12

fclose(ArqAlu);

Fecha o arquivo

13 }

Linguagem de Programao C/C++


56

Fim da funo principal

Encerra-se aqui o Captulo 10.


Pratique e verifique seus conhecimentos fazendo os
exerccios de 99 a 107 que se encontram no Apndice 14.

Linguagem de Programao C/C++


57

11.
ro

Alleg

Existem duas formas de se trabalhar com o vdeo: em modo texto


e em modo grfico. No modo texto, o vdeo visto como uma matriz de
caracteres (conforme trabalhamos nos captulos anteriores) e no modo
grfico, como uma matriz de pontos (pixels). Existem diversas
bibliotecas que fornecem funes para manipulao em C do modo
grfico do video, algumas com download gratuito e documentao
extensa nos sites dos desenvolvedores. Alguns exemplos, so:
BGI :- Biblioteca da Borland, bastante antiga e muito usada
para manipulao de grficos simples em 2D.

Allegro :- Muito boa e muito utilizada para confeco de


jogos.

OpenGl :- Excelente biblioteca para manipulao grfica 2D e


3D. Os recursos so primrios, possibilitando assim, o estudo
de conceitos bsicos da teoria de computao grfica.
Neste curso, trabalharemos com a biblioteca Allegro, por ser mais
completa que a BGI, mais simples que a OpenGL, e por servir
plenamente aos nossos objetivos. A instalao da Allegro no Dev-cpp j
prevista pelo ambiente, portanto bastam alguns cliques para que voc
comear a us-la. Abaixo listo um passo-a-passo para download e
instalao.

a) Abra o Dev-cpp e acesse Tools/Check for updates/packages.


b) Selecione o servidor devpaks.org
c) Clique no boto Check for updates. A lista de pacotes
disponveis no servidor ser atualizada.
d) Em Groups selecione Allegro.
e) Na lista que aparece abaixo, d um tick em Allegro e clique no
boto Download selected. Aguarde o download.
f) Clique em Ok para iniciar a instalao.
g) Nas prximas janelas d next -> next -> install -> finish.
h) Clique no boto Close. Pronto! O Allegro j est instalado.
Caso voc esteja usando CodeBlock no Ubuntu a vai um tutorial
para instalao e configurao do Allegro. Este tutorial foi retirado do
link abaixo:

Linguagem de Programao C/C++


58

http://www.rafaeltoledo.net/out-of-series-3-configurando-abiblioteca-allegro-no-codeblocks-ubuntu/
Agora que j instalamos o Allegro, vamos test-lo. Configure o
Dev para carregar a biblioteca Allegro acessando Tools/Compiler
options, tick Add these commands ... line e escreva -lalleg na caixa
de texto logo abaixo. D OK e abra uma pgina em branco para
digitao do exemplo abaixo.
Digite o Exemplo 11.1 :- Faa um programa em modo grfico que mostre um retngulo, um retngulo
preenchido, uma reta, um circulo e 5 pontos na tela.
1

#include <allegro.h>

Inclui arquivo de prottipos para funes


do Allegro

int main(){

Abre main()

allegro_init();

inicializa Allegro

install_keyboard();

Inicializa teclado

set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640,
480, 0, 0);

define o modo grfico, abrindo uma janela


640x480

rect(screen,10,10,100,100,makecol(0,0,255));

rectfill(screen,200,200,540,100,makecol(0,255,0));

desenha retngulo preenchido de verde de


200,200 540,100

line(screen,10,400,500,250,makecol(255,0,0));

desenha linha vermelha de 10,400


500,250

circle(screen,600,600,50,makecol(155,100,0));

desenha circulo de centro 600,600 de raio


50

10

putpixel(screen,450,450,makecol(200,200,50));

desenha 5 pontos na tela

11

putpixel(screen,460,450,makecol(200,200,50));

12

putpixel(screen,470,450,makecol(200,200,50));

13

putpixel(screen,480,450,makecol(200,200,50));

14

putpixel(screen,490,450,makecol(200,200,50));

15

readkey();

para o programa

16

Fecha main()

17

END_OF_MAIN()

necessrio p/ portabilidade

desenha retngulo azul de 10,10


100,100

Encerra-se aqui o Captulo 11.


Pratique e verifique seus conhecimentos fazendo os
exerccios de 108 a 132 que se encontram no Apndice 14.
Dica: Verifique a lista de funes do Allegro no Apndice desta
apostila.

Linguagem de Programao C/C++


59

12.
Apndice A Algoritmos e
Fluxogramas

A vantagem de desenvolvermos algoritmos/fluxogramas, que


no precisamos pensar em qual linguagem ser implementado,
reservando nosso esforo totalmente na lgica da soluo, e no nos
recursos computacionais que deveramos usar.
O princpio da lgica de programao em computadores o
mesmo que usamos em nosso cotidiano. No dia-a-dia decidimos a todo
o momento o que vamos fazer no prximo segundo. Algumas tarefas
fazemos tantas vezes que nosso crebro mecaniza o processo. Neste
processo esto todas as tarefas que temos que fazer em uma sequencia
lgica. Alguns exemplos so:
1. Lavar a loua at que no haja mais loua para lavar.
2. Dirigir o carro at chegar escola.
3. Praticar um percurso de corrida at que o percurso acabe.
Todas estas tarefas so constitudas por tarefas menores, por
exemplo:

1.
2.
3.
4.
5.

Tarefa 1: Lavar loua


Juntar as louas na pia
Passar gua em todas elas
Encher uma vasilha de gua com detergente
Lavar cada uma das louas at que acabe
Lavar a pia

1.
2.
3.
4.
5.

Tarefa 2: Dirigir carro


Entrar no carro
Dar a partida
Tirar o carro da garagem
Dirigir at chegar escola
Parar o carro

Tarefa 3: Corrida
1. Iniciar a corrida
2. Correr at acabar o percurso
3. Parar de correr
A cada uma destas 3 tarefas podemos chamar de algoritmo, pois
Linguagem de Programao C/C++
60

so uma sequencia lgica. Algoritmo ento, nada mais que um


conjunto de procedimentos colocados em uma sequencia lgica de
forma a resolver um problema proposto.
Em um algoritmo devemos ficar atentos aos verbos (aes), pois
eles so os comandos que devero ser seguidos por nosso crebro
para atingir o objetivo de resolver o problema. Na tarefa 1, temos:
juntar, passar, encher, lavar, lavar. Na tarefa 2, temos: entrar, dar, tirar,
dirigir, parar. Na tarefa 3, temos: iniciar, correr, parar.
Agora pense voc: descreva
destaque os verbos utilizados.

algumas

rotinas

cotidianas

Todo algoritmo, geralmente, obedece 3 procedimentos bsicos:


Entrada, processamento e sada.

Entrada

Processamento

Sada
Entrada: so as informaes que o algoritmo precisar para
resolver o problema. Estas informaes podem estar com o usurio, em
um arquivo ou vir de outro algoritmo.
Processamento: o que feito com as informaes de entrada
para obter os resultados necessrios.
Sada: o resultado que se espera do algoritmo, ou seja, a
resoluo do problema.
Por exemplo, se tivermos o problema de guardar livros em uma
prateleira, teramos:
Entrada: livros
Processamento: verificar o assunto do livro, localizar o assunto na
prateleira.
Sada: guardar o livro
Outro exemplo seria o clculo da mdia de duas matrias de um
aluno.
Entrada: nota da matria 1, nota da matria 2
Processamento: calculo da mdia (nota 1 + nota 2) / 2
Sada: mostra a mdia
Linguagem de Programao C/C++
61

Um algoritmo escrito para ser executado em um computador,


pode ser chamado de portugus estruturado.
Chamamos de portugus estruturado porque escrito de forma
natural, porm obedecendo uma estrutura mnima de escrita.
Geralmente estes algoritmos so bem prximos daquilo que teremos
que escrever nos editores para realmente executarmos nossos
programas. Alguns comandos (verbos no imperativo) utilizados nesta
linguagem so listados abaixo:

Comandos

descrio

Inicio

Marca o incio da lgica

Fim

Marca o fim da lgica


Indica uma atribuio memria

Leia

Recebe uma informao do usurio

escreva

Retorna uma informao ao usurio

Se-seno-fimdose

Decide qual procedimento executar


dependendo de uma condio

No exemplo do clculo da mdia das disciplinas teramos o


seguinte algoritmo:
inicio
. . leia nota1
. . leia nota2
. . media (nota1 + nota2) / 2
. . escreva media
fim
Neste caso, estamos lendo do usurio a nota 1 e a nota 2,
calculando a mdia e guardando em um local na memria chamado
media e por ltimo mostrando a mdia para o usurio.
Alm dos algoritmos, podemos descrever os procedimentos que
resolvem um problema atravs de um fluxograma.
Fluxograma (ou diagrama de blocos) uma representao grfica
da seqncia de execuo dos procedimentos. Cada tipo de
procedimento requer um smbolo diferente. Abaixo mostramos os
principais.

Linguagem de Programao C/C++


62

Smbolos

Descrio
Incio/Fim determina o comeo ou final de uma seqncia de
procedimentos.
Atribuio altera contedo da memria.
Entrada/Sada permite entrada e sada de informaes.
deciso/repetio decide entre dois ou mais caminhos, dependendo do
caso permite a repetio da execuo de procedimentos.
Abre/fecha arquivo
Sub-rotina permite o desvio da execuo do programa para uma subrotina
Direo direciona o fluxo dos procedimentos
Conector conecta uma parte do fluxograma a outra parte (usado quando
no possvel a representao contnua, normalmente com uma letra no
interior)
Conector de pgina conecta uma parte do fluxograma outra localizada
em outra pgina
O exemplo do clculo da mdia teria o seguinte fluxograma:

Incio
Leia Nota 1

Leia Nota 2

Media = (nota 1 + nota 2) / 2

Escreva media

Fim

Poderamos tambm realizar um teste, atravs do comando de


deciso se-seno, de forma que seja impresso Aprovado, caso a mdia
Linguagem de Programao C/C++
63

seja maior ou igual a 5,0 e Reprovado se mdia menor que 5,0.


Abaixo temos as solues em algoritmo e fluxograma.
inicio
. . leia nota1
. . leia nota2
. . media (nota1 + nota2) / 2
. . se media >= 5
. . . . escreva Aprovado
. . seno
. . . . escreva Reprovado
. . fim do se
. . escreva media
fim
incio

leia nota1

leia nota2

media = (nota1+nota2)/2

no

media >=5

Escreva
Reprovado

sim
Escreva
Aprovado

Escreva
media
fim

Um outro recurso importante da lgica o comando de repetio


chamado enquanto. Este recurso permita repetir a execuo de
procedimentos, ou seja, quando temos que fazer a mesma coisa muitas
Linguagem de Programao C/C++
64

vezes, podemos usar este recurso. NO caso apresentado acima, caso


queiramos permitir que o programa seja executado para 30 alunos, ao
invs de apenas um, podemos usar o comando enquanto e repetir a
execuo de todo o procedimento (digitao das notas, calculo e
exibio da mensagem) 30 vezes. Mostramos abaixo como o algoritmo
e fluxograma seriam reescritos.

inicio
. . cont = 1
. . enquanto cont <= 30
. . . . leia nota1
. . . . leia nota2
. . . . media (nota1 + nota2) / 2
. . . . se media >= 5
. . . . . . escreva Aprovado
. . . . seno
. . . . . . escreva Reprovado
. . . . fim do se
. . . . escreva media
. . . . cont = cont + 1
. . fim do enquanto
fim

Linguagem de Programao C/C++


65

incio

cont = 1

no
cont <=30
sim
leia nota1

leia nota2

media = (nota1+nota2)/2

no

sim
media >=5
Escreva
Aprovado

Escreva
Reprovado

Escreva
media

cont = cont + 1

fim

Linguagem de Programao C/C++


66

13.
Apndice B Resumo de comandos e
funes
Nome

Descrio

Exemplo

Observaes

stdio.h
scanf()

Recebe entrada
do usurio

scanf(%i,&valor);

%i o formato e valor a varivel


que guardar a informao do
usurio

printf()

Mostra
informaes ao
usurio

printf(Valor: %i,valor);

a varivel valor substituir o


formato (%i) quando a mensagem
for impressa.

fopen()

Abre arquivo

arq=fopen(c:\\arquivo.dat,a);

Abre, se j existir, o arquivo


arquivo.dat. Se no existir, cria.
Vincula ao nome interno (arq) e
permite incluso no final do
arquivo (parmetro a). O
parmetro w abre para criao e
gravao e o parmetro r abre
para leitura.

fclose()

Fecha arquivo

fclose(arq)

Fecha o arquivo que foi vinculado


ao nome interno arq

fread()

L um registro do
arquivo e guarda
na memria

leu=fread(&reg,sizeof(reg),1,arq)
;

A varivel leu receber 1 se um


registro conseguiu ser lido pela
funo e 0, caso contrrio. Os
parmetros so: endereo da
struct (registro), tamanho em
bytes da struct, qtd de structs a
serem lidos e nome interno do
arquivo.

fwrite()

Grava o contedo
da struct da
memria para o
arquivo

fwrite(&reg,sizeof(reg),1,arq);

Grava um registro no arquivo


atravs da struct reg da
memria. Os parmetros so:
endereo da struct, tamanho em
bytes da struct, qtd de structs a
serem lidos e nome interno do
arquivo.

conio.h
getch()

Pausa o programa l=getch();


e recebe um
caractere do
usurio.

Recebe um caractere do usurio e


guarda na variavel l. Usado sem
a varivel apenas pausa o
programa aguardando digitao de
qualquer tecla.
math.h

sqrt()

Calcula e retorna
a raiz quadrada
de um numero

raiz=sqrt(x);

A varivel raiz receber o valor da


raiz quadrada do contedo da
varivel x.

cos()

Calcula e retorna
o coseno de um
numero

c=cos(ang);

A varivel c receber o coseno da


varivel ang (valor do ngulo em
radiano)

sin()

Calcula e retorna
o seno de um
numero

s=sin(ang);

A varivel s receber o seno da


varivel ang (valor do ngulo em
radiano)
Comandos

if/else

Executa
determinadas
instrues de
acordo com

if (nota >= 5){


printf(Aprovado);
}
else{

Linguagem de Programao C/C++


67

A condio nota>=5 testa se


nota maior que 5 e se for o
programa imprimir Aprovado na
tela; caso contrrio (nota <5) o

Nome

Descrio

Exemplo

condies

printf(Reprovado

Observaes
programa imprimir Reprovado

}
while

Repete a
execuo de
determinadas
instrues
enquanto a
condio for
verdadeira

valor=1;
while (valor <= 5){
printf(\nValor %i,valor);
valor=valor + 1;
}

A varivel valor inicializada


com 1. O while verificada se valor
menor que 5 e enquanto no for
menor, o programa imprimir o
contedo de valor na tela,
somando 1 variavel valor aps
cada impresso na tela.

for

Repete a
execuo de
determinadas
instrues
enquanto a
condio for
verdadeira

for (i=1;i<=5;i++){
printf(\nValor %i, i);
}

A varivel de controle i
incializada em 1. o for testa se i
menor ou igual a 5 e se for o
programa mostra o valor de i na
tela, retorna a 1 linha, soma 1 na
variavel i e testa novamente, se i
for ainda menor ou igual a 5, entra
novamente no for e mostra
novamente o valor de i. Isto se
repete at i ser maior que 5.

Allegro.h (no padro ANSI)


allegro_init()

Inicializa o Allegro allegro_init();

Primeira funo a ser usada antes


de qualquer outra funo grfica

set_gfx_mode Define janela


()
grfica

set_gfx_mode(GFX_AUTODETECT Detecta a placa de video e define o


_WINDOWED,640,480,0,0);
modo (640,480). Os 2 ultimos
parametros definem janela virtual
(no recomendavel,por isso 0,0)

circle()

Desenha uma
circunferncia.

circle(screen,100,100,50,makecol Desenha um circulo, na tela, na


(0,0,255));
posio 100,100 de raio 50, de
borda azul (0,0,255). circlefill()
com os mesmos parmetros
desenha um crculo azul.

rect()

Desenha um
retngulo.

rect(screen,100,100,200,200,mak Desenha um retngulo, na tela,


ecol(0,255,0));
com canto superior esquerdo em
100,100 e canto inferior direito em
200,200, de borda verde. rectfill()
com os mesmos parmetros
desenha um retngulo verde

line()

Desenha uma
linha

line(screen,250,50,100,300,make Desenha uma linha vermelha na


col(255,0,0));
tela, com ponto inicial em 250,50 e
ponto final em 100,300,de borda
verde.

putpixel()

Desenha um
ponto

putpixel(screen,10,10,makecol(25 Desenha um ponto vermelho na


5,0,0))
tela, na posio 10,10.

floodfill()

Preenche regio

floodfill(screen,120,240,makecol(
0,255,0));

Preenche uma regio de cor verde


a partir do ponto 120,240 at
encontrar uma borda (de qualquer
cor)

set_color_dep
th()

Define
profundidade de
cor

set_color_depth(32);

Define que teremos 4 bytes de


profundidade de cor. Usado sempre
que definirmos um BITMAP em
nosso programa.

install_keyboa Instala recursos


rd()
de teclado

install_keyboard();

Reconhece cada tecla do teclado.


Exemplo: key[KEY_ESC]

install_mouse( Instala recursos


)
de mouse

install_mouse();

Reconhece posio e cliques do


mouse

clear_to_color Pinta toda rea de clear_to_color(screen,makecol(25 Pinta o bitmap (neste caso, a tela)
()
um bitmap
5,0,0));
de vermelho
(inclusive tela) de
uma determinada
cor.

Linguagem de Programao C/C++


68

Nome

Descrio

Exemplo

Observaes
Copia o contedo de img para
screen (tela) a partir da posio
0,0 da origem (img) para a posio
0,0 do destino (screen). 640,480
o tamanho do bitmap de origem
(img)

blit()

Copia uma rea


de memria para
outra

blit(img,screen,0,0,0,0,640,480);

textout_ex()

Escreve texto na
tela

textout_ex(screen,font,"Teste",10 Escreve Teste no bitmap da tela


0,350,makecol(255,255,255),-1); na posio 100, 350 na cor branca.
O -1 serve para deixar
transparente o fundo de cada
caractere.
PortaP.h (no padro ANSI)

InicializaPP()

Carrega a
biblioteca na
memria

InicializaPP();

FinalizaPP()

Descarrega a
biblioteca da
memria

FinalizaPP()

inp32()

Recebe um sinal
da porta paralela

s=inp32(0x379)

Recebe um sinal da porta e atribui


o valor para a varivel inteira s

oup32()

Envia um sinal
para a porta
paralela

oup32(0x378,255)

Envia o sinal 255 para a porta


paralela. Neste caso, setando
todos os bits.

Linguagem de Programao C/C++


69

14.
Apndice C
Exerccios
1

Faa um programa que imprima Ola na tela.

17 Faa um programa que imprima seu nome na tela.


18 Faa um programa que imprima um nome, escolhido pelo usurio,
na tela. Voc dever permitir que o usurio digite (funo scanf())
este nome, definindo uma varivel para guardar este nome na
memria.
19 Faa um programa que receba o nome e a idade do usurio e depois
mostre-os na tela. Devem ser definidas duas variveis para guardar
nome e idade na memria.
20 Faa um programa que receba o nome do usurio, quantas horas
ele trabalhou no ms e o valor da sua hora trabalhada. Mostre seu
nome e o valor do seu salrio. Neste caso, voc deve reservar
variveis para o nome, quant. de horas trabalhadas, valor da hora e
para o salrio (que ser calculado).
21 Os funcionrios da empresa ToadaGoo, recebem para cada hora
extra, 50% a mais do valor da hora normal. Faa um programa que
receba o nome de um funcionrio, quantas horas normais e quantas
horas extras ele trabalhou, assim como o valor da hora normal.
Mostre, no final do programa, o salrio lquido deste funcionrio.
22 Faa um programa que receba do usurio um numero qualquer e
mostre o quadrado deste nmero.
23 Faa um programa que permita que o usurio digite dois valores
inteiros. Multiplique estes valores guardando o produto em uma
terceira varivel. Mostre o resultado da multiplicao.
24 Faa um programa de uma calculadora simples que permita que o
usurio digite dois valores inteiros. A calculadora, logo aps a
digitao dos nmeros, dever mostrar o valor da soma, da
subtrao, da multiplicao e da diviso dos valores digitados.
25 Faa um programa que calcule a media da temperatura ocorrida em
um dia. O usurio dever digitar 5 temperaturas e o programa
dever mostrar em tela a mdia das temperaturas.
26 A tabela abaixo mostra o valor do cmbio de moedas estrangeiras
para cada real. Faa um programa onde o usurio entre com uma
quantia em real e o programa mostre este valor em outras moedas.
Moeda

Valor (R$)

1 Dlar

1,9

1 Euro

3,1

27 Faa um programa que calcule e mostre o salrio lquido de um


funcionrio. O programa deve receber o salrio bruto e considerar
que todo funcionrio tem um desconto de 10% de IR no salrio
bruto.
28 Para calcular a rea de um retngulo, podemos multiplicar sua
largura pelo seu comprimento. Permita que o usurio entre com a
largura e comprimento de um retngulo qualquer e mostre sua
rea.
29 Supondo que um engenheiro deseja saber qual a distncia entre 2
pontos em um terreno. Porm ele sabe apenas as coordenadas (x,y)
de cada ponto. Faa um programa que resolva este problema para o
engenheiro, sabendo que o clculo da distncia dado por:

Dica: Use sqrt() (math.h) para calcular a raiz quadrada.

30 Uma empresa de engenharia vai lotear uma fazenda e deseja dividila em 3 categorias (A, B e C) de acordo com o tamanho do lote.
Toda a fazenda ser dividida da seguinte forma: 20% para a
Categoria A, 30% para a Categoria B e 50% para a Categoria C. A
Categoria A ter 4 lotes, a Categoria B ter 10 lotes e a Categoria C
ter 20 lotes. Voc foi designado para desenvolver um programa
que mostre a rea de cada lote, das categorias A, B e C.. Receba do
usurio a rea total da fazenda, e para um bom entendimento do
problema, considere a fazenda com formato retangular.
31 Uma empresa de transporte rodovirio precisa saber o tempo exato
que um nibus demorou para sair da sua cidade origem e chegar na
sua cidade destino. Para isso, pediu que voc fizesse um programa
(faa primeiro o algoritmo e o fluxograma) que recebesse o horrio
de sada (HH:MM:SS) e o horrio de chegada (HH:MM:SS), e
mostrasse o tempo exato gasto na viagem. Exemplo:
Horrio de Sada

: 14:28:32

Horrio de Chegada: 17:47:52


Tempo de Viagem : 03:19:20
Dica: Receba as entradas em variveis inteiras separadas. Converta
todas para segundos, execute a diferena e converta o resultado para
horas, minutos e segundos.

32 Faa um programa que permita que o usurio entre com um


numero num intervalo de 0 a 6, equivalendo cada um deles a um
dia da semana (domingo = 0). Imprima o dia da semana
equivalente ao numero digitado pelo usurio. Caso o usurio digite
um numero invalido, d uma mensagem informando-o. Use o
comando "switch" para os testes.
33 Em uma empresa de saneamento bsico os servios recebem uma
numerao de acordo com sua natureza: 1 para troca de tubulao,
2 para verificao de problemas de vazamento, 3 para ligao de
gua e esgoto. De acordo com o problema, o servio agendado
para um determinado horrio do dia. 8h da manh so agendados
os servios 1, para s 11h so agendados os servios 2 e para s
15h so agendados os servios 3. Voc, como programador de
sistemas da empresa, foi designado para fazer um programa que
agende os servios em seus respectivos horrios. O programa deve
receber o numero do servio e mostrar o seu horrio de
agendamento. Use o comando switch, com mensagem de erro caso
o usurio digite um numero invalido. Faa o algoritmo e o
fluxograma antes do programa.
34 Permita que o usurio digite um valor inteiro, teste se este valor
maior que 10, caso seja, imprima Maior que 10; caso contrrio,
imprima Menor ou igual a 10.
35 Uma empresa no pretende contratar candidatos com mais de 40
anos. Faa um programa que receba a idade do candidato e mostre
uma mensagem se ele est apto ou no para a vaga.
36 Um restaurante oferece um desconto de 7% para todos os clientes
que gastarem mais que R$ 250,00 no fechamento da conta. Faa
um programa que pergunte ao usurio qual o valor da conta e
mostre o valor real a ser pago.
37 Uma empresa deseja bonificar seus funcionrios de acordo com a
quantidade de vendas do ms. O gerente lhe entregou uma tabela
para que voc faa um programa que mostre o valor das
bonificaes.
Valor Vendido (R$)

Bonificao (%)

< 1.500,00

Entre 1.500,00 e 3.500,00

> 3.500,00

10

38

O IMC (ndice de Massa Corprea) um bom sinalizador para o


controle do nosso peso. A frmula simples:
IMC = peso / (altura2)
atravs da tabela abaixo podemos saber se precisamos emagrecer,
engordar ou manter o nosso peso.
IMC

Situao

Abaixo de 20 (exclusive)

Abaixo do peso normal

Entre 20 e 24,9 (inclusive)

Peso normal

Entre 25 e 35 (inclusive)

Acima do peso normal

Acima de 35 (exclusive)

Obeso

Faa um programa que receba a altura e o peso do usurio. De acordo


com a frmula do IMC, mostre a situao do usurio.

39 Dados 3 valores representando os lados de um tringulo, verifique


se este tringulo escaleno (3 lados diferentes), issceles (2 lados
iguais) ou equiltero (3 lados iguais).
40 Faa um programa que receba 3 valores correspondentes aos lados
de um tringulo. Verifique e d mensagens para as seguintes
condies, sendo A o maior lado:
Condio
Se A >= B + C
Se A2 = B2 + C2
Se A2 > B2 + C2
Se A2 < B2 + C2

Mensagem
Nenhum tringulo formado
Um tringulo retngulo formado
Um tringulo obtusngulo formado
Um tringulo acutngulo formado

Obs. Faa o algoritmo e o fluxograma antes do programa.

41 Dados 3 valores quaisquer, verifique se eles podem ser lados de um


tringulo. Lembre que, em um tringulo, a soma de dois lados deve
ser maior que o maior lado.
42 Receba 3 nmeros inteiros e distintos, a partir do usurio, e mostreos em ordem crescente.
43 Faa um programa que, leia os 3 nmeros, a partir do usurio,
correspondentes aos coeficientes de uma equao do 2o grau.
Atravs de Bscara, calcule, se possvel, as razes da equao,
realizando todas as consistncias necessrias. Faa o algoritmo e o
fluxograma antes do programa.
44 Imprima os 10 primeiros nmeros inteiros na tela.
45 Imprima o quadrado dos 10 primeiros nmeros inteiros.
46 Faa um programa que permita que o usurio digite a idade de 10
funcionrios.
47 Faa um programa que permita que o usurio digite a idade de 10
funcionrios e aps a digitao, mostre a somatria das idades. A
soma das idades deve ser feita dentro do looping e apenas a
exibio fora dele.
48 Um usurio tem em suas mos 100 Notas Fiscais. Faa um
programa que receba seus valores e calcule o total de todas as
Notas.
49 Implementar um programa que imprima a tabuada de um nmero
digitado pelo usurio.
50 Faa um programa que calcule e mostre o quadrado de um nmero
N inteiro positivo, digitado pelo usurio. O clculo deve ser feito
atravs da soma dos N primeiros nmeros mpares. Ex.: Se N=3 o
programa calcular 1+3+5=9, que o quadrado de 3.
51 Em uma loja, todos os clientes que comprarem mais de R$ 300,00
recebero um desconto proporcional ao valor de sua compra, de
acordo com a tabela abaixo:
Valor da compra (R$)

Desconto (%)

At 500,00

De 501,00 a 1000,00

10

Acima de 1000,00

12

Voc foi incumbido de fazer um programa que permita que o cliente


entre com o valor dos produtos comprados e mostre o total da
compra, o valor do desconto e o preo a pagar. Pergunte ao usurio
se deseja terminar a digitao dos produtos e tambm se deseja
finalizar o programa.
52 A CPFL deseja saber quantos usurios de um bairro de classe mdia
ultrapassa o consumo mensal ideal. Para isso a empresa tem em
suas mos o consumo mensal ideal, que deve ser recebido pelo
programa uma nica vez, e as medidas do ms anterior e do ms
atual das 5000 residncias do bairro, para verificar o consumo
calculado pela diferena entre eles.
53 Faa um programa que calcule o fatorial de qualquer nmero
digitado pelo usurio, sabendo que o fatorial de um nmero o
produtrio dos nmeros inteiros entre 1 e ele mesmo.
5

54 Calcule a seguinte expresso:

i 1

Onde: x digitado pelo usurio.


55 Faa um programa que leia uma coleo de nmeros inteiros e
calcule sua mdia quadrtica. A mdia quadrtica dada pela
frmula:

MQ x12 x22 x32 x42 xn2


O programa encerra-se quando o valor de x for 0.
56 Calcule a expresso, sem utilizar a funo pow() da math.h:
Onde: X e Y so digitados pelo usurio
57 Faa um programa que calcule o fatorial de qualquer nmero
digitado pelo usurio, sabendo que o fatorial de um nmero o
produtrio dos nmeros inteiros entre 1 e ele mesmo
58 A sequencia de Fibonacci segue a seguinte ordem:
0 , 1 , 1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55 , 89 , ...
Repare que cada termo a somatria dos dois anteriores, sendo
que os dois primeiros so 0 (zero) e o 1 (um). Faa um programa
que receba um valor do usurio e imprima os termos da sequencia

de Fibonacci menores que o valor digitado.


59 Uma das primeiras aplicaes de computadores foi o clculo de
trajetria de projteis. Se um projtil atirado com uma velocidade
inicial V (m/s) a um ngulo de inclinao (radianos), sua posio
no plano vertical (x,y) no tempo t (segundos) calculada pelas
frmulas:

Onde:
e
Faa um programa que, dados os parmetros e V, liste as
coordenadas x e y em intervalos de 0.01 segundos para um tiro em
particular, terminando a listagem quando o projtil atingir o solo.
60 Faa um programa que receba 5 valores inteiros em um vetor e
mostre na tela, os valores na ordem inversa.
61 Faa um programa que receba as notas de 10 alunos de uma classe
em um vetor e mostre a mdia das notas.
62 Faa um programa que receba, em um vetor, 200 valores inteiros, a
partir do usurio. Aps o carregamento, mostre para o usurio
apenas o contedo dos ndices pares.
63 Faa um programa que carregue um vetor de inteiros, permitindo
que o usurio defina a quantidade de elementos a serem
carregados. O usurio tambm deve digitar o valor de um elemento
o qual deseja saber quantos destes elementos existem no vetor.
64 Cadastre em um vetor os ndices de inflao dos 12 meses de 2008
(cada ndice far referncia a um ms do ano).
a)Mostrar a inflao e o ms (numericamente) de menor ndice
b)Mostrar a inflao e o ms (numericamente) de maior ndice
65 Calcule o desvio padro do vetor carregado no exerccio 4.2.5

Onde xi cada posio do vetor, x trao a mdia dos elementos do


vetor e n o total de elementos.

66 Faa um programa que receba do usurio um nmero inteiro N e


um vetor X com N nmeros reais. Mostre o resultado da funo
abaixo.

Onde xi cada posio do vetor e N o total de elementos.

67 Faa um programa que crie um vetor, digitado pelo usurio, com a


idade de 100 pessoas. Mostrar a mdia aritmtica e a frequncia
absoluta de uma determinada idade digitada pelo usurio.
Frequncia absoluta de um valor o nmero de vezes que o mesmo
aparece no conjunto de valores (vetor).
68 Cadastre em um vetor, 50 nmeros de cheques que foram recebidos
por uma loja em um dia de trabalho. Permita que o usurio faa
uma busca neste vetor, a fim de verificar se um determinado
nmero de cheque foi ou no cadastrado. D mensagem ao usurio
mostrando se o nmero consta ou no no cadastro de cheques.
69 Em uma estrada, foi fixado um sistema de radar mvel contendo
dois radares (r1 e r2) a uma distancia de 10m um do outro.
Considere que a velocidade mxima da estrada seja de 80 Km/h e o
calculo da velocidade seja V=ds/dt, onde V velocidade, ds o
espao percorrido e dt o tempo gasto para atravessar este espao.
O programa deve receber o tempo em segundos de cada veculo
captado pelo sensor (em nosso caso, pelo usurio). Caso o veculo
ultrapasse o limite de velocidade o programa tambm receber do
sensor (do usurio), a placa do veculo. Crie dois vetores (Placas e
Velocidades) para armazenar a placa (apenas os 4 dgitos finais) e a
velocidade de cada veculo multado. Quando o sensor (usurio)
captar (digitar) 0(zero) no tempo, significa que o radar foi retirado
da estrada e o programa deve ser encerrado.
70

Em um depsito de pisos usados, o gerente deseja um programa


onde o cliente possa dizer quantos metros quadrados deseja cobrir
de piso e ele possa dizer qual dos pisos (padro 0,2 x 0,2 m) ele
tem quantidade suficiente disponvel. O programa deve carregar em
cada posio do vetor Pisos a quantidade disponvel de cada tipo
de piso (o ndice ser o cdigo do piso). Para cada cliente dever ser
digitado a quantidade em metros quadrados da rea a ser coberta e
o programa mostrar o cdigo de todos os pisos com quantidades
suficientes.

71 Considere um sistema de sensoriamento de aquecimento de telhas


em um determinado dia (24 horas). Duas telhas so expostas ao sol
com sensores sobre elas, uma com uma tinta especial (telha 1) e
outra no (telha 2 ). A cada 15 minutos o sensor capta (usurio
digita) a temperatura das telhas as quais so registradas em dois
vetores distintos (TempTelha1 e TempTelha2). Mostre qual das
telhas teve menor aquecimento mdio durante todo o dia.
72 Um sistema de verificao de gastos eltricos foi implantado em
uma residncia. A princpio, apenas dois aparelhos esto sendo
medidos: ferro eltrico (cdigo 1) e chuveiro (cdigo 2). Sempre
que um destes aparelhos usado, o sensor capta o cdigo
(guardando-o em um vetor) e o quanto gastou em KW (guardandoo em um outro vetor de ndice correspondente). Mostre ao final do
dia (sensor capta cdigo 0), quanto foi gasto por cada um dos
aparelhos.
73 Foi realizada uma pesquisa quanto a religio da populao de uma
determinada cidade. Receba do usurio, os cdigos ((P) protestante,
(B) budista ou (C) catlica) da religio dos 1000 moradores desta
cidade, guardando-os em um vetor. Mostre o percentual de
budistas, protestantes e de catlicos existentes na cidade.
74 Um elevador tem sua carga mxima estipulada em 600 Kg. Um
sensor foi instalado para controlar este limite e avisar aos usurios
sobre o perigo de excesso de peso. O sensor capta cdigo 1 quando
uma pessoa entra, cdigo 2 quando sai e cdigo zero quando o dia
termina. A cada pessoa que entra seu peso registrado em um
vetor como valor positivo e quando a pessoa sai seu peso
registrado como valor negativo. Sempre que o elevador ultrapassar
sua carga mxima, mostrado em um monitor um aviso de Peso
Excedido. Faa um programa que execute a simulao de pessoas
entrando e saindo do elevador. Os valores devem ser digitados pelo
usurio.
75 Um sistema de auditoria foi instalado para verificar a movimentao
diria de uma determinada conta bancria suspeita. Toda
movimentao registrada em um vetor. Os crditos so valores
positivos e os dbitos negativos. O sistema emite alerta se a
movimentao foi ou no zerada (crditos = dbitos) ao final do dia.
A movimentao termina com valor 0.

76 Faa um programa que receba uma frase do usurio e mostre


quantas vogais a frase contem.
77 Faa um programa que mostre o nmero de palavras contidas em
um string. O string deve ser fornecido pelo usurio.
78 Um programa de criptografia codifica as vogais a, e, i, o, u como 1,
2 ,3, 4, 5, respectivamente. Faa um programa que receba uma
frase codificada do usurio e mostre-a decodificada.
79 Faa um programa que receba o nome completo do usurio e
mostre a abreviatura do seu nome.
80 Faa uma funo que receba um string como parmetro e devolva o
contedo da string em ordem alfabtica. Um string um vetor de
caracteres contendo '\0' como finalizador.
void stralf(char *s1);
81 Faa um programa que receba uma frase do usurio. Construa outra
string contendo a primeira letra de cada palavra, da ltima at a
primeira, separados por espaos em branco. Ex.: Frase : Nesta
prova vou tirar um dez.
Iniciais: d u t v p N
82 Faa um programa que receba um string do usurio e guarde em
um vetor os ndices da string que contem a letra 'a'.
83 Faa um programa que receba o nome completo do usurio,
construa outra string com o primeiro nome completo e os outros
abreviados, separados por espaos em branco.
Ex.:
Nome Completo : Kesede Rodrigues Julio
Nome Abreviado: Kesede R J

84 Faa um programa que receba do usurio em duas strings distintas,


uma frase e uma sequencia de duas letras, supostamente contida
na frase. Mostre quantas vezes a sequencia aparece na frase. Ex.:
Frase: Descobertos mais ossos de polmica espcie de homindeos
Sequencia: es
Resultado: 2

85 Faa um programa que receba uma frase do usurio e mostre a


quantidade de ditongos e/ou hiatos (duas vogais consecutivas)
encontrados.
86 Faa um programa que mostre para o usurio uma string contendo
o primeiro e o ltimo nome de uma pessoa. O programa deve
receber do usurio uma string contendo o nome completo da
pessoa.
87 Faa um programa que receba o nome completo da pessoa e
devolva este nome na forma bibliogrfica.
88 Faa um programa que receba uma frase do usurio. Logo em
seguida receba tambm uma palavra. O programa deve mostrar
uma mensagem dizendo se a palavra digitada esta contida ou no
na frase.
89 Faa um Jogo da Forca.
90 Faa um programa que carregue em uma matriz as notas dos 30
alunos das 3 turmas que um professor leciona. Mostre a media de
cada turma.
91 Faa um programa que mostre o menor valor de uma matriz.
Receba os valores e a ordem da matriz, a partir do usurio.
92 Faa um programa em C que receba do usurio uma matriz NxM (N
o nmero de linhas e M o nmero de colunas) de nmeros
inteiros, e armazene na linha N-1 o somatrio dos elementos de
cada coluna (linhas de 0 a N-2). Exibir os resultados. Como
exemplo, considere a matriz 4 x 2 a seguir. A ltima linha conter o
somatrio das linhas anteriores. Ex.:
0
1
2
3

0
4
5
8
17

1
2
9
20
31

93 Faa a multiplicao de duas matrizes. Receba os valores e as


ordens das matrizes, a partir do usurio. Faa todas as
consistncias necessrias.
94 Preencha uma matriz quadrada de ordem 4, da seguinte forma:
se i <> j, m[i, j] = 0 e
se i = j, m[i, j] = 1

95 Mostre quantos elementos diferentes de zero existem em uma


matriz. A ordem e seus valores devem ser recebidos pelo usurio.
96 Verifique se uma determinada matriz simtrica. A ordem e seus
valores devem ser recebidos pelo usurio.
97 Faa um programa que carregue uma matriz de inteiros 5x5, a
partir do usurio. Mostre na tela a somatria de todos os valores,
exceto os valores da diagonal principal.
98 Faa um programa que carregue uma matriz de inteiros 10x10, a
partir do usurio. Carregue um vetor com os valores da diagonal
secundria da matriz.
99 Faa um programa que carregue uma matriz de inteiros 10x10, a
partir do usurio. Mostre na tela a somatria de todos os valores,
exceto os valores das linhas pares.
100 Faa um programa que carregue uma matriz de inteiros 10x10, a
partir do usurio. Carregue um vetor com os valores da diagonal
secundria da matriz.
101 Em uma autopea o proprietrio deseja manter uma tabela de
custos de suas peas. Nesta tabela, cada coluna representa uma
peca e cada linha o preo de custo de cada fornecedor. Faa um
programa que permita ao proprietrio carregar esta tabela e logo
em seguida digitar o cdigo de uma pea (ndice da coluna) para
que o programa possa mostrar qual o cdigo do fornecedor (ndice
da linha) que tem o preo de custo mais barato.
102 Em uma transportadora, as distncias entre cidades, so dadas
por uma tabela, onde as linhas so as cidades de origem, e as
colunas de destino, e portanto os valores da diagonal principal desta
matriz zero. Os ndices da matriz so os cdigos das cidades.
Permita que seu programa mostre qual o destino mais distante,
dado uma origem. O programa deve receber a tabela de distancias
(100 x 100), e logo em seguida, receber o cdigo da origem.
103 Considere que um engenheiro deseja saber qual a distncia entre
diversas localizaes em uma rea. Para isto ele tem em mos
apenas as coordenadas x,y de cada localizao. Faa um programa
que permita que o engenheiro carregue uma tabela (nx5) onde as
colunas representem as coordenadas x,y de cada ponto, assim
como a distncia entre eles. O clculo da distncia dado por:

O valor de n ser dado pelo usurio.

104 Considere uma imagem nvel de cinza representada por uma


matriz (512x512), onde cada posio contem um valor inteiro
equivalendo a tonalidade da cor (0..255) naquele ponto. Carregue
as tonalidades de cor de uma linha (vetor de 512) desta imagem
atravs do usurio. Aps o carregamento, faa a suavizao desta
imagem da seguinte forma: o valor da posio ser igual a mdia
do seu valor e de seus vizinhos Vi = (Vi-1 + Vi + Vi+1) / 3.
105 Faa um programa que receba do usurio, o cdigo, o nome, a
populao, o tamanho em metros quadrados, posio x e posio y
de todas as cidades do estado. Guarde as informaes em um vetor
de struct. A incluso termina quando o cdigo for igual a 9999.
106 Faa um programa que receba do usurio, as coordenadas x e y e o
nome de cada pea de um jogo de xadrez. Aps o carregamento
dois vetores de struct (um para peas brancas e outro para as
pretas), permita que o usurio faa alteraes da posio de
qualquer pea, digitando o nome da pea, sua cor, novo x e novo y.
No precisa fazer consistncia.
107 Escreva uma funo capaz de retornar a mdia aritmtica de trs
parmetros passados.
108 Escreva uma funo que receba a base e a altura de um tringulo
como parmetro e retorne a rea desse tringulo. Area = (base *
altura) / 2
109 Escreva uma funo receba dois valores inteiros e um operador
(+, -, * ou /). Faa o clculo de acordo com o operador e retorne o
resultado. Os valores e o operador devem ser digitados pelo usurio
na main(), onde tambm ser impresso o resultado da operao.
110 Escreva uma funo que receba os trs coeficientes de uma
equao de 2 grau e devolva as razes da equao, caso existam.
Retorne 0 se no existir raiz, 1 se existir uma nica raiz, e 2 se
existirem duas razes. O prottipo da funo ser: int bascara(float
ax, float bx, float cx, float *raiz1, float *raiz2);
111 Faa um programa que calcule o Desvio Padro de uma sequncia
de valores inteiros. Para isto cria as seguintes funes:
int RecebeValores(int *v);
Esta funo receber os valores do usurio, carregar em um
vetor (v) e retornar quantos valores foram digitados. O

carregamento deve parar quando o usurio digitar o valor 0


(zero).
float CalcMedia(int *v, int T);
Esta funo calcula e retorna a mdia aritmtica do vetor (v)
de tamanho T.
float DesvioPadrao(int *v, float m, int T);
Esta funo calcula e retorna o Desvio Padro dos valores do
vetor v de tamanho T utilizando a mdia dos valores m.
112 Faa uma TAD Aluno.h com sua estrutura contendo ra, nome,
nota 1, nota 2, mdia, e funes para:
a)
b)
c)
d)
e)

Set() para cada varivel (exceto media) a partir do usurio.


Get() para cada varivel.
Set() para um aluno.
Set() para media das notas.
Mostrar um aluno na tela.

Faa uma aplicao Aluno.c que receba dados de 5 alunos em


um vetor de estrutura e mostre estes alunos na tela. Use a
TAD Aluno.h.
Acrescente uma funo TAD Aluno.h que faa a busca de um
ra, recebido por parmetro, em um vetor de alunos. Retorne 1
caso encontre, e 0, caso contrrio.

113 Faa uma TAD Carro.h com sua estrutura contendo placa, modelo,
fabricante, cor, data de venda. A data de venda tambm deve ser
uma estrutura, uma vez que uma varivel composta. Faa funes
para:
a)
b)
c)
d)

1.
2.
3.
4.

Set() para cada varivel a partir do usurio.


Get() para cada varivel.
Set() para um carro.
Mostrar um carro na tela.

- Faa uma aplicao Carro.c que receba dados de 3 carros em


um vetor de estrutura e mostre estes carros na tela. Use a
TAD Carro.h.

114 Faa um programa que receba o id e o nome de 5 figuras


geomtricas. Guarde estas informaes em um arquivo.
115 Sabendo que uma cor composta por 3 componentes (R, G e B),
faa uma funo que receba os componentes de cor para 5 figuras
geomtricas e guarde estas informaes em um arquivo.
116 Faa um programa que mostre na tela as informaes gravadas
em disco no exerccio 10.2.1.
117 Faa um programa que mostre na tela as informaes gravadas
em disco no exerccio 10.2.2.
118 Faa uma funo que crie um arquivo a partir dos dados dos
arquivos gravados no exerc. 10.2.1 e 10.2.2.
119 Faa um programa que mostre na tela as informaes gravadas
em disco no exerccio 10.2.5.
120 Considere uma empresa de Informtica que deseja controlar suas
vendas e emitir alguns relatrios em tela. Para isso, algumas rotinas
so necessrias:

Uma rotina que cadastre e consulte seus produtos. O arquivo


tem o seguinte lay-out:
Produtos: Cdigo do produto(alfanum.),
descrio do
produto(alfanum.), preo (moeda) e quant. em estoque
(numrico). Faa menu de opo. Use funes separadas para
incluir, consultar e apresentar o menu.

Uma rotina que cadastre seus clientes. O arquivo tem o


seguinte lay-out:
Clientes: Cdigo do cliente(alfanum.), razo social(alfanum.),
cnpj
(alfanum.),
endereo(alfanum.),
cidade(alfanum.),
estado(alfanum.), telefone(alfanum.).

Uma rotina que cadastre as vendas dos produtos. O arquivo


tem o seguinte lay-out:
Vendas:
Cdigo
do
cliente(alfanum.),
produto(alfanum.), quantidade vendida (num.).

Cdigo

do

Uma rotina que mostre todos os produtos de um determinado


cliente digitado pelo usurio. O usurio entrar com o cdigo
do cliente.

Uma rotina que mostre todos os clientes do estado de So


Paulo em ordem alfabtica por razo social.

Uma Consulta Geral de todos os produtos.

Uma rotina que mostre a quantidade de produtos em estoque.

Uma rotina que mostre o valor total do estoque.

Uma rotina que mostre o valor mdio do estoque.

121 Faa uma funo que receba, do usurio, o cdigo, o nome, o nr


de mortes, de todos os bairros de Campinas. Guarde as informaes
digitadas em arquivo.
122 Faa uma funo que leia um arquivo j gravado (na questo
10.2.9) e guarde em uma matriz (definido por parmetro), o
cdigo, o nmero de mortes dos bairros com mais de 10 mortes no
ms. O tamanho (qtd de linhas) da matriz deve ser retornado.
123 Desenhe na tela um retngulo de 50 x 100 pontos, utilizando
line(), a partir da posio (100,100)..
124
Desenhe 1 circulo de raio 50, circunscrito em um quadrado, no
centro de cada quadrante de uma janela grfica de 800x600.
125 Faa um desenho humanide, contendo cabea, tronco, pernas e
braos. Use linhas, crculos e elipses.
126 Faa um programa que desenhe a bandeira do Brasil na tela. Use
line() para desenhar o losango e floodfill() para pintar as figuras.
127 Faa um programa que desenhe um retngulo de 50 x 100 (50 de
largura por 100 de altura) em uma janela grfica de 800x600. O
usurio dever decidir qual dos 4 cantos da janela grfica ser
desenhado este retngulo, digitando 1 (canto superior esquerdo), 2
(canto superior direito), 3 (canto inferior direito) ou 4 (canto inferior
esquerdo).

128 Faa um programa que desenhe uma linha de tamanho 100 no


centro de uma janela grfica de 800x600. O usurio dever decidir
qual a direo desta linha, digitando 1 (horizontal), 2 (vertical).
129

Faa 20 circunferncias circunscritas na tela. Use while.

130
Refaa o exerccio 11.1.2, desenhando uma circunferncia de
cada cor.
131
Refaa o exerccio 11.1.2, pintando o interior de cada rea
formada entre elas com cores diferentes.
132

Faa 50 retngulos circunscritos na tela.

133

Refaa o exerccio 11.1.5, desenhando um retngulo de cada cor.

134
Refaa o exerccio 11.1.5, pintando o interior de cada rea
formada entre eles com cores diferentes.
135 Faa um campo de futebol com faixas no gramado de cor verde
escuro e claro.
136 Desenhe uma grade de 50x50, a partir da linha 0, coluna 0, com
intervalo entre linhas e colunas de 10 pontos, em uma janela
grfica.
137 Preencha uma rea quadrada de 100x100 da janela grfica,
usando pontos (putpixel()), a partir da posio 50,50. Os pontos
devem estar espaados de 3 pontos entre cada um deles.
138 Faa a representao de um ambiente (contornado de linha
preta), atravs de uma grade cinza clara, de 300x300 com
espaamento de 10x10 para cada vo. Pinte de preto um destes
vos para representar a localizao de um sensor.
139 Faa uma bola amarela ficar "pingando" na tela. Faa o desenho
na prpria tela (screen).
140 Faa uma bola amarela ficar "pingando" na tela, usando a tcnica
double-buffer. A idia desta tcnica realizar todas as atualizaes
em uma varivel de memria e, depois disso, copiar (funo blit())
a varivel para a tela
141 Refaa o exerccio 11.1.10 mudando a cor da bola sempre que a
mesma tocar a borda.

142 Permita que o usurio digite 10 valores referentes ao tamanho de


10 linhas a serem desenhadas na tela. Carregue os valores em um
vetor e desenhe as linhas com intervalo de 20 pixel entre elas.
143 Permita que o usurio digite valores referentes as cores RGB de
10 crculos, a serem desenhados na tela. Estes valores devero ser
armazenados em 3 vetores, um para cada cor. Os crculos no
podero se sobrepor.
144 Desenhe na tela um grfico, que represente os valores dos PHs
da chuva de cada municpio,. Receba o vetor de ndices de Ph de 20
municpios. Os eixos (cuja origem deve estar em 10,400) devem ser
pretos e as linhas verticais coloridas (uma cor representando cada
municpio),. Escreva os ttulos do grfico, do eixo x e do eixo y.
145 Faa um programa que receba uma matriz (5x2), a partir do
usurio, onde cada linha faz referencia a cada cidade do estado e
cada coluna faz referencia a localizao x e y. Aps o
carregamento da matriz, desenhe um crculo de raio 5,
representando cada cidade na tela.
146

Obs.: O x e o y j esto na escala da tela do computador.

147 Leia a localizao x e y, e o nome da cidade, referentes a cada


cidade do estado de So Paulo, a partir de um arquivo e plote as
cidades na tela com os respectivos nomes de identificao.

15.
Apndices C Acesso a Portas de
Comunicao

Porta Paralela
A porta paralela referenciada pelo computador atravs de um
endereo de memria. Na grande maioria dos pcs este endereo
0x378. No site www.rogercom.com (excelente) est disponibilizado
uma biblioteca (inpout32.dll) que permite efetivar este acesso sem
problemas, porm algumas instrues so necessrias.
1. Copie o arquivo inpout32.dll (baixado do site) e o PortaP.h (listagem
abaixo) para o diretrio Porta (crie este diretorio).
Arquivo PortaP.h Exemplo do Rogercom modificado
/**************************************************
PortaP.h - Programa TEST.c do Roger.com modificado
-- test interface to inpout32.dll
( http://www.logix4u.net/inpout32.htm )
Copyright (C) 2003, Douglas Beattie Jr.
Modificado em 2006, Kesede R Julio
*******************************************************/
#include <stdio.h>
#include <conio.h>
#include <windows.h>
/* Definitions in the build of inpout32.dll are:
*/
/* short _stdcall Inp32(short PortAddress);
*/
/* void _stdcall Out32(short PortAddress, short data); */
/* prototype (function typedef) for DLL function Inp32: */
typedef short _stdcall (*inpfuncPtr)(short portaddr);
typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum);
HINSTANCE hLib;
inpfuncPtr inp32;
oupfuncPtr oup32;
int InicializaPP(void)
{

/* Load the library */


hLib = LoadLibrary("inpout32.dll");

if (hLib == NULL) {
printf("LoadLibrary Failed.\n");
return -1;
}
/* get the address of the function */
inp32 = (inpfuncPtr) GetProcAddress(hLib, "Inp32");
if (inp32 == NULL) {
printf("GetProcAddress for Inp32 Failed.\n");
return -1;
}
oup32 = (oupfuncPtr) GetProcAddress(hLib, "Out32");
if (oup32 == NULL) {
printf("GetProcAddress for Oup32 Failed.\n");
return -1;
}
}
void FinalizaPP(){
FreeLibrary(hLib);
}

2. Faa um programa teste (Exemplo B1 - testeP.c) e grave-o no


diretrio Porta (mesmo diretrio da inpout32.dll
e do
PortaP.h). Este exemplo, considera uma placa de 8 leds
conectada a porta paralela.
Digite o Exemplo B1:- Faa um programa que acenda dois leds quaisquer ao mesmo tempo e
faa tocar um beep.

#include "PortaP.h"

Inclui as funes de acesso


(InicializaPP() e FinalizaPP())
porta paralela

2
3

int main(){
InicializaPP();

Abre main()
Chama a funcao da Porta.h
que

carrega

biblioteca

inpout32.dll, disponibilizando
suas

funes

de

acesso

(oup32() e inp32())

oup32(0x378,10);

Envia o decimal 10 para


paralela

Beep(100,1000);

Emite um som na frequencia


100 por 1 segundo.

FinalizaPP();

Chama a funcao da Porta.h

que libera da memoria a


biblioteca inpout32.dll
Pra o programa

system("pause");

Fecha main()

O sinal enviado a porta paralela deve ser considerado na


sequncia binria, ou seja, considerando os 8 leds da placa, vinculamos
cada led um bit. Assim, se quisermos acender os dois primeiros leds e
o quinto led, enviamos o nmero 19 (em decimal) para a porta.
0

bit 7

bit 6

bit 5

bit 4

bit 3

bit 2

bit 1 Bit 0
21

20

valo
r do

Para sabermos qual valor enviar para a porta, basta converter o


valor binrio para decimal. No exemplo acima: 24 + 21 + 20 = 19.
Alguns Exerccios para acesso Porta Paralela
1. Acenda o 1. e 3. Led.
2. Acenda o 7. e 8. Led
3. Acenda os 4 ultimos leds.
4. Acenda os 4 primeiros leds
5. Acenda o 1., 3.,5, 7. Led
6. Acenda o 2., 4.,6, 8. Led
7. Faa os leds acenderem alternadamente do 1. ao ultimo.
8. Faa todos os leds piscarem. Repita 100 vezes.
9. Acenda os leds 1. e 8., 2. e 7., 3. e 6., 4. e 5. . Repita a seqncia 100 vezes
10. Permita que o usurio escolha a posio do led que deseja acender.
11. Permita ao usurio escolher quantas posies de led ele desejar acender.
12. Faa um programa que permita que todos os leds pisquem 100 vezes. A cada vez,
os leds devem piscar mais rpido.
13. Faa um programa que permita que os leds pisquem (de 4 em 4 leds
alternadamente) 100 vezes. A cada 2 piscadas, a velocidade dever ser mais lenta.
14. Faa um programa que permita que os 8 leds pisquem sequencialmente (1 de cada
vez, alternadamente) 100 vezes. A cada 8 piscadas, a velocidade dever ser mais
rpida.
Porta Serial
A porta serial referenciada pelo computador atravs de uma
identificao (com1, com2, com3 etc). Quando voc conecta um
dispositivo porta, sua identificao pode ser verificada no gerenciador
de dispositivo do Windows.

O site http://playground.arduino.cc//Interfacing/CPPWindows
apresenta um codigo com funes para acesso a porta serial. Este
cdigo permite a inicializacao, leitura, escrita e finalizacao da porta
serial atraves de um programa escrito na linguagem C (.c) no Windows.
Para utiliz-lo siga as instrues abaixo:
Crie um Projeto no Dev-cpp
1. Selecione File/New/Project. Escolha um nome para o seu
projeto, escolha Console Application e clique OK.
2. Clique no + ao lado do nome do seu projeto. Cliquedireito no main.cpp e remova este arquivo. No salve as mudanas.
3. Clique-direito no nome do projeto e some seu .c ao projeto.
4. Inclua tambm o arquivo Pserial.o
5. Clique-direito no nome do projeto. Escolha Project
Options. Na aba Files selecione o arquivo Pserial.o e tique em
Including in linking. D OK.
6. No esquea de incluir o Pserial.h em seu .c. Deixe estes
dois arquivo na mesma pasta.
7. Pronto! Basta executar seu projeto.

16.
Bibliogr
afia

Ziviani, Nivio. Projeto de Algoritmos com implementao em


Pascal e C, Pioneira Thonson Learning: So Paulo, 2002.
Schildt, Herbert. C Completo e Total. 3a. Ed. Makron Books.

Agradecimentos
Agradeo todos os que me ajudaram de forma direta ou indireta a
escrever este material. Espero que tenha alcanado seu objetivo. A
partir daqui, voc poder estender o que aprendeu atravs da prtica e
de outros livros que, com certeza, lhe auxiliaro. Que este
conhecimento tenha cado em terra boa, que d bons frutos, que outras
pessoas possam ser beneficiadas e assim possamos construir uma
sociedade mais justa, capaz de trocar, de ajudar e de compreender. No
despreze nenhum conhecimento, principalmente o seu, saiba que no
se pode saber tudo, nem conseguimos e nem precisamos saber tudo,
porm a busca poder ajud-lo na realizao de seus sonhos e de sua
felicidade, proposta fundamental da vida.

E ainda que distribusse todos os meus bens para sustento


dos pobres, e ainda que entregasse o meu corpo para ser
queimado, e no tivesse amor, nada disso me
aproveitaria. I Corntios 13:3

Kesede Rodrigues Julio