Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Programação, Notas de estudo de Redes de Computadores

LÓGICA DE PROGRAMAÇÃO

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 30/09/2010

augusto-pinho-4
augusto-pinho-4 🇧🇷

2 documentos

1 / 61

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Departamento de Informática - UFES Apostila de Programação
- 1 -
CAPÍTULO I
INTRODUÇÃO
Objetivos
Familiarizar o aluno com as noções de algoritmo e de refinamentos sucessivos através de
exemplos não-computacionais;
Introduzir a noção de programa e linguagem de programação;
Ressaltar as vantagens de representação em C;
Identificar as componentes principais de um programa em C, baseando-se em um exemplo não
computacional.
I.1 – O que é um Algoritmo
Os computadores vêm sendo cada vez mais utilizados nas mais diversas áreas, desde a medicina
até a engenharia, desde a administração de empresas até o controle de máquinas industriais, desde a
edição de textos pessoais até a produção de efeitos especiais em filmes.
Em todas as situações, o computador age como uma máquina capaz de coletar, manipular e
devolver dados em grande quantidade e alta e alta velocidade. Estas atividades são executadas por uma
gama de circuitos e componentes eletrônicos (Hardware).
Ao longo das últimas décadas, estes componentes têm se tornado cada vez mais eficientes e
baratos, devido aos avanços tecnológicos.
“Embora os computadores modernos sejam capazes de executar operações difíceis e complexas,
eles são máquinas dóceis e de uma inteligência restrita. Eles devem ser ensinados exatamente o que
fazer, e as instruções devem ser feitas em uma linguagem simples, precisa e limitada que eles possam
compreender. Estas instruções são mais conhecidas como software” (Darmell,l988).
Uma das etapas fundamentais no desenvolvimento do software é a Construção de Algoritmo.
Algoritmo é uma seqüência de operações que devem ser executadas em uma ordem definida
e não-ambígua, com o propósito de solucionar um determinado problema.
Esta definição pode caracterizar tanto um receita de bolo com o conjunto de instruções para
montagem de um automóvel. No nosso caso, serviria para definir o conjunto de atividades que o
computador deve desempenhar para solucionar um problema.
O algoritmo é geralmente representado através de modelos de fácil compreensão pelos humanos,
mas incompreensíveis para o computador. Para que o computador possa executar um algoritmo, é
necessário que este algoritmo seja traduzido para uma linguagem que seja entendida pelo computador -
a linguagem de programação. Ao traduzir-se um algoritmo para uma linguagem de
programação obtém-se um Programa.
Este curso tem por objetivo desenvolver a capacidade de construir algoritmos de uma forma
organizada (estruturada) na linguagem de programação C.
I.2 – Exemplo de Algoritmo
Boa parte das atividades do dia-a-dia pode ser descrita através de algoritmos. Por exemplo, o ato
de trocar um pneu furado em um carro consiste em:
Pegar as ferramentas no porta-malas;
Retirar o estepe;
Instalar o macaco;
Levantar o carro parcialmente;
Afrouxar os parafusos do pneu furado;
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d

Pré-visualização parcial do texto

Baixe Programação e outras Notas de estudo em PDF para Redes de Computadores, somente na Docsity!

CAPÍTULO I

INTRODUÇÃO

Objetivos

  • ••• Familiarizar o aluno com as noções de algoritmo e de refinamentos sucessivos através de exemplos não-computacionais;
  • ••• Introduzir a noção de programa e linguagem de programação;
  • ••• Ressaltar as vantagens de representação em C;
  • ••• Identificar as componentes principais de um programa em C, baseando-se em um exemplo não computacional.

I.1 – O que é um Algoritmo Os computadores vêm sendo cada vez mais utilizados nas mais diversas áreas, desde a medicina até a engenharia, desde a administração de empresas até o controle de máquinas industriais, desde a edição de textos pessoais até a produção de efeitos especiais em filmes. Em todas as situações, o computador age como uma máquina capaz de coletar, manipular e devolver dados em grande quantidade e alta e alta velocidade. Estas atividades são executadas por uma gama de circuitos e componentes eletrônicos (Hardware). Ao longo das últimas décadas, estes componentes têm se tornado cada vez mais eficientes e baratos, devido aos avanços tecnológicos. “Embora os computadores modernos sejam capazes de executar operações difíceis e complexas, eles são máquinas dóceis e de uma inteligência restrita. Eles devem ser ensinados exatamente o que fazer, e as instruções devem ser feitas em uma linguagem simples, precisa e limitada que eles possam compreender. Estas instruções são mais conhecidas como software” (Darmell,l988). Uma das etapas fundamentais no desenvolvimento do software é a Construção de Algoritmo. Algoritmo é uma seqüência de operações que devem ser executadas em uma ordem definida e não-ambígua, com o propósito de solucionar um determinado problema. Esta definição pode caracterizar tanto um receita de bolo com o conjunto de instruções para montagem de um automóvel. No nosso caso, serviria para definir o conjunto de atividades que o computador deve desempenhar para solucionar um problema. O algoritmo é geralmente representado através de modelos de fácil compreensão pelos humanos, mas incompreensíveis para o computador. Para que o computador possa executar um algoritmo, é necessário que este algoritmo seja traduzido para uma linguagem que seja entendida pelo computador -

a linguagem de programação. Ao traduzir-se um algoritmo para uma linguagem de

programação obtém-se um Programa. Este curso tem por objetivo desenvolver a capacidade de construir algoritmos de uma forma organizada (estruturada) na linguagem de programação C.

I.2 – Exemplo de Algoritmo Boa parte das atividades do dia-a-dia pode ser descrita através de algoritmos. Por exemplo, o ato de trocar um pneu furado em um carro consiste em:

  • Pegar as ferramentas no porta-malas;
  • Retirar o estepe;
  • Instalar o macaco;
  • Levantar o carro parcialmente;
  • Afrouxar os parafusos do pneu furado;
  • Retirar o pneu furado;
  • Instalar o novo pneu;
  • Abaixar o carro
  • Apertar bem as porcas;
  • Guardar o pneu furado e as ferramentas;

A seqüência descrita acima pode ser completada com várias observações. Por exemplo: − O que fazer se o macaco não estiver no porta-malas? − O que fazer se o estepe também estiver vazio? − Deve-se sempre puxar o freio de mão antes de executar estas operações. Por outro lado, algumas ações devem ser levadas a cabo após executar a troca do pneu. Por exemplo: − Limpar as mãos; − Consertar o pneu furado; Se o responsável pela construção do algoritmo tiver que se preocupar com todas as possibilidades do ambiente de execução do mesmo, e além disso, com todas as necessidades de tratamento pós- execução , nenhum algoritmo será completo. Sempre alguma condição poderá ser esquecida. Assim, antes de se construir um algoritmo, deve-se especificar as condições de inicio (dados de entrada) e as de término (dados de saída). No caso acima, teremos: − Condição de entrada: um carro com todos os equipamentos de segurança em condições, parado e freado, com um pneu furado. − Condição de saída: um carro parado, freado, com todos os equipamentos de segurança em condições, exceto pelo pneu estepe vazio, com todos os pneus OK. Além disso, alguém pode argumentar que as ações não estão suficientemente detalhadas para compreensão. Para uma pessoa acostumada a trocar pneus furados as explicações são suficientes, mas será que um selvagem do deserto Kalahari, que nuca viu um carro antes, saberá utilizar corretamente um macaco para elevá-lo? Assim, a função “levantar o carro” seria melhor descrita como: − Empunhe o cabo da manivela do macaco; comece a girar a manivela no sentido horário, mantendo este movimento até que o pneu do carro esteja suspenso a pelo menos 10 cm do chão; solte a manivela. Boa parte dos problemas tratados no computados é resolvida por seqüência de instruções (algoritmos) compostas por um agrupamento de atividades por si só complexas. Da mesma forma que foi necessário detalhar o uso do macaco para o selvagem, também estas atividades complexas devem ser detalhadas até a um nível em que o computador seja capaz de reconhecê-las e executá- las. Devido à velocidade com que o computador processa cada uma destas instruções simplificadas, não há problema em descrever e tratar uma atividade complexa através de milhares de outras atividades básicas. Para os seres humanos, contudo, é difícil memorizar e detalhar milhares de instruções, associando-as à atividade original. Para facilitar esta tarefa, utilizam-se duas ferramentas: − Técnica de Refinamentos Sucessivos; − Representação de Algoritmos.

Processamento-componente “Coma uma fruta” − Se houver algum tipo de fruta disponível na mesa, escolha um tipo; − Pegue uma fruta do tipo escolhido; − Coma a fruta.

Exercícios

  1. Termine o detalhamento de todos os procedimentos necessários à sua “Manhã de Segunda-Feira”. Depois compare com pelo menos dois de seus colegas.

  2. Use a técnica de refinamentos sucessivos para detalhar as seguintes atividades:

−−−− Limpeza de um automóvel;

−−−− Montagem de uma barraca de camping;

−−−− Preparação de um bolo de aniversário.

I.4 – Representação de Algoritmos Devido à pequena capacidade de memorização humana, os procedimentos-componentes devem ser armazenados em algum lugar, para permitir o acesso rápido e o fácil entendimento. Para isto, podem ser utilizadas desde folhas de papel até o auxilio de computadores. Qualquer que seja o tipo de armazenamento, estes procedimentos/algoritmos devem ser descritos por algum modelo. Nos exemplos anteriores utilizamo-nos da própria língua portuguesa, que é um modelo de representação com que estamos acostumados a trabalhar. A língua portuguesa traz, contudo, uma série de inconvenientes: − Certas palavras têm dupla interpretação; − Exigem-se regras de concordância bastante definidas; − A pontuação pode alterar completamente o significado de uma frase. Além disso, a língua falada costuma apresentar construções complexas, bastantes distintas da simplicidade das linguagens entendidas pelos computadores. Os modelos de representação de algoritmos devem ser mais restritos, diminuindo a liberdade de expressão do “construtor de algoritmos”, mas com isso eliminando os problemas de interpretação, concordância e pontuação. Estes modelos devem ainda utilizar-se da apresentação gráfica para tornar os algoritmos mais fáceis de serem compreendidos. A linguagem de programação C proporciona estas características para a representação de algoritmos.

I.5 – Partes de um Programa em C Um exemplo bastante conhecido de representação de programas é o de receitas culinárias. Estas têm a seguinte estrutura:

−−−− Nome da receita;

−−−− Ingredientes: descreve todo o material necessário durante p preparo da receita;

−−−− Modo de preparar: descreve como agrupar e tratar os ingredientes.

Além disso, toda receita vem com muitos comentários relativos a detalhes que poderiam passar despercebidos e estragar o resultado final. Os comentários servem para chamar a atenção do cozinheiro e explicar melhor o porque de cada passo.

Da mesma forma um bom programa terá 4 partes:

  1. Cabeçalho: com o nome do programa;
  2. Dicionário de Dados: definindo os dados de entrada, de saída e outros que sejam necessários ao longo do processamento do programa;
  3. Corpo: definindo o tratamento dado aos dados no programa;
  4. Comentários: esclarecendo aspectos pouco claros do programa em suas diversas partes (Cabeçalho, Dicionário de Dados e Corpo). Além disso, a forma como as linhas do programa estão dispostas fisicamente, identação, deve ser feita de maneira a tornar a listagem do programa o mais clara quanto possível, permitindo assim uma boa legibilidade do programa. Para que um programa apresente uma boa estética deve-se seguir regras básicas, como: − Coloque cada comando em uma linha separada; − Insira uma linha em branco antes de cada seção do programa e sempre que apropriado em uma seqüência de comandos para destacar blocos de comandos; − Mantenha-se fiel a identação dos comandos de modo a enfatizar a relação entre palavras reservadas e comandos que compreendem estruturas de controle, seções de programas, etc.

−−−− Facilita o teste, pois cada módula pode ser testado individualmente e depois incorporado ao

conjunto;

−−−− Permite o uso do mesmo módula várias vezes.

TERCEIRO NÍVEL

Elaboração do programa usando dentro de cada módulo um numero limitado de “estruturas básicas de fluxo de controle”, isto é, instruções. Os módulos são construídos por programas. No programa, cada um de seus passos pertence a uma das três estruturas básicas:

−−−− Operação elementar;

−−−− Operação de controle (Estrutura) especificando uma seleção entre seqüências de passos;

−−−− Operação de controle (Estrutura) especificando a repetição de uma seqüência de passos.

DOCUMENTAÇÃO:

Os programas devem ser lidos e entendidos por quem os confeccionou e por outras em toda a sua vida útil, uma vez que podem necessitar correção, manutenção e modificação. Para que isto ocorra, eles precisam ser muito bem documentados. Um programa bem documentado possui as seguintes características:

−−−− É convenientemente identado de modo a mostrar sua estrutura lógica. Os comandos devem

ser alinhados de acordo com o nível a que pertencem, ou seja, a estrutura na qual eles estão contidos deve estar destacada;

−−−− Possui comentários que auxiliam a sua compreensão por outras pessoas não responsáveis

por sua elaboração;

−−−− Contém uma declaração de variáveis em um dicionário de dados. O dicionário de dados

especifica formalmente o conteúdo de cada dado utilizado no corpo do programa e indica os valores que cada um deles pode assumir.

CAPÍTULO III

CONSTRUÇÃO DE PROGRAMAS EM C

Objetivos

  • ••• Apresentar os tipos básicos de dados INT, FLOAT, CHAR;
  • ••• Apresentar a forma de definição das variáveis e constantes de um programa em C;
  • ••• Apresentar os comandos elementares de construção de programas em C, exemplificando seu uso;
  • ••• Apresentar uma forma organizada de construção de programas;

III.1 – Introdução Nos capítulos anteriores mostraram-se diversos algoritmos, com suas operações mais simples sendo executadas por seres humanos (algoritmo “Troca de Pneu”). Também se discutiram as vantagens e objetivos das Técnicas de Programação Estruturada (Refinamentos Sucessivos, Modularização, Documentação, etc). Nesse capítulo serão descritas as operações básicas que o computador pode executar. Estas operações serão utilizadas para construir algoritmos progressivamente mais complexos. Um fator a observar é que os computadores reais, na verdade, executam um conjunto ainda mais

reduzido de operações, chamadas operações de máquina, e que definem a Linguagem de Máquina.

As operações descritas aqui referem-se ao que se convenciona chamar de Linguagens de Alto

Nível. Estas são mais próximas de linguagem humana. Para traduzir um programa escrito em

linguagem de alto nível para linguagem de máquina utilizam-se outros programas denominados de compiladores. Uma vez construído um algoritmo, o mesmo pode ser traduzido para uma linguagem de programação de alto nível (PACAL, COBOL, FORTRAN, C, MODULA, etc). Este último programa é então traduzido pelo compilados para linguagem de máquina, que pode ser executada pelo computador.

Constantes são valores que parecem em meio ao programa e que não têm seu valor alterado durante a execução do mesmo. Um exemplo típico é o do número π (PI). Variáveis são elementos (posição de memória da máquina) que recebem o valor de uma variável ou de uma expressão, podendo este valor ser alterado durante a execução do programa. Uma variável pode ser imaginada como uma posição da máquina, identificada pelo “nome da variável”. Exemplo: Soma = 0; significa que uma posição de memória da máquina, identificada pelo nome Soma , recebe o valor 0.

III.3.1 – Tipo Básicos de Dados No C, são adotados quatro tipos básicos de dados, isto é, são quatro os tipos primitivos de dados que podem ser usados. Esses tipos podem criar outros tipos chamados de “tipos construídos”, que serão vistos posteriormente.

1. TIPO INTEIRO (int) Designa um intervalo (dependente do compilador e da máquina) dos números inteiros (negativo, positivo ou nulo). Possui como operações associadas:

  • Soma: +
  • Multiplicação: *
  • Subtração: -
  • Divisão inteira: / 2. TIPO PONTO FLUTUANTE (float) Designa um intervalo dos números racionais (a precisão e o intervalo são dependentes da máquina e do compilador). Possui como operações associadas:
  • Soma: +
  • Multiplicação: *
  • Subtração: -
  • Divisão: / 3. TIPO CARACTER (char) Designa qualquer caracter (letras, números e caracteres especiais como *, &, $, etc). Existem operações especiais associadas à manipulação de caracteres, mas não serão abordadas neste momento. 4. TIPO BOOLEANO (int) Na linguagem C, o tipo INT é usado também como expressão booleana. Para isso, o zero é interpretado como falso e os outros números como verdadeiro.

III.4 – Definição das Variáveis de um Programa Quando se escreve um programa, é necessário definir o tipo de todas as variáveis que serão usadas. Essa definição de tipo é feita através de uma “Declaração de Variáveis”, onde são especificados os valores que podem ser atribuídos a cada uma das variáveis (se valores inteiros, reais, etc). Em C, quando um computador está executando um programa e encontra uma variável qualquer, se esta não tiver tido o seu nome e tipo declarado anteriormente, será emitida uma mensagem de erro, abortando a execução. Assim, toda variável deve ser declarada antes de ser utilizada. A declaração de variáveis e constantes segue a seguinte estrutura:

#define ;

Exemplo: #define pi 3, 1415926 #define NotaMaxima 10 int soma, cont1, cont2, matriculaAluno; float mediaAluno, notaProva1, notaProva2;

EXERCÍCIO

Assinale os identificadores válidos: ( )Valor ( )Salário-Liquido ( )SalarioLiquido ( )X ( )NotaAluno ( )3X ( )AH!! ( )xy ( )X

III.5 – Operações Elementares As operações elementares são os comandos de atribuições, cálculos de expressões, e operações de entrada e saída. Essas operações são chamadas de elementares por na alterarem o fluxo normal da execução do programa, ou seja, após a execução de uma operação elementar, a próxima instrução a ser executada é a seguinte do programa. Toda instrução possui uma parte sintática (diz respeito à forma como a instrução é escrita) e uma parte semântica (diz respeito ao que a instrução faz).

III.5.1 – Comando de Atribuição O comando de atribuição é a maneira de se especificar que a uma determinada variável será atribuído (fornecido) um certo valor. Este comando. Em C, é indicado pelo símbolo de atribuição “=”. Forma geral do comando de atribuição: <variável> = ; O tipo dos dados à esquerda e à direita do comando de atribuição deve ser compatível. A única exceção ocorre para casos em que um valor inteiro é atribuído a uma variável do tipo real.

III.5.2 – Cálculo de Expressão As variáveis e constantes podem ser combinadas com os operadores associados a cada tipo de dados, gerando expressões. È o valor calculado das expressões que é atribuído à variável ao lado esquerdo do comando de atribuição.

III.5.3 – Expressão Aritmética A expressão aritmética é aquela cujos operadores e/ou variáveis de tipo numérico. A notação é a mesma das operações matemáticas, com as seguintes exceções: − Não é permitido omitir o operador de multiplicação: A*C é diferente de AC

Exercício Calcule o valor das seguintes expressões aritméticas, considerando os seguintes valores: A = 10 B = 3 X = 2.5 Y = 1. a)X/ b)ceil(X-Y) c)EXP(Y(B+2)-6) d)floor(2.9+ceil(0.3+Y)2+A)

III.5.2.2 – Expressão Relacional Trabalha com operadores relacionais e é formada por três partes: uma expressão (da esquerda), um operador relacional e outra expressão (da direita). Note-se que uma variável ou constante isolada pode ser entendida como uma expressão. São exemplos de operadores relacionais:

  • < menor que;
  • <= menor ou igual a;
  • == igual a;
  • maior que;

  • = maior ou igual a;

  • != diferente de. As expressões relacionais têm como resultados finais valores do tipo inteiro (0 para falso e 1 para verdadeiro). As variáveis do tipo CHAR também podem ser comparadas entre si, obedecendo à ordenação do padrão ASCII.

III.5.2.3 – Expressão Lógica É comum nos programas surgirem situações em que a execução de uma ação, ou seqüência de subações, está sujeita a uma certa condição. Esta é representada no texto do programa por meio de uma expressão lógica. Denomina-se de Expressão Lógica à expressão cujos operadores são lógicos e cujos operandos são expressões relacionais e/ou variáveis do tipo inteiro. Os operadores lógicos são: && (AND) || (OR)! (NOT) Os resultados obtidos das expressões lógicas também são valores do tipo inteiro (0 para falso e 1 para verdadeiro). Exemplos: Se P e Q são operandos inteiras então: P Q P && Q P || Q !P !(P && Q) 1 1 1 1 0 0 1 0 0 1 0 1 0 1 0 1 1 1 0 0 0 0 1 1

Exercícios Dadas as variáveis e seus valores: A = 10 B = 3 X = 3.5 Y = 0. L1 = 1 L2 = 0

Calcule o valor das seguintes expressões: a)(A < B) b)(X < A) c)((X + A) < (B * Y)) d)((X < A) || (B > Y)) e)L1 && L f)L1 || L g)(L1 && (X < Y)) h)((! L2) || (! (X < (Y + 2))))

  • Prioridade de Cálculo das Expressões Caso se elimine os parâmetros das expressões dos exercícios anteriores, podem-se criar dúvidas sobre que operações serão executadas primeiro. A tabelo a seguir apresenta a ordem de prioridade de cálculo de expressões. Prioridade Operador 1! 2 *, /, %, && 3 +, -, || 4 ==, !=, <, <=, >=, >

III.5.3 – Operações de Entrada de Dados O computador armazena os valores das variáveis (e o próprio programa!) em sua memória. O computador alcança estes valores do ambiente externo através de operações de entrada de dados. A operação de entrada de dados transfere um ou mais dados do ambiente externo (teclado, disquete) para uma ou mais variáveis na memória, funcionando como um comando de atribuições. Os dados lidos devem ser do mesmo tipo das variáveis especificadas no comando de leitura. A forma geral de descrição desta operação é: scanf(“ ... ”, &var1, &var2, ..., &varN);

A tabela a seguir nos mostra alguns dos possíveis formatos a serem usados: Código Significado %c Lê um único caracter %d Lê um inteiro decimal %i Lê um inteiro decimal %e Lê um número em ponto flutuante %f Lê um número em ponto flutuante %g Lê um número em ponto flutuante %o Lê um número octal %s Lê uma string %x Lê um número hexadecimal %p Lê um ponteiro %n Recebe um valor inteiro igual ao número de caracteres lidos até então %u Lê um número sem sinal %[] Busca por um conjunto de caracteres

scanf(“%d %d”, &num1, &num2); printf(“%d ”, num1); printf(“%d\n”, num2); //o ‘\n’ faz com que ele pule para a próxima linha printf(“Soma: %d”, num1+num2); printf(“\n”); printf(“Fim Programa”);

Simulação da execução: TELA

III.6 – Um Primeiro Programa Um aluno do curso de Construção de Programas deseja calcular a sua média final, conhecidas as suas três notas parciais. Escreva um programa computacional que executa esta operação. OBS.: As notas parciais podem ser fracionárias; a média final é a média aritmética das três notas parciais.

main(){

float nota1, nota2, nota3, media_final;

scanf(“%f %f %f”, &nota1, &nota2, &nota3);

media_final = (nota1 + nota2 + nota3) / 3; //aqui é feito o cálculo da média

printf(“A Media Final eh: %d”, media_final);

}

Esse exemplo já permite identificar as partes de um programa. São elas: cabeçalho, dicionário de dados, corpo e comentários. III.6.1 – Dicionário de Dados No dicionário de dados se definem todas as variáveis e constantes utilizadas no programa. Também os nomes das variáveis devem ser auto-explicativos. No caso de não ficar explicito a função da variável com o nome, deve-se utilizar comentários explicativos. A forma de declaração de dados já foi definida anteriormente.

III.6.2 – Corpo

Entre com dois números inteiros:1 2 1 2 Soma: 3

Fim Programa

È onde se descrevem as operações que se devem efetuar sobre os dados (entradas, atribuições, cálculo de expressões e saídas) de forma a obter informações desejadas. No caso de algum trecho do programa não ter uma leitura imediata e fácil, mesmo por quem não o construiu, também dev-se utilizar comentários explicativos.

III.6.3 – Corpo Os comentários são a última parte do programa, mas não a menos importante. Como se explicou, os comentários se localizam em todas as partes do programa (cabeçalho, dicionário de dados e corpo). Sua função é explicar a função de cada operação cuja utilidade não esteja clara a uma leitura imediata. Também o programa como um todo merece um conjunto de comentários que descrevem sua utilidade, o que se faz com um grupo de comentários associados ao cabeçalho do programa. E qualquer parte do programa, pode se identificar os comentários por estarem escritos entre /* e */ ou à frente de //. Aquelas funcionam como delimitadores dos comentários. Em exemplos pequenos como o acima, a utilização de nomes mnemônicos nas variáveis é suficiente para garantir a legibilidade do programa. Em programas maiores, contudo, isto pode não ocorrer: neste caso a utilização de comentários é essencial. O critério para o uso ou não de comentários é subjetivo, mas pode ser bem traduzido pelo seguinte questionamento: ‘Será que um programador médio, não tão capaz e inteligente quanto eu mesmo, será capaz de ler e entender cada linha de código escrito com a sma facilidade? Será que eu serei capaz de entender a função de cada variável e cada linha de código daqui a um ano, as 21:00 horas de uma sexta-feira de carnaval, quando este programa der um defeito e eu for o responsável pela sua correção?’ Muitos programadores acostumados a restrições de linguagens antigas têm o mau costuma de definir nomes de variáveis muito pequenos e pouco explicativos (uma ou duas letras), também só incluem comentários quando são diretamente obrigados pela sua chefia,e isto após a escrita do seu programa, quando já esqueceram boa parte das funções do programa e suas variáveis. A experiência demonstra que o tempo gasto em escrever nomes maiores e mais explicativos é bem menor que aquele gasto tentando lembrar a função e o tipo de uma variável de nome XY2 na milésima primeira linha de código, ou procurando a definição desta variável na folha de número 257 em um bloco de listagem com 500 páginas. Na mesma linha de raciocínio, os comentários podem e devem ser definidos durante a construção do programa. Ao utilizar as técnicas de programação estruturada, o programador terá todos os comentários apropriados a cada parte do programa antes de iniciar seu detalhamento final.

  • Comentários no cabeçalho

Um grupo de comentários são aqueles relativos ao conjunto do programa. Antes de algumas informações sobre o autor e a data de construção do programa, existem 5 comentários fundamentais em qualquer programa: − Função: deve-se descrever o objetivo do programa com um texto conciso; − Entradas: descrevem-se todos os dados cuja leitura é necessária durante a execução do programa; − Saídas: descrevem-se todas as saídas de resultados obtidos ao longo do programa; − Condição de parada: muitas vezes os programas executam tarefas repetitivas. A não ser que haja uma condição de arada estipulada, o programa continuaria indefinidamente. Esta condição deve ser explicitada nos comentários do cabeçalho;

III.7.2 – Estrutura de Seleção Quando uma ação ou conjunto de ações dentro do programa depender de uma teste, que decide pela sua execução ou não, deve-se utilizar o comando (estrutura) de seleção.

Comando if / else Sua forma geral é: if ( expressão ) Comando e lse Comando

O comando1 só será executado se a expressão for verdadeira. Caso contrário será executado o comando. Jamais ambas expressões de comandos serão executadas, e também nunca teremos nenhuma expressão sem ser executada.

Exemplo: Calcular a média final de um aluno do curso de programação a partir de suas três notas parciais. Caso sua nota final seja inferior (superior) a 6.0, imprima uma aviso de que o aluno foi reprovado (aprovado). Algoritmo em português: − Leitura das notas − Cálculo das médias − Se média inferior a 6.0: aluno reprovado − Senão: aluno aprovado

Algoritmo traduzido para C.

main(){

int matricula; float n1, n2, n3, mediaFinal;

printf(“Entre com as notas parciais: ”);

scanf(“%d %f %f %f”, &matricula, &n1, &n2, &n3);

mediaFinal = (n1 + n2 + n3) / 3.0;

if(mediaFinal < 6.0){ printf(“O aluno %d foi reprovado.”); } else{ printf(“O aluno %d foi aprovado.”); }

Observe que os delimitadores ‘{‘ e ‘}’ foram omitidos nas cláusulas if / else, isto porque sempre que uma seqüência for composta por apenas um comando os delimitadores são opcionais, porém é sempre bom colocá-los. O ‘;’ nunca é colocado antes da cláusula else, visto que o ‘;’ representa o fim do comando if e o else nada mais é que a continuação do comando if / else. A cláusula else é opcional, podendo a estrutura reduzir-se a: if ( expressão ) Comando Neste caso, se a condição for falsa o comando seguinte ao comando if será executado. Exemplo: Ler dois números e ordená-los.

main(){

int num1, num2, aux;

printf(“Entre com os números: ”);

scanf(“%d %d”, &num1, &num2);

printf(“Valores desordenados: %d %d.\n”, num1, num2);

if(num1 > num2){ aux = num1; num1 = num2; num2 = aux; }

printf(“Valores ordenados: %d %d.\n”, num1, num2);

}

O programa lê dois números e faz a troca, ordenando-os, caso num1 seja maior que num2. Caso contrário à troca não é executada e o comando seguinte ao if é executado. OBS.: Para que uma variável participe de uma operação de comparação é necessário que inicialmente à ela seja atribuído algum valor, através de leitura ou atribuição.

Programa MaiorDeTres:

main(){ /* Funcao: le tres números e identificar o maior. Entrada: tres numeros inteiros. Saida: o maior dos tres numeros inteiros. */

int n1, n2, n3;