Post on 18-Apr-2015
Construção de Algoritmos
Professor: Aquiles Burlamaqui
Construção de Algoritmos
Aquiles BurlamaquiUERN2008.1
Aula 02
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ória1 célula = 1 byte = 8 bits1 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 Operação Prioridade
+ binário adição 4 - “ subtração 4
* “ multiplicação 3 / “ divisão 3 ** “ exponenciação 2 + unário manutenção de sinal 1 - “ inversão de sinal 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éticos1)5x3 + 7x2 – 3x – 1
Resp.: 5.0*x**3 + 7.0*x**2 – 3.0*x –1.0
2)x0 + v0t – 1 gt2
2Resp.:xo + vo*t – 0.5*g*t**2
Operadores LógicosOperador Tipo Operação Prioridade .OU. binário disjunção 3 .E. binário conjunção 2 .NÃO. unário negação 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
EntradaSintaxe : 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ídaSintaxe : 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.1Escreve(“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
SeSintaxe: Se ( < condição > ) então Se ( < condição > ) então
< comando1 > < comando1 >senão Fim_se
< comando2 >Fim_se
Se AninhadosAlgoritmo Max_min
Real: a, b, c, max, minInício
Escreva (“Digite tres numeros: “)Leia (a, b, c)Se ( a < b ) então
Se ( b < c ) entãomin amax c
senãomax bSe ( a < c ) então
min asenão
min cFim_se
Fim_sesenão
Se ( b > c ) entãomin cmax a
senãomin bSe ( a > c ) então
max asenão
max cFim_se
Fim_seFim_seEscreva (“Maior numero = “, max)Escreva (“Menor numero = “, min)
Fim
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...CasoAlgoritmo Calculadora
Real: num1,num2Literal[2]: op
InicioEscreva(“Digite um numero, o operador e outro numero: “)Leia(num1,op,num2)Escolha(op)
Caso(op=”+”)façaEscreva(num1,op,num2,” =”, num1+num2)
Caso(op=”– “ )façaEscreva(num1,op,num2,” =”, num1 – num2)
Caso(op=”* “)façaEscreva(num1,op,num2,” =”,num1* num2)
Caso(op=” / ”)façaSe(num2<>0)então
Escreva(num1,op,num2,” =”,num1/ num2)Senão
Escreva(“Não existe divisão por zero.”)Fim_se
SenãoEscreva(“Operador desconhecido.”)
Fim_escolhaFim
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 FatorialInteiro: num,k,fat
InícioEscreva(“Digite um número:”)Leia(num)Se(num >= 0)então
fat 1Para k de 2 até num passo 1 faça
fat fat*kFim_paraEscreva(“Fatorial de”, num, “ igual a “ ,fat)
SenãoEscreva(“Não existe fatorial de número negativo.”)
Fim_seFim
Enquanto - FaçaSintaxe:
Enquanto (<expressão lógica>)faça<comando>
Fim_enquanto
Algoritmo MDCInteiro: a, b
InícioEscreva (“Digite dois numeros inteiro positivos: “)Leia (a,b)Se ( a>0 .e. b>0 ) então
Enquanto ( a< > b ) façaSe ( a > b ) então
a a – b senão
b b – a Fim_se
Fim_enquantoEscreva (“ mdc = “, a)
SenãoEscreva (“Dados incorretos.”)
Fim_seFim
Repita - Até Sintaxe:Repita <comando>Até (<expressão lógica>)
Algoritmo DivisoresInteiro: num, div
InícioRepita
Escreva (“Digite um numero inteiro positivo: “)Leia (num)
Até (num > 0)Escreva (“Divisores do número “, num)div 1Repita
Se ( num / div * div = num) entãoEscreva (div)
Fim_sediv 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
whilestaticifdo
volatilesizeofgotodefault
voidsignedforcontinue
unsignedshortfloatconst
unionreturnexternchar
typedefregisterenumcase
switchlongelsebreak
structintdoubleauto
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
-2,147,483,648 a +2,147,483,647
4Inteiro longo.long int
-32,768 a +32,767 2Inteiro curto.short int
-2,147,483,648 a +2,147,483,647
4Inteiro.int
0 a 2551Armazena um byte sem sinal.unsigned char
-128 a 1271Armazena um byte com sinal.char
ValoresBytesEspecificaçãoTipo
Tipos Primitivos
0Nenhum valor.void
3.4E-4932 a 3.4E+4932
10Real com presisão de 19 dígitos.long double
1.7E-308 a 1.7E+3088Real com dobro de precisão.double
3.4E-38 a 3.4E+384Real.float
0 a +4,294,967,2954Inteiro longo com sinal.unsigned long
0 a +65,535 2Inteiro curto sem sinal.unsigned short
0 a +4,294,967,295 4Inteiro sem sinal.unsigned int
ValoresBytesEspecificaçãoTipo
Declaração de constantes e variáveis
Variáveis:tipo <identificador>; ex: int x;
Constantesconst tipo <identificador>=<valor>; ex: const int numero=5;#define <identificador> valor ex: #define numero 5
sinalização negativa-
Resto da divisão inteira%
Divisão (inteira ou real)/
Multiplicação *
Subtração -
Soma +
Descrição Operador
Operadores Aritméticos
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
Não~
Deslocamento para a esquerda<<
Deslocamento para a direita>>
Ou-exclusivo^
Ou||
E & &
Operação Operador
Operadores Relacionais
Maior ou igual>=
Menor ou igual<=
Maior>
Menor<
Diferente!=
Igual==
Operação Operador
Retornam 1 se a expressão for verdadeira, e 0 se for falsa.
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
Número em hexadecimal (sem sinal).%x
Número em octal (sem sinal).%o
Cadeia de caracteres.%s
Caractere.%c
Escolher %e ou %f de acordo com o tamanho do dado.%g
Real no formato exponencial.%e
Real.%f
Inteiro sem sinal.%u
Inteiro.%d
Significado.Símbolo
Exercício1. Escreva um programa em C que leia um dado do tipo inteiro e em seguida escreva o
dobro do seu valor.2. Escreva um algoritmo que leia três números e imprima o maior deles. 3. Escreva um algoritmo que leia três números e os imprima em ordem crescente. 4. Escreva um algoritmo que leia 10 números e imprima o maior deles. 5. 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.
6. 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.
7. 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.
8. 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.
9. 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.
10. 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. Dados dois vetores com n componentes cada um, calcular e imprimir a soma deles.
2. Leia um conjunto com n números e informe se existe algum elemento repetido no conjunto.
3. 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
4. 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.
5. Calcular a soma dos elementos de uma matriz numérica quadrada qualquer dada, que estão acima da diagonal principal.
6. Obtenha e imprima um vetor que seja a soma dos elementos de cada coluna de uma matriz numérica qualquer dada.
7. Converta uma letra maiúscula em letra minúscula.8. Faça um algoritmo para converter uma cadeia de caracteres de
letras maiúsculas em letras minúsculas.9. Dado o nome completo de uma pessoa imprimir apenas o
primeiro nome.10. Dado o nome completo de uma pessoa imprimir apenas as iniciais
seguidas cada uma de ponto e espaço.