APOSTILA DE PROGRAMAÇÃO – C3.ET1.ELE ETAPA 1
Apostila de Algoritmos e Linguagem C
Programação Estruturada PROFª INGRID SANTOSAlgoritmos
1 ABORDAGEM CONTEXTUAL
O uso de algoritmos é quase tão antigo quanto à matemática. Com o passar do tempo, entretanto, ele foi bastante esquecido pela matemática. Com o advento das máquinas de calcular e mais tarde os computadores, o uso de algoritmos ressurgiu com grande vigor, como uma forma de indicar o caminho para a solução dos mais variados problemas.
Algoritmo não é a solução do problema, pois, se assim fosse, cada problema teria um único algoritmo. Algoritmo é o caminho para a solução de um problema, e em geral, os caminhos que levam a uma solução são muitos.
Ao longo dos anos surgiram muitas formas de representar os algoritmos, alguns utilizando linguagens semelhantes às linguagens de programação e outras utilizando formas gráficas.
O aprendizado de algoritmos não se consegue a não ser através de muitos exercícios.
1.1
CONCEITO DE ALGORITMOS
É um processo de cálculo matemático ou de resolução de um grupo de problemas semelhantes, em que se estipulam, com generalidade e sem restrições. Podemos dizer também, que são regras formais para obtenção de um resultado ou da solução de um problema, englobando fórmulas de expressões matemáticas. Em processamento de dados, é muito comum relacionar a palavra algoritmo com diagramação de bloco, já que muitas fórmulas estão dentro das simbologias de processos para a resolução de um determinado problema, seja na área financeira, seja uma folha de pagamento, bem como, em qualquer situação que exija um resultado final “correto” e/ou “coerente”.
Resumindo,
Um algoritmo é um conjunto de instruções finitas colocados em uma seqüência lógica, com oobjetivo de resolver um determinado problema.
Figura 1: Resolução de problemas com algoritmos
Para se ter um algoritmo é necessário:
• Que tenha um número finito de passos;
• Que cada passo esteja precisamente definido, sem possíveis ambigüidades • Que existam zero ou mais entradas tomadas de conjuntos bem definidos • Que existam uma ou mais saídas
• Que exista uma condição de fim sempre atingida para quaisquer entradas e num tempo finito. Problema Algoritmo __________ __________ __________ __________ __________ __________ Solução
1.2 FORMAS DE REPRESENTAÇÃO DE ALGORITMOS
Dentre as formas de representação de algoritmos mais conhecidas podemos citar: Descrição Narrativa, Fluxograma Convencional e Pseudocódigo.
1.2.1 Descrição Narrativa
Nesta forma de representação os algoritmos são expressos diretamente em linguagem natural. Exemplo:
• Receita de bolo:
Pegue uma tigela
Coloque todos os ingredientes Misture os ingredientes Unte a forma com manteiga Despeje a mistura na forma Se houver coco ralado então despeje sobre a mistura Leve a forma ao forno Enquanto não corar deixe a forma no forno Retire do forno
Deixe esfriar
1.2.2 Pseudocódigo
Esta forma de representação de algoritmos, também conhecida com português estruturado ou portugol, é bastante rica em detalhes e, por assemelhar-se bastante à forma em que os programas são escritos.
Esta representação é suficientemente geral para permitir que a tradução de um algoritmo nela representado para uma linguagem de programação específica seja praticamente direta.
Representação de Algoritmo em forma de pseudocódigo Algoritmo <nome_do_algoritmo>
Var
<seção de declaração de variáveis> Inicio
<corpo do algoritmo> fimalgoritmo
Algoritmo é uma palavra que indica o início da definição de um algoritmo em forma depseudocódigo. <nome_do_algoritmo> é um nome simbólico dado ao algoritmo com a finalidade de distingui-lodos demais. <declaração_de_variáveis>consiste em uma porção opcional onde são declaradas asvariáveis globais usadas no algoritmo principal e, eventualmente, nos subalgoritmos.
<subalgoritmos>consiste de uma porção opcional do pseudocódigo onde são definidos ossubalgoritmos.
Início e Fim são respectivamente as palavras que delimitam o início e o término do conjunto deinstruções do corpo do algoritmo.
1. 3 REPRESENTAÇÃO DE ALGORITMOS X LINGUAGEM C
ALGORITMOS LINGUAGEM C
Algoritmo Exemplo var
<declaração de variáveis> inicio
<corpo do algoritmo> fim
<inclusão das bibliotecas> main( )
{
<declaração das variáveis> < corpo do programama> }
1.4 FATORES A SEREM LEVADOS EM CONSIDERAÇÃO NA CONSTRUÇÃO DE
ALGORITMOS
Complexidade: A complexidade pode ser vista como um sinônimo de variedade, as quaisdevem ser previstas na sua solução. Deve-se fazer o máximo para diminuir a complexidade,a fim de controlar o problema e encontrar a solução. Deve-se diferenciar O que de Como. Aforma errada de interpretação de um problema pode levar a respostas irrelevantes à soluçãoalmejada ou até mesmo a nenhuma solução.
Legibilidade: Mede a capacidade de compreensão de um algoritmo por qualquerobservador, a clareza com que sua lógica está exposta. Quanto mais legível for umalgoritmo, menor será sua complexidade.
Portabilidade: para trabalhar os algoritmos usa-se uma pseudo-linguagem, que visa apermitir a representação dos algoritmos através da língua portuguesa (portuguêsestruturado). Estes algoritmos poderão ser convertidos facilmente para qualquer linguagemde programação usual.
Técnica de resolução por método Cartesiano: é um método que ataca um problemagrande, de difícil solução, dividindo-o em problemas menores de soluções mais fáceis
Planejamento reverso: consiste em, a partir do resultado final, determinar quais são oscomponentes básicos para a solução.
2 TÉCNICAS BÁSICAS DE PROGRAMAÇÃO
2.1 TIPOS DE INFORMAÇÕES
Todo o trabalho realizado por um computador é baseado na manipulação das informações contidas em sua memória. Estas informações podem ser classificadas em dois tipos: instruções e dados.
As instruções comandam o funcionamento da máquina e determinam a maneira como devem ser tratados os dados.
Os dados são as informações a serem processadas pelo computador. Os dados podem ser classificados em três tipos, que sintetizam os padrões utilizados na maioria das linguagens: numéricos, caracteres e lógicos.
2.1.1 Tipos inteiros
É toda e qualquer informação numérica que pertença ao conjunto dos números inteiros (positivo, negativo ou nulo). Exemplos:
• A quantidade de funcionários de uma empresa é um dado inteiro, pois não existe parte fracionária (não há ½ pessoa);
• O número de cheques emitidos por um correntista (Não há como emitir uma quantidade fracionária de cheques);
2.1.2 Tipos reais
É toda e qualquer informação numérica que pertença ao conjunto dos números reais (positiva, negativa, nula, inteira e fracionária). Exemplos:
• O valor a pagar por uma compra em uma loja: real, pois representa um valor monetário que pode incluir centavos (uma compra pode até resultar num valor exato, como R$100,00, mas a natureza do dado continua sendo real);
• Litros abastecidos em um posto de gasolina: é um tipo de dado real, pois é possível fazer um abastecimento de uma quantidade fracionária de litros (Ex.: 23.7 litros)
• Altura de uma pessoa em metros: real, pois normalmente medimos a altura com duas casas decimais (Ex.: 1,83).
Observação:
• Um dado real, é representado somente por dígitos, ponto decimal e sinal de mais ou de menos, qualquer outra escrita do número será considerada um erro de sintaxe.
2.1.3 Tipo caractere
Representa um caractere a ser armazenado na memória. Um caractere pode ser uma letra, um dígito ou um símbolo especial. Todo caractere é indicado entre aspas (“”). Exemplos:
• A opção escolhida por um aluno numa questão de múltipla escolha é um dado caractere, se considerarmos que ele pode escolher entre A e E;
• O sinal de pontuação no final de uma frase é um dado do tipo caractere, pois pode ser o sinal “.” ou ainda “?” ou “!”.
2.1.4 Cadeia de Caracteres
Representa um conjunto de caracteres a ser armazenado na memória, que pode ser composto por letras, dígitos ou outros símbolos. Como num caractere, uma cadeia de caracteres também é indicado entre aspas (“”). Também é conhecido como dado Literal, Texto ou String. Exemplos:
• O nome de um vendedor em uma loja: é uma cadeia, pois é composto por letras e espaços (Ex.: “Carla da Rosa”);
• Um telefone de um cliente de uma corretora, pois pode ser representado da seguinte forma: 5555-1234 (uma cadeia composta por dígitos e o símbolo de traço). Mesmo que seja representado apenas por dígitos (55551234), a sua natureza não é um valor numérico;
• Endereço de entrega de um produto (Ex.: “Rua das Flores, 23 – Grupo 8”).
2.1.5 Tipos Lógicos
Os tipos dados apresentados são utilizados para representar dados numéricos, e alfanuméricos, porém há situações que há necessidade de representar um estado, uma situação que só pode ser verdadeira ou falsa (e nenhuma outra a mais), neste caso usa-se então o dado lógico (ou booleano, por ter sido desenvolvido na álgebra de Boole). Exemplos:
• Um cheque emitido pode ou não ter fundos: se quisermos armazenar a situação deste cheque (não o valor, mas seu estado), já que ter fundos é uma situação que só pode ser verdadeira ou falsa;
• Estado de funcionamento de um automóvel: pois o automóvel só pode estar ligado ou desligado.
2.2 TIPOS DE DADOS: ALGORITMOS X LINGUAGEM C
ALGORITMOS LINGUAGEM C
inteiro int
real float, double
caracter char
literal ou cadeia de caracteres string
2.3 OPERADORES E EXPRESSÕES
2.3.1 Operadores Aritméticos
Os operadores são símbolos conectivos usados para efetuar algum cálculo numérico.
+ (adição) ** ou ^ (potenciação)
- (subtração) div ou # (divisão inteira)
* (multiplicação) mod ou % (resto da divisão)
/ (divisão) Exemplos: 2+3 é igual a 5 7*4 é igual a 28 3.2*9 é igual a 28.8 5/2 é igual a 2.5 2-9 é igual a -7
11 # 3 é igual a 3 (o quociente de uma divisão inteira) 11 % 3 é igual a 2 (o resto da divisão inteira)
11 div 3 é igual a 3 (o quociente de uma divisão inteira) 11 mod 3 é igual a 2 (o resto da divisão inteira)
2.3.2 Operadores Relacionais
Como o próprio nome indica, um operador relacional existe para estabelecer uma relação entre dois elementos, cujo resultado da comparação será sempre falso ou verdadeiro.
= (igual) <= (menor ou igual) < (menor que) >= (maior ou igual) > (maior que) <> (diferente) Exemplos: 3 > 4 é igual a falso 10 >= 9 é igual a verdadeiro -1 > -2 é igual a verdadeiro 7.3 <> 8.9 é igual a verdadeiro 4 < 3 é igual a falso 2.3.3 Operadores lógicos
Estes operadores permitem estender o uso dos operadores relacionais, estabelecendo composições lógicas mais sofisticadas.
E (conjunção de operação) Ou (disjunção de operação) Não (negação de operação) Tabela verdade do operador E
X Y X e Y
Verdadeiro Verdadeiro Verdadeiro
Verdadeiro Falso Falso
Falso Verdadeiro Falso
Falso Falso Falso
Tabela verdade do operador OU
X Y X ou Y
Verdadeiro Verdadeiro Verdadeiro
Verdadeiro Falso Verdadeiro
Falso Verdadeiro Verdadeiro
Falso Falso Falso
Tabela verdade do operador NÃO
X NAO X
Verdadeiro Falso
Falso Verdadeiro
2.3.4 Operador de atribuição
Um operador de atribuição serve para atribuir um valor ou um resultado de uma expressão a uma variável, o mesmo que acontece na matemática quando temos a expressão X=5 quer dizer que o valor de X é 5, em algoritmos usamos ou := para representar o igual (=) da matemática.
Exemplos:
X:=5 ou X5 X:= 5+2 ou X5+2
2.3.5 Montagem de Expressões
Assim como na matemática, pode ser necessário fazer combinações entre os operadores. Além dos operadores, uma expressão pode conter também símbolos de parênteses, para mudar a prioridade do cálculo.
1º Lugar Parênteses mais internos 2º Lugar Funções
3º Lugar Operadores aritméticos 1º: Potenciação
2º: Multiplicativos (*, /, #, %) 3º: Aditivos (+, -)
4º Lugar Operadores Relacionais
5º Lugar Operadores Lógicos 1º: Nao 2º: e 3º: ou
2.4 OPERADORES: ALGORITMO X LINGUAGEM C
OPERADORES ALGORITMOS LINGUAGEM C
Aritméticos +, -, *, /, div, mod +, -, *, /, np* , % Relacionais >, <, >=, <=, =, <> >, <, >=, <=, = =, !=
Lógicos e, ou, nao &, | , ˜
Atribuição :=, =
*np=não possui
2.5 VARIÁVEIS
Definição de variável é tudo aquilo que está sujeito a variações, que é incerto, instável ou inconstante. São áreas na memória do computador utilizadas pelo programa para guardar valores que serão usados por eles.
Cada variável pode ter associada a ela um valor de um determinado tipo de dado. Sendo assim, têm-se variáveis do tipo numérico, caractere e lógico.
Uma analogia muito comum é imaginar uma variável como uma caixinha dentro da memória do computador. Esta caixa tem a capacidade de guardar um dado de certo tipo, e o nome da variável é como uma etiqueta colada na frente da caixa. Exemplo:
As variáveis existem na memória durante a execução do algoritmo. Quando ele termina, é como se todos os dados fossem apagados, e as caixas destruídas.
2.5.1 Nomenclatura de variávies
MEMÓRIA idade nome_aluno salario Taxa_imposto 18 Maria 2500 0,423
Uma variável possui três atributos: um nome, um tipo de dado, e a informação por ela guardada. Para nomear uma variável deve-se seguir algumas regras:
• Um nome de variável deve necessariamente começar com uma letra; • Um nome de variável pode ter um ou mais caracteres;
• Um nome de variável não pode conter nenhum símbolo especial, exceto o anderline (_), nenhum acento e espaço em branco;
• Um nome de variável não poderá ser uma palavra reservada a uma instrução da linguagem usada; • Preferencialmente devem ter relação com o valor que a variável está guardando.
Exemplos de nomes de variáveis: Válidos: nome x endereco salario nome_empresa valor1 Inválidos 1lugar Endereço Salário Nome empresa _desconto
2.5.2 Declaração das variáveis
Todas as variáveis utilizadas em algoritmos devem ser definidas antes de serem utilizadas. Isto se faz necessário para permitir que o compilador reserve um espaço na memória para as mesmas.
Nos algoritmos, todas as variáveis serão definidas no início do mesmo, por meio de um comando de uma das seguintes formas:
var nome_variavel: tipo_de_dado_da_variavel lista_de_nomes_das_variaveis: tipo_de_dado Exemplos: var nome:literal nome, endereço:literal salario:real
2.6 VARIÁVEIS: ALGORITMOS X LINGUAGEM C
ALGORITMOS LINGUAGEM C
Exemplos: opcao: caracter Salario:real Idade: inteiro Exemplos: char opcao; float salario; int idade;
3 INSTRUÇÕES PRIMITIVAS
Como o próprio nome diz, instruções primitivas são os comandos básicos que efetuam tarefas essenciais para a operação dos computadores, como entrada e saída de dados (comunicação com o usuário e com
dispositivos periféricos), e movimentação dos mesmos na memória. Estes tipos de instruções estão presentes na absoluta maioria das linguagens de programação.
3.1 COMANDOS DE ATRIBUIÇÃO
O comando de atribuição ou simplesmente atribuição, é a principal maneira de armazenar uma informação numa variável. Sua sintaxe é:
<nome_de_variável>:=<expressão> Exemplo: Nome:= “Ingrid” Preco:= 15.85 Quant:=5 Total:= preço*quant
3.2 COMANDO DE SAÍDA DE DADOS
O comando de saída de dados é definido como escreva e é utilizado para exibir uma mensagem ou informações contidas na memória dos computadores na tela do usuário.
Sintaxes para a instrução:
• Escreva (variável) Exemplo: escreva (nome) • Escreva (lista_de_variáveis) Exemplo: escreva (nome, end)
• Escreva (literal) Exemplo: escreva (“Digite seu nome”) • Escreva (literal, variável) Exemplo: escreva (“Seu nome é ”, nome)
3.3 COMANDO DE ENTRADA DE DADOS
O comando de entrada de dados é definido como leia e atribui um valor lido através do teclado para uma variável especificada.
Sintaxes usadas:
• Leia (variável) Exemplo: leia (nome)
3.4 INSTRUÇÕES PRIMITIVAS: ALGORITMOS X LINGUAGEM C
COMANDO ALGORITMOS LINGUAGEM C
Atribuição := ou =
Entrada de dados Leia() scanf()
Saída de dados Escreva() printf()
4 ESTRUTURA DE CONTROLE DE FLUXO DE EXECUÇÃO
Na prática, muitas vezes é necessário executar ações diversas em função dos dados fornecidos ao algoritmo. Em outras palavras, dependendo do conjunto de dados de entrada do algoritmo, deve-se executar um conjunto diferente de instruções. Além disso, pode ser necessário executar um mesmo conjunto de instruções um número repetido de vezes. Em resumo é necessário controlar o fluxo de execução das instruções (a seqüência em que as instruções são executadas num algoritmo) em função dos dados fornecidos como entrada do mesmo.
De acordo com o modo como o controle do fluxo de instruções de um algoritmo é feito, as estruturas básicas de controle são classificadas em:
• Estruturas seqüenciais • Estruturas condicionais • Estruturas de repetição
4.1 ESTRUTURA SEQÜENCIAL
Na estrutura seqüencial os comandos de um algoritmo são executados numa seqüência pré-estabelecida. Cada comando é executado somente após o término do comando anterior.
Uma estrutura seqüencial é delimitada pelas palavras-reservadas Início e Fim e contém basicamente comandos de atribuição, comandos de entrada e comandos de saída.
Exemplos:
1. Algoritmo para escrever a mensagem “Boa noite” na tela: Algoritmo Exemplo1
Variaveis Inicio
Escreva (“Boa noite!”) Fim
2. Algoritmo para ler um número digitado pelo usuário e escrever o valor desse número multiplicado por 2. Algoritmo Exemplo2
Variaveis
Numero: real Inicio
Escreva (“Digite um número”) Leia (Numero)
Numero:= Numero*2
Escreva (“O dobro do número digitado é ”, Numero) Fim
4.1.1 Exemplos em Linguagem C
ALGORITMOS LINGUAGEM C
Algoritmo Exemplo1 Variaveis
Inicio
Escreva (“Boa noite!”) Fim #include <stdio.h> main() { printf(“Boa noite!”); } Algoritmo Exemplo2 Variaveis Numero: real Inicio
Escreva (“Digite um número”) Leia (Numero)
Numero:= Numero*2
Escreva (“O dobro do número digitado é ”, Numero) Fim #include <stdio.h> main() { float numero; printf(“Digite um numero:”); scanf(“%f”,&numero); numero=numero*2;
printf(“O dobro do numero digitado é %f”,numero);
}
4.1.2 Exercícios de Fixação
1. Construir um algoritmo que leia um número e escreva o valor deste número dividido por 2. 2. Construir um algoritmo que leia dois números e escreva a média aritmética entre eles. 3. Escreva um algoritmo que leia quatro números e escreva o valor da soma desses números. 4. Escrever um algoritmo que leia um valor que corresponde a um valor em hora e escreva quantos
segundos tem nessa hora.
5. Escreva um algoritmo que leia três números (A, B, C) e calcule a seguinte expressão:
R = A + B Q = (B+C)2
2
6. Faça um algoritmo que leia três notas de um aluno (n1, n2, n3) e a seguir calcule sua média final. A fórmula para o cálculo da média é:
M = n1 + n2*2 + n3*3 6
4.2 ESTRUTURAS DE DECISÃO
As estruturas condicionais são utilizadas para que seja possível executar, ou não executar, instruções do algoritmo, de acordo com uma condição analisada.
4.2.1 Estrutura de Decisão Simples (se...entao...fimse)
Nesta estrutura uma única condição é avaliada. Dependendo do resultado desta avaliação, um comando ou conjunto de comandos serão executados (se avaliação for verdadeira) ou não serão executados (se avaliação falsa). Sintaxe usada: Se (condição) entao Instrução1 Instrução2 Fimse Exemplo:
Algoritmo que informa se o número digitado pelo usuário é maior do que 10. Algoritmo exemplo_se_simples
Variaveis
num: real Inicio
Escreva (“Digite um número”) Leia (num)
Se (num>10) entao
Escreva (“o número digitado é maior que 10”) Fimse
Fim
4.2.2 Estrutura Condicional Composta (se...então...senão...fimse)
Nesta estrutura uma única condição é avaliada. Se o resultado desta avaliação for verdadeira, um comando ou conjunto de comandos serão executados. Caso contrário (avaliação falsa), um outro comando ou conjunto de comandos serão executados.
Sintaxe usada
Se (condição) entao
Comando1 comandos executados caso Comando2 condição for verdadeira
Senao
Comando3 comandos executados caso Comando4 condição for falsa
Algoritmos e Linguagem C Exemplo:
Algoritmo que informa se o número digitado pelo usuário é maior ou menor que 10. Algoritmo Exemplo_se_composto
Variaveis num:real Inicio
Escreva (“Digite um número”) Leia (num)
Se (num>10) entao
Escreva (“O número digitado é maior que 10”) Senao
Escreva (“O número digitado é menor que 10”) Fimse
Fim
4.2.3 Estrutura de Decisão Aninhada ou Encadeada
Existem casos em que é necessário estabelecer verificação de condições sucessivas, em que uma determinada ação poderá ser executada se um conjunto anterior de instruções ou condições for satisfeito. Sendo a ação executada, ela poderá ainda estabelecer novas condições. Isto significa utilizar uma condição dentro de outra condição. Este tipo de estrutura poderá possuir diversos níveis de condição, sendo chamadas de aninhamentos ou encadeamentos. Sintaxe usada Se (condição1) entao Comandos1 Senao Se (condição2) entao Comandos2 Senao Se (condição3) entao Comandos3 Senao Comandos4 Fimse Fimse Fimse Exemplo:
Algoritmo que verifica qual dos dois valores digitados pelo usuário é o maior, ou se os mesmo são iguais.
Algoritmos e Linguagem C Algoritmo Exemplo_se_encadeado
Variáveis a,b:real Inicio
Escreva (“Digite dois valores”) Leia (a, b)
Se (a>b) entao
Escreva (a, “é o maior”) Senao
Se (b>a) entao
Escreva (b, “é o maior”) Senao
Escreva (“os valores são iguais”) Fimse
Fimse Fim
4.2.4 Estruturas de Decisão: Algoritmo X Linguagem C
Estruturas Algoritmo Linguagem C
Decisão Simples Algoritmo exemplo_se_simples _enão_eis
num: real Inicio
Escreva (“Digite um número”) Leia (num)
Se (num>10) _enão
Escreva (“o número digitado é maior que 10”) Fimse Fim #include<stdio.h> main() { float num;
printf (“Digite um número”); scanf (“%f”,&num);
if (num>10) {
printf (“o número digitado é maior que 10”);
} } Decisão Composta Algoritmo Exemplo_se_composto
_enão_eis num:real Inicio
Escreva (“Digite um número”) Leia (num)
Se (num>10) _enão
Escreva (“O número digitado é maior que 10”)
_enão
Escreva (“O número digitado é menor que 10”) Fimse Fim #include<stdio.h> main() { float num;
printf (“Digite um número”); scanf (“%f”,&num);
if (num>10) {
printf (“O número digitado é maior que 10”);
}else{
printf (“O número digitado é menor que 10”);
} Fim
Algoritmos e Linguagem C Decisão Encadeada Algoritmo Exemplo_se_encadeado
Variáveis a,b:real Inicio
Escreva (“Digite dois valores”) Leia (a, b)
Se (a>b) entao
Escreva (a, “é o maior”) Senao
Se (b>a) entao
Escreva (b, “é o maior”) Senao
Escreva (“os valores são iguais”) Fimse Fimse Fim #include<stdio.h> main() { float a,b;
printf (“Digite dois valores”); scanf (“%f,%f”,&a, &b); if (a>b){ printf (“%f é o maior”,a); }else{ if (b>a) { printf ( “%f é o maior”,b); }else{
printf (“os valores são iguais”); }
} }
4.2.5 Exercícios de fixação
1. Escreva um algoritmo para calcular o valor de desconto de um salário. Se o valor do salário lido for menor que R$ 500,00, então o desconto é de 10 reais, caso contrário, o desconto é de 20 reais.
2. Construir um algoritmo que leia o nome e a idade de uma pessoa. Após as leituras, o algoritmo deverá escrever uma mensagem informando se a pessoa pode, ou não, tentar obter a carteira de motorista. 3. Escrever um algoritmo que leia dois números (x e y), após as leituras, escrever qual dos dois é o maior.
OBS: os números digitados deverão ser diferentes
4. Escrever um algoritmo que leia 3 notas e calcule a média aritmética. A seguir, escrever a média obtida e uma mensagem indicando se o aluno foi aprovado ou reprovado. Para ser aprovado a média deverá ser maior ou igual a 5.
4.3 ESTRUTURAS DE REPETIÇÃO
As estruturas de repetição, como o próprio nome já diz, são utilizadas para REPETIR determinados comandos do algoritmo. O número de vezes que esses comandos serão repetidos, podem ser especificados pelo programador ou analisados de acordo com uma condição.
4.3.1 Estrutura De Repetição Com Teste Lógico No Início (enquanto...faça...fimenquanto)
A estrutura enquanto é utilizada para se repetir comandos nos casos em que o número de repetições não é conhecido.
Algoritmos e Linguagem C
Os comandos vão sendo executados repetidamente até que uma condição específica seja satisfeita. Essa condição que interrompe a repetição dos comandos é conhecida como teste ou flag.
Sintaxe usada
Enquanto (condição) faca
comando1 comando2 ... comando n fimenquanto Exemplo:
Algoritmo que fica lendo números e escrevendo o valor do dobro de cada número lido, até que seja digitado um número menor ou igual a zero.
Algoritmo Exemplo_enquanto Variáveis
num:inteiro Inicio
Escreva (“Digite um número inteiro”) Leia (num)
enquanto (num>0) faca escreva (num*2)
escreva (“Digite outro número ou um valor negativo para sair”) leia (num)
fimenquanto fim
4.3.2 Estrutura de Repetição com Teste Lógico no Fim (repita...até que)
Caracteriza-se por uma estrutura que efetua um teste lógico no final de um laço, verificando se é permitido ou não executar novamente o conjunto de comandos no interior do mesmo.
Sintaxe usada Repita comando1 comando2 ... comandon Ate_que (condição) Exemplo:
Algoritmo que fica lendo números e escreve o valor lido ao quadrado, até que seja digitado um valor negativo.
Algoritmos e Linguagem C Algoritmo exemplo_repita
Variaveis num:real inicio
Repita
Escreva (“Digite um número”) Leia (num)
Escreva (“0 quadrado do nº é ”, num^2) Ate_que (num<0)
fim
4.3.3 Estrutura de Repetição com variável de controle (para...faca...fimpara)
A estrutura para é utilizada para repetição nos casos em que o número de repetições é conhecido, ou seja, quando se sabe o número de vezes que serão repetidas as instruções.
Sintaxe usada
Para <variável> de <início> ate <fim> faca
comando1 comando2 ... comandoN fimpara Exemplo: Exemplo
Algoritmo que escreve na tela todos os números inteiros entre 1 e 10. Algoritmo exemplo_para
Variaveis i:inteiro inicio
para i de 1 ate 10 faca
escreva (i)
fimpara fim
Existe uma condição especial em que a contagem deve ser de forma decrescente, onde o valor a variável é decrementado em uma unidade. A sintaxe deste laço é a seguinte:
para <variável> de <início> ate <fim> PASSO -1 faca
comando1 comando2 ... comandoN
Algoritmos e Linguagem C Exemplo:
Algoritmo que escreve na tela todos os números inteiros entre 10 e 1. Algoritmo exemplo_para
Variaveis i:inteiro inicio
para i de 10 ate 1 passo -1 faca
escreva (i)
fimpara fim
4.3.4 Estruturas de Repetição: Algoritmos X Linguagem C
Estruturas de Repetição Algoritmos Linguagem C
Teste Lógico no Início enquanto (condição) faca comandos
fimenquanto
while (condição){ comandos; }
Teste Lógico no Fim repita
comandos ate_que (condição)
do{
comandos; }while (condição); Com Variável de Controle para variável de inicio ate fim faca
Comandos fimpara
for (var=inicio; var<fim; var++){ comandos;
} EXEMPLOS
Teste Lógico no Início Algoritmo exemploEnquanto Var
idade: inteiro Inicio
Escreva (“Digite sua idade”) Leia (idade)
enquanto (idade<0) faca escreva(“Idade inválida!”) Escreva (“Digite sua idade”) Leia (idade)
Fimenquanto
Escreva (“Você tem”, idade,”anos”) fim
#include<stdio.h>; main()
{
int idade;
printf(“Digite sua idade”); scanf(“%d”,&idade); while(idade<0){
printf(“Idade inválida!”); printf(“Digite sua idade”); scanf(“%d”,&idade); }
printf(“Você tem %d anos”,idade); }
Algoritmos e Linguagem C Teste Lógico no Fim Algoritmo exemploRepita
Var
Idade:inteiro Inicio
Repita
Escreva (“Digite sua idade”) Leia (idade)
Ate_que (idade>0)
Escreva (“Você tem”,idade,”anos”) Fim #include <stdio.h> main() { int idade; do{
printf(“Digite sua idade:”); scanf(“%d”,&idade); }while (idade<=0);
printf(“Você tem %d anos”,idade); }
Com variável de controle Algoritmos exemploPara Var
i:inteiro idades:inteiro inicio
para i de 1 ate 10 faca
escreva(“Digite a “, i,”ª idade:”) leia (idade) escreva(“Você tem”,idade,”anos”) fiimpara fim #include <stdio.h> main() { int idade;
for (int i=0; i<10; i++){
printf(“Digite a %d ª idade”,i+1); scanf(“%d”,&idade);
printf(“você tem %d anos”,idade); }
Algoritmos e Linguagem C
Dúvidas sobre a Linguagem C:
Bibliotecas <stdio.h> e <stdlib.h>
Com certeza a primeira coisa que você se perguntou quando viu um código C na sua frente, foi para que servem #include<stdio.h> e #include<stdlib.h>? o que elas fazem?
Elas são bibliotecas que agrupam um conjunto de funções que facilitam a nossa vida na hora de programar, isso mesmo as funções printf e scanf não são propriamente do C, elas fazem parte de uma biblioteca que está inclusa no C, então podemos dizer que as funções printf e scanf são de uma biblioteca que pode ser inclusa no C. Utilizando a palavra chave #include <nome da biblioteca>.
A biblioteca que contém o printf e scanf é a <stdio.h>, se repararmos o nome dessa biblioteca, veremos que seu nome é bem sugestivo ao seu propósito: stdio.h (i/o input/output) entrada e saída. Já que printf faz a saída do programa, ou seja, exibe algo para o usuário, e o scanf faz a leitura dos dados, ou seja, recebe a entrada do teclado.
Então se a biblioteca <stdio.h> não for incluida no cabeçario do nosso programa não tem como usarmos as funções que estão contidas dentro dela. Faça um teste, experimente apagar a linha: #include<stdio.h>, e compile seu programa. Veja o que acontece.
Beleza, a biblioteca <stdio.h>, cuida da parte de entrada e saida de dados, mas e a<stdlib.h> para que ela seve? A biblioteca <stdlib.h> funciona como um emulador da prompt do sistema operacional que você está programando, caso seja Windows ele emula todos os comandos do DOS, se você estiver programando no Linux, quem será emulado é o Terminal.
Aqui um exemplo de como é legal brincar com a biblioteca <stdlib.h>: #include <stdlib.h> int main() { system("calc"); system("pause"); return 0; }
O que aconteceu ... legal né? Isso é só o começo de um montão de coisa que você pode fazer utilizando o system.
Ainda resta uma dúvida. Só existem essas bibliotecas em C ? É claro que não, existem muitas outras bibliotecas que são especificas para cada situação. Existem bibliotecas para trabalhar com contas matemáticas, bibliotecas para manipular textos, para manipular a formatação de exibição dos dados e uma infinidade de outras coisas. A melhor coisa a ser feita é uma pesquisa rápida pelo Google. ;)
O que são aqueles símbolos usados no scanf e no printf?
Função printf()
A função printf() já foi apresentada e explicada de forma simplificada no primeiro artigo. Agora teremos a oportunidade de rever esses conceitos e aprofundar mais no assunto.
Algoritmos e Linguagem C
Essa função tem por finalidade imprimir dados na tela. Isto é feito através da sintaxe:
printf(“expressão de controle”, lista de argumentos);
Na “expressão de controle” são inseridos todos os caracteres a serem exibidos na tela e/ou códigos de formatação, responsáveis por indicar o formato em que os argumentos devem ser impressos. Esses argumentos devem estar incluídos na “lista de argumentos” e caso contenha mais de um devem ser separados por virgula. A lista abaixo mostra os tipos de códigos de formatação permitido na linguagem C.
Código de formatação Descrição
%c Caracteres simples
%d Inteiros decimais com sinal
%I Inteiros decimais com sinal
%e Notação cientifica (e minúsculo)
%E Notacão cientifica (E maiúsculo)
%f Ponto flutuante decimal
%g Usa %e ou %f (qual for mais curto)
%G Isa %E ou %F (qual for mais curto)
%o Octal sem sinal
%s Cadeia de caracteres
%u Inteiros decimais sem sinal
%x Hexadecimal sem sinal (letras minúsculas)
%X Hexadecimal sem sinal (letras maiúsculas)
%% Escreve o símbolo de porcentagem (%)
Tabela 1: Tipos de códigos de formatação
Ao colocar em printf() os comandos %e ou %E estaremos imprimindo em notação cientifica. No caso de usarmos “%g” ou “%G” o compilador decide se escreve em ponto flutuante ou notação cientifica, o qual for mais curto. Veja o exemplo abaixo:
Algoritmos e Linguagem C
Os códigos especiais (barra invertida) são apresentados abaixo e também pode ser inseridos na “expressão de controle”. Veja a descrição de cada um deles:
Código especial Descrição
\n Nova linha \t Tab \b Retrocesso \” Aspas \\ Barra \f Salta formulário \0 Nulo
Tabela 2: Tipos de códigos especiais
É possível também especificar o tamanho do campo, o número de casas decimais e justificar à esquerda a saída.
Algoritmos e Linguagem C
Ao colocar um número entre o símbolo % e o código de formatação estamos especificando a largura mínima do campo. Ou seja, caso o comprimento da saída seja menor ela é completada com espaços. Podemos também completar com zeros para isto coloca-se antes do número especificador de largura um zero. Por exemplo, colocaríamos %08d para que um inteiro decimal com um número de dígitos inferior a oito seja completado com zeros.
Para indicar a precisão logo após o especificador de largura coloca-se um ponto seguido de um número inteiro. Quando se aplica a precisão em ponto flutuante estamos indicando o número de casas decimais que será mostrado. Por exemplo, %12.5f significa que o número ponto flutuante terá tamanho doze com cinco casas decimais. Já no caso do %g ou %G indica a quantidade de dígitos significativos. E em string especifica o numero Maximo de caracteres.
Por padrão a saída é justificada à direita, mas pode ser justificada à esquerda quando acrescentamos logo atrás do “%” um sinal negativo. Por exemplo, %-12.5f.
Função scanf()
A função scanf() permite ler os dados de entrada do teclado. O seu uso é muito comum nos programas, como podemos verificar em outros artigos. Veja agora a sua sintaxe que é muito parecida com a do printf().
scanf(“expressão de controle”, argumentos);
A “expressão de controle” é composta pelos códigos de formatação apresentados anteriormente que indica o tipo do dado a ser lido. A quantidade de argumentos deve ser igual a dos códigos de formatação e separadas por virgulas. A lista de argumentos deve ser constituída pelos endereços das variáveis. Para isto usamos o operador de endereço “&” que deve preceder o nome da variável que se deseja atribuir o valor da entrada. É necessário que o tipo de dado do argumento seja compatível com os códigos de formatação. Exemplo:
As funções printf() e scanf() fazem parte da biblioteca padrão de entrada e saída de dados. Portanto deve-se incluir a biblioteca “stdio.h” através da diretiva “include”. Isto é incluir a seguinte linha no começo dos programas: “#include<stdio.h>”.
Algoritmos e Linguagem C REFERÊNCIAS BIBLIOGRÁFICAS
Apostila de Introdução a Linguagem C. Disponível em: http://www.ufjf.br/petcivil/files/2009/02/Apostila-de-Introdu%C3%A7%C3%A3o-%C3%A0-Linguagem-C.pdf
BATISTTI, Júlio. Linguagem C. Entrada/Saída. Disponível em: http://juliobattisti.com.br/tutoriais/katiaduarte/cbasico005.asp
Programando. Espaço aberto para alunos, curiosos e profissionais da área de programação. Disponível em: http://programando-ads.blogspot.com.br/2012/02/para-que-servem-as-bibliotecas-e.html