Construção de Algoritmos
Construção de Algoritmos
Aquiles Burlamaqui
UERN
2008.1
Aula 02
Professor: Aquiles Burlamaqui
Linguagem de Programação C



Flexibilidade
Portabilidade
Usada no desenvolvimento de:




Unix
Linguagem C, C++
Java
Etc
Linguagem de Programação C



Programas em C geram programas
executáveis.
Mais veloz que outras linguagens de alto
nível.
Linguagem de relativo baixo nível, permite
operações com bits, bytes, endereços de
memórias.
Linguagem de Programação C

Instalação

Windows



Dev-C++
Turbo C++
Linux

gcc
Tipos de Dados

Manipulação de informações na memória



Instruções
Dados
Memória
1 célula = 1 byte = 8 bits
1 bit possui 2 estados: 0 e 1 (dígitos binários).
1 byte possui 28 = 256 estados possíveis.
Tipos de Dados

Tipos básicos podem ser:

Numéricos;




Inteiros
Reais;
Literais;
Lógicos;
Tipo de Dados

Numéricos

Inteiros: sem parte fracionária nem ponto;


Ex: 86 0 234 -34 4324
Reais: com parte fracionária e ponto;

Ex:85.3 -9.34 10.0 6.0 0.00
Tipos de Dados


Literais: Seqüências de caracteres contendo letras,
dígitos e/ou símbolos especiais
Também chamados de:





“alfanuméricos”
“cadeia de caracteres”
“strings”
Serão representados nos algoritmos entre aspas.
Ex:“UERN” comprimento 4;
“Construção de Algoritmos” comprimento ?;
“29/04/80” comprimento ?
“” comprimento ?
“ “ comprimento ?
Tipos de Dados

Lógico


Usados para representar dois únicos valores
lógicos possíveis: verdadeiro e falso.
Representados nos algoritmos como:
.V.
(verdadeiro) e .F. (falso).
Armazenamento na Memória
Variáveis

Guardar dados
 Nome
 Tipo
 Informação
Pseudocódigo
<Tipo>:<Lista de Variáveis
Ex:Inteiro: idade
Real : media,n1,n2,n3,n4,mf
Lógico : passou, flag
Literal : letra
Variáveis

Existem algumas regras básicas que regulam a o
batismo de variáveis. Estas regras básicas são:




Todo nome só pode conter letras e dígitos;
O caractere "_" é contado como uma letra;
Todo primeiro caractere deve ser sempre uma letra;
Letras maiúsculas e minúsculas são consideradas caracteres
diferentes;
Constantes



Reserva um espaço na memória acessado através do seu endereço que
é vinculado no algoritmo a um nome;
Esse espaço possui tamanho necessário para guardar seu tipo de dado,
e guarda um valor fixo do início ao final do programa;
Sintaxe:


Constante <nome_da_constante> = <valor>;
Ex:

Constante pi = 3,14;
Expressões


Expressão
 é uma combinação de variáveis, constantes e operadores que, uma
vez avaliada, resulta num valor
Operadores
 Quanto ao número de operandos



Unários
Binários
Quanto ao tipo de dado
 Operadores Aritméticos
 Operadores Lógicos
 Operadores Literais
 Operadores Relacionais
Operadores Aritméticos
Operador
+
*
/
**
+
-
Tipo
binário
“
“
“
“
unário
“
Operação
adição
subtração
multiplicação
3
divisão
exponenciação
manutenção de sinal
inversão de sinal
Prioridade
4
4
3
2
1
1
Operadores Aritméticos
Vamos considerar alguns exemplos para mostrar como estas regras
são aplicadas. Considere as seguintes variáveis:
A=2.0
B=4.0
C=1.0

Vamos então analisar expressões com estas variáveis e seus
resultados.
 A*B-C
 A*(B-C)
 B+A/C+5
 (B+A)/(C+5)

Operadores Aritméticos
1)5x3 + 7x2 – 3x – 1
Resp.: 5.0*x**3 + 7.0*x**2 – 3.0*x –1.0
2)x0 + v0t – 1 gt2
2
Resp.:xo + vo*t – 0.5*g*t**2
Operadores Lógicos
Operador
.OU.
.E.
.NÃO.
Tipo
binário
binário
unário
Operação
disjunção
conjunção
negação
Prioridade
3
2
1
Operadores Relacionais
Operador
=
<>
<
<=
>
>=
Comparação
igual
diferente
menor
menor ou igual
maior
maior ou igual
Operadores Literais


Não há padronização para seus operadores. Vamos
considerar apenas o operador de concatenação ( + ) .
Exemplo:

“sonha” + “dor” resulta “sonhador”
Avaliação de Expressões

Regras:


Observar a prioridade dos operadores. Se
houver empate, considera-se a expressão da
esquerda para a direita.
Os parênteses alteram a prioridade, forçando a
avaliação da subexpressão em seu interior.
Instruções Primitivas



Entrada
Saída
Atribuição
Entrada
Sintaxe :
Leia ( < lista_de_variáveis > )
Semântica : Os dados são fornecidos ao computador por
meio de um dispositivo de entrada e armazenados nas
posições de memória das variáveis cujos nomes
aparecem na lista.
Exemplo:
Leia ( x )
Leia ( a , b , c )
Saída
Sintaxe : Escreva ( < lista_de_expressões > )
Semântica : Os argumentos são enviados para o dispositivo de saída. No caso de uma lista de
variáveis, o conjunto de cada uma delas é pesquisado na posição de memória
correspondente a variável. No caso de argumento constante(número, literal ou lógico)
este é enviado diretamente ao referido dispositivo. E no caso de expressões, após sua
avaliação, segue como uma constante.
Exemplos:
Escreva (“Programa elaborado pelo aluno Thiago.”)
Escreva (“Digite um número inteiro positivo:”)
Escreva (“Lados do triângulo: “, L1 , L2 , L3 )
Escreva (“Area do circulo = “, pi*r**2)
Escreva (“Area = “, x*y, “Perimetro = “, 2*(x + y))
Saída

Regras Básicas (Interface com o Usuário: fase de
execução)


Toda vez que um programa estiver esperando que o usuário
forneça a ele um determinado dado (operação de leitura), ele
deve antes enviar uma mensagem dizendo o que o usuário
deve digitar, por meio de um instrução de saída.
Antes de enviar qualquer resultado ao usuário, um programa
deve escrever uma mensagem explicando o significado do
mesmo.
Atribuição

É a principal maneira de se armazenar uma informação
numa variável.
Sintaxe :< nome_da_variável >  < expressão >
Semântica : 1) avaliação da expressão
2) armazenamento do valor resultante na posição de memória
correspondente à variável que aparece à esquerda do comando.
Importante :
Deve haver compatibilidade entre o tipo de dado resultante da avaliação
da expressão e o tipo de dado da variável ( a não ser,
propositadamente, com tipos numéricos).
Controle de Fluxo de um Programa



Comando Composto
Estrutura Seqüencial
Estrutura de Decisão



Se
Caso
Estrutura de Repetição



Para
Enquanto
Repita
Comando Composto


É um conjunto de comandos simples como atribuição,
entrada, saída ou algumas construções (estruturas)
apresentadas a seguir.
Ex:



Escreve((a+b)/15)
ou
bas =(- b + (b * b – 4.* a * c)**0.5)/(2 * a)
Estrutura Seqüencial

Cada comando é executado somente após o
término do comando anterior.
Ex:
Escreve(“Qual o valor da conta?”)
Leia(b);
a  b * 0.1
Escreve(“10 % do garçom dá:”+a)

Estrutura de Decisão

Classificação quanto ao número de
condições:


uma condição ( decisão simples ) : estrutura do
SE
várias condições ( decisão múltipla ) : estrutura
do ESCOLHA
Se
Sintaxe:
Se ( < condição > ) então
< comando1 >
senão
< comando2 >
Fim_se
Se ( < condição > ) então
< comando1 >
Fim_se
Se Aninhados
Algoritmo Max_min
Real: a, b, c, max, min
Início
Escreva (“Digite tres numeros: “)
Leia (a, b, c)
Se ( a < b ) então
Se ( b < c ) então
senão
min  a
max  c
max  b
Se ( a < c ) então
senão
min  a
min  c
Fim_se
Fim_se
senão
Se ( b > c ) então
senão
min  c
max  a
min  b
Se ( a > c ) então
senão
Fim_se
Fim_se
Fim_se
Escreva (“Maior numero = “, max)
Escreva (“Menor numero = “, min)
Fim
max  a
max  c
Escolha...Caso

Sintaxe:
Escolha(<expressão>)
Caso(<condição1>)faça
<comando1>
Caso(<condição2>)faça
<comando2>
.
.
.
Caso(<condiçãot>)faça
<comandot>
senão
<comandok>
Fim_escolha
Escolha...Caso
Algoritmo Calculadora
Real: num1,num2
Literal[2]: op
Inicio
Escreva(“Digite um numero, o operador e outro numero: “)
Leia(num1,op,num2)
Escolha(op)
Caso(op=”+”)faça
Escreva(num1,op,num2,” =”, num1+num2)
Caso(op=”– “ )faça
Escreva(num1,op,num2,” =”, num1 – num2)
Caso(op=”* “)faça
Escreva(num1,op,num2,” =”,num1* num2)
Caso(op=” / ”)faça
Se(num2<>0)então
Escreva(num1,op,num2,” =”,num1/ num2)
Senão
Escreva(“Não existe divisão por zero.”)
Fim_se
Senão
Escreva(“Operador desconhecido.”)
Fim_escolha
Fim
Estrutura de Repetição

Tipos

Contados


Para – Faça
Condicionais


ENQUANTO – FAÇA
REPITA – ATÉ
Para- Faça

Sintaxe:
Para <var> de <ini> até <fim> passo <inc> faça
<comando>
Fim_para
Algoritmo Fatorial
Inteiro: num,k,fat
Início
Escreva(“Digite um número:”)
Leia(num)
Se(num >= 0)então
fat  1
Para k de 2 até num passo 1 faça
fat  fat*k
Fim_para
Escreva(“Fatorial de”, num, “ igual a “ ,fat)
Senão
Escreva(“Não existe fatorial de número negativo.”)
Fim_se
Fim
Enquanto - Faça
Sintaxe:
Enquanto (<expressão lógica>)faça
<comando>
Fim_enquanto
Algoritmo MDC
Inteiro: a, b
Início
Escreva (“Digite dois numeros inteiro positivos: “)
Leia (a,b)
Se ( a>0 .e. b>0 ) então
Enquanto ( a< > b ) faça
Se ( a > b ) então
a a–b
senão
b b–a
Fim_se
Fim_enquanto
Escreva (“ mdc = “, a)
Senão
Escreva (“Dados incorretos.”)
Fim_se
Fim
Repita - Até
Sintaxe:
Repita
<comando>
Até (<expressão lógica>)

Algoritmo Divisores
Inteiro: num, div
Início
Repita
Escreva (“Digite um numero inteiro positivo: “)
Leia (num)
Até (num > 0)
Escreva (“Divisores do número “, num)
div  1
Repita
Se ( num / div * div = num) então
Escreva (div)
Fim_se
div  div + 1
Até (div > num)
Fim
Linguagem C
Linguagem de Programação C

Criada em 1972 por Dennis Ritchie


Inicialmente para uso no UNIX
Características






Linguagem de programação imperativa
Apenas 32 palavras-chave
Estruturação modular, módulos compilados separadamente
Ponteiros como tipo de dado
Passagem de argumentos por valor
Facilidade de trabalhar os dados em bits
 Nível intermediário entre nível de máquina e alto nível
Linguagem de Programação C

Uso:

Desenvolvimento de software de sistemas
operacionais:






Drivers;
Kernel;
Api;
Etc.
Desenvolvimento de sistemas embutidos;
Etc.
Palavras reservadas do ANSI C
auto
double
int
struct
break
else
long
switch
case
enum
register
typedef
char
extern
return
union
const
float
short
unsigned
continue
for
signed
void
default
goto
sizeof
volatile
do
if
static
while
Estrutura básica de um programa em C
/*
Modelo de programa em C
*/
int main()
{
return(0);
}
Programa Olá Mundo

Copie o texto a seguir em um editor de textos, e salve com um nome
qualquer, mas extensão .c
/*
Programa Olá Mundo
*/
#include <stdio.h>
int main()
{
printf(“Olá mundo!”);
return(0);
}
Compilando um código em C

Após escrever e salvar um código em c, vá para o terminal e digite:
gcc <nome_do_arquivo.c> -o <nome_do_programa>

Em seguida, digite no terminal:
./<nome_do_programa>

Observe o resultado da saída no terminal.
Comentários

Por área selecionada
/* - início da área de comentário
<texto comentado>
...
*/ - fim da área

Por linha
// <linha comentada>
Tipos Primitivos
Tipo
Especificação
Bytes
Valores
char
Armazena um byte com sinal.
1
-128 a 127
unsigned char
Armazena um byte sem sinal.
1
0 a 255
int
Inteiro.
4
-2,147,483,648 a
+2,147,483,647
short int
Inteiro curto.
2
-32,768 a +32,767
long int
Inteiro longo.
4
-2,147,483,648 a
+2,147,483,647
Tipos Primitivos
Tipo
Especificação
Bytes
Valores
unsigned int
Inteiro sem sinal.
4
0 a +4,294,967,295
unsigned
short
Inteiro curto sem sinal.
2
0 a +65,535
unsigned long
Inteiro longo com sinal.
4
0 a +4,294,967,295
float
Real.
4
3.4E-38 a 3.4E+38
double
Real com dobro de precisão.
8
1.7E-308 a 1.7E+308
long double
Real com presisão de 19 dígitos.
10
3.4E-4932 a
3.4E+4932
void
Nenhum valor.
0
Declaração de constantes e variáveis

Variáveis:
tipo <identificador>;
 ex: int x;

Constantes
const tipo <identificador>=<valor>;
 ex: const int numero=5;
#define <identificador> valor
 ex: #define numero 5
Operadores Aritméticos
Operador
Descrição
+
Soma
-
Subtração
*
Multiplicação
/
Divisão (inteira ou real)
%
Resto da divisão inteira
-
sinalização negativa
Operadores de incremento e decremento


Incremento
++
Decremento
--
Ex:
int num1, num2;

num1=5;
num2 = num1++; //num1=6; num2=5;
num1=5;
num2 = ++num1; //num1=6; num2=6;
num1=5;
num2 = num1--; //num1=4; num2=5;
num1=5;
num2 = -- num1; //num1=4; num2=4;
Operadores Binários

Operam sobre os bits de um dado
Operador
Operação
&&
E
||
Ou
^
Ou-exclusivo
>>
Deslocamento para a direita
<<
Deslocamento para a esquerda
~
Não
Operadores Relacionais
Retornam 1 se a expressão for verdadeira, e 0 se for falsa.
Operador
Operação
==
Igual
!=
Diferente
<
Menor
>
Maior
<=
Menor ou igual
>=
Maior ou igual
Operadores Lógicos

E
&&
 ex: (5 >= 7) && ( (4/2) == 2)

Ou
||

ex: (5 >= 7) || ( (4/2) == 2)
Atribuição

Atribuição simples
<variável> = valor;
 ex:
int num1=2;

Atribuição composta
<variável> <op>= <valor>;
para <op> = {+, -, *, /, %, <<, >>, &, |, ^}
 ex:
num1 += 1;
Entrada e Saída

Entrada
scanf(“ <%tipo>”, &<variável>);

Saída
printf(“texto”);
printf(“texto %<tipo1> texto %<tipoN> texto”,
<variável 1>,...,<variável N>);
%tipos
Símbolo
Significado.
%d
Inteiro.
%u
Inteiro sem sinal.
%f
Real.
%e
Real no formato exponencial.
%g
Escolher %e ou %f de acordo com o tamanho do
dado.
%c
Caractere.
%s
Cadeia de caracteres.
%o
Número em octal (sem sinal).
%x
Número em hexadecimal (sem sinal).
Exercício
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Escreva um programa em C que leia um dado do tipo inteiro e em seguida escreva o
dobro do seu valor.
Escreva um algoritmo que leia três números e imprima o maior deles.
Escreva um algoritmo que leia três números e os imprima em ordem crescente.
Escreva um algoritmo que leia 10 números e imprima o maior deles.
Escreva um algoritmo que leia uma certa quantidade de números e imprima o maior
deles e quantas vezes o maior número foi lido. A quantidade de números a serem lidos
deve ser fornecida pelo usuário. Assuma que o usuário sempre fornecerá um número
positivo.
Modifique o problema anterior de modo que caso o usuário digite um número negativo o
programa peça novamente a quantidade de números e repita este procedimento até que
o usuário forneça um número positivo.
Modifique o problema anterior para permitir que o usuário possa em caso de erro ter três
tentivas. Na terceira tentativa o programa deve terminar avisando ao usuário a razão da
interrupção.
Escreva um algoritmo que leia um número inteiro entre 100 e 999 e imprima na saída
cada um dos algarismos que compõem o número.
Uma empresa paga R10.00 por hora normal trabalhada e R$ 15.00 por hora extra.
Escreva um programa que leia o total de horas normais e o total de horas extras
trabalhadas por um empregado em um ano e calcule o salário anual deste trabalhador.
Assuma que o trabalhador do exercício anterior deve pagar 10% de imposto se o seu
salário anual for menor ou igual a R$ 12000.00. Caso o salário seja maior que este valor
o imposto devido é igual a 10% sobre R$ 12000.00 mais 25% sobre o que passar de R$
12000.00. Escreva um programa que calcule o imposto devido pelo trabalhador.
Exercícios com vetores/Matrizes
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Dados dois vetores com n componentes cada um, calcular e imprimir a
soma deles.
Leia um conjunto com n números e informe se existe algum elemento
repetido no conjunto.
Leia n números quaisquer e imprima-os sem repetições.Ex: Entrada:
1,1,3,4,3,5,-8 Saida:1,3,4,5,-8
Gerar e imprimir uma matriz com m linhas e n colunas onde seus
elementos são da forma:2*i + 7*j – 2 se i < j; A[i,j] = 3*i2 – 1 se i = j ; 4*i3 –
5*j**2 + 1 se i > j.
Calcular a soma dos elementos de uma matriz numérica quadrada
qualquer dada, que estão acima da diagonal principal.
Obtenha e imprima um vetor que seja a soma dos elementos de cada
coluna de uma matriz numérica qualquer dada.
Converta uma letra maiúscula em letra minúscula.
Faça um algoritmo para converter uma cadeia de caracteres de letras
maiúsculas em letras minúsculas.
Dado o nome completo de uma pessoa imprimir apenas o primeiro nome.
Dado o nome completo de uma pessoa imprimir apenas as iniciais
seguidas cada uma de ponto e espaço.
Download

Aula2