“Introdução da lógica de programação em alunos de escolas públicas”
 Ricardo Walter Domingos Jr

Orientadores:
Fernando Ayres
Sandra Siebra
Miranda


ÍNDICE
1.0 INTRODUÇÃO 03
2.0 LÓGICA, ALGORITMOS E PSEUDO CÓDIGOS
2.1 ALGORITMO
2.2.ESTRUTURA DE DECISÃO
2.3 PROGRAMAÇÃO ESTRUTURADA E TIPOS DE DADOS
2.4 COMANDOS DE ENTRADA E SAIDA
2.5 MÉTODOS PEDAGÓGICOS UTILIZADOS 04
05
06
06
07
08

3.0 CONCLUSAO 10
4.0 TRABALHOS FUTUROS 11
5.0 REFERÊNCIAS 12
6.0 ANEXO I 13
7.0 ANEXO II
8.0 ANEXO III 33
42

1. INTRODUÇÃO

Na disciplina de estágio V tive a grande oportunidade de ministrar aulas de Introdução a Computação, o público escolhido foi a turma de feras de 2009.1 , com o intuito de fornecer a estes alunos um melhor embasamento , ou um ponto norteador afim de diminuir o impacto da disciplina de Introdução a Computação apresentada no primeiro período do curso.
Além disso, visamos inicialmente realizar uma dinâmica com o grupo de iniciantes na computação , para que dessa forma sabermos a que nível cada um dos alunos se encontra, se já existem programadores na turma ou não , e qual o contato que cada um possui na área de computação. Em primeiro plano realizamos uma “brincadeira” tentando diminuir um pouco a timidez de cada um com relação a nova turma , fazendo com que cada um se apresente e falasse um pouco sobre cada um, família , trabalho e hobby preferido, etc.
Dessa forma conseguimos melhorar o nível de interação do grupo, para que o cada membro dessa turma participasse da melhor forma possível sobre um pouco de cada aula, o grupo foi dividido em quatro equipes, cada equipe recebeu um questionário básico , com algumas perguntas, do tipo:
1) O que um sistema operacional?
2) O que RAM ?
3) O que um bit ?
4) Cite dispositivos de saída de informação.
As questões relativamente fáceis foram respondidas com êxito pelas equipes, mostrando que o grau de conhecimento da turma esta de acordo com o requisito do nosso curso com isso realizou um pequeno processo de triagem afim de saber a que grau de profundidade pode abordar cada assunto descrito inicialmente.
No decorrer da aula introdutória foi falado sobre linguagem de programação, interpretação , compilação e híbridos ; cada um dos primeiros e principais cientistas da computação , área de atuação do profissional de licenciatura em computação, conceitos de linguagem de computação, regras semânticas e sintáticas , atributos das linguagens : legibilidade, capacidade de escrita , confiabilidade, teste de erros, custo , entre outros atributos.
Foi discutido classificações de linguagens: baixo nível, médio nível , alto nível, mostrando o grau de abstração de cada uma das linguagens fazendo com que cada um entenda o grau de abstração com exemplos de cada uma das linguagens. Com relação ao paradigma de cada linguagem também foi mostrado , tais como procedural, natural , orientado a objetos, orientado a aspectos, funcional e lógico.

2. LÓGICA, ALGORITMO E PSEUDO CÓDIGOS
Na continuação do curso entramos no âmbito do estudo de lógica e seus detalhamentos, podemos então discutir meio aos alunos do curso a opinião de cada aluno sobre de fato o que eles achavam sobre lógica , onde rapidamente encontramos conceitos semelhantes ao que havíamos trazido para sala de aula.
O senso crítico de cada analise em vários problemas apresentados, sempre é um ponto diferencial para análise e avaliação de cada um dos alunos, com isso podemos observar progressivamente o que cada aluno poderá encontrar ao longo de cada estágio , sua dificuldades e idéias , além disso o professor terá a idéia do desenrolar de cada um, fazendo com que a intuição de cada um deles também possa ser mais aguçada para conceitos mais abstratos da computação.
No decorrer da aula lançamos diversos problemas nos quais os alunos são forçados a tomarem decisões lógicas , forçosamente o método de tentativas e erros sempre irá ter efetivamente uma diversidade de respostas as quais na maioria das vezes estará incorreta, mas na repetição o aluno poderá chegar a um resultado final correto, porém caso isto não aconteça podemos passar para um novo problema e voltar mais tarde para o problema inicial, facilitando um pouco mais com um tempo de resposta mais longo.
A cada problema apresentado e a cada resposta dada pelos alunos podemos avaliar o desenvolvimento lógico de cada um, com isso tentamos colocar um método de pedagógico construtivista , tentando intuir o aluno na resolução de cada exercício, despertando o interesse de cada um pelo assunto discutido e fazendo com que cada um desenvolva por conta própria outros exercícios.
Algumas das questões abaixo foram lançadas para turma discutir e chegar as suas próprias conclusões :
“É necessário desenvolver o raciocínio lógico e conceber uma solução a um dado problema, independente de uma linguagem de programação. O quarto está fechado e que meu livro está no quarto. Então, preciso primeiro abrir o quarto para pegar o livro.
Rosa é mãe de Ana, Paula é filha de Rosa, Júlia é filha de Ana. Então, Júlia é neta de Rosa e sobrinha de Paula.
Todo mamífero é animal e todo cavalo é mamífero. Então, todo cavalo é animal.
Todo mamífero bebe leite e o homem bebe leite. Então, todo homem é mamífero e animal (mas não é um cavalo).
Além disso entramos com o conceito de algoritmo, onde podemos abstrair um pouco sobre um conceito importante para a computação , desta forma discutimos o conceito, apresentando desta forma básica:
“Algoritmo é uma seqüência lógica e não ambígua de instruções que levam à solução de um problema num tempo finito.”
Na segunda parte abordamos fluxogramas onde o conceito descrito abaixo foi discutido amplamente:
“Permite expressar qualquer lógica, por mais complicada que seja, de forma gráfica, usando símbolos padronizados”
Com isto os alunos poderão entender a representação gráfica de um algoritmo ou programa , facilitando a sua construção e resolução de problemas de forma simples, tentando realizar construtivamente a sedimentação da abstração intuitiva do que realmente é um algoritmo. Ainda assim , houve aplicação de exercícios para que a idéia ficasse fixada de forma que os alunos tenham sempre em mente o que um fluxograma representa na construção de um sistema. Mostrando de forma básica como um analista inicialmente modela um sistema que poderá resolver qualquer problema de aplicação prática.
2.1 ALGORITMO
No assunto de algoritmo começamos com um exemplo calculando a área de um triângulo, mostrando aos alunos a subdividir o problema em entrada , processamento e saída.Após esta explicação iniciando com alguns exercícios como segue abaixo:

2.2 ESTRUTURAS DE DECISÃO
Após a explicação de algoritmos e seu conceito, entramos no âmbito de estruturas de decisão , onde procuramos explorar a construção de uma estrutura de decisão mostrando como o funcionamento dessas estruturas, abaixo segue uma figura mostrada para o ensino de estrutura de decisão.

Então para desenvolvermos o desenvolvimento da abstração do aluno, realizamos o seguinte exercício onde o aluno construirá uma tabela montando um estrutura de decisão do seu salário liquido.

2.3 PROGRAMAÇÃO ESTRUTURADA E TIPOS DE DADOS E OPERAÇÕES BÁSICAS
Durante a explicação foram vistas de forma básica algumas estruturas , tais como os comandos SWITCH , IF e WHILE. Os quais veremos novamente mais a frente em estruturas condicionais.
Além disso foi visto tipos de dados , onde o conceito foi explorado com a classe, os tipos básicos tais como char , Double, int, void, entre outros; tentando elucidadar a cada aluno os tipos de dados mais utilizados onde mostramos com exemplos alguns comandos básicos, uma tabela explicativa resumida dos diversos tipos, constantes, tipos de valores, algumas regras.
Mostramos a como declaramos as variáveis , alguns detalhes. Além disso introduzimos a construção de um programinha simples utilizando uma estrutura em bat, com o intuito de “quebrar o gelo” dos alunos com relação ao ambiente operacional e a utilização dos comandos básicos do DOS , fazendo com que os alunos realmente tivessem uma verdadeira interação homem-máquina.Algumas dificuldades foram encontradas mas nada fora do previsto.
Foram exibidos alguns comandos tais como echo , echo off, cls set , entre outros , procurando sempre elucidar cada um dos comandos para melhor entendimento de cada um deles.
2.4 COMANDOS DE ENTRADA E SAIDA
Nesta nova etapa do curso finalizamos a semana, montando o ambiente com o compilador DEV C++, mostrando aos alunos o passo-a-passo dessa instalação fazendo com que os alunos possam instalar em casa, praticando com mais facilidade.
Além disso mostramos vários comandos de entrada e saída , tais como printf , scanf,entre outros , fazendo com que os alunos mergulhassem no ambiente de programação despertando em cada um deles os primeiros passos no mundo da programação. Além do famoso: “Alô mundo !!!” , mostramos algumas mensagem de erro , solicitando aos alunos em vista do que foi mostrado os erros de sintaxe e sua interpretação, fechamento de chaves, ponto-e-vírgula faltando e a inserção de pseudo códigos para que os alunos treinem e procurem os diversos empecilhos na programação.
Além disso a estrutura básica utilizada em C , mostrando a biblioteca que será usada , as funções mais usadas, a criação de algortimos básicos já escritos em C , fazendo com que a aula seja realmente prática, explicando o que realmente o programa precisa de estrutura em C , para poder ser compilado e funcionar efetivamente.

2.5 MÉTODOS PEDAGÓGICOS UTILIZADOS
A seguir mostraremos algumas fotos dos métodos utilizados, onde empregamos uma dinâmica de aulas práticas diretamente no computador, acompanhando passo-a-passo e tirando dúvidas mais freqüentes dos alunos.


Também foi realizado coffee break para aumentar a sinergia do grupo , desta forma aumentando o aproveitamento , dando um intervalo entre aulas e conhecendo melhor o grupo, realmente foi bastante proveitoso.
Além dos softwares de apresentação utilizados é claro não poderia faltar o quadro , onde foram apresentados alguns pontos importantes de cada aula , facilitando o aprendizado mediante a algumas explicações , tirando um pouco o “olho da tela” desta forma quebrando a monotonia de longas apresentações no Data Show.

Enfim conseguimos equilibrar um pouco as apresentações quadro e tela para que desta forma a diversidade de metodologias pudessem ser aplicadas na aula prática, realizando uma verdadeira troca de idéias entre os alunos e professores.


3.0 CONCLUSÃO
Após todo este trabalho apresentado , podemos concluir que realizar um curso de férias de introdução a programação para a turma de feras do curso de Licenciatura em Computação da UFRPE 2009.1 , realmente foi gratificante, onde podemos notar desde do inicio quem realmente mostra interesse pelo curso e quem terá uma boa desenvoltura no decorrer do curso.
Esta experiência realmente foi única , acredito para ambas as partes, não só para os alunos, mas também para os professores, foi excelente, entendemos que a turma criou um novo vinculo e adicionou mais uma grande experiência para o inicio da vivencia profissional que esta se concretizando no final deste curso.
Agradeço a toda equipe de professores realmente foi com grande satisfação que apresentamos este curso de férias , onde conseguimos aplicar um pouco dos nossos conhecimentos , que nos foi passado durante todo curso. E com enorme satisfação que parabenizo os professores da UFRPE, seria uma grande injustiça apenas citar alguns, por isso deixo esse muito obrigado a todo corpo doscente, coordenação , pro-reitoria e funcionários que realmente nos ajudaram em todo decorrer da graduação.
Enfim o ponta pé inicial já foi dado , esperamos que o curso de férias continue acontecendo todos anos, fazendo com que alunos estreantes e a comunidade participe cada vez e com isso engrandeça cada vez mais o alto conceito que a Universidade Federal Rural de Pernambuco tem em todo Brasil e fora dele.

4.0 TRABALHOS FUTUROS
Essa grande iniciativa do curso de licenciatura em computação realmente foi importantíssimo , facilitando a iteração dos alunos que estão iniciando o curso , com uma linguagem tal como C, sendo interessante a efetivação de futuros cursos de férias abrangendo até outros assuntos, tais como programação gráfica, programação de jogos , inteligência artificial, redes, hardware, banco de dados , engenharia de software , etc.
Fazendo com que o período de férias da Universidade possa ser produtivo , podendo ser aberto também para comunidades carentes das adjacências e divulgando o curso de Licenciatura de Computação e fazendo com que a exclusão digital também diminua na população como um todo não só para comunidade acadêmica.

5.0 REFERÊNCIAS
• "C: A Linguagem de programação ANSI", Brian Kernighan e Dennis Ritchie, Editora Campus;
• "A Prática da Programação", Brian Kernighan e Rob Pike, Editora Campus;
• "comp.lang.c Frequently Asked Questions", Steve Summit, World Wide Web.
• "C Programming", Steve Summit, World Wide Web.
• "Referência sobre C e C++", Nate Kohl, World Wide Web.
• Programando em C - Fundamentos - vol 1 ,Ulysses de Oliveira,Editora Ciência Moderna .
• Como Programar em C ,H. M. Deitel e P. J. Deitel,LTC Editora, Rio de Janeiro, 1999 .
• C - Completo e Total ,Herbert Schildt ,Osborne/Makron Books do Brasil Editora Ltda., São Paulo, 1997.

6.0 ANEXOS
Abaixo anexados alguns comandos de controle utilizados em sala de aula:
Comandos de Controle
Comandos Condicionais em C
If
Switch
?
Comandos de Iteração em C
For

While
Do While
Comandos de Desvio em C
Break - Interrompe e termina a execução de um laço
Continue - Interrompe a execução dos comandos de
um laço e passa para a próxima iteração
Comando de Seleção - if
Comandos Condicionais em C
If
Switch
Forma Geral do If
if (expressão) if (expressão)

comando1; comando ;
else
comando2;
Num aninhamento, o else é associado ao
mais recente if sem else.
Comando de Seleção - if
#include “stdio.h “
void main ( )
{ int resposta ;
printf (“\n Qual o valor de 10 + 14? ”);
scanf (“%d”, &resposta);

if (resposta == 10 + 14)
printf (“\n Resposta correta ! ”);
}
Comando de Seleção - if
#include “stdio.h ”
void main ( )
{ int num ;
printf (“\nDigite um número: ”);
scanf (“%d”, &num);
if (num < 0)
printf (“\n Número é negativo ! ”);
else
printf (“\n Número é positivo ! ”);
}
Comando de Seleção - if
#include “stdio.h “
void main ( )
{ int x , y ;
printf (“\nDigite um número: ”);
scanf (“%d”, &x);
printf (“\nDigite outro número: ”);
scanf (“%d”, &y);
if ( x == y)
printf (“\n Números iguais ! ”);
else
printf (“\n Números diferentes ! ”); }
Comando de Seleção - if
Criando blocos de código
if (expressão) { if (expressão)
comando1; {
comando2 ; comando1 ;
........... .............
comandoN ; } comandoN ;
else { }
comando1;
...........
comandoN ; }
Comando de Seleção - if
#include “stdio.h “
void main ( ) /*classificar 3 números: decrescente */
{ double a, b, c, temp;
printf (“\nEntre com 3 valores ”);
scanf (“%lf %lf %lf”, &a, &b, &c);
if (a< b) { temp = a; a= b; b= temp; }
if (a < c) { temp = a; a= c; c = temp; }
if (b <c) { temp = b; b= c; c = temp; }
printf (“\n os 3 valores classificados %f %f %f ”, a,
b, c);
}
Comando de Seleção - if
#include “stdio.h “
void main ( )
{ double n1, n2, n3, m;
printf (“\nEntre com 3 notas ” ) ;
scanf (“%lf %lf %lf”, &n1, &n2, &n3);
m = (n1 + n2 + n3 ) / 3 ;
if (m >= 7.0) { printf (“\n Aluno aprovado. ”) ;
printf (“ Média igual a %f “ , m) ; }
else {
printf (“\n Aluno reprovado. ”);
printf (“ Média igual a %f “ , m) ; } }
Comando de Seleção - if
#include “stdio.h “
int main (void)
{ int a ;
printf (“\nDigite um número inteiro ” ) ;
scanf (“%d”, &a);
if (a % 2 == 0) {
printf (“\n O número digitado é par ” ) ; }
else {
printf (“\n O número digitado é ímpar ” ) ; }
return 0 ;
}
Comando de Seleção - if
#include “stdio.h “
int main (void)
{ int a , b ;
printf (“\nDigite dois números inteiros ” ) ;
scanf (“%d%d”, &a, &b);
0
if (a % 2 == 0) {
if (b % 2 == 0) {
printf (“\n Os números digitados são pares ” ) ; }
}
return 0 ;
}
Comando de Seleção - if
Exercício: O que está errado neste programa?
#include “stdio.h “
int main (void)
{ int temp ;
printf (“\n Digite a temperatura: ” ) ;
scanf (“%d”, &temp) ;
1
if (temp < 30)
if (temp > 20)
printf (“\n Temperatura agradável ” ) ;
else printf (“\n Temperatura muito quente ” ) ;
return 0 ;
}
Comando de Seleção - if
Exercício: Correção do código anterior:
#include “stdio.h “
int main (void)
{ int temp ;
printf (“\n Digite a temperatura: ” ) ;
scanf (“%d”, &temp) ;
2
if (temp < 30) {
if (temp > 20)
printf (“\n Temperatura agradável ” ) ; }
else printf (“\n Temperatura muito quente ” ) ;
return 0 ;
}
Comando de Seleção - switch
Forma Geral do Switch
switch (expressão) {
case op1: comando(s);
break;
case op2: comando(s);
3
break;
. . . .
default: comando(s);
}
Opi deve ser um inteiro ou um caractere
Comando de Seleção - switch
Calcular a diferença, o produto, o quociente ou a
soma de dois números, dependendo da operação
escolhida e imprimir o resultado.
# include “stdio.h“
int main (void )
{
4
char x;
int a, b ;
float result = 0.0;
printf (“\n Informe os 2 números e a operação ”);
scanf (“%d %d %c”, &a, &b, &x);
Comando de Seleção - switch
switch (x) { case ‘+’: result = a + b;
break;
case ‘-’: result = a - b;
break;
case ‘*’: result = a * b;
break;
5
case ‘/’: result = a / b;
break;
default : printf(“\nOperador invalido”); }
printf (“\nResultado igual a %f ”, result);
return 0 ;
}
condição ? expressão1 : expressão2
Comando de Seleção - ?
Forma Geral do ?
Substitui construções do tipo:
6
If ( a > b ) {
maximo = a;
}
else {
maximo = b;
}
maximo = a > b ? a : b ;
char a = ‘a’, b = ‘b’ ; /* b tem valor 98*/
int i = 1, j = 2 ;
double x = 7.07 ;
Comando de Seleção - ?
Exercício: Considere as seguintes declarações
7
Expressão Expressão equivalente Valor
i == j ? a - 1 : b + 1
j % 3 == 0 ? i + 4 : x
j > 1 ? j - 1 : j + 1
j % 3 ? i + 4 : x
Comando de Repetição - for
Comandos de Repetição em C
For

while
do-while
Forma Geral do for
Permitem a execução sucessiva de um
ou mais comandos
8
for (expr_1 ; expr_2 ; expr_3)
comando;
for (expr_1 ; expr_2 ; expr_3)
{ comando1;
................
comandoN ; }
Comando de Repetição - for
Detalhamento do for
for (expr_1 ; expr_2 ; expr_3)
comando;
expr_1 inicialização
expr_2 condição de parada (teste)
9
expr_3 incremento
Inicialização
Usada para atribuir um valor inicial à
variável de controle do laço de repetição
Executada apenas uma única vez (antes
do início do laço)
Comando de Repetição - for
Condição de Parada (teste condicional)
Compara o valor da variável de controle a
cada início do bloco de repetição
Se verdadeiro, bloco é executado
Se falso, próximo comando depois do
for é executado
Incremento
Realizado no final de cada execução do
bloco de repetição (mas antes do teste)
Comando de Repetição - for
Exemplo do Comando for
#include “stdio.h”
void main ( )
{ int num ;
for ( num = 1 ; num < 11 ; num = num + 1 )
printf ( “ %d ” , num ) ;
printf ( “ terminamos ! “) ;
}
O código acima produz:
1 2 3 4 5 6 7 8 9 10 terminamos !
Comando de Repetição - for
Outro Exemplo do Comando for
#include “stdio.h”
void main ( )
{ int num ;
/* Este laço não será executado */
for ( num = 11 ; num < 11 ; num = num + 1 )
printf ( “ %d ” , num ) ;
printf ( “ terminamos ! “) ;
}
O código acima produz: terminamos !
Comando de Repetição - for
Outro Exemplo: Calcula o produto e a soma
dos números de 1 a 10.
#include “stdio.h”
void main ( )
{ int num , soma = 0 , prod = 1 ;
5/1/2009 23
for ( num = 1 ; num < 11 ; num = num + 1 ) {
soma = soma + num ;
prod = prod * num ; }
printf (“Produto e Soma : %d , %d “ , prod ,soma) ;
}
Comando de Repetição - for
Outro Exemplo: Calcula o fatorial
#include “stdio.h”
int main ( void )
{ int i , n , f = 1 ;
printf (“\nDigite um número inteiro não negativo”);
scanf ( “ %d “ , &n);
5/1/2009 24
for ( i = 1 ; i <= n ; i++ ) {
f *= i ; }
printf (“\nFatorial = %d “ , f ) ;
return 0 ;
}
Comando de Repetição - for
Variações do Comando for :
Variável de controle sendo decrementada
for ( num = 20 ; num > 0 ; num = num - 1)
...........................
Variável de controle sendo incrementada (ou
5/1/2009 25
decrementada) por mais de uma unidade
#include “stdio.h”
void main ( )
{ int i ;
for ( i = 0 ; i < 101 ; i = i + 5 )
printf ( “ %d ” , i ) ; }
Comando de Repetição - for
#include “stdio.h”
void main ( )
{ int resposta , cont ;
for ( cont = 1 ; cont < 11 ; cont = cont + 1 ) {
printf ( “ \nQuanto é %d + %d ? ” , cont , cont ) ;
5/1/2009 26
scanf ( “ %d “ , &resposta) ;
if ( resposta == cont + cont )
printf ( “ \nCorreto ! “) ;
else {
printf ( “ \nSinto muito. Você está errado! “) ;
printf (“ \nResposta = %d “, cont + cont ); } } }
Comando de Repetição - for
#include “stdio.h”
void main ( )
{ int num , i , e_primo ;
printf ( “ \nDigite um número: “ ) ;
scanf ( “ %d “ , &num) ;
5/1/2009 27
e_primo = 1 ;
for ( i = 2 ; i <= num / 2 ; i = i + 1 )
if ( (num % i ) == 0 ) e_primo = 0 ;
if ( e_primo == 1 )
printf ( “ \nO número é primo “) ;
else printf (“ \nO número não é primo ); }
Comando de Repetição - for
Observações sobre o Comando for :
Inicialização da variável de controle dentro do
for pode ser omitida
Uma ou mais expressões podem ser vazias
#include “stdio.h”
void main ( )
5/1/2009 28
{ int i ;
printf ( “ \nDigite um número: “ ) ;
/* Variável é inicializada pelo usuário fora do laço */
scanf ( “ %d “ , &i) ;
for ( ; i ; i-- )
printf ( “ %d ” , i ) ; }
Comando de Repetição - for
Observações sobre o Comando for : (Cont.)
Teste condicional não precisa ser baseado na
variável de controle
#include “stdio.h”
#include “conio.h”
void main ( )
5/1/2009 29
{ int i ;
char ch = ‘a’ ; /* atribui um valor inicial a ch*/
for ( i = 0 ; ch != ‘q’ ; i++ ) {
printf ( “ \nPasso: %d ” , i ) ;
ch = getche ( ) ; }
Comando de Repetição - for
Observações sobre o Comando for : (Cont.)
Parte de incremento/decremento não precisa
incrementar/decrementar a variável de controle
#include “stdio.h”
#include “conio.h”
void main ( )
5/1/2009 30
{
char ch ;
for (ch = getche ( ) ; ch != ‘q’ ; ch = getche ( ) ) ;
printf ( “ Valor q encontrado !” ) ;
}
Comando de Repetição - for
Observações sobre o Comando for : (Cont.)
Variável de controle pode ser modificada fora da
seção de incremento
#include “stdio.h”
void main ( )
{ int i ;
5/1/2009 31
for ( i = 0 ; i < 10 ; )
{
printf ( “ %d ” , i ) ;
i++ ; }
}
Comando de Repetição - do-while
Outro Exemplo do Comando do-while
#include “stdio.h”
#include “conio.h“
main ( )
{ char ch ;
do {
5/1/2009 43
ch = getche ( ) ;
} while (ch != ‘q’ ) ;
printf (“\n Valor \”q\” encontrado”); }
Útil quando programa está esperando por um evento.
Possui um comando de entrada a menos do que o
código equivalente contendo a instrução while
Comando de Repetição - do-while
Outro Exemplo do Comando do-while
#include “stdio.h”
int main ( void )
{ int i , n , f = 1 ;
printf (“\nDigite um número inteiro não negativo”) ;
scanf ( “ %d “ , &n) ;
i = 1 ;
5/1/2009 44
do {
f *= i ;
i++ ;
} while ( i <= n )
printf ( “\n Fatorial = %d “, f ) ;
return 0 ; }
Comando de Repetição - do-while
Outro Exemplo do Comando do-while
#include “stdio.h”
main ( )
{ int cont = 0 , soma = 0 , num;
do {
printf ( “\n Digite um número: “);
5/1/2009 45
scanf ( “ %d “ , &num);
soma += num ;
if num != 0 cont += 1 ;
} while ( num != 0 ) ;
printf (“\n Foram digitados %d números” , cont);
printf (“\n A soma destes números é = %d” , soma); }
Comando de Desvio - break
Forma Geral do comando break
break;
Tem dois usos distintos
Para forçar o término de um laço de repetição
(do-while, for ou while)
Para terminar um case do comando switch,
5/1/2009 46
evitando testes desnecessários
Quando o comando break é encontrado dentro de
um laço de repetição:
instrução é imediatamente finalizada
próxima instrução após a estrutura de
repetição é executada
Comando de Desvio - break
Aconselhável usá-lo apenas em situações
especiais
Em caso de repetições aninhadas, o break finaliza
o mais interno for, do-while ou while
Exemplo:
#include “stdio.h”
5/1/2009 47
main ( )
{ int i ;
for ( i = 1 ; i < 100 ; i++ ) {
printf ( “ %d ”, i ) ;
if ( i == 10 ) break; } } /* sai do laço */
Comando de Desvio - break
Outro Exemplo:
#include “stdio.h”
int main ( void )
{ int i ;
for ( i = 0 ; i < 10 ; i++ ) {
if ( i == 5 )
5/1/2009 48
break ; /* interrompe e termina o laço */
printf ( “ %d ”, i ) ; }
printf ( “ fim” ) ;
return 0 ;
}
Saída: 0 1 2 3 4 fim
Comando de Desvio - break
Outro Exemplo:
#include “stdio.h”
#include “conio.h”
void main ( )
{ char ch ;
5/1/2009 49
ch = getche ( ) ;
switch (ch) {
case ‘e ‘: digite () ; break ;
case ‘l ‘: liste () ; break ;
case ‘c ‘: classifique () ; break ;
default: printf ( “ Opção Inválida \n “ ) ; } }
Comando de Desvio - continue
Forma Geral do comando continue
continue;
Força a execução do próximo laço de repetição
Exemplo:
#include “stdio.h”
5/1/2009 50
main ( ) {
int x ;
for ( x = 0 ; x < 100 ; x++ ) {
continue ;
printf ( “ %d ”, x ) ; /* Isto nunca é executado */
} }
Comando de Desvio - continue
Para os comandos while e do-while, o continue
causa:
a realização imediata do teste da condição
correspondente
continuidade do processo de repetição
dependendo do resultado do teste
5/1/2009 51
Para o comando for , o continue causa:
incremento da variável de controle do laço de
repetição
execução do teste para verificação da condição
continuidade do processo de repetição
dependendo do resultado do teste
Comando de Desvio - continue
É raramente usado
Outro Exemplo: Uso do continue para reiniciar o
laço
#include “stdio.h”
5/1/2009 52
#include “conio.h”
void main ( )
{
int total , i ;
char ch;
total = 0 ;
Comando de Desvio - continue
do {
printf ( “ \nDigite um Número (0 p/ encerrar: ” ) ;
scanf ( “ %d “ , &i ) ;
printf ( “ \nConfirma o valor %d ? (S / N): ” , i ) ;
ch = getche ( ) ;
5/1/2009 53
printf ( “ \n “ ) ;
if ( ch == ‘ N ‘ ) continue ;
total = total + 1 ;
} while ( i ) ;
printf (“ \nTotal = %d “, total ) ;
}
Comando de Desvio - continue
Outro Exemplo:
#include “stdio.h”
int main ( void )
{ int i ;
for ( i = 0 ; i < 10 ; i++ ) {
if ( i == 5 )
;
5/1/2009 54
continue /* interrompe o laço */
printf ( “ %d ”, i ) ; }
printf ( “ fim” ) ;
return 0 ;
}
Saída: 0 1 2 3 4 6 7 8 9 fim
Comando de Desvio - continue
Outro Exemplo: Cuidado ao usar continue com while
#include “stdio.h”
int main ( void )
{ int i = 1 ;
while ( i <= 10 ) {
if ( i == 5 )
;
5/1/2009 55
continue /* laço infinito */
printf ( “ %d ”, i ) ;
i++ ; }
printf ( “ fim” ) ;
return 0 ;
}
Saída: 1 2 3 4 .......execução infinita !
Comando de Repetição - for
Observações sobre o Comando for : (Cont.)
Variável de controle pode ser inicializada e
modificada fora da seção de incremento
int i = 1 , soma = 0 ;
for ( ; i <= 10 ; ++i )
soma += i ;
5/1/2009 32
int i = 1 , soma = 0 ;
for ( ; ; )
soma += i++ ;
int i = 1 , soma = 0 ;
for ( ; i <= 10 ; )
soma += i ++;
Laço Infinito !!
Comando de Repetição - for
Observações sobre o Comando for : (Cont.)
Laço infinito:
for ( ; ; )
comando;
5/1/2009 33
Comando for sem corpo:
for ( t = 0 ; t < VALOR ; t++ ) ;
for (ch = getche ( ) ; ch != ‘q’ ; ch = getche ( ) ) ;
Comando de Repetição - while
Forma Geral do while
while (condição) while (condição)
comando ; { comando1;
comando2 ;
.............
5/1/2009 34
comandoN ; }
Enquanto a condição for verdadeira, o(s) comando(s)
será (ão) executado(s) repetidamente.
A seqüência de comandos deve alterar a condição
desejada, tornando-a pelo menos uma vez falsa.
Comando de Repetição - while
Comando while (Cont.)
while (condição) while (condição)
comando ; { comando1;
.............
comandoN ; }
5/1/2009 35
ANTES de cada execução do comando (que pode
ser simples ou composto), será verificado se a
condição é verdadeira. Se for falsa, a repetição será
interrompida.
Havendo mais de um comando a ser executado
repetidamente, forma-se um comando composto com
auxílio dos delimitadores { e }.
Comando de Repetição - while
Exemplo do Comando while
#include “stdio.h”
main ( )
{
int x = 10 , y = 0 ;
5/1/2009 36
while x >= 0
{ y = y + 1 ;
x = x - 2 ; }
printf ( “ \n “ ) ;
printf ( “Existem %d números pares entre 0 e 10 “, y );
}
Comando de Repetição - while
Outro Exemplo do Comando while
#include “stdio.h”
main ( )
{ int cont = 0 ; float nota , soma = 0.0 ;
printf (“\n Digite uma nota: ”); scanf ( “ %f “ , &nota);
5/1/2009 37
while ( nota >= 0 && nota <= 10 )
{ cont += 1 ; /* cont = cont + 1 */
soma += nota ; /* soma = soma + nota */
printf (“\n Digite uma nota: ”);
scanf ( “ %f “ , &nota); }
printf ( “\n Média = %f “, soma / cont ); }
Comando de Repetição - while
Outro Exemplo: Calcule a soma dos números pares
de 100 até 200, inclusive.
#include “stdio.h”
main ( )
{ int soma = 0 , par = 100 ;
5/1/2009 38
while ( par <= 200 )
{ soma += par ; /* soma = soma + par */
par += 2 ; /* par = par + 2 */
}
printf ( “\n Resultado = %d “, soma ) ; }
Comando de Repetição - while
Outro Exemplo: Calcula o fatorial de um número
#include “stdio.h”
int main ( void )
{ int i , n , f = 1 ;
printf (“\nDigite um número inteiro não negativo”) ;
5/1/2009 39
scanf ( “ %d “ , &n) ;
i = 1 ;
while ( i <= n )
{ f *= i ;
i++ ; }
printf ( “\n Fatorial = %d “, f ) ;
return 0 ; }
Comando de Repetição - do-while
Forma Geral do comando do-while
do {
comando(s) ;
} while (condição);
Comandos são repetidos até que a condição se torne falsa.
APÓS a execução da seqüência de comandos, faz-se a
5/1/2009 40
verificação da condição. Se ela for falsa, interrompe-se a
repetição.
Se houver um único comando a ser executado repetidamente,
os delimitadores { e } não são necessários.
As estruturas WHILE e DO WHILE são utilizadas quando não
se conhece o número de vezes que o bloco será executado.
Para sair da estrutura DO WHILE é preciso que a condição se
torne falsa pelo menos uma vez.
Comando de Repetição - do-while
Exemplo do Comando do-while
#include “stdio.h”
#include “conio.h“
main ( ) {
int a , b ; char ch ;
printf ( “Escolha uma operação: \n “);
5/1/2009 41
printf(“Adição,Subtração,Multiplicação ou Divisão?\n“);
do {
printf ( “Digite a primeira letra da operação: “);
ch = getche ( ) ;
printf ( “ \n ”) ; }
while (ch != ‘A’ && ch != ‘S’ && ch != ‘M’ && ch != ‘D’ ) ;
Comando de Repetição - do-while
printf ( “\n Informe o primeiro número: “);
scanf ( “ %d “ , &a);
printf ( “\n Informe o segundo número: “);
scanf ( “ %d “ , &b);
if ( ch == ‘A’ )
printf (“\n Resultado = %d “ , a + b) ;
5/1/2009 42
else if ( ch == ‘S’ )
printf (“\n Resultado = %d “ , a - b) ;
else if ( ch == ‘M’ )
printf (“\n Resultado = %d “ , a * b) ;
else if ( ch == ‘D’ && b != 0)
printf (“\n Resultado = %f “ , a / b) ; }
Para alocar a matriz dinamicamente:
Matrizes
Matriz representada por um vetor de ponteiros
(Cont.)
Para liberar memória:
for ( i = 0 ; i < m ; i++)
5
{
free ( mat [ i ] ) ;
}
free (mat) ;
Matrizes
Matriz transposta com vetor simples
float* transposta( int m , int n , float *mat )
{ int i , j ;
float *trp ;
6
/* aloca matriz transposta */
trp = (float *) malloc (m*n *sizeof ( float) ) ;
for ( i = 0 ; i < m ; i++ ) /* preenche matriz */
{ for ( j = 0 ; j < n ; j++)
{
trp [ j * m + i ] = mat[ i * n + j ] ;
} }
return trp ; }
Matrizes
Matriz transposta com vetor de ponteiros
float** transposta(int m, int n, float **mat)
{ int i , j ; float **trp ;
/* aloca matriz transposta: n linhas e m colunas*/
trp = (float **) malloc( n* sizeof( float*) ) ;
7
for ( i = 0 ; i < n ; i++)
{ trp[ i ] = (float*) malloc( m * sizeof( float ) ) ; }
for ( i = 0 ; i < m ; i++) /*preenche a matriz */
{ for ( j = 0 ; j < n ; j++)
{ trp [ j ][ i ] = mat [ i ][ j ] ; } }
return trp; }
Matrizes
Representação de uma matriz simétrica
5.0 10.0 15.0
10.0 25.0 30.0
15.0 30.0 45.0
Uma matriz quadrada na qual os
elementos mat [ i ] [ j ] = mat [ j ] [ i ].
8
•Portanto basta armazenar os elementos da diagonal e
os elementos acima da diagonal.
•Em vez de n2 valores pode-se armazenar s valores:
2
( + 1)
=
n n
s
Matrizes
Matriz simétrica com vetor simples
float* cria ( int n)
{ int s = n * ( n + 1 ) / 2 ;
float *mat = (float* malloc ( s * sizeof ( float ) ) ;
return mat ; }
9
Matriz simétrica com vetor de ponteiros
float** cria ( int n )
{ int i ;
float **mat = (float** ) malloc ( n* sizeof ( float *));
for ( i = 0 ; i < n ; i++)
{ mat[i] = (float* ) malloc ( ( i + 1 ) * sizeof( float ));
}
return mat ; }
Matrizes
Matriz simétrica com vetor simples
float acessa ( int n , float *mat , int i , int j )
{ int k ; /* índice do elemento no vetor * /
if ( ( i < 0 ) || ( i >= n ) || ( j < 0 ) || ( j >= n ) )
{ printf ( “ Acesso invalido ! \n “ ) ; exit ( 1) ; }
10
if ( i >= j )
k = i * ( i + 1 ) / 2 + j ; /*elemento representado* /
else
k = j * ( j + 1 ) / 2 + i ; /* elemento simétrico * /
return mat [ k ] ;
}
Matrizes
Matriz simétrica com vetor de ponteiros
float acessa ( int n , float **mat , int i , int j )
{
if ( ( i < 0 ) || ( i >= n ) || ( j < 0 ) || ( j >= n ) )
{ printf ( “ Acesso invalido ! \n “ ) ;
11
exit ( 1) ; }
if ( i >= j )
return mat [ i ] [ j ] ; /*elemento representado* /
else
return mat [ j ] [ i ] ; /* elemento simétrico * /
}
Cadeia de Caracteres
Caracteres
Em C, o tipo char :
é usado para representar caracteres
pode armazenar valores inteiros (em 1 byte),
representando assim, 256 valores distintos
Uma constante char é escrita entre aspas simples
São representados internamente na memória do
12
computador por códigos numéricos
A correspondência entre os caracteres e os seus
códigos numéricos é feita por uma tabela ASCII
Na tabela ASCII:
os dígitos são codificados em seqüência
as letras minúsculas e maiúsculas também
formam dois grupos sequenciais


7.0 ANEXO II
PROJETO DE DESENVOLVIMENTO PARA CLASSE
CALCULADORA

#include <stdio.h>

int a,b,x,xx,xxx,xxxx,xxxxx,output,doei;
main()

{
printf(" CAlCULADORA");
printf("\n\n\n Informe a operacao a ser realizada e tecle <ENTER>");
printf("\n\n\t 1 para + (somar)");
printf("\n\t 2 para - (subtrair)");
printf("\n\t 3 para : (dividir)");
printf("\n\t 4 para * (multiplicar)");
printf("\n\n Operacao: ");
scanf("%d", &a);

if (a == 1) {
printf("\n\n Quantos numeros serao somados(entre 2 e 5)? ");
scanf("%d", &b); }

if ( b == 2 ) {
printf("\n Primeiro numero: ");
scanf("%d", &x);
printf(" Segundo numero: ");
scanf("%d", &xx);
output = (x + xx);
printf("\n Resultado: " "%d\n", output);
scanf("%d", doei); }

if ( b == 3 ) {
printf("\n Primeiro numero: ");
scanf("%d", &x);
printf(" Segundo numero: ");
scanf("%d", &xx);
printf(" Terceiro numero: ");
scanf("%d", &xxx);
output = (int) (x + xx + xxx);
printf("\n Resultado: " "%d\n", output);
scanf("%d", doei); }

if ( b == 4 ) {
printf("\n Primeiro numero: ");
scanf("%d", &x);
printf(" Segundo numero: ");
scanf("%d", &xx);
printf(" Terceiro numero: ");
scanf("%d", &xxx);
printf(" Quarto numero: ");
scanf("%d", &xxxx);
output = (int) (x + xx + xxx + xxxx);
printf("\n Resultado: " "%d\n", output);
scanf("%d", doei); }

if ( b == 5 ) {
printf("\n Primeiro numero: ");
scanf("%d", &x);
printf(" Segundo numero: ");
scanf("%d", &xx);
printf(" Terceiro numero: ");
scanf("%d", &xxx);
printf(" Quarto numero: ");
scanf("%d", &xxxx);
printf(" Quinto numero: ");
scanf("%d", &xxxxx);
output = (int) (x + xx + xxx + xxxx + xxxxx);
printf("\n Resultado: " "%d\n", output);
scanf("%d", doei); }

if ( a == 2 ) {
printf("\n\n-");
printf("\nHow many numbers to '-' (2/5)?");
scanf("%d", &b); }

if ( b == 2 ) {
printf("\n Primeiro numero: ");
scanf("%d", &x);
printf(" Segundo numero: ");
scanf("%d", &xx);
output = (int) (x - xx);
printf("\n Resultado: " "%d\n", output);
scanf("%d", doei); }

if ( b == 3) {
printf("\n Primeiro numero: ");
scanf("%d", &x);
printf(" Segundo numero: ");
scanf("%d", &xx);
printf(" Terceiro numero: ");
scanf("%d", &xxx);
output = (int) (x - xx - xxx);
printf("\n Resultado: " "%d\n", output);
scanf("%d", doei); }

if ( b == 4) {
printf("\n Primeiro numero: ");
scanf("%d", &x);
printf(" Segundo numero: ");
scanf("%d", &xx);
printf(" Terceiro numero: ");
scanf("%d", &xxx);
printf(" Quarto numero: ");
scanf("%d", &xxxx);
output = (int) (x - xx - xxx - xxxx);
printf("\n Resultado: " "%d\n", output);
scanf("%d", doei); }

if ( b == 5) {
printf("\n Primeiro numero: ");
scanf("%d", &x);
printf(" Segundo numero: ");
scanf("%d", &xx);
printf(" Terceiro numero: ");
scanf("%d", &xxx);
printf(" Quarto numero: ");
scanf("%d", &xxxx);
printf(" Quinto numero: ");
scanf("%d", &xxxxx);
output = (int) (x - xx - xxx - xxxx - xxxxx);
printf("\n Resultado: " "%d\n", output);
scanf("%d", doei); }

if ( a == 3 ) {
printf("\n\n:");
printf("\nHow many numbers to ':' (2/5)?");
scanf("%d", &b); }

if ( b == 2) {
printf("\n Primeiro numero: ");
scanf("%d", &x);
printf(" Segundo numero: ");
scanf("%d", &xx);
output = (int) (x / xx);
printf("\n Resultado: " "%d\n", output);
scanf("%d", doei); }

if ( b == 3) {
printf("\n Primeiro numero: ");
scanf("%d", &x);
printf(" Segundo numero: ");
scanf("%d", &xx);
printf(" Terceiro numero: ");
scanf("%d", &xxx);
output = (int) (x / xx / xxx);
printf("\n Resultado: " "%d\n", output);
scanf("%d", doei); }

if ( b == 4) {
printf("\n Primeiro numero: ");
scanf("%d", &x);
printf(" Segundo numero: ");
scanf("%d", &xx);
printf(" Terceiro numero: ");
scanf("%d", &xxx);
printf(" Quarto numero: ");
scanf("%d", &xxxx);
output = (int) (x / xx / xxx / xxxx);
printf("\n Resultado: " "%d\n", output);
scanf("%d", doei); }

if ( b == 5) {
printf(" Primeiro numero: ");
scanf("%d", &x);
printf(" Segundo numero: ");
scanf("%d", &xx);
printf(" Terceiro numero: ");
scanf("%d", &xxx);
printf(" Quarto numero: ");
scanf("%d", &xxxx);
printf(" Quinto numero: ");
scanf("%d", &xxxxx);
output = (int) (x / xx / xxx / xxxx / xxxxx);
printf("\n Resultado: " "%d\n", output);
scanf("%d", doei); }

if ( a == 4 ) {
printf("\n\n*");
printf("\nHow many numbers to '*' (2/5)?");
scanf("%d", &b); }

if ( b == 2) {
printf("\n Primeiro numero: ");
scanf("%d", &x);
printf(" Segundo numero: ");
scanf("%d", &xx);
output = (int) (x * xx);
printf("\n Resultado: " "%d\n", output);
scanf("%d", doei); }

if ( b == 3) {
printf("\n Primeiro numero: ");
scanf("%d", &x);
printf(" Segundo numero: ");
scanf("%d", &xx);
printf(" Terceiro numero: ");
scanf("%d", &xxx);
output = (int) (x * xx * xxx);
printf("\n Resultado: " "%d\n", output);
scanf("%d", doei); }

if ( b == 4) {
printf("\n Primeiro numero: ");
scanf("%d", &x);
printf(" Segundo numero: ");
scanf("%d", &xx);
printf(" Terceiro numero: ");
scanf("%d", &xxx);
printf(" Quarto numero: ");
scanf("%d", &xxxx);
output = (int) (x * xx * xxx * xxxx);
printf("\n Resultado: " "%d\n", output);
scanf("%d", doei); }

if ( b == 5) {
printf("\n Primeiro numero: ");
scanf("%d", &x);
printf("\n Segundo numero: ");
scanf("%d", &xx);
printf("\n Terceiro numero: ");
scanf("%d", &xxx);
printf("\n Quarto numero: ");
scanf("%d", &xxxx);
printf("\n Quinto numero: ");
scanf("%d", &xxxxx);
output = (int) (x * xx * xxx * xxxx * xxxxx);
printf("\n Resultado: " "%d\n", output);
scanf("%d", doei); }
return 0;
}

ANEXO III
Estatística Presencial
Número total de inscritos: 21

1º Dia – 21 – 100%
2º Dia – 20 – 99%
3º Dia – 16- - 76%
4º Dia – 17- 80%
5º Dia – 16- 76%
6º Dia – 15-75%
7º Dia – 12-57%
8º Dia – 14-74%
9º Dia – 14-74%
10º Dia – 13-58%
Média Presencial 76,9%

Abaixo os nomes dos alunos que receberam certificado de conclusão do curso:
1. ANA CLÁUDIA PEREIRA DE LUCENA
2. CARLOS ALBERTO FERREIRA DE SANTANA
3. CLÁUDIO FERREIRA LEMOS
4. DIEGO CARDOSO CARNEIRO DA SILVA
5. FLÁVIO MANOEL DE SANTANA
6. JOSÉ RICARDO FERREIRA DA SILVA
7. LEONARDO RENNÊ MELO
8. MARLON SÁVIO DA SILVA
9. NIELSON AVELINO DE SANTANA
10. RAPHAEL RIBEIRO DA SILVA
11. ROBERTO DIOGENES VERAS LINS
12. TATYANE SOUZA CALIXTO DA SILVA
13. MICAL DE SANTANA LIBERATO
14. ITAN RUDÁ MARQUES DE SOUZA