(Parte 1 de 50)

Linguagem c - nOTAS DE AULA

Jorge Surian

Apresentação (Aula 01T)

Estas Notas de Aula, visam aumentar a produtividade dos alunos nas aulas teóricas, evitando a cópia das teorias expostas. Grande parte dos exemplos analisados em sala de aula e enunciados de exercícios constam nesta apostila, além da resolução de alguns destes. Os EC (exercícios de classe), serão normalmente baseados nos exercícios complementares de cada Aula a serem desenvolvidos preferencialmente no laboratório.

Habitualmente antes de resolvermos exemplos ou exercícios, elaboraremos o algoritmo, que nada mais é que uma seqüência de operações cuja execução produz um resultado que é a resposta de um problema proposto.

Um programa de computador nada mais é que a codificação de um algoritmo numa linguagem de programação. Linguagens como C, Pascal, BASIC, ALGOL, Clipper, COBOL, etc., são chamadas de procedurais, devido ao fato das instruções serem executadas de forma seqüencial, enquanto que as linguagens baseadas no conceito de eventos como C++, Visual BASIC, Visual Objects, utilizam outra estratégia de programação (Programação Orientada ao Objeto), a ser vista em outro módulo do curso (OOP), em C utilizaremos a metodologia estruturada.

Os algoritmos podem ser estruturados ou não, conforme exemplificamos a seguir no cálculo do máximo divisor comum entre dois números inteiros positivos, com operações elementares:

Linear

Leia m,n

(1) se n = 0 então

imprima m

pare

k <- m - Int(m / n) * n

m <- n

n <- k

vá para (1)

Em Quick BASIC teríamos Em BASICA teríamos

input m : input n 10 input m : input n

10 if n = 0 then 20 if n <> 0 then 50

print m 30 imprima m

end if 40 end

k = m - Int(m / n) * n 50 k = m - Int(m / n) * n

m = n 60 m = n

n = k 70 n = k

goto 10 80 goto 20

O Algoritmo de Euclides anteriormente apresentado , apesar de muito simples, executado normalmente por qualquer criança de primeiro grau, ganha contornos de aparente dificuldade quando transcrito para o GW-BASIC, um dialeto BASIC, que exige numeração de linhas, que nos obrigou a alterar um pouco a estratégia de resolução do problema. Já a versão em Quick BASIC, poderia ser transcrita por qualquer pessoa com um mínimo de conhecimento em algoritmos e BASIC.

Estruturado

Inteiros m,n

Leia m,n

enquanto n <> 0 faça

k <- m - Int(m / n) * n

m <- n

n <- k

imprima m

pare

Em C teríamos Em Clipper teríamos

main() input to a

{ input to b

int m,n,k; do while n <> 0

scanf(“%d”,&m); k = m - Int(m / n) * n

scanf(“%d”,&n); m = n

while (n != 0) { n = k

k = m - m / n * n; enddo

m = n; ? m

n = k;

}

printf(“%d”,m);

}

Nas Linguagens estruturadas a representação fica idêntica, quer em C quer em Clipper. Ficaria a mesma forma em Quick BASIC, Pascal ou COBOL Estruturado, daí a preferência na abordagem dita estruturada. No decorrer deste curso nos deteremos detalhadamente no estudo dos algoritmos estruturados e analisaremos alguns (poucos, porém importantes) casos onde a programação linear é mais adequada que a estruturada.

Simulação

Por melhor que seja o conhecimento do Analista/Programador, este só poderá ter certeza que sua “estratégia” foi bem sucedida após testar o programa num computador.

Bons programadores tem poucas surpresas quando testam seus programas, fazendo normalmente umas poucas correções para que o programa funcione de maneira adequada.

Programadores iniciantes criam uma estratégia (algoritmo) muitas vezes ineficiente e normalmente “correm” para o computador visando testar o programa e acabam por perder um tempo enorme. Não é raro ouvirmos de iniciantes a frase “Nunca conseguirei fazer um programa ...”. Certamente, não conseguirá mesmo, caso não tenha uma estratégia definida.

Imagine uma “tarefa” muito simples, como por exemplo fritar um ovo. Caso você não soubesse “operar” o fogão provavelmente não conseguiria acendê-lo. Se nunca tivesse visto alguém quebrar um ovo, provavelmente não conseguiria fazê-lo sem perder parte de seu conteúdo. A fritura seria algo desastroso, caso você desconhecesse a utilidade do óleo. E o sabor seria frustrante, caso o tempero utilizado fosse açúcar.

O Programador iniciante que não simula seu algoritmo, se compara ao cozinheiro desastrado descrito acima. E como simular?

Basta “agirmos” como se fossemos o próprio computador, ou seja devemos “fingir” que nosso raciocíneo é baseado no conteúdo de variáveis. De fato, usualmente antes de tomarmos alguma decisão analisamos uma série de fatores (as tais variáveis dos programas). Desta forma, caso fizermos uma análise apurada sobre os conteúdos das variáveis, poderemos “descobrir” a função de cada programa.

Primeiramente vamos resolver o problema como aprendemos no primeiro grau.

Supondo M = 120 e N = 28.

Dividendo

=

120

28

8

Divisor

=

28

8

4

MDC

Quociente

=

4

3

2

Resto

=

8

4

0

Simulação:

M

N

K

Impresso

Instruções

Comentários

120

28

Declarações e Leituras

8

Enquanto n <> 0

k = m - m / n * n

Cálculo do Resto

28

8

m = n; n = k

Novos Divisor e Dividendos

4

Enquanto n <> 0

k = m - m / n * n

Voltando ao Teste

Cálculo do Resto

4

0

m = n; n = k

Novos Divisor e Dividendos

Enquanto n <> 0

N é Zero

4

Achou MDC!

Observação Final: Obviamente caso você se sinta seguro a resolver diretamente o problema na linguagem diretamente no computador, faça isto. Porém se surgirem dificuldades, não se esqueça de fazer o algoritmo e a simulação. Lembre-se do cozinheiro desastrado, que se tivesse consultado uma simples receita (todo algoritmo não passa de uma receita sofisticada), poderia ao menos fritar o ovo!

Exercícios (Aula 01L)

Nunca esqueça que os comandos da linguagem C devem ser escritos SEMPRE em letras minúsculas!

Apresentação do Interpretador Classic C.

1- Elabore programa que apresente mensagem alô mundo!

2- Elabore programa para o cálculo do máximo divisor comum entre 2 números.

3- Elabore programa que imprima o seu nome.

Linguagem C (Aula 02T)

Objetivos:

(Parte 1 de 50)

Comentários