Вы находитесь на странице: 1из 61

Algoritmos

Simone Maria Viana simone_viana@yahoo.com.br

2006

Algoritmos

pg. 2

NDICE
INTRODUO.................................................................................................................6 LGICA........................................................................................................................6 COMPUTADOR...........................................................................................................6 PROGRAMA.................................................................................................................7 LINGUAGENS DE PROGRAMAO.......................................................................7 TCNICAS ATUAIS DE PROGRAMAO..............................................................7 AO............................................................................................................................7 ESTADO.......................................................................................................................7 PROCESSO OU EVENTO...........................................................................................7 PADRES DE COMPORTAMENTO.........................................................................7 EXERCCIO..................................................................................................................7 CONCEITOS BSICOS...................................................................................................9 DEFINIES................................................................................................................9 COMO FAZER UM ALGORITMO.............................................................................9 TESTE DE MESA.........................................................................................................9 CLASSIFICAO DOS ALGORITMOS....................................................................9 DESCRIO NARRATIVA....................................................................................9 DIAGRAMA DE BLOCOS....................................................................................10 FLUXOGRAMA.....................................................................................................10 PSEUDOCDIGO ou PORTUGOL.......................................................................10 SIMBOLOGIA BSICA PARA DIAGRAMA DE BLOCOS ..............................10 TIPOS DE DADOS.................................................................................................11 VARIVEIS............................................................................................................11 CONSTANTES.......................................................................................................12 IDENTIFICADORES..............................................................................................12 EXEMPLOS............................................................................................................12 EXERCCIOS..............................................................................................................13 LINGUAGEM C/C++.....................................................................................................14 BIBLIOTECAS.......................................................................................................14 ETAPAS DA IMPLEMENTAO............................................................................15 include.....................................................................................................................15 DIRETIVAS define e undef....................................................................................15 EXEMPLO..............................................................................................................16 Dev-C++......................................................................................................................16 LISTA DE RECURSOS..........................................................................................16 INSTALAO E CONFIGURAO DO DEV-C++...........................................17 ESTRUTURA SEQENCIAL .......................................................................................17 DECLARAO DE VARIVEIS EM ALGORITMOS...........................................17 COMANDO DE ATRIBUIO EM ALGORITMOS..............................................17 COMANDO DE ENTRADA EM ALGORITMOS....................................................17 COMANDO DE SADA EM ALGORITMOS...........................................................17 REQUERIMENTOS NECESSRIOS....................................................................17 TIPOS DE DADOS.....................................................................................................18 ESTRUTURA SEQENCIAL EM C/C++.................................................................18 DECLARAO DE VARIVEIS EM C/C++..........................................................18

Algoritmos

pg. 3

STRINGS.................................................................................................................18 getche()....................................................................................................................19 Exemplos.................................................................................................................19 COMANDO DE ATRIBUIO EM C/C++..............................................................19 COMANDOS DE ENTRADA EM C/C++.................................................................19 cin............................................................................................................................20 gets...........................................................................................................................20 scanf.........................................................................................................................20 COMANDOS DE SADA EM C/C++........................................................................20 cout..........................................................................................................................20 printf........................................................................................................................20 puts...........................................................................................................................21 COMENTRIOS EM C/C++.....................................................................................21 OPERADORES E FUNES PREDEFINIDAS EM C/C++....................................21 Matemticos.............................................................................................................21 Relacionais...............................................................................................................22 Matemticas.............................................................................................................22 Lgicos....................................................................................................................22 EXEMPLO..................................................................................................................23 EXERCCIOS..............................................................................................................23 RECURSIVIDADE.........................................................................................................25 ESTRUTURA CONDICIONAL (Controle de Fluxo)....................................................27 ALGORITMOS...........................................................................................................27 ESTRUTURA CONDICIONAL COMPOSTA......................................................27 C/C++..........................................................................................................................27 SIMPLES - IF..........................................................................................................27 COMPOSTA IF/ELSE.........................................................................................28 ESTRUTURA CASE - SWITCH............................................................................28 OPERADORES LGICOS.....................................................................................29 EXEMPLO..................................................................................................................29 EXERCCIOS..............................................................................................................30 ESTRUTURA DE REPETIO....................................................................................33 ALGORITMOS...........................................................................................................33 NMERO DEFINIDO DE REPETIES (ESTRUTURA PARA)......................33 NMERO INDEFINIDO DE REPETIES E TESTE DE INCIO (ESTRUTURA ENQUANTO)................................................................................33 NMERO INDEFINIDO DE REPETIES E TESTE NO FINAL (ESTRUTURA REPITA)........................................................................................33 C/C++..........................................................................................................................34 for.............................................................................................................................34 break........................................................................................................................35 continue...................................................................................................................35 while........................................................................................................................35 do-while...................................................................................................................35 EXEMPLOS................................................................................................................36 EXERCCIOS..............................................................................................................36 VETORES.......................................................................................................................39 ALGORITMOS...........................................................................................................39 DECLARAO DO VETOR.................................................................................39 ATRIBUINDO VALORES AO VETOR................................................................39 CARREGANDO UM VETOR................................................................................39 C/C++..........................................................................................................................39 DECLARAO DO VETOR.................................................................................39

Algoritmos

pg. 4

ATRIBUINDO VALORES AO VETOR................................................................39 CARREGANDO UM VETOR................................................................................40 IMPRIMINDO UM VETOR...................................................................................40 EXEMPLO..................................................................................................................40 EXERCCIOS..............................................................................................................42 MATRIZ..........................................................................................................................44 DEFINIO................................................................................................................44 DECLARAO DE MATRIZ...............................................................................44 EXEMPLO DE MATRIZ........................................................................................44 ATRIBUINDO VALORES MATRIZ.................................................................44 CARREGANDO UMA MATRIZ...........................................................................44 EXIBINDO OS ELEMENTOS DE UMA MATRIZ..............................................45 C/C++..........................................................................................................................45 DECLARAO DE MATRIZ...............................................................................45 ATRIBUINDO VALORES.....................................................................................45 EXIBINDO ELEMENTOS DA MATRIZ..............................................................45 EXEMPLOS................................................................................................................46 EXERCCIOS..............................................................................................................48 MANIPULANDO CARACTERES EM C/C++..............................................................49 FUNO strcpy()...................................................................................................49 FUNO strcat()....................................................................................................49 FUNO strlen()....................................................................................................49 FUNO strchr()....................................................................................................50 FUNO strstr().....................................................................................................50 FUNO strcmp()..................................................................................................50 EXERCCIO............................................................................................................50 REGISTROS (Estruturas)................................................................................................51 DECLARAO - ALGORITMOS............................................................................51 DECLARAO DE REGISTROS EM C/C++..........................................................51 DECLARAO DE VARIVEIS DO TIPO REGISTRO EM C/C++.....................51 ACESSO A MEMBROS DE ESTRUTURAS............................................................51 EXEMPLOS................................................................................................................52 EXERCCIOS..............................................................................................................52 ARQUIVOS.....................................................................................................................54 DECLARAO EM C/C++.......................................................................................54 COMANDOS DE ARQUIVOS EM C/C++...............................................................54 fopen().....................................................................................................................54 fclose().....................................................................................................................55 ferror().....................................................................................................................55 fputc()......................................................................................................................55 fgetc().......................................................................................................................55 fputs().......................................................................................................................55 fgets().......................................................................................................................55 fwrite().....................................................................................................................55 fread()......................................................................................................................55 fseek()......................................................................................................................55 feof()........................................................................................................................56 rewind()...................................................................................................................56 remove()...................................................................................................................56 fflush().....................................................................................................................56 exit().........................................................................................................................56 LENDO E ESCREVENDO CARACTER EM ARQUIVOS EM C/C++...................56 putc..........................................................................................................................56

Algoritmos

pg. 5

getc...........................................................................................................................57 feof...........................................................................................................................57 FLUXOS PADRO....................................................................................................57 fprintf.......................................................................................................................57 fscanf.......................................................................................................................57 EXEMPLOS................................................................................................................58 EXERCCIOS..............................................................................................................59 SUB-ROTINAS...............................................................................................................60 ALGORITMO:............................................................................................................60 SUB-ROTINAS (FUNES) EM C/C++......................................................................60 COMANDO RETURN............................................................................................60 EXERCCIOS..........................................................................................................61

Algoritmos

pg. 6

INTRODUO
Voc sabe usar o raciocnio lgico? Isto depende de vrios fatores: calma, conhecimento, vivncia, versatilidade, experincia, criatividade, ponderao, responsabilidade etc. Para utilizar a lgica preciso ter domnio do pensamento e saber pensar. Ento, o que raciocnio lgico? Conjunto de estudos que visa determinar os processos intelectuais que so as condies gerais do conhecimento verdadeiro. Ou ainda: Seqncias coerentes, regulares e necessrias dos acontecimentos, das coisas ou dos fatos, at mesmo, que maneira do raciocnio particular que cabe a um indivduo ou a um grupo. Mas os profissionais de Tecnologia de Informao acreditam que seja um esquema sistemtico que define as interaes de sinais no equipamento automtico do processamento de dados ou computador cientfico com o critrio e princpios formais de raciocnio e pensamento.

LGICA
Conclumos que lgica a cincia que estuda as leis e critrios de validade que regem o pensamento e a demonstrao, ou seja, cincia dos princpios formais do raciocnio. Usar a lgica um fator importante na rea de tecnologia de informao, pois os profissionais no dia-a-dia solucionam problemas e atingem os objetivos apresentados por seus usurios com eficincia e eficcia, utilizando recursos computacionais e/ou automatizados. Porm, ningum ensina ningum a pensar, pois todas as pessoas normais possuem esse dom.

COMPUTADOR
Sua finalidade auxiliar em qualquer coisa que lhe seja solicitada. E para isso, recebe, manipula e armazenar dados. Sua finalidade e realizar o processamento dos dados. Formado por: ENTRADA: dados de entrada do algoritmo; PROCESSAMENTO: procedimentos realizados para atingir um resultado; SADA: dados j processados.

Algoritmos

pg. 7

PROGRAMA
Um programa um algoritmo escrito em uma linguagem computacional.

LINGUAGENS DE PROGRAMAO
So Softwares que permitem o desenvolvimento de programas. Possuem um poder de criao ilimitado, desde jogos, editores de texto, sistemas empresariais at sistemas operacionais. Existem vrias linguagens de programao, cada uma com suas caractersticas prprias. Exemplos: Pascal, Clipper, C, Visual Basic, Delphi e etc.

TCNICAS ATUAIS DE PROGRAMAO



Programao Seqencial; Programao Estruturada; Programao Orientada a Eventos e Objetos.

AO
Evento que ocorre num perodo de tempo finito, estabelecendo um efeito intencionado e bem definido. Exemplos: Caminhar at a prxima esquina. Colocar um livro em cima de uma mesa. Atribuir o valor 3.14 a uma varivel. Estamos interessados primeiramente nos efeitos que as aes produzem. Aes de efeito imprevisveis no nos interessam. Algoritmos determinsticos.

ESTADO
Conjunto de propriedades do objeto que so relevantes para ns na situao desejada. Exemplos: Batatas com casca ou descascadas. Valor de uma varivel em um certo instante de execuo.

PROCESSO OU EVENTO
Uma seqncia temporal de aes. Exemplos: Trazer a cesta com batatas; Pegar a panela do armrio; Descascar as batatas; Guardar a cesta;

PADRES DE COMPORTAMENTO
Vamos supor que no dia seguinte a um evento, algum o repita. Podemos dizer que temos o mesmo evento? No, pois ocorreram em MOMENTOS DIFERENTES. O que ento, eles tm em comum? O mesmo PADRO DE COMPORTAMENTO.

EXERCCIO
1. Qual o padro de comportamento utilizado para gerar essa seqncia:

Algoritmos

pg. 8

1, 1, 2, 3, 5, 8, 13, 21, 34, 55

Algoritmos

pg. 9

CONCEITOS BSICOS
DEFINIES
Algoritmo uma seqncia de passos que visa atingir um objetivo bem definido (FORBELLONE, 1999). Algoritmo a descrio de uma seqncia de passos que deve ser seguida para a realizao de uma tarefa (ASCENCIO, 1999). Algoritmo uma seqncia finita de instrues ou operaes cuja execuo, em tempo finito, resolve um problema computacional, qualquer que seja sua instncia (SALVETTI, 1999). Algoritmo so regras formais para a obteno de um resultado, ou a soluo de um problema, englobando frmulas de expresses aritmticas (MANZANO, 1997). Conclumos que, no nosso dia-a-dia, executamos vrios algoritmos como: fazer um caf da manh, trocar a lmpada, ir faculdade etc.

COMO FAZER UM ALGORITMO


Precisamos ler atentamente o enunciado, definir os dados de entrada1, o processamento2 e os dados de sada3, utilizar um dos tipos de algoritmo e testar atravs de simulaes.

TESTE DE MESA
Seguir as instrues do algoritmo de maneira precisa para verificar se o procedimento utilizado est correto ou no. Exemplo: Nota da Prova 1 Nota da Prova 2 Nota da Prova 3 Nota da Prova 4 Utilize a tabela abaixo: PROVA1 PROVA2 PROVA3 PROVA4 MDIA

CLASSIFICAO DOS ALGORITMOS

DESCRIO NARRATIVA
Aps analisar o enunciado do problema o mesmo escrito, utilizando uma linguagem natural para descrever os passos para solucionar o problema. VANTAGEM: no necessrio aprender nenhum conceito. DESVANTAGEM: como utiliza uma linguagem natural pode haver vrias interpretaes.
1 2

Dados que sero fornecidos ao sistema. Transformao dos dados de entrada em dados de sada. 3 Dados gerados aps serem processados.

Algoritmos

pg. 10

DIAGRAMA DE BLOCOS
Tambm chamado de diagrama de fluxo usado na programao com o objetivo de descrever o mtodo e a seqncia do processo dos planos num computador. Aps analisar o enunciado do problema o mesmo escrito utilizando grficos predefinidos para descrever os passos para solucionar o problema. VANTAGEM: o entendimento mais padronizado. DESVANTAGEM: necessrio conhecimento da simbologia.

FLUXOGRAMA
Usada por analistas de sistemas tem a finalidade de descrever o fluxo, especificando os suportes usados para os dados e as informaes.

PSEUDOCDIGO ou PORTUGOL
Aps analisar o enunciado do problema o mesmo escrito com regras predefinidas para descrever os passos para solucionar o problema. VANTAGEM: a passagem do algoritmo para uma linguagem de programao praticamente imediata. DESVANTAGEM: aprender as regras do pseudocdigo.

SIMBOLOGIA BSICA PARA DIAGRAMA DE BLOCOS


Smbolo Descrio Terminal smbolo utilizado como ponto de incio/fim de um fluxograma. Seta de fluxo de dados permite indicar o sentido do fluxo de dados. Conecta smbolos e blocos existentes. Processamento smbolo ou bloco que se utiliza para indicar clculos a serem efetuados, atribuies de valores ou qualquer manipulao de dados. Entrada de dados/Operao Manual l os dados necessrios ao programa forma de linha sem interveno de dispositivos eletrnicos. Entrada e sada de dados smbolo em funo de dispositivo qualquer de entrada ou sada de dados. Sada de dados em vdeo exibe os dados no monitor. Sada de dados na impressora dados sero impressos. Deciso possibilita desvios de acordo com a comparao. Conector - particiona o diagrama. colocado uma letra ou nmero dentro do smbolo de conexo. Conector indica que o fluxograma continua em outra pgina. Disco magntico armazenamento de dados.

Algoritmos

pg. 11

Teclado informaes recebidas ou fornecidas por um computador. Carto Perfurado. Preparao grupo de operaes no includas no fluxograma, bem como na elaborao de uma chave que modificar a execuo de um programa. Fita magntica armazenamento de dados. Tambor magntico armazenamento de dados. Disquete armazenamento de dados.

TIPOS DE DADOS
Todos os dados possuem um tipo que pode ser classificado como: NUMRICO Divididos em dois grupos: inteiros e reais. INTEIROS: podem ser positivos ou negativos e no possuem parte decimal. Quando armazenado na memria, ocupa 2 bytes por isso temos 2 8 x 28 = 216 = 65.536 possibilidades de representao dos nmeros inteiros. A faixa de valores varia de 32.767 32.768. Exemplos: -15, 9, 0, -357, 2500. REAIS: podem ser positivos ou negativos e possuem parte decimal. Esse tipo de dado, quando armazenado na memria do computador, ocupa 4 bytes, por isso temos 28 x 28 x 28x 28 = 232 = possibilidades de representao dos nmeros

reais. A faixa de valores maior tendo de 6 a 11 dgitos com sinal. Exemplos: 23,45, 9541,89, -78,98, -852,0. Os nmeros reais seguem a notao inglesa onde a parte decimal separada da parte inteira por um ponto. LGICO Tambm conhecidos como booleanos4 e assume verdadeiro ou falso, ocupando somente 1 byte, pois possui somente duas possibilidades. LITERAL ou CARACTERE Formados por um nico caractere ou por vrios. Podem ser letras, nmeros5 e caracteres especiais: $, @, #,* e ?. Na memria, ocupa 1 byte que corresponde a um caractere. Exemplos: aluno, 951, @ informtica.

VARIVEIS
Os algoritmos recebem dados que sero processados, para isso, armazena os dados na memria. Os computadores trabalham no sistema numrico do tipo binrio6 e tudo que h nele (letra, nmero e caracteres especiais), formado para este sistema numrico e cada dgito binrio ocupa uma parte da memria chamada de bytes7 e
4 5

lgebra de Boole No podero ser utilizados para clculos 6 Formado pelos dgitos 0 e 1 7 Formado por um conjunto de 8 bits

Algoritmos

pg. 12

acessado por um endereo. Todos os caracteres possuem um correspondente da tabela ASCII que transformado em binrio pelo mtodo da diviso. Ento, varivel representa uma posio de memria, possuindo nome e tipo, com contedo variando ao longo do tempo, durante a execuo de um programa. Ela pode assumir diversos valores, mas somente um valor por vez.

CONSTANTES
um determinado valor fixo que no se modifica ao longo do tempo, durante a execuo de um programa. Conforme o seu tipo, a constante classificada como sendo numrica, lgica e literal. Exemplo: NOTA = 7;

IDENTIFICADORES
Nomes dos programas, das variveis, das constantes, das rotinas etc. Como: Podemos utilizar nmeros, letras e o caractere sublinhado (_); O primeiro caractere s pode ser uma letra; No so permitidos caracteres especiais e espao em branco; No permitido usar palavras reservadas8. Exemplos: A, NOTA1, NOME, ENDERECO, X10.

EXEMPLOS
1. Faa um algoritmo que exiba o resultado da multiplicao de dois nmeros. DESCRIO NARRATIVA Passo 1 Receber dois nmeros que sero multiplicados. Passo 2 Multiplicar os dois nmeros. Passo 3 Exibir o resultado. FLUXOGRAMA M = N1 * N2

INCIO

N1, N2

FIM

PSEUDOCDICO ALGORITMO DECLARE N1, N2, M NUMRICO ESCREVA Digite dois nmeros LEIA N1, N2 M N1 * N2 ESCREVA Multiplicao = , M FIM_ALGORITMO.

Palavras que pertencem a uma linguagem de programao. Exemplo: PRINTF.

Algoritmos

pg. 13

EXERCCIOS
1. 2. 3. 4. 5. 6. 7. 8. 9. Crie um algoritmo para sacar dinheiro no banco 24 horas. Crie um algoritmo para assistir um filme no cinema. Crie um algoritmo de um assunto escolhido por voc. Diferencie varivel de constante e d um exemplo de cada. Quais so os tipos de dados e d um exemplo de cada um. Como esto classificados os algoritmos? Quais so as vantagens e desvantagens do pseudocdigo? Quais so as vantagens e desvantagens da descrio narrativa? Crie um algoritmo (pseudocdigo, descrio narrativa e fluxograma) que entre com o nome e exiba. 10. Crie um algoritmo (pseudocdigo, descrio narrativa e fluxograma) que entre com quatro notas bimestrais e exiba a mdia aritmtica. 11. Faa um teste de mesa de acordo com o fluxograma abaixo:

Algoritmos

pg. 14

LINGUAGEM C/C++
Em 1970, Dennis Ritchie inventou a linguagem C e foi o primeiro a implement-la em um sistema operacional UNIX. o resultado de um processo evolutivo de linguagens. Durante anos, o padro da linguagem C foi o fornecido com a verso 5 do sistema operacional UNIX. Com os microcomputadores sendo popularizados, vrios outros Cs foram criados e para resolver este problema, o ANSI9, em 1983 estabeleceu um padro para todas as implementaes da linguagem C. A C++ uma extenso da linguagem C e as instrues desta, so um subconjunto do C++ e sua sintaxe praticamente a mesma, somente acrescentando comandos para dar suporte programao orientada a objetos. A linguagem C/C++ case-sensitive ou seja, faz distino entre maisculas e minsculas, portanto, todos os seus comandos so escritos em letras minsculas e todos os comandos so finalizados com ponto-e-vrgula (;). Todos os programas em C tm que ter uma (e somente uma) funo main (principal), pois esta funo (em C s existem funes) que ser chamada quando o programa for executado. A primeira etapa da implementao consiste em escrever o algoritmo estudado na etapa anterior numa linguagem de programao, por exemplo a linguagem C. Para essa tarefa utilizamos um editor de textos disponvel no compilador da linguagem C. O texto escrito chamado de arquivo ou programa fonte. A segunda etapa, a compilao, realizada para traduzir programas escritos em linguagens de programao tal como C, em instrues que podem ser executadas pela CPU do computador. O software utilizado chamado de compilador. A sada produzida pelo compilador denominada arquivo-objeto.

O arquivo objeto deve ser processado pelo linker antes de ser executado. O linker toma como entrada arquivos objeto e rotinas de biblioteca e liga-os em um nico arquivo chamado arquivo executvel. Esse arquivo pode ser diretamente executado pelo computador.

BIBLIOTECAS
Conjunto padro de funes que realizam as tarefas necessrias mais comuns, como por exemplo escrever no vdeo (printf), ler um caractere do teclado (getch), entre outras. O padro ANSI C (American National Standards Institute) especifica o conjunto mnimo de funes que estar contido na biblioteca. No entanto seu compilador provavelmente conter outras funes que podem no estar includa em um compilador de outro fabricante.
9

American National Standards Institute

Algoritmos

pg. 15

ETAPAS DA IMPLEMENTAO

include
Informa ao compilador que deve incluir no momento da compilao o arquivo especificado. Sintaxe: #include <biblioteca> ou #include biblioteca (essa ltima deve informar o caminho que deseja buscar o arquivo) Como exemplo, temos as seguintes bibliotecas: Funes de entrada e sada stdio.h; Funes padro stdlib.h; Funes matemticas math.h; Funes do sistema system.h; Funes de string string.h

DIRETIVAS define e undef


#define Informa ao compilador para que toda vez que ele encontrar o nome do macro no programa a ser compilado, ele deve substitu-lo pela seqncia de caracteres fornecida. Sintaxe: #define nome_macro seqncia_caracteres Exemplo: #include <stdio.h> #define PI 3.1416 #define VERSAO "2.02" int main() { printf("Programa verso %s ", VERSAO); printf("O numero pi vale: %f ", PI);

Algoritmos

pg. 16

getch(); } #undef Apaga a macro informada da tabela interna que armazena os macros. O compilador passa a partir deste ponto a no conhecer mais este macro. Sintaxe: #undef nome_macro

EXEMPLO
#include <stdio.h> /* exemplo */ int main() { printf(Bem vindo ao curso de Algoritmos!\n); return(0); }

Analisando o programa temos: #include <stdio.h> informa ao compilador que deve incluir o arquivocabealho informado, onde existem declaraes de funes teis para entrada e sada de dados (std = Standard (padro) e io =Input/Output (entrada/sada); /* Exemplo */ linha de comentrio; int main() todos os programas tm essa funo que ser chamada quando for executado, precisa ter um par parntese , seu contedo delimitado por chaves {}; int indica que retorna um inteiro. return(0) indica o nmero inteiro que est sendo retornado pela funo (0).

Dev-C++
Ambiente integrado de desenvolvimento para as linguagens C e C++. Ele usa a implementao Mingw do GCC (GNU Compiler Collection) como seu compilador. Foi desenvolvido por Colin Laplace, Mike Berg e Hongli Lai e "Free Software" (sob GNU General Public License). Isso significa, entre outras coisas, que ele pode ser distribudo e copiado vontade. O programa cria executveis nativas no Win32, console ou GUI. Dev-C++ tambm pode ser usado juntamente com Cygwin. DevC++ gratuito e de cdigo aberto e totalmente escrito em Delphi, que ironia no? Por ser um trabalho em constante desenvolvimento, as verses disponveis no site Bloodshed Dev-C++ mudam constantemente. O compilador que usado o gcc capaz de identificar muitos erros de sintaxe nos programas. (menu EXECUTAR COMPILAR). Os arquivos devem ser salvos com extenso .c (c sources files).

LISTA DE RECURSOS
Suporte a compiladores baseados em GCC. Depurao integrada (usando GDB). Navegador de classes. Recurso de completar cdigos. Navegador de depurao de variveis. Gerenciador de Projetos. Editor com destaque de sintaxe personalizvel. Suporte a modelos para criao dos seus prprios projetos. Edio e compilao de arquivos de recursos. Gerenciador de Ferramentas. Suporte a impresso. Facilidades de encontrar e substituir. Gerenciador de pacotes para facilitar a instalao e adio de bibliotecas. Suporte CVS. Lista de coisas a fazer.

Algoritmos

pg. 17

Janela de CPU.

INSTALAO E CONFIGURAO DO DEV-C++


Baixe o arquivo de instalao devcpp-4.9.9.2_setup.exe [9326468 bytes ou 9108 kb ou 8.9M] para uma pasta temporria. Esse arquivo pode ser removido depois da instalao. Para comear a instalao, basta clicar (duas vezes) no nome do arquivo usando o "Windows Explorer" e seguir os passos, escolha o idioma Portuguese(Brasil) e selecionar o item No, I prefer to use Dev C++ without it. Escolha o menu FERRAMENTAS OPES DO COMPILADOR e em ADICIONAR OS SEGUINTES COMANDOS QUANDO CHAMAR O COMPILADOR, digite Wall ansiO2.

ESTRUTURA SEQENCIAL
ALGORITMO DECLARE Bloco de comandos FIM_ALGORITMO.

DECLARAO DE VARIVEIS EM ALGORITMOS


So declaradas aps a palavra DECLARE e os tipos mais usados so o numrico, literal e lgico. Exemplo: X NUMERICO;

COMANDO DE ATRIBUIO EM ALGORITMOS


Atribui valores ou operaes a variveis ( ). Exemplo: X 4.

COMANDO DE ENTRADA EM ALGORITMOS


Recebe dados digitados pelo usurio e armazenados em variveis (LEIA). Exemplo: LEIA (X).

COMANDO DE SADA EM ALGORITMOS


Exibe dados no monitor ou na impressora (ESCREVA). Exemplo: ESCREVA X. ESCREVA Contedo de X = , X

REQUERIMENTOS NECESSRIOS
Arquivo MSVCRT.DLL (vem com o Windows 95 OSR 2 ou superior).

Algoritmos

pg. 18

TIPOS DE DADOS
O C/C++ possui cinco tipos: int, float, double, void e char, com base temos: TIPO char Unsigned char signed char Int Unsigned int Signed int Short int Unsigned Short Int Signed Short Int Long Int Unsigned Long Int Signed Long Int Float Double Long double VALORES -127 a 127 0 a 255 -127 a 127 -32.767 a 32.767 0 a 65.535 -32.767 a 32.767 -32.767 a 32.767 0 a 65,535 -32.767 a 32.767 -2.147.483.647 a 2.147.483.647 0 a 4.294.967.295 -2.147.483.647 a 2.147.483.647 3.4E 38 a 3.4E + 38 1.7E 308 a 1.7E + 308 3.4E 4.932 a 1.1E + 4.932

Obs.: de acordo com a verso do compilador a faixa de valores pode variar. A faixa acima est de acordo com o padro ANSI (valor mnimo).

ESTRUTURA SEQENCIAL EM C/C++


#include <nome da biblioteca> void main() { bloco de comandos } BIBLIOTECAS so arquivos contendo vrias funes que podem ser incorporadas aos programas escritos em C/C++. #include faz com que o texto contido dentro da biblioteca seja inserido no programa. Exemplo: iostream.h e conio.h so bibliotecas utilizadas em comandos de entrada e sada.

DECLARAO DE VARIVEIS EM C/C++


So declaradas aps a especificao do seu tipo. Os tipos de dados so: int nmeros inteiros; float nmeros reais; char um caractere. No existe o tipo de dados booleano (que assume verdadeiro ou falso), pois qualquer valor diferente de 0 como sendo verdadeiro. No existe um tipo para guardar uma seqncia de caracteres (string). Quando necessrio utilizar um vetor contendo vrios elementos do tipo char. Exemplos: float x; char NOME[40]; char SEXO;

STRINGS
String um vetor de caracteres terminado com um caractere nulo. O nulo um caractere com valor inteiro igual a zero(cdigo ASCII), podendo ser escrito assim \0. Sintaxe: char nome_string[tamanho];

Algoritmos

pg. 19

Declara um vetor de caracteres(string) com nmero de posies (tamanho), sempre tendo um caractere nulo reservado. Para ler uma string fornecida pelo usurio usamos a funo gets(): #include <stdio.h> int main() { char string[100]; printf ("Digite uma string: "); gets(string); printf("\n\nFoi digitado: %s",string); getch(); }

getche()
Usado para entrada de apenas um caracter pelo teclado e exibio na tela. Exemplo: #include <stdio.h> int main(void) { int resposta = 0; puts (" MENU "); puts (""); puts ("1. Editar"); puts ("2. Ler"); puts ("3. Gravar"); puts (""); puts ("Resposta "); resposta = getche(); getch();

OBS.: quando queremos ler um resultado, usamos as funes (encontradas na biblioteca conio.h) getch() e getche(), e ambas retornam o caractere pressionado, porm getche() imprime o caractere na tela antes de retorn-lo e getch() apenas retorna o caractere pressionado sem imprimi-lo na tela. Elas no fazem parte do padro ANSI e podem ser substitudas pela funo scanf() sem as mesmas funcionalidades.

Exemplos
1) Podemos usar o tipo char com nmeros inteiros, que, quando colocado %d representa o cdigo ASCII e quando colocado %c surge a letra propriamente dita. #include <stdio.h> int main() { char Ch; Ch = D; printf (%d, Ch); /* Imprime o caractere como inteiro */ return(0); }

COMANDO DE ATRIBUIO EM C/C++


A atribuio em C/C++ feita com o sinal de igualdade (=). Os caracteres so apresentados entre apstrofos () e a cadeira de caracteres entre aspas duplas (). Exemplo: x = 6; sexo = M;

COMANDOS DE ENTRADA EM C/C++


Como j visto anteriormente, recebe dados digitados pelo usurio que so armazenados em variveis, e, em C/C++ usamos os seguintes comandos:

Algoritmos

pg. 20

cin
Armazena um valor digitado a uma varivel. Exemplo: cin >> y; Os valores so armazenados at que seja encontrado o primeiro espao em branco (os posteriores sero desprezados).

gets
Um ou vrios caracteres digitados a uma varivel. Exemplo: gets(NOME); Utilizamos quando temos uma cadeira de caracteres contendo espao em branco.

scanf
Armazena um valor digitado a varivel. Exemplo: scanf(&Y); Obs.: & na frente da varivel indica o seu endereo. Tanto o comando gets quanto o scanf armazena TODA a cadeia de caracteres at ser teclado o [ENTER]. Exemplo: #include <stdio.h> int main() { int A; printf("Entre com valor para A: "); scanf("%d", &A); printf("O valor digitado foi %d", A); getch(); }

COMANDOS DE SADA EM C/C++


Como tambm j foi dito, usado para exibir os dados (tanto na tela como na impressora) e so usados os seguintes comandos:

cout
Exibe o valor que est armazenado na varivel. Exemplo: cout << Y; cout << Contedo de Y = << Y;

printf
Exibe o nmero inteiro ou real armazenado em uma varivel. Sintaxe: printf(%d,Y); (nmero inteiro) printf(%f, Y);(nmero real). Argumentos Entradas que a funo recebe. atravs dos argumentos que passamos parmetros para a funo. O primeiro argumento uma string (seqncia de caracteres) entre aspas, que pode ou no conter comando de formato (representado pelo % na frente da letra):

Algoritmos

pg. 21

Exemplo: printf(Contedo: %d, Y); printf(%7.8f, Y);

puts
Exibe somente textos. Sintaxe: puts(char *string); Exemplo: #include <stdio.h> void main() { puts("Exemplo de utilizacao"); puts("da funcao"); puts("puts..."); getch(); }

COMENTRIOS EM C/C++
So textos que servem para documentar o programa e totalmente ignorados pelo compilador. Podem ocupar uma (//) ou vrias linhas (/* ..... */) inserindo estes smbolos na frente ou entre os textos comentados. Exemplos: // comentrio /* comentrio1 */

OPERADORES E FUNES PREDEFINIDAS EM C/C++


Possui operadores e funes predefinidas destinadas a clculos matemticos e manipulao de caracteres.

Matemticos
OPERADOR + * / % ++ -EXEMPLO a+b ab a*b a/b a%b a++ a-EXPLICAO Soma o contedo de a com b. Subtrai o contedo de a pelo valor de b. Multiplica o contedo de a pelo valor b. Divide o valor de a pelo valor de b. Resto da diviso de a por b. Somente usado em valores inteiros. Aumenta o contedo de a em um valor. Diminui o contedo de a em um valor.

Algoritmos

pg. 22

+= -= *= /= %= ^

a += b a -= b a *= b a /= b a %= b a ^b

a=a+b a=ab a=a*b a=a/ b a= a % b a exponenciao em b.

Os +=, -=, *=, /= e %= so chamados de operadores matemticos de atribuio representa de uma maneira sinttica uma operao aritmtica(+, -, /, *, %) e posteriormente uma de atribuio (=).

Relacionais
OPERADOR == != <= >= < > EXEMPLO a == b a != b a <= b a >= b a < b a>b O O O O O O contedo contedo contedo contedo contedo contedo de de de de de de a a a a a a EXPLICAO igual ao contedo de b. diferente do contedo de b. menor ou igual ao contedo de b. maior ou igual ao contedo de b. menor que o contedo de b. maior que o contedo de b.

Matemticas
FUNO SINTAXE EXPLICAO

ceil cos exp fabs floor log log10 modf pow sin sqrt tan

ceil(a) ceil(3.2) fica 4 cos(a) exp(a) fabs(a) floor(a) floor(3.2) 3 log(a) log10(a) modf(a, b) pow(a, b) sen(a) sqrt(a) tan(a)

Arredonda um nmero real para cima. Calcula o cosseno de a (radianos). Obtm o logaritmo natural elevado a potncia de a. Valor absoluto de a. Arredonda um nmero real para baixo. Logaritmo natural de a. Logaritmo de base 10 de a. Decompe um determinado nmero real em duas partes: a (parte fracionria) e b (parte inteira). Potncia de a elevado a b. Calcula seno de a (radianos). Calcula a raiz quadrada de a. Calcula a tangente de a (radianos).

Lgicos
Permitem que mais de uma condio seja testada em uma nica expresso, ou seja, pode-se fazer mais de uma comparao (teste) ao mesmo tempo. Temos: NO, E, OU e XOR (l-se OU EXCLUSIVO), apresentados em ordem de prioridade, ou seja, se na mesma expresso tivermos o operador OU e depois o operador NO, primeiro ser executado o NO e depois o OU. Operadores: AND OR NOT XOR (E) (OU) (NO) (OU EXCLUSIVO) && || ! ^

TABELA DA VERDADE

AeB

A ou B

no A

A xou B

Algoritmos

pg. 23

F F V V

F V F V

F F F V

F V V V

V V F F

F V V F

EXEMPLO
Faa um algoritmo que calcule em graus Celsius e apresent-la convertida em graus Fahrenheit. A frmula de converso F (9 * C + 160)/5 (F em Fahrenheit e C em Celsius). ALGORITMO DECLARE C, F : real LEIA C F ( 9 * C + 160)/ 5 ESCREVA F FIM_ALGORITMO. Incio

#include <stdio.h> F (9 * C +160)/5 main() { int C, F; F printf("Entre com a temperatura em graus Celsius: "); scanf("%d",&C); F = ((9 * C + 160)) /5; printf("Temperatura em Fahrenheit = %d", F); Fim getch(); }

EXERCCIOS
1. Resolva as expresses abaixo de acordo com os tipos e valores das variveis. int a = 3, char carac = A a++ ++a a += 10 _________________________________________ _________________________________________ _________________________________________

a = a++ * 10 ______________________________________ a = ++a * 10 ______________________________________ carac++ _________________________________________

2. Encontre o valor de A para cada passo a seguir: #include <stdio.h> Int main(void) { int A = 0; /* -----------CALCULO-----------A++; A +=100; A *= 2; A = --A 200; A = !A ; A = A++ + ++A;

Valor A /*

______________________________________ ______________________________________ ______________________________________ ______________________________________ ______________________________________ ______________________________________

Algoritmos

pg. 24

A = A; A = (A > 3);

______________________________________ ______________________________________

A = A++ + A++ + A++; ______________________________________ A = ++A + ++A + ++A; ______________________________________

} 3. O que faz o seguinte programa? #include <stdio.h> int main() { int x; scanf(%d, &x); printf(%d, x); return(0); } 4. Escreva um programa que leia um caractere digitado pelo usurio, imprima este caractere e o cdigo ASCII correspondente. 5. Faa um programa (pseudocdigo e C/C++) que receba quatro nmeros inteiros, calcule e mostra a soma desses nmeros. 6. Faa um programa (pseudocdigo e C/C++) receba trs notas, calcule e mostre a mdia aritmtica entre elas. 7. Faa um programa (pseudocdigo e C/C++) que receba trs notas e seus respectivos pesos, calcule e exiba a mdia ponderada.

8. Faa um programa (pseudocdigo e C/C++) que receba o salrio de um


funcionrio, calcule e exiba o novo salrio com um aumento de 25%. 9. Faa um programa (pseudocdigo e C/C++) que receba o salrio de um funcionrio e o percentual de aumento, calcule e exiba o valor do aumento e o novo salrio. 10. Faa um programa (pseudocdigo e C/C++) que receba o salrio-base de um funcionrio, calcule e mostre o salrio a receber, sabendo-se que esse funcionrio tem gratificao de 5% sobre o salrio-base e paga imposto de 7% sobre o salrio-base. 11. Faa um programa (pseudocdigo e C/C++) que receba o salrio-base de um funcionrio, calcule e mostre o seu salrio a receber, sabendo-se que esse funcionrio tem gratificao de R$ 50,00 e paga imposto de 10% sobre o salrio-base.

12. Faa um programa (pseudocdigo e C/C++) que receba o valor de um


depsito e o valor da taxa de juros e calcule e exiba o valor do rendimento e o valor total depois do rendimento. (BASE * ALTURA) / 2. R2). 15. Faa um programa que receba um nmero positivo e maior que zero, calcule e exiba: a) nmero digitado ao quadrado; b) nmero digitado ao cubo; c) raiz quadrada do nmero digitado; d) raiz cbica do nmero digitado. 16. Faa um programa (pseudocdigo e C/C++) que receba dois nmeros maiores que zero, calcule e mostre um elevado ao outro. 17. Faa um programa (pseudocdigo e C/C++) ps, faa as converses e exiba os resultados: que receba uma medida de

13. Faa um programa que calcule e exiba a rea de um tringulo (AREA = 14. Faa um programa que calcule e mostre a rea de um crculo. (AREA =

Algoritmos

pg. 25

a) polegadas10; b) jardas11; c) milhas12. 18. Faa um programa (pseudocdigo e C/C++) que receba o ano de nascimento de uma pessoa e o ano atual, calcule e exiba: a) idade da pessoa; b) quantos anos essa pessoa ter em 2009. 19. Faa um programa (pseudocdigo e C/C++) que receba o preo de fbrica de um veculo13, o percentual de lucro do distribuidor e o percentual de impostos. Calcule e exiba: a) valor correspondente ao lucro do distribuidor; b) valor correspondente aos impostos; c) preo final do veculo. 20. Faa um programa (pseudocdigo e C/C++) que receba o nmero de horas trabalhadas e o valor do salrio mnimo. Calcule e exiba o salrio a receber e seguir as regras: a) hora trabalhada vale a metade do salrio mnimo; b) salrio bruto equivale ao nmero de horas trabalhadas multiplicado pelo valor da hora trabalhada; c) imposto equivale a 3% do salrio bruto; d) salrio a receber equivale ao salrio bruto menos o imposto. 21. Um trabalhador recebeu seu salrio e depositou em conta bancria. Emitiu dois cheques e agora deseja saber qual o saldo atual. Sabe-se que cada retirada bancria paga CPMF de 0,38% e o saldo inicial da conta est zerado. 22. Porsidnio comprou um saco de rao com peso em quilos. Possui dois gatos para os quais fornece a quantidade de rao em gramas. Faa um programa (pseudocdigo e C/C++) que receba o peso do saco de rao e a quantidade de rao fornecida para cada gato. Calcule e exiba quanto restar de rao no saco aps cinco dias.

23. Cada degrau de uma escada tem n de altura. Faa um programa


(pseudocdigo e C/C++) que receba essa altura e a altura que o usurio deseja alcanar subindo essa escada. Calcule e exiba quantos degraus o usurio dever subir para atingir seu objetivo, sem se preocupar com a altura do usurio. 24. Faa um programa (pseudocdigo e C/C++) que receba o custo de um espetculo teatral e o preo do convvio desse espetculo. Deve calcular e exibir a quantidade de convites que devem ser vendidos para que pelo menos o custo do espetculo seja alcanado.

RECURSIVIDADE
Podemos fazer com que uma funo chame a si prpria, a isto, chamamos de funo recursiva. Precisamos sempre, ter um critrio de parada, pois este, determina quando a funo deve parar de chamar a si mesma, impedindo que a funo fique infinita. Exemplo: Crie uma funo que calcule o fatorial de um nmero inteiro: #include <stdio.h> int fat(int n) { if (n) return n*fat(n-1); else return 1;
10 11

1 p = 12 polegadas 1 jarda = 3 ps 12 1 milha = 1.760 jardas 13 O custo ao consumidor de um carro novo a soma do preo de fbrica com o percentual de lucro do distribuidor e dos impostos aplicados ao preo de fbrica.

Algoritmos

pg. 26

} int main() { int n; printf("\n\nDigite um valor para n: "); scanf("%d", &n); printf("\nO fatorial de %d e %d", n, fat(n)); getch(); } Interpretando: Enquanto n no for igual a 0, a funo fat chama a si mesma cada vez com um valor menor e, n=0 o critrio de parada da funo.

Algoritmos

pg. 27

ESTRUTURA CONDICIONAL (Controle de Fluxo)


ALGORITMOS
SE condio ENTO comando Se a condio for verdadeira o comando executado. Essa condio ser uma comparao que possui dois valores: verdadeiro ou falso. SE condio ENTO INICIO Comando1 Comando2 Comando3 FIM

ESTRUTURA CONDICIONAL COMPOSTA


SE condio ENTO INICIO FIM SENO INCIO FIM

comando1 comando2 comando3 comando4

C/C++
SIMPLES - IF
IF (condio) { comando1; comando2; } Se a condio for verdadeira o comando ser executado. Quando h mais de um comando obrigatrio utilizar as chaves ({}). Ex.: Entre com um nmero e verifique se igual, menor ou maior que 10. #include <stdio.h> int main() { int num; printf("Digite um numero: "); scanf("%d",&num); if (num>10) printf("\n\nNumero maior que 10"); if (num==10) { printf("\n\Acertou!\n"); printf("Numero igual a 10."); } if (num<10) printf("\n\nNumero menor que 10"); getch(); }

Algoritmos

pg. 28

COMPOSTA IF/ELSE
if (condio) { comando1; comando2; } else { comando3; comando4; } Se a condio for verdadeira o comando ser executado, caso contrrio (se for falso) ser executado a segunda rotina. As condies devem estar entre parnteses. Exemplo: Criar um menu #include <stdio.h> void main() { char opcao; puts ("MENU"); puts (""); puts ("1. Incluir "); puts ("2. Excluir "); puts ("3. Alterar "); puts ("4. Sair "); printf("Entre com a opo: [ ]\b\b"); opcao = getche(); if (opcao == '1') printf ("\n INCLUSAO"); else if (opcao == '2') printf ("\n EXCLUSAO"); else if (opcao == '3') printf ("\n ALTERACAO"); else if (opcao == '4') printf ("\n SAIR"); else puts("\nEscolha opo correta"); getch(); }

ESTRUTURA CASE - SWITCH


switch (varivel) { case valor1 : lista de comandos; break; case valor2: lista de comandos; break; ... default: lista de comandos; } O comando switch acima avalia o valor de uma varivel para decidir qual case ser executado. E cada case associado a uma varivel. O comando break utilizado para impedir que sejam executados os comandos definidos nos cases seguintes. Quando o valor da varivel no coincidir com aqueles especificados nos cases ser executado em default.

Algoritmos

pg. 29

Exemplo: Criao de menus #include <stdio.h> void main() { char opcao; puts ("MENU"); puts (""); puts ("1. Incluir "); puts ("2. Excluir "); puts ("3. Alterar "); puts ("4. Sair "); printf("Entre com a opo: [ ]\b\b"); opcao = getche(); switch (opcao) { case '1' : printf("\nInclusao"); case '2' : printf("\nExclusao"); case '3' : printf("\nAlteracao"); case '4' : printf("\nSair"); default : puts("\nEscolha uma opcao correta"); } getch(); }

break; break; break; break; break;

OPERADORES LGICOS
Podem ser: &&, || e ! significam respectivamente e, ou e no (conjuno, disjuno e negao).

EXEMPLO
1. Faa um programa que receba as quatro notas bimestrais de um aluno e
imprima uma mensagem dizendo se est aprovado ou reprovado, se a mdia for maior ou igual a 4. Apresentar junto, a mensagem a mdia do aluno.
ALGORITMO DECLARE bim1, bim2, bim3, bim4, media : real LEIA bim1, bim2, bim3, bim4 media (bim1 + bim2 + bim3 + bim4)/ 4 SE (media >= 5) ENTO ESCREVA Aluno aprovado com mdia: , media SENO ESCREVA Aluno reprovado com mdia: , media FIM_SE FIM_ALGORITMO. #include <stdio.h> int main() { int media, bim1, bim2,bim3, bim4; printf("Entre com as 4 notas bimestrais: "); scanf("%d",&bim1); scanf("%d",&bim2); scanf("%d",&bim3); scanf("%d",&bim4); media = (bim1 + bim2 + bim3 + bim4)/4; if (media >= 5) printf("Aluno aprovado com media %d", media); else printf("Aluno reprovado com media %d", media); getch(); }

Algoritmos

pg. 30

Incio

bim1, bim2, bim3, bim4

media = (bim1+bim2+bim3+bim4)/4

media >= 5

Reprovado , media

Aprovado, media

Fim

EXERCCIOS
1.
A mdia final de um estudante calculada com base em trs notas atribudas a um trabalho prtico (peso 2), avaliao semestral (peso 3) e exame final (peso 5). A mdia das trs notas dada com base nos pesos. Faa um programa (pseudocdigo e C/C++) que receba as trs notas, calcule, exiba a mdia ponderada e a conceito: MDIA PONDERADA CONCEITO 8,0 10,0 A 7,0 8,0 B 6,0 7,0 C 5,0 6,0 D 0,0 5,0 E Faa um programa (pseudocdigo e C/C++) que receba trs notas de um aluno, calcule e exiba a mdia aritmtica de acordo com a tabela. Para alunos de exame calcule e exiba a nota que dever ser tirada no exame para aprovao, considerando que a mdia no exame 6,0. MDIA PONDERADA MENSAGEM 0,0 3,0 Reprovado 3,0 7,0 Exame 7,0 10,0 Aprovado Faa um programa (pseudocdigo e C/C++) que receba dois nmeros e mostre o maior. Faa um programa (pseudocdigo e C/C++) que receba trs nmeros e mostre em ordem crescente. Faa um programa (pseudocdigo e C/C++) que receba trs nmeros obrigatoriamente em ordem crescente um quarto nmero que no siga esta regra. Exiba os quatro nmeros em ordem decrescente. Faa um programa (pseudocdigo e C/C++) que receba um nmero inteiro e verifique se esse nmero par ou mpar.

2.

3. 4. 5. 6.

Algoritmos 7.

pg. 31

8.

9. 10.

11.

12.

13.

14.

15.

Faa um programa (pseudocdigo e C/C++) que receba quatro valores: I, A, B e C, onde I um valor inteiro positivo e os outros so valores reais. Escreva os nmeros reais de acordo com a tabela abaixo VALOR DE I FORMA DE ESCREVER 1 A,B,C em ordem crescente 2 A,B,C em ordem decrescente 3 O maior fica entre os outros dois ns. Faa um programa (pseudocdigo e C/C++) que exiba um menu de opes e receba a opo do usurio e os dados necessrios para executar cada operao: MENU DE OPES 1. Somar dois nmeros; 2. Raiz quadrada de um nmero; Digite a opo desejada. Faa um programa (pseudocdigo e C/C++) que exiba a data e a hora do sistema nos formatos: dia/ms/ano ms por extenso e hora:minuto. Faa um programa (pseudocdigo e C/C++) que determine a data cronologicamente maior de duas datas fornecidas pelo usurio. Cada data deve ser fornecida por trs valores inteiros, onde o primeiro representa o dia, o segundo o ms e o terceiro o ano. Faa um programa (pseudocdigo e C/C++) que receba a hora de incio de um jogo e a hora final do jogo (cada hora composta por duas variveis inteiras: hora e minuto). Calcule e exiba a durao do jogo (horas e minutos) sabendo-se que o tempo mximo de durao do jogo de 24 horas e que o jogo pode iniciar em um dia e terminar no dia seguinte. Faa um programa (pseudocdigo e C/C++) que receba o cdigo correspondente ao cargo de um funcionrio e seu salrio atual e exiba o cargo, o valor do aumento e o seu novo salrio. Os cargos esto abaixo: CODIGO CARGO PERCENTUAL 1 Escriturrio 50% 2 Secretrio 35% 3 Caixa 20% 4 Gerente 10% 5 Diretor No tem aumento Faa um programa (pseudocdigo e C/C++) que apresente o menu de opes a seguir, permita ao usurio escolher a opo desejada, receba os dados necessrios para executar a operao e exibir o resultado. Verifique a possibilidade de opo invlida e no se preocupe com restries como salrio negativo. MENU DE OPES: 1. Imposto 2. Novo salrio 3. Classificao Digite a opo desejada. TEM TRS OPES SALRIO PERCENTUAL DO IMPOSTO Menor que R$ 500,00 5% De R$ 500,00 a R$ 850,00 10% Acima de R$ 850,00 15% SALRIO AUMENTO Maiores que R$ 1.500,00 R$ 25,00 De R$ 750,00 a R$ 1.500,00 (inclusive) R$ 50,00 De R$ 450,00 a R$ 750,00 R$ 75,00 Menores que R$ 450,00 R$ 100,00 SALRIO CLASSIFICAO At R$ 700,00 (inclusive) Mal remunerado Maiores que R$ 700,00 Bem remunerado Faa um programa (pseudocdigo e C/C++) que receba o salrio de um funcionrio, calcule e exiba o novo salrio desse funcionrio com a bonificao e o auxlio-escola SALRIO BONIFICAO At R$ 500,00 5% Entre R$ 500,01 e R$ 1.200,00 12% Acima de R$ 1.200,00 Sem bonificao SALRIO AUXILIO-ESCOLA At R$ 600,00 R$ 150,00 Mais de R$ 600,00 R$ 100,00 Faa um programa (pseudocdigo e C/C++) que receba o valor do salrio mnimo, o nmero de horas trabalhadas, o nmero de dependentes do funcionrio e quantidade de

Algoritmos

pg. 32

horas extras trabalhadas. Calcule e exiba o salrio a receber do funcionrio de acordo com as regras: - valor da hora trabalhada igual a 1/5 do salrio mnimo; - salrio do ms igual ao nmero de horas trabalhadas multiplicado pelo valor da hora trabalhada. 16. Um supermercado deseja reajustar os preos de seus produtos usando o seguinte critrio: o produto poder ter seu preo elevado ou reduzido. Para alterar o preo o produto deve preencher pelo menos um dos requisitos a seguir: VENDA MDIA MENSAL PREO TOTAL %AUMENTO %DESCONTO < 500 < R$ 30,00 10 >= 500 E < 1200 >= R$ 30,00 e < R$ 800 15 >= 1200 >= R$ 80,00 20 17. Com trs valores dados: A, B, e C, verifique se eles podem ser os comprimentos dos lados de um tringulo e, se forem, verificar se um tringulo eqiltero, issceles ou escaleno. Se no formarem um triangulo deve escrever uma mensagem. OBS.: - comprimento de cada lado de um tringulo menor que a soma dos outros dois lados; - chama-se tringulo eqiltero, o tringulo que tem trs lados iguais. 18. Faa um programa que receba a altura e o peso de uma pessoa. De acordo com a tabela abaixo e exiba a classificao da pessoa: ALTURA Menores que 1,20 De 1,20 a 1,70 Maiores que 1,70 AT 60 A B C PESO Entre 60 a 90 D E F

Acima de 90 G H I

Algoritmos

pg. 33

ESTRUTURA DE REPETIO
ALGORITMOS
NMERO DEFINIDO DE REPETIES (ESTRUTURA PARA)
Utilizada quando sabemos o nmero de vezes em que um trecho do algoritmo deve ser repetido (incrementando de um em um automaticamente). PARA I valor inicial AT valor final FAA INICIO comando1 comando2 comando3 FIM Exemplo: PARA I 1 AT 10 FAA comando1 // ser executado 10 vezes.

NMERO INDEFINIDO DE REPETIES E TESTE DE INCIO (ESTRUTURA ENQUANTO)


Utilizada quando no se sabe o nmero de vezes em que um trecho do algoritmo deve ser repetido, embora tambm possa ser utilizada quando se sabe esse nmero. H situaes que o teste condicional no incio da estrutura repetio resulta em valor falso na primeira comparao sendo assim os comandos no so executados. ENQUANTO condio FAA INICIO comando1 comando2 FIM Exemplo: x 1 y5 ENQUANTO x < y FAA INCIO xx+2 yy+1 FIM Simulao X Y 1 5 Iniciais 3 6 5 7 7 8 9 9

NMERO INDEFINIDO DE REPETIES E TESTE NO FINAL (ESTRUTURA REPITA)


Utilizada quando no se sabe o nmero de vezes em que um trecho do algoritmo deve ser repetido, embora tambm possa ser utilizada quando se sabe esse nmero.

Algoritmos

pg. 34

A diferena entre ENQUANTO e REPITA que na ltima os comandos sero repetidos pelo menos uma vez, j que a condio se encontra no final. REPITA Comandos AT condio Os comandos so repetidos enquanto a condio for verdadeira. Exemplo: x1 y5 REPITA xx+2 yy+1 AT x >= y Simulao X Y 1 5 Iniciais 3 6 5 7 7 8 9 9

C/C++
for
Utilizada quando conhecemos o nmero de vezes que um trecho dever ser repetido. Sintaxe: for (i=valor inicial; condio; incremento ou decremento de i) comando; atribudo um valor inicial varivel i que controla o nmero de repeties. Depois uma expresso relacional que quando for falso, finaliza a repetio. Por ltimo, altera o valor da varivel i (incrementando ou decrementando). Exemplo1: for (a=1;a<=20;a++)
printf("Digite um nmero %d", a);

Exemplo prtico: L um string e conta quantos caracteres desta string: #include <stdio.h> int main() { char string[100]; /* string ate 99 caracteres */ int i, cont; printf("\nDigite uma frase: "); gets(string); /* Le a string */ printf("\n\nFrase digitada: \n%s", string); cont = 0; for (i = 0; string[i] |= '\0'; i=i+1) { if (string[i] == 'c') /* se for a letra 'c' */ cont = cont + 1; /* incrementa contador */ } printf("\nNumero de caracteres c= %d", cont); getch(); } Exerccio: Crie um programa que imprima o alfabeto de A at Z.

Algoritmos

pg. 35

break
Utilizado para interrompe qualquer tipo de repetio.

continue
Permite que no se execute o restante do bloco, passando para o prximo. No interrompe o loop apenas para para o prximo sem completar o atual.

while
Utilizada quando o nmero de repetio no fixo. Os comandos sero repetidos at a condio assumir o valor falso. Quando o teste condicional ocorre no incio, a possibilidade da repetio no ser executada, quando a condio for falsa. Sintaxe: WHILE (condio) { comando1; N comando2; .. } S Exemplo: soma todos nmeros inteiros entre 1 e 1000 #include <stdio.h> main() { long i = 1000, soma = 0; while (i) soma += i--; printf("\nSoma encontrada foi %ld", soma); getch(); }

do-while
Utilizada quanto o nmero de repeties necessrias no fixo. Os comandos sero repetidos at a condio assumir valor falso. Nesse tipo de estrutura o teste condicional ocorre no fim, garantindo a execuo de pelo menos uma vez. Sintaxe: do { comandos; } while (condio); Exemplo: Some todos os nmeros inteiros entre 1 e 100: #include <stdio.h> main() { long i = 1000, soma = 0; N do S soma += i--; while (i); printf("\nSoma encontrada foi %ld", soma); getch(); }

Algoritmos

pg. 36

EXEMPLOS
Apresentar o total da soma dos (1+2+3+4+5+6+7++97+98+100).
ALGORITMO DECLARE soma, contador : inteiro soma 0 PARA contador de 1 at 100 passo 1 FAA soma soma + contador FIM_PARA FIM_ALGORITMO #include <stdio.h> int main(void) { int soma, contador; soma = 0; (contador=1;contador<=100;contador++) { soma = soma + contador; } printf("%d", soma); getch(); } for

cem

primeiros Incio

nmeros

inteiros

Soma 0

Contador1,100, 1

Soma Soma + Contador

Soma

fim

EXERCCIOS
1. Um funcionrio de uma empresa recebe aumento salarial anualmente. Sabe-se
que: a) esse funcionrio foi contratado em 1995 com salrio inicial de R$ 1.000,00; b) em 1996 recebeu aumento de 1,5% sobre seu salrio inicial; c) a partir de 1997 (inclusive), os elementos salariais sempre corresponderam ao dobro do percentual do ano anterior. Faa um programa que determine o salrio atual desse funcionrio. 2. Faa um programa que leia N e que indique quantos valores inteiros e positivos devem ser lidos a seguir. Para cada nmero lido, mostre uma tabela contendo o valor lido e o fatorial desse valor. 3. Faa um programa que leia cinco pares de valores (a, b), todos inteiros e positivos, um de cada vez. Mostre os nmeros inteiros pares de a at b (inclusive). 4. Faa um programa que leia dez conjuntos de dois valores, o primeiro representando o nmero do aluno e o segundo representando a sua altura em centmetros. Encontre o aluno mais alto e o mais baixo. Exiba o nmero do aluno mais alto e o nmero do aluno mais baixo junto com suas alturas. 5. Foi feita uma estatstica em cinco cidades brasileiras para coletar dados sobre acidentes de trnsito. Foram obtidos os seguintes dados: a) cdigo da cidade; b) nmero de veculos de passeio (1999); c) nmero de acidentes de trnsito com vtimas (1999). Deseja-se saber: a) maior e o menor ndice de acidentes de trnsito e a que cidades pertencem; b) mdia de veculos nas cinco cidades unidas; c) mdia de acidentes de trnsito nas cidades com menos de 2.000 veculos de passeio. 6. Uma empresa possui dez funcionrios com as seguintes caractersticas: cdigo, nmero de horas trabalhadas no ms, turno de trabalho (matutino, vespertino ou noturno), categoria (operria ou gerente), valor da hora trabalhada.

Algoritmos

pg. 37

Sabendo-se que essa empresa deseja informatizar sua folha de pagamento, faa um programa que: a) Leia as informaes dos funcionrios, exceto o valor da hora trabalhada, no permitindo que sejam informados turnos nem categorias inexistentes. Trabalhar sempre com a digitao de letras maisculas; b) calcule o valor da hora trabalhada, conforme abaixo: CATEGORIA G G O O TURNO N M ou V N M ou V VALOR DA HORA TRABALHADA 18% do salrio mnimo 15% do salrio mnimo 13% do salrio mnimo 10% do salrio mnimo

Adote o valor de R$ 350,00 para o salrio mnimo. c) calcule o salrio mnimo dos funcionrios com base no valor da hora trabalhada e no nmero de horas trabalhadas. d) calcule o valor do auxlio-alimentao recebido por funcionrio de acordo com o seu salrio inicial, conforme a tabela a seguir: SALRIO INICIAL AUXILIO-ALIMENTAO At R$ 300,00 20% do salrio inicial Entre R$ 300,00 e R$ 600,00 15% do salrio inicial Acima de R$ 600,00 5% do salrio inicial 7. uma empresa contratou 15 funcionrios temporrios. De acordo com o valor das vendas mensais, os funcionrios adquirem pontos que determinaro seus salrios ao final de cada ms. Sabemos que esses funcionrios trabalharo nos meses de novembro a janeiro do ano subseqente. Faa um programa que: a) leia as pontuaes nos trs meses de cada funcionrio; b) calcule e exiba a pontuao geral de cada funcionrio nos trs meses; c) calcule e exiba a mdia das pontuaes de cada funcionrio nos trs meses; d) determine e exiba a maior pontuao atingida entre todos os funcionrios nos trs meses. 8. Faa um programa que monte os oito primeiros termos da seqncia de Fibonacci: 0-1-1-2-3-5-8-13-21-34-55-.... 9. Faa um programa que receba duas notas de seis alunos, calcule e exiba: a) mdia aritmtica das duas notas de cada aluno; b) mensagem de acordo com a tabela: MDIA ARITMTICA MENSAGEM At 3,0 Reprovado Entre 3,0 e 7,0 Exame Acima de 7,0 Aprovado 10. Faa um programa que calcule a soma dos primeiros 50 nmeros pares. Esse programa no recebe valor do teclado. Os primeiros nmeros so: 2, 4, 6,... 11. Um campeonato de futebol existem cinco times e cada time possui onze jogadores. Faa um programa que receba a idade, o peso e a altura de cada um dos jogadores, calcule e exiba: - quantidade de jogadores com idade inferior a 18 anos; - mdia das idades dos jogadores de cada time; - mdia das alturas de todos os jogadores do campeonato; - percentagem de jogadores com mais de 80 quilos entre todos os jogadores do campeonato. 12. Faa um programa que receba dois nmeros, calcule e exiba: a) soma dos nmeros pares desse intervalo de nmeros, incluindo os nmeros digitados; b) multiplicao dos nmeros mpares desse intervalo de nmeros, incluindo os nmeros digitados. 13. Faa um programa que receba um nmero inteiro maior que 1 e verifique se o nmero fornecido primo ou no. Exibir mensagem de nmero primo ou de nmero no primo. OBS. Nmero primo quando divisvel apenas pelo prprio nmero e por ele mesmo.

Algoritmos

pg. 38

14. Em uma fbrica trabalham homens e mulheres divididos em trs classes: a) trabalhadores que fazem at 30 peas por ms classe 1; b) trabalhadores que fazem de 31 a 35 peas por ms classe 2; c) trabalhadores que fazem mais de 35 peas por ms classe 3. A classe 1 recebe salrio mnimo. A classe 2 recebe salrio mnimo mais 3% do salrio mnimo por pea, acima das 30 peas iniciais. A classe 3 recebe salrio mnimo mais 5% do salrio mnimo por pea, acima das 30 peas iniciais. Faa um programa que receba o nmero do operrio, nmero de peas fabricadas no ms, o sexo do operrio e que tambm calcule e mostre: - o nmero do operrio e seu salrio; - total da folha de pagamento da fbrica; - o nmero total de peas fabricadas no ms; - a mdia de peas fabricadas pelos homens; - a mdia de peas fabricadas pelas mulheres; - o nmero do operrio ou operria de maior salrio. A fbrica tem 15 operrios. 15. Foi feita uma pesquisa para determinar o ndice de mortalidade infantil em um certo perodo. Faa um programa que: a) leia o nmero de crianas nascidas no perodo; b) o sexo (M ou F) e o tempo de vida para cada criana nascida. Calcule e exiba: a) percentagem de crianas do sexo feminino mortas no perodo; b) percentagem de crianas do sexo masculino mortas no perodo; c) percentagem de crianas que viveram 24 meses ou menos no perodo. 16. Faa um programa que receba o valor de uma dvida e exiba uma tabela com os seguintes dados: valor da dvida, valor dos juros, quantidade de parcelas e o valor da parcela. Os juros e a quantidade de parcelas seguem-se abaixo: QUANTIDADE DE PARCELAS 1 3 6 9 12 Exemplos de sada do programa:
VALOR DA DVIDA R$ 1000,00 R$ 1100,00 R$ 1150,00 JUROS 0 100 150

% JUROS SOBRE O VALOR INICIAL DA DVIDA 0 10 15 20 25


QTDE PARCELAS 1 3 6 VALOR DA PARCELA R$ 1000.00 R$ 366,67 R$ 191,67

17. Faa um programa que determine e exiba os cincos primeiros mltiplos de 3,

considerando nmeros maiores que 0. 18. Faa um programa para calcular a rea de um tringulo. Esse programa no pode permitir a entrada de dados invlidos, ou seja, medidas menores ou iguais a 0. 19. Faa um programa que receba o salrio de um funcionrio chamado Porsidonio. Sabe-se que o funcionrio Godofredo tem um salrio equivalente a um tero do salrio de Porsidonio e ele aplicar seu salrio integralmente na caderneta de poupana, que est rendendo 2% ao ms e Godofredo aplicar seu salrio integralmente no fundo de renda fixa, que est rendendo 5% ao ms. Calcule e exiba a quantidade de meses necessrios para que o valor pertencente a Joo iguale ou ultrapasse o valor pertencente a Carlos.

Algoritmos

pg. 39

VETORES
ALGORITMOS
Vetor ou array uma varivel composta homognea unidimensional formada por uma seqncia de variveis, todas do mesmo tipo, mesmo identificados (nome) e alocadas seqencialmente na memria. Uma vez que as variveis tm o mesmo nome, o que as distingue um ndice que referencia sua localizao dentro da estrutura.

DECLARAO DO VETOR
Declare nome [tamanho] tipo Exemplo: DECLARE x[5] NUMRICO X x[1] 1 2 3 4 5

ATRIBUINDO VALORES AO VETOR


X[1] 50 X[4] 9 X 1 50 2 3 4 9 5

CARREGANDO UM VETOR
PARA i 1 AT 5 FAA INCIO ESCREVA Digite o , i, nmero LEIA X[i] FIM

C/C++
DECLARAO DO VETOR
Os vetores so identificados pela existncia de colchetes logo aps o nome da varivel no momento da declarao. Dentro dos colchetes deve-se colocar o nmero de posies do vetor. Exemplos: int ver[10]; Este vetor possui 10 posies iniciando com 0 e terminando em 9 em cada posio podemos armazenar nmeros inteiros (int) char x[5]; Este, possui cinco posies, comeando pela posio 0 e indo at a 4.

ATRIBUINDO VALORES AO VETOR


Exemplos: vet[0] = 1; /*Atribui valor 1 ao primeiro elemento do vetor.*/

Algoritmos

pg. 40

strcpy(nome, Genoveva); Atribui o nome Genoveva ao vetor nome, declarado assim: char nome[6].

CARREGANDO UM VETOR
L os dados do teclado, atribuindo a um vetor. for (i = 0; i <10;i++) cin >> vetor[i];

IMPRIMINDO UM VETOR
for (i=0; i<10;i++) cout << vetor[i]; Exemplo: Receber cinco notas de aluno, calcular a mdia e exibir o resultado: #include <stdio.h> #include <conio.h> int main(void) { int i; float media; float nota[5]; for (i=0; i<5; i++) { printf("\nEntre com a %d nota: ", i+1); scanf("%f", &nota[i]); } media = (nota[0]+nota[1]+nota[2]+nota[3]+nota[4])/5; printf ("\nMedia das notas: %3.1f", media); getch(); }

EXEMPLO
1. Criar um programa que efetue a leitura dos nomes de 20 pessoas e em seguida apresentar na mesma ordem em que foram informados.
ALGORITMO DECLARE nome[20] : caractere i : inteiro PARA i de 1 at 20 passo 1 FAA LEIA nome[i] FIM_PARA PARA i de 1 at 20 passo 1 FAA ESCREVA nome[i] FIM_PARA FIM_ALGORITMO.

incio

i1,20 ,1

nome[i]

#include <stdio.h> main() { char nome[20]; int i; for (i=0;i<=20;i++) printf("\nEntre com o %d nome: %s", i,nome[i]); scanf("%s",&nome[i]); for (i=0;i<=20;i++) printf("\Nome: %s", nome[i]); getch(); }

i1,20 ,1

nome[ i]

fim

Algoritmos

pg. 41

2. Receber as notas de cinco alunos, calcular a mdia geral da turma e verificar


quantos conseguiram ficar acima da mdia: ALGORITMO DECLARE soma, media, conta NUMERICO PARA x de 1 AT 5 FAA INICIO LER nota[x] soma soma + nota[x] FIM FIM_PARA Media soma / 10 PARA n de 1 AT 5 FAA SE nota[n] > media Ento Conta conta + 1 FIM_SE FIM_PARA FIM_ALGORITMO. #include <stdio.h> #include <string.h> int main() { int x, conta; double nota[5]; double soma, media; soma = 0.0; media = 0.0; conta = 0; for (x=0;x<5;x++) { scanf("%lf",&nota[x]); soma = soma + nota[x]; } media = soma / x; for (x=0;x<5;x++) { if (nota[x] > media) conta = conta + 1; } printf("%lf %d\n", media); printf("%lf %d\n", conta); getch(); } 3) Exemplo de ordenao de valores (ascendente) utilizando o define. #include <stdio.h> #define tamanho 10 main() { int a[tamanho] = {2, 4, 5, 6, 7, 89, 10, 12, 11,50}; int i, pass, hold; printf ("Itens na ordem original\n"); for (i=0;i<=tamanho-1;i++) printf("%4d",a[i]); for (pass=1;pass<=tamanho-1;pass++) /* passadas */ for (i=0;i<=tamanho-2;i++) /*uma passada*/ if (a[i] > a[i+1]) /* comparao*/

Algoritmos

pg. 42

{ hold = a[i]; a[i] = a[i +1]; a[i + 1]= hold; } printf("\nItens de dados na ordem ascendente\n"); for (i=0;i<=tamanho-1;i++) printf("%4d",a[i]); printf("\n"); getch();

EXERCCIOS
1. Faa um programa que carregue um vetor de nove elementos numricos inteiros, calcule e exiba os nmeros primos e suas respectivas posies. 2. Faa um programa que receba a quantidade de peas vendidas por vendedor e armazene essas quantidades em um vetor. Recebe tambm o preo da pea vendida de cada vendedor e armazene esses preos em outro vetor. Existem apenas 10 vendedores e cada vendedor pode vender apenas um tipo de pea, isto , para cada vendedor existe apenas um preo. Calcule e exiba a quantidade total de peas vendidas por todos os vendedores e para cada vendedor calcule e exiba o valor total da venda (quantidade de peas * preo de pea). 3. Faa um programa que carregue dois vetores de dez elementos numricos cada um e exiba um vetor resultante da intercalao desses dois vetores.
Ve to r1 3 1 Ve to r2 3 5 2 5 4 3 4 2 4 2 2 5 2 5 6 5 3 7 3 2 8 2 5 9 5 9 10 9

10

4. Faa um programa que carregue um vetor com oito nmeros inteiros, calcule e exiba dois vetores resultantes. O primeiro vetor resultante deve contar os nmeros positivos e o segundo, os nmeros negativos. Cada vetor resultante vai ter no mximo oito posies, sendo que nem todas devem ser obrigatoriamente utilizadas. 5. Faa um programa que carrega um vetor com 10 nmeros inteiros. Calcule e exiba um vetor resultante ordenando de maneira decrescente.
X 3 1 5 2 4 3 2 4 1 5 6 6 8 7 7 8 1 1 9 9 1 0 1 1 0

Orde nado

1 1 1

9 2

8 3

7 4

6 5

5 6

4 7

3 8

2 9

6. Faa um programa que no momento de carregar um vetor com oito nmeros inteiros j o carregue de maneira ordenada crescente. 7. Faa um programa que efetue reserva de passagens areas de uma certa companhia. O programa dever ler informaes sobre os vos (nmero, origem e destino) juntamente com o nmero de lugares disponveis para 12 avies (um

Algoritmos

pg. 43

vetor para cada um desses dados). O programa dever apresentar um menu com as seguintes opes: Consultar; Efetuar reserva; Sair Quando a opo escolhida for Consultar dever ser disponibilizado mais um menu com as seguintes opes: Nmero de vo; Origem; Destino. Quando a opo escolhida for EFETUAR RESERVA dever ser perguntado o nmero do vo no qual a pessoa deseja viajar. O programa dever dar as seguintes respostas: Reserva confirmada caso exista o vo e lugar disponvel dando baixa nos lugares disponveis; Vo lotado caso no exista lugar disponvel nesse vo; Vo inexistente caso o cdigo do vo no exista. A opo Sair a nica que permite sair do programa. 8. Faa um programa para corrigir provas de mltipla escolha. Cada prova tem dez questes e cada questo vale 1 ponto. O primeiro conjunto de dados a ser lido o gabarito da prova. Os outros dados sero os nmeros dos alunos e suas respectivas respostas. Existem 15 matriculados. Calcule e exiba: Para cada aluno seu nmero e sua nota; A percentagem de aprovao, sabendo-se que a nota mnima 6,0. 9. Faa um programa que receba a temperatura mdia de cada ms do ano e armazene-as em um vetor. Calcule e exiba a maior e a menor temperatura do ano em que ms elas ocorreram (exiba o ms por extenso: 1 Janeiro, 2 Fevereiro, ...). 10. Faa um programa que carregue um vetor com os modelos de cinco carros (exemplos de modelos: FUSCA, GOL, VECTRA etc). Carregue um outro vetor com o consumo desses carros, isto , quantos quilmetros cada um desses carros faz com um litro de combustvel. Calcule e exiba: Modelo do carro mais econmico; Quantos litros de combustvel cada um dos carros cadastrados consome para percorrer uma distncia de 1000 quilmetros. 11. Faa um programa que carregue um vetor com dez nmeros inteiros. Calcule e exiba os nmeros superiores a 50 e suas respectivas posies. Exiba a mensagem se no existir nenhum nmero nessa condio. 12. Faa um programa que receba seis nmeros inteiros, calcule e exiba a soma dos nmeros pares e a quantidade dos nmeros mpares, exiba o relatrio a seguir: Vetor 2 4 5 6 3 7 1 2 3 4 5 6 Relatrio Os nmeros pares so: Nmero 2 na posio 1 Nmero 4 na posio 2 Nmero 6 na posio 4 Soma dos pares = 12 Os nmeros impares so: Nmero 5 na posio 3 Nmero 3 na posio 5 Nmero 7 na posio 6 Quantidade de nmeros mpares = 3

Algoritmos

pg. 44

MATRIZ
DEFINIO
Varivel composta homognea bidimensional formada por uma seqncia de variveis, todas do mesmo tipo com o mesmo identificador (mesmo nome), alocadas seqencialmente na memria. Uma vez que as variveis tm o mesmo nome, o que as distingue so os ndices que referenciam sua localizao dentro da estrutura. Uma varivel do tipo matriz composta por linhas e colunas.

DECLARAO DE MATRIZ
DECLARE nome[linha,coluna] tipo Onde nome o nome da varivel, linha a quantidade de linhas que vo compor a matriz, coluna a quantidade de colunas que vo compor a matriz e tipo o nome do tipo de dados.

EXEMPLO DE MATRIZ
DECLARE a[3, 5] NUMRICO 1 a 1 2 3 a[1,1] a[3,4] 2 3 4 5

ATRIBUINDO VALORES MATRIZ


Exemplos: a[1,1] 45 1 2 3 a[2,1] 13 a[2,5] 0 1 a 13 -4 2 45 3 a[3,3/ -4 4 5 0

CARREGANDO UMA MATRIZ


PARA i 1 AT 3 FAA INCIO PARA j 1 AT 5 FAA INICIO ESCREVA Digite o nmero da linha , i, e coluna , j LEIA x[i,j] FIM FIM Ficaria assim: 1 2 3 1 12 15 3 2 9 4 45 3 3 2 3 4 7 34 0 5 -23 -4 -3

Algoritmos

pg. 45

EXIBINDO OS ELEMENTOS DE UMA MATRIZ


PARA i 1 AT 3 FAA INCIO PARA j 1 AT 5 FAA INICIO ESCREVA x[i,j] FIM FIM

C/C++
Podemos declarar matrizes unidimensionais (vetores), bidimensionais e multidimensionais. O padro ANSI prev, no mnimo, 12 dimenses, entretanto, o limite de dimenses fica por conta da quantidade de recursos disponvel ao compilador. Apesar disso, as mais utilizadas so de duas dimenses.

DECLARAO DE MATRIZ
Sintaxe: tipo_dados nome_varivel [dimensao1] [dimensao2] [...] Exemplo: float x[2] [6]; Como os vetores, os ndices iniciam em 0. temos ento, duas linhas (0 e 1) e seis colunas (0 a 5): 0 x 0 1 1 2 3 4 5

ATRIBUINDO VALORES
x[1] [4] = 5 0 x 0 1 1 2 3 4 5 5

Carregando uma matriz Para ler dados do teclado e atribuir a uma matriz j declarada como int mat[7] [3]: for (i=0; i<7; i++) { for (j=0; j<3; j++) cin >> mat[i] [j] } Interpretando: a matriz possui 7 linhas, o for externo deve variar de 0 a 6 e o for interno deve variar de 0 a 2.

EXIBINDO ELEMENTOS DA MATRIZ

Algoritmos

pg. 46

Para exibir uma matriz declarada como por exemplo, float x[10] [6]: for (i=0;i<10;i++) { for (j=0;j<6;j++) cout << x[i] [j]; } Exemplo: Criar uma matriz de caracteres #include <stdio.h> void main() { int i; char lista_time[][12]={"SANTOS", "CORINTHIANS", "PALMEIRAS", "SAO PAULO", "FLAMENGO"}; for (i=0; i<5; i++) { printf("\nO time de indice %d e: %s", i, lista_time[i]); } getch(); }

EXEMPLOS
1. Ler duas matrizes do tipo vetor, sendo A com 20 elementos e B com 30 elementos. Construir uma matriz C, sendo esta a juno das duas outras matrizes. Desta forma, C dever ter a capacidade de armazenar 50 elementos. Apresentar a matriz C. ALGORITMO DECLARE a[1,20], b,[1,30], c[1,50], i NUMRICO PARA i 1 at 20 FAA LEIA a[i] FIM_PARA PARA i 1 at 30 FAA LEIA b[i] FIM_PARA PARA i 1 at 50 FAA SE (i <= 20) ENTO c[i] a[i] SENO c[i] b[i - 20] FIM_SE FIM_PARA PARA i 1 AT 50 FAA ESCREVA c[i] FIM_PARA FIM_ALGORITMO

Algoritmos

pg. 47 Incio

#include <stdio.h> int main() { int i; double a[20], b[30], c[50]; for (i=0;i<20;i++) { scanf("%lf",&a[i]); } for (i=0;i<30;i++) { scanf("%lf",&b[i]); } for (i=0;i<50;i++) { if (i <=20) c[i] = a[i]; else c[i] = b[i-20]; } for (i=0;i<50;i++) { printf("%lf",c[i]); } getch(); } N

I 1,20

a[ I ]

I 1,30

b[ I ]

I 1,50 S

i<=2 0

c[i] b[i-20]

c[i] a[i]

I 1,50

c[i]

2. L 5 strings e exibe na tela: #include <stdio.h> int main() { char strings [5] [100]; int conta; for (conta = 0; conta<5;conta++) { printf ("\n\nDigite a string numero: "); gets (strings[conta]); } printf("\n\n\nAs strings que digitadas foram:\n\n"); for (conta=0;conta<5;conta++) printf("%s\n", strings[conta]); getch(); }

Fim

Algoritmos

pg. 48

EXERCCIOS
1. Faa um programa que carregue uma matriz 2 x 2, calcule e exiba uma matriz resultante que ser a matriz digitada multiplicada pelo maior elemento da matriz. 2. Faa um programa que carregue uma matriz 10 x 3 com as notas de dez alunos em trs provas. Exiba um relatrio com o nmero do aluno (linha) e a prova em que cada aluno obteve menor nota. Ao final do relatrio, exiba quantos alunos tiveram menor nota na prova1, quantos tiveram menor nota na prova2 e quantos tiveram menor nota na prova3. 3. Faa um programa que carregue: a) um vetor com oito posies com os nomes das lojas; b) um vetor com quatro posies com os nomes dos produtos; c) uma matriz com os preos de todos os produtos em cada loja. 4. Faa um programa que carregue uma matriz 10 x 20 com nmeros inteiros e some cada uma das linhas, armazenando o resultado das somes em um vetor. A seguir, multiplique cada elemento da matriz pela soma da linha e exiba a matriz resultante. 5. Faa um programa que carregue a primeira matriz de ordem 4 x 5 e uma segunda com ordem 5 x 2, calcule e exiba a matriz resultante do produto matricial das duas matrizes anteriores, armazenando em uma terceira matriz de ordem 4 x 2. 6. faa um programa que carregue uma matriz 15 x 5 com nmeros inteiros, calcule e exiba quais os elementos da matriz que se repetem e quantas vezes cada um est repetido. 7. faa um programa que carregue: - vetor com os nomes de cinco produtos; - matriz 5 x 4 com os preos dos cinco produtos em quatro lojas diferentes; - vetor com o custo do transporte dos cinco produtos. Calcule a segunda matriz 5 x 4 com os valores dos impostos de cada produto de acordo com a tabela? PREO % DE IMPOSTO At R$ 50,00 5 Entre R$ 50,01 e R$ 100,00 10 Acima de R$ 100,00 20 8. Faa um programa que carregue uma matriz 7 x 7 de nmeros inteiros e crie dois vetores de sete posies cada um e que contenham, respectivamente, o maior elemento de cada uma das linhas e o menor elemento de cada uma das colunas. Escreva a matriz A e os dois vetores. 9. faa um programa que receba as vendas semanais (de um ms) de cinco vendedores de uma loja e armazene essas vendas em uma matriz. Calcule e exiba: - total de vendas por ms de cada vendedor; - total de vendas de cada semana (todos os vendedores juntos); - total de vendas do ms. 10. Faa um programa que carregue: - um vetor com cinco nmeros inteiros; - um outro vetor com dez nmeros inteiros; - uma matriz 4 x 3, tambm com nmeros inteiros. Calcule e mostre: - maior elemento do primeiro vetor multiplicado pelo menor elemento do se vetor. O resultado dessa multiplicao adicionado aos elementos digitados na matriz dar origem a uma segunda matriz (resultante); - soma dos elementos pares de cada linha da matriz resultante; - a quantidade de elementos entre l e 5 em cada coluna da matriz resultante.

Algoritmos

pg. 49

MANIPULANDO CARACTERES EM C/C++


Em C/C++ no existe um tipo de dados similar string da linguagem PASCAL. Em vez disso, para armazenar uma cadeia de caracteres utilize vetores (matrizes unidimensionais), onde cada posio representa um caractere. Os compiladores em C/CC++ identificam o fim de uma cadeira de caracteres por meio do caractere nulo, ou seja \0, deve-se declarar sempre o vetor com uma posio a mais para armazenar o caracteres nulo. Exemplo: ALGORITMO, devemos declarar um vetor do tipo char com 9 posies: char palavra[9] ndice Valor Posio memria ... ... ... 0 A 863 1 L 864 2 G 865 3 O 866 4 R 867 5 I 868 6 T 869 7 M 870 8 O 871 ... ... ...

FUNO strcpy()
Para armazenar uma cadeira de caracteres em uma varivel, usamos uma funo strcpy (varivel, valor), que faz parte da biblioteca string.h. Copia a string origem para a string destino. Exemplo: strcpy(disciplina, Algoritmos); Sintaxe: strcpy(string_destino, string_origem); Exemplo prtico: #include <stdio.h> #include <string.h> int main() { char str1[100], str2[100], str3[100]; printf("Entre com uma string: "); gets(str1); strcpy(str2,str1); /* copia str1 em str2 */ strcpy(str3,"Voc digitou a string "); /* copia o texto para str3*/ printf("\n\n%s%s",str3,str2); getch(); }

FUNO strcat()
Sintaxe: strcat(string_destino, string_origem); A origem continuar inalterada e ser anexada ao fim da string destino. Exemplo prtico: #include <stdio.h> #include <string.h> int main() { char str1[100], str2[100]; printf("Entre com uma string: "); gets(str1); strcpy(str2,"Voc digitou a string "); /* copia o texto para str3*/ strcat(str2,str1); /* str2 armazena o texto mais o contedo */ printf("\n\n%s",str2); getch(); }

FUNO strlen()
Sintaxe: strlen(string); Retorna o comprimento da string fornecida. O terminador nulo no contado. Exemplo prtico: #include <stdio.h>

Algoritmos

pg. 50

#include <string.h> int main() { int size; char str[100]; printf("Entre com uma string: "); gets (str); size = strlen(str); printf("\n\nA string que voce digitou tem tamanho %d", size); getch(); }

FUNO strchr()
Sintaxe: strchr(str1, ch) Retorna um ponteiro para a posio da cadeia str1, onde o ch o caractere encontrado pela primeira vez.

FUNO strstr()
Sintaxe: strstr(string1,string2); Retorna um ponteiro para a posio da cadeia str1, onde a cadeia str2 encontrada pela primeira vez.

FUNO strcmp()
Sintaxe: strcmp(string1,string2); Compara a string1 com a string2, se ambas forem idnticas a funo retorna 0, caso contrrio retorna no-zero. Exemplo prtico: #include <stdio.h> #include <string.h> int main() { char str1[100],str2[100]; printf("Entre com uma string: "); gets (str1); printf("\n\nEntre com outra string: "); gets(str2); if (strcmp(str1,str2)) printf("\n\nAs duas strings so diferentes."); else printf("\n\nA duas strings so iguais."); getch(); }

EXERCCIO
1. Faa um programa que leia quatro palavras pelo teclado e armazene cada palavra em uma string. Depois, concatene todas as strings lidas numa nica string. Por fim, apresente esta como resultado final. 2. Faa um programa que receba uma frase, calcule e exiba a quantidade de palavras na frase digitada. 3. Faa um programa que receba o nome completo de uma pessoa e exiba os nomes intermedirios abreviados. Exemplo: SIMONE MARIA VIANA SIMONE M. VIANA. 4. Faa um programa que receba o nome completo de uma pessoa e reescreva conforme o exemplo: SIMONE MARIA VIANA VIANA, S. M. 5. Faa um programa que receba duas frases e gere uma terceira que representa a combinao das palavras das duas frases lidas. 6. Faa um programa que receba uma frase e coloque as palavras em ordem crescente.

Algoritmos

pg. 51

REGISTROS (Estruturas)
So estruturas que podem agregas diferentes informaes. Assim, so feitas de diferentes combinaes, gerando novos tipos de dados. Um registro uma coleo de campos, em que cada campo pode ser de um tipo de dado diferente. Por isso so conhecidos como variveis compostas heterogneas.

DECLARAO - ALGORITMOS
DECLARE nome_varivel REGISTRO (campo TIPO_CAMPO) Exemplo: DECLARE conta REGISTRO (num, saldo NUMERICO, nome LITERAL) O registro declarado chamado de conta e possui trs campos: num, saldo (NUMRICO) e nome (literal). Conta num saldo nome conta.num conta.saldo conta.nome

DECLARAO DE REGISTROS EM C/C++


So definidos pela palavra struct. Sintaxe: struct nome_do_tipo_da_estrutura { tipo_1 nome_1; tipo_2 nome_2; ... tipo_n nome_n; } variveis_estrutura; A partir desta estrutura definida podemos considerar a existncia de um novo tipo de dado para ser utilizado. Esse novo tipo capaz de armazenar os campos definidos chamados de campos de estrutura. Exemplo: struct produto { int cdigo; char descrio[30]; }

DECLARAO DE VARIVEIS DO TIPO REGISTRO EM C/C++


Para o programa usar esse novo tipo de dados necessrio declarar uma varivel, por exemplo, produto x ou produto char[10] [6] (matriz bidimensional com 10 linhas e seis colunas). Podemos definir a varivel junto com a estrutura. Exemplo: struct produto { int cdigo; char descrio[30]; } x[8] [5];

ACESSO A MEMBROS DE ESTRUTURAS

Algoritmos

pg. 52

Aps a declarao da varivel podemos manipular seu contedo, ou seja, valores armazenados em cada membro da estrutura, para isso, informamos o nome da varivel e o campo que ser manipulado. Exemplo: produto x; x.codigo = 1; strcpy(x.descricao, geladeira);

EXEMPLOS
1. Utilizar as estruturas declaradas na seo anterior para escrever um programa que preencha uma ficha. Leitura #include <stdio.h> #include <string.h> struct tipo_endereco { char rua [50]; int numero; char bairro [20]; char cidade [30]; char sigla_estado [3]; long int CEP; }; struct ficha_pessoal { char nome [50]; long int telefone; struct tipo_endereco endereco; }; main (void) { struct ficha_pessoal ficha; strcpy (ficha.nome,"Luiz Osvaldo Silva"); ficha.telefone=4921234; strcpy (ficha.endereco.rua,"Rua das Flores"); ficha.endereco.numero=10; strcpy (ficha.endereco.bairro,"Cidade Velha"); strcpy (ficha.endereco.cidade,"Belo Horizonte"); strcpy (ficha.endereco.sigla_estado,"MG"); ficha.endereco.CEP=31340230; getch(); }

Escrita

EXERCCIOS
1. Faa um programa que realize o cadastro de contas bancrias com as seguintes informaes: nmero da conta, nome do cliente e saldo. O banco permitir o cadastramento de apenas 15 contas e no pode haver mais de uma conta com o mesmo nmero. Crie o menu de opes: MENU DE OPES 1. CADASTRAR CONTAS 2. VISUALIZAR TODAS AS CONTAS DE UM DETERMINADO CLIENTE 3. EXCLUIR CONTA COM MENOR SALDO (no pode haver saldos iguais) 4. SAIR

Algoritmos

pg. 53

2. Faa um programa que utilize os registros a seguir: CLIENTE DOCUMENTOS cod_cli num_doc nome cd_cli fone data_venc endereo data_pag valor juros Sabe-se que um documento s pode ser cadastrado para um cliente que j exista. Considere que podem existir no mximo 15 clientes e 10 documentos. Crie um vetor para clientes e outro para documentos. Crie um menu para a realizao de cada uma das operaes especificadas a seguir. a) Cadastrar clientes - no pode existir mais de um cliente com o mesmo cdigo. b) Cadastrar documentos - ao cadastrar um documento, se a data de pagamento for maior que a data de vencimento, calcular o campo 'juros' do registro documentos (5% sobre o valor original do documento). c) Excluir clientes - um cliente s pode ser excludo se no existir documento algum associado a ele. d) Excluir documentos individuais - por meio de seu nmero. Caso o documento no exista, mostre a mensagem Documento no encontrado. e) Excluir documentos por cliente informar o cdigo do cliente e excluir todos os seus documentos. Caso o cliente no exista, mostre a mensagem Cliente no encontrado. f) Excluir documentos por perodo - informar a data inicial e a data final e excluir todos os documentos que possurem data de vencimento nesse perodo. g) Alterar as informaes sobre os clientes - s no pode ser alterado o cdigo do cliente, h) Mostrar o total de documentos de um determinado cliente. Quando forem excludos clientes ou documentos, os vetores devem ser reorganizados, ou seja, todas as posies no preenchidas dos vetores devem ficar no final. Exemplo: se for necessrio excluir o nmero 8 do vetor a seguir, tanto o 9 quanto o I devem ser movidos uma casa para a esquerda e a ltima posio deve ficar livre para uma nova incluso. Vetor inicial 12 5 8 9 1

Vetor reordenado com uma posio livre ao final 12 5 9 1

3. ma empresa contratou J 5 funcionrios temporrios. De acordo com o valor das vendas mensais, os funcionrios adquirem pontos que determinaro seus salrios ao final de cada ms. Sabe-se que esses funcionrios trabalharo nos meses de novembro de 2000 a janeiro de 2001. Faa um programa que: a) cadastre os nomes dos funcionrios e suas respectivas vendas mensais; b) calcule e mostre a pontuao geral de cada funcionrio nos trs meses. Sabe-se que R$ 100,00 equivalem a l ponto; c) calcule e mostre a pontuao geral de todos os funcionrios a cada ms; d) determine e mostre a maior pontuao atingida nos trs meses, mostrando o nome do funcionrio. Desconsiderar empates; e) determine e mostre o valor total vendido.

Algoritmos

pg. 54

ARQUIVOS
Estruturas de dados manipuladas fora do ambiente do programa so conhecidas como arquivos. Considera-se como ambiente do programa a memria principal, onde nem sempre possvel ou conveniente manter certas estruturas de dados. Um arquivo que armazenado em um dispositivo de memria secundria, como discos, por exemplo, pode ser lido ou escrito por um programa. Um arquivo formado por uma coleo de registros,e cada registro formado por campos e cada campo possui suas caractersticas especficas. Uma ou mais campos desse registro considerado campo-chave campo que diferencia um registro dos demais, evitando duplicidade de informaes. Um sistema de banco de dados composto por um ou vrios arquivos, onde cada arquivo possui programas de manuteno: incluso, excluso lgica ou fsica, alterao, consulta geral e especfica e relatrios. Excluso fsica que aps eliminar o registro, os demais so deslocados e a excluso lgica, quando os registros possuem um campo adicional identificando se os mesmo esto ou no ativos (excludos possui valor 0).

DECLARAO EM C/C++
Um arquivo pode representar vrias coisas: arquivos em disco, impressora, teclado ou qualquer dispositivo. Vamos ver somente arquivos em disco. Para utilizar, precisamos usar a biblioteca stdlib.h que fornece funes de manipulao de arquivos e definio de novos tipos de dados para serem usados. Os tipos de dados definidos na biblioteca so: size_t, fpos_t e FILE. O FILE identifica um arquivo no disco, direcionando todas as operaes. Exemplo: FILE *arquivo, *ponteiro;

COMANDOS DE ARQUIVOS EM C/C++


fopen()
Abre um arquivo retornando o ponteiro associado a esse arquivo. Sintaxe: FILE * fopen(char * arquivo, char *modo_abertura); Modo de Abertura r abre um arquivo de teto onde so realizadas apenas leituras; w cria um arquivo de texto onde realiza apenas de escrita; a anexa novos dados a um arquivo texto; rb arquivo binrio realiza apenas leituras; wb arquivo binrio realiza apenas escritas; ab novos dados a um arquivo binrio; r+ abre um arquivo texto onde so realizadas leitura e escrita; w+ abre um arquivo texto onde so realizadas escrita e leitura; a+ anexa novos dados ou cria um arquivo texto onde so realizadas escrita e leitura; rb+ abre um arquivo binrio onde so realizadas escrita e leitura; wb+ cria um arquivo binrio onde so realizadas escrita e leitura; ab+ anexa novos dados a um arquivo binrio de leitura e escrita. FILE *arquivo; arquivo = fopen(arquivo1.dat, w); if (arquivo == NULL) { printf(\nOcorreu um erro, arquivo no foi aberto. getch();} else { /* outras instrues */} Obs.: Quando usamos os modos w e wb, se o arquivo no existir ser criado ou, se j existir ser sobreposto por um arquivo vazio. Exemplo:

Algoritmos

pg. 55

fclose()
Fecha um arquivo aberto, se ocorrer um erro poder haver perda de dados. Sintaxe: int fclose(FILE *arquivo14);

ferror()
Detecta se ocorreu algum erro durante uma operao com arquivos. Sintaxe: int ferror(FILE *arquivo15); Retorna um nmero inteiro, se esse nmero for diferente de zero significa que ocorreu um erro durante a ltima operao realizada com o arquivo apontado por arquivo. Se for 0 no ocorreu erro.

fputc()
Escreve um caractere em um arquivo. Se for bem sucedida retorna o caractere escrito caso contrrio, retorna EOF. Sintaxe: int fputc(char ch, FILE *arquivo);

fgetc()
L um caractere em um arquivo. Se for bem sucedida retorna o caractere lido caso contrrio, retorna EOF. Sintaxe: int fgetc (FILE *arquivo);

fputs()
Escreve uma cadeira de caracteres em um arquivo. Sintaxe: int fputs(char *cadeira, FILE *arquivo);

fgets()
L uma cadeira de caracteres armazenada em um arquivo. Sintaxe: int fgets(char *cadeia, int tamanho, FILE *arquivo);

fwrite()
Escreve qualquer tipo dado e no apenas caracteres ou cadeias de caracteres. Sintaxe: int fwrite(&var, sizeof(double), 1, arquivo);

fread()
L qualquer tipo dado e no apenas caracteres ou cadeia de caracteres. Quando for bem sucedida vai gerar como retorno um valor igual ao nmero de leituras realizadas, caso contrrio, quando ocorrer um erro ou quando o final do arquivo for encontrado. Sintaxe: int fread(&var, sizeof(double), 1, arquivo);

fseek()
posiciona o ponteiro em um endereo especfico, tornando possvel leituras e escritas aleatrias. Sintaxe: int fseek (FILE *arquivo, long quantidade_bytes, int posio); Posio: SEEK_SET: movimentao de qtde_bytes a partir da posio inicial do arquivo; SEEK_CUR: movimentao de qtde_bytes a partir da posio atual do arquivo;
14 15

o ponteiro obtido quando o arquivo for aberto com a funo fopen(). o ponteiro obtido quando o arquivo for aberto com a funo fopen().

Algoritmos

pg. 56

SEEK_END: movimentao de qtde_bytes a partir da posio final do arquivo.

feof()
Retorna um nmero inteiro. Quando esse nmero for 0 significa que o fim do arquivo ainda no foi atingido e qualquer outro valor significa que foi encontrado.

rewind()
Posiciona o cursor (posio atual) de volta ao incio do arquivo. Sintaxe: void rewind(file *arquivo);

remove()
Apaga um arquivo. Se for executada com xito retorna o nmero 0. Sintaxe: int remove(char *arquivo);

fflush()
Escreva o contedo armazenado no buffer dentro de um arquivo. Sintaxe: int fflush(FILE *arquivo);

exit()
Aborta a execuo do programa. Podemos chamar de qualquer ponto e faz com que o programa termine e retorna para o sistema operacional, o cdigo de retorno. Sintaxe: void exit (int cdigo_retorno); Exemplo: Garante que o programa no deixar de abrir o arquivo. #include <stdio.h> #include <stdlib.h> main (void) { FILE *fp; fp=fopen ("exemplo.bin","wb"); printf("Arquivo aberto com sucesso!"); if (!fp) { printf("Erro na abertura do arquivo. Fim de programa!"); exit(1); } getch(0); }

LENDO E ESCREVENDO CARACTER EM ARQUIVOS EM C/C++


putc
Funo de escrita que escreve um caractere no arquivo informado. Sintaxe: int putc(int ch, FILE *arquivo) Exemplo: L uma string e escreve em um arquivo em disco (arquivo.txt): #include <stdio.h> #include <stdlib.h> main (void) { FILE *fp; char string[100]; int i; fp = fopen("arquivo.txt","w"); /* arquivo ASCII para escrita*/

Algoritmos

pg. 57

if (!fp) { printf("Erro na abertura do arquivo."); exit(0); } printf("Entre com a string a ser gravada no arquivo: "); gets(string); for (i=0;string[i]; i++) putc(string[i], fp); /* grava a string, caractere a caractere*/ fclose(fp); getch(0); }

getc
Retorna um caractere lido do arquivo. Sintaxe: int getc (FILE *arquivo);

feof
EOF (end of file fim de arquivo). Usado para verificar se o arquivo chegou ao fim, retornando diferente de zero, caso contrrio retorna zero. Outra forma comparar o caractere lido por getc com o EOF. Sintaxe: int feof (FILE *arquivo); Exemplo: abre um arquivo j existente e o l, caractere a caractere at que o final do arquivo seja encontrado e apresenta-os na tela: /* le os caracteres de uma arquivo e exibe na tela*/ #include <stdio.h> #include <stdlib.h> int main() { FILE *fp; char c; fp = fopen("arquivo.txt","r"); /* arquivo ASCII para leitura*/ if (!fp) { printf("Erro na abertura do arquivo."); exit(0); } while ((c = getc(fp)) != EOF); /* enquanto no for o final do arquivo*/ printf("%c", c); /*imprime o caractere lido */ fclose(fp); getch(0); }

FLUXOS PADRO
Permitem ao programador ler e escrever em arquivos da maneira padro com a qual j o havamos lido e escrevidos na tela.

fprintf
Semelhante a funo printf() porm a sada em um arquivo e no no monitor. Especificando um arquivo atravs de um ponteiro. Sintaxe: int fprintf(FILE *arquivo, char *str,...)

fscanf
Semelhante a funo scanf(), l de um arquivo e no de um teclado. Sintaxe: int fscanf(FILE *arquivo, char *str,...)

Algoritmos

pg. 58

EXEMPLOS
1) Crie um programa que abra um arquivo para escrita, feche-o e o abra novamente para leitura: #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { FILE *p; char c, str[30], frase[80] = "este um arquivo chamado: "; int i; /* L um nome para o arquivo a ser aberto */ printf("\n\nEntre com um nome para o arquivo: \n"); gets(str); if (!(p = fopen(str,"w"))) /* caso haja erro na abertura do arquivo*/ { printf ("Erro! Impossvel abrir o arquivo!\n"); exit(1); } /* se no houver erro, imprime no arquivo e feche-o*/ strcat(frase, str); for (i=0; frase[i];i++) putc(frase[i],p); fclose(p); /*abre novamente o arquivo para leitura*/ p = fopen(str,"r"); c = getc(p); /* le o primeiro caracter*/ while (!feof(p)) /* enquanto no for o fim do arquivo */ { printf("%c", c); /* imprime o caracter na tela*/ c = getc(p); /* le um novo caracter no arquivo */ } fclose(p); /* fecha o arquivo*/ getch(); } 2) Exemplifique a utilizao dos comandos fprint e fscanf: #include <stdio.h> #include <stdlib.h> int main() { FILE *p; char str[80],c; /* le um nome para o arquivo a ser aberto*/ printf("\n\n Entre com um nome para o arquivo: \n"); gets(str); if(!(p = fopen(str,"w"))) /* caso ocorra algum erro na abertura*/ { printf("Erro! Impossvel abrir o arquivo!\n"); exit(1); /* aborta automaticamente */ } /* se no houver erro, prime no arquivo, fecha...*/ fprintf(p, "Este e um arquivo chamado:\n%s\n", str); fclose(p); /* abrir novamente para leitura */ p = fopen(str, "r"); while (!feof(p))

Algoritmos

pg. 59

{ fscanf(p,"%c",&c); printf("%c",c); } fclose(p); getch(); }

EXERCCIOS
1. Faa um programa que crie um arquivo chamado ALUNOS.DAT onde cada registro ser composto pelos seguintes campos: nmero, nome, curso, nota1, nota2. 2. Faa um programa para incluir alunos no arquivo criado no exerccio anterior. No podem existir dois alunos com o mesmo nmero. 3. Faa um programa para alterar as notas dos alunos criado no exerccio 1. 4. Faa um programa para alterar o curso dos alunos do arquivo criado no exerccio 1. 5. Faa um programa para excluir os alunos do arquivo criado no exerccio 1. 6. Faa um programa para consultar o nmero, nome e a mdia de todos os alunos cadastrados no arquivo do exerccio 1. 7. Faa um programa para consultar o nmero, o nome e a mdia de todos os alunos cadastrados no arquivo do exerccio 1 e que estejam aprovados, ou seja, com a mdia igual ou maior que 7,0. 8. Faa um programa para consultar o nmero, o nome e o curso de todos os alunos cadastrados no arquivo do exerccio 1 e que estejam reprovados ou seja, com mdia inferior a 3,0. 9. Faa um programa para consultar o nome de todos os alunos cadastrados no arquivo do exerccio 1 e que estejam de exame, ou seja, com mdia entre 3,0 e 7,0. 10. Faa um programa para consultar o nome de todos os alunos de um determinado curso. 11. Faa um programa para criar um arquivo chamado VENDAS.DAT onde cada registro ser composto pelos seguintes campos: cdigo do vendedor, nome do vendedor, valor de venda e ms. 12. Faa um programa para incluir um vendedor no arquivo criado no exerccio anterior que no podem existir dois vendedores com o mesmo cdigo e mesmo ms de vendas. 13. Faa um programa para alterar o valor de uma venda no arquivo VENDAS.DAT. 14. Faa um programa para excluir um vendedor no arquivo VENDAS.DAT. 15. Faa um programa para consultar o valor da venda de um vendedor em um determinado ms no arquivo VENDAS.DAT. 16. Faa um programa para consultar o total das vendas de um determinado vendedor do arquivo VENDAS.DAT. 17. Faa um programa para consultar o nome e o cdigo do vendedor que mais vendeu em um determinado ms no arquivo VENDAS.DAT. 18. Faa um programa para consultar o ms com o maior valor de vendas e qual o nome do vendedor que efetuou essas vendas no arquivo VENDAS.DAT.

Algoritmos

pg. 60

SUB-ROTINAS
Tambm conhecidas como subprogramas, so blocos de instrues que realizam tarefas especficas. O cdigo de uma sub-rotina carregado uma vez e podem ser executadas quantas vezes for necessrio. Dessa maneira, os programas tendem a ficar menores e mais organizados, uma vez que o programa pode ser subdividido em pequenas tarefas. So executados linearmente at o final. Quando executamos sub-rotinas podemos realizar desvios na execuo natural dos programas atravs da chamada da funo pelo programa principal.

ALGORITMO:
Exemplo: recebe o valor do salrio de um funcionrio e calcula o novo salrio. ALGORITMO DECLARE sal NUMERICO LEIA sal aum calculo (sal) novo_sal sal + aum ESCREVA Novo salrio: , novo_sal FIM_AGORTIMO SUB_ROTINA calculo(sal NUMERICO) DECLARE perc, valor LEIA perc valor sal * perc/100 RETORNE valor FIM_SUBROTINA calculo

SUB-ROTINAS (FUNES) EM C/C++


Utiliza recursos de modularizao, o qual podemos particionar em sub-rotinas. Estruturas que permitem ao usurio separar seus programas em blocos. Se no as tivssemos, os programas teriam que ser curtos e de pequena complexidade. Sintaxe: tipo_retorno nome_funo(declarao dos argumentos) { corpor_da_funo } Onde: o tipo de retorno o tipo de varivel que a funo vai retornar. O default int. argumentos so declarados assim: tipo nome1, tipo nome2,..., tipo nomeN. No corpo feita todas as entradas a serem processadas e as sadas. Exemplo: int soma(int a, int b) { s = a + b; return s; }

COMANDO RETURN

Algoritmos

pg. 61

Encerra a execuo da funo e, se o valor de retorno for informado, a funo retorna essa valor (precisa ser compatvel com o tipo de retorno declarada para a funo). Pode ter mais de um return. Sintaxe: return valor_retorno ou somente return; Exemplo: Criar uma funo que calcule a rea de um quadrado. #include <stdio.h> int quadrado(int a) { return (a * a); } int main() { int num; printf("Entre com um numero: "); scanf("%d", &num); num=quadrado(num); printf("\n\nO quadrado vale: %d\n", num); getch(); }

EXERCCIOS
1. Faa uma funo que retorne 1 se o nmero digitado for positivo ou 0 se o nmero for negativo. 2. Faa uma funo que receba dois nmeros positivos por parmetro e retorna a soma dos N nmeros inteiros existentes entre eles. 3. Faa uma funo que receba trs nmeros inteiros: A, B e C, onde A maior que 1. A funo deve somar todos os inteiros entre B e C que sejam divisveis por A (inclusive B e C) e retornar o resultado para a funo principal. 4. Faa uma funo que transforme e exiba segundos em horas, minutos e segundos. Todas as variveis devem ser passadas como parmetro, no havendo variveis globais. 5. Faa um procedimento que receba trs notas de um aluno como parmetros e uma letra. Se a letra for A o procedimento calcula a mdia aritmtica das notas do aluno, se for P o procedimento calcula a mdia ponderada, com pesos 5, 3 r 2. A mdia calculada deve ser devolvida ao programa principal para ento, ser exibida. 6. Faa um procedimento que leia cinco valores e retorne o maior e o menor deles. 7. Faa uma funo que receba, por parmetro, dois vetores de dez elementos inteiros positivos e exiba o vetor unio dos dois primeiros. 8. Faa uma funo que receba, por parmetro, um vetor A com cinco nmeros reais e retorne esses nmeros ordenados em ordem crescente. 9. Faa uma funo que receba dois vetores A e B de dez elementos inteiros, por parmetro. O procedimento deve determinar e exibir um vetor C que contenha os elementos de A e B em ordem decrescente. 10. Faa uma funo que receba por parmetros, uma matriz A(5,5) e retorne a soma dos elementos. 11. Faa uma funo que receba por parmetros, uma matriz A(6,6) e retorne o menor elemento da sua diagonal secundria. 12. Faa uma funo que receba por parmetros, uma matriz A(6,6) e multiplique cada linha pelo elemento da diagonal principal daquela linha. A funo deve retornar a matriz alterada para ser exibida no programa principal.