Mudanças entre as edições de "PRG1-2013-2-Engenharia Programação 1 - Engenharia"
(→AULAS) |
|||
Linha 122: | Linha 122: | ||
materializado na forma de uma sequência de instruções. | materializado na forma de uma sequência de instruções. | ||
− | Neste sentido, vamos entender minimamente o funcionamento de um computador. | + | Neste sentido, vamos entender minimamente o funcionamento de um computador (próxima aula) |
+ | |||
+ | ===A Descrição de Algoritmos usando Fluxogramas=== | ||
+ | |||
+ | Um fluxograma é uma linguagem semi-gráfica que pode ser utilizada | ||
+ | para descrição de algoritmos. | ||
+ | |||
+ | Exemplo: O algoritmo de cálculo da média de dois números da aula anterior: | ||
+ | |||
+ | [[imagem:FluxogramaMediaDoisNumeros.jpg|150px|center]] | ||
+ | |||
+ | Pontos fortes: | ||
+ | *permite fácil entendimento do algoritmo, mesmo para pessoas leigas; | ||
+ | |||
+ | Ponto fraco: | ||
+ | *a descrição das estrutura dos dados inexiste. O usuário deve descrevê-los a parte; | ||
+ | |||
+ | Observe no exemplo anterior que nada é dito sobre as variáveis NUM1, NUM2 e MEDIA. | ||
+ | |||
+ | ===Símbolos de um Fluxograma=== | ||
+ | [[imagem:TabelaSimbolosFluxograma.jpg|450px]] | ||
+ | |||
+ | ===Teste de Mesa=== | ||
+ | |||
+ | [[imagem:TesteMesaMediaDoisNumeros.jpg|650px]] | ||
+ | |||
+ | ===Constantes, Variáveis=== | ||
+ | |||
+ | Algoritmos operam sobre dados. O que podem ser estes dados? | ||
+ | |||
+ | Variáveis e Constantes | ||
+ | |||
+ | No exemplo anterior podemos identificar três variáveis NUM1, NUM2 e MEDIA | ||
+ | Também podemos identificar uma CONSTANTE. O número 2. | ||
+ | |||
+ | *Tipo de Variáveis: | ||
+ | |||
+ | **'''Numéricas''': '''reais''' e '''inteiras''' | ||
+ | Ex: NUM1 = 5.5 /* NUM1 é uma variável real */ | ||
+ | **'''Booleanas''': true ou false | ||
+ | Ex: RES = TRUE /* RES é uma variável booleana */ | ||
+ | **'''caracter''': | ||
+ | Ex: LETRA = 'A' | ||
+ | **'''alfanumérica''' | ||
+ | Ex: FRASE = "ALO MUNDO" | ||
+ | |||
+ | E como estas variáveis armazenam os dados?? Depende da linguagem usada. Vamos passar | ||
+ | uma primeira noção do C | ||
+ | |||
+ | ===Expressões=== | ||
+ | |||
+ | Expressões sentenças que relacionam variáveis e constantes através de operadores matemáticos | ||
+ | e que RESULTAM em um valor. | ||
+ | |||
+ | A instrução do algoritmo: | ||
+ | |||
+ | MEDIA = (NUM1 + NUM2) / 2 | ||
+ | |||
+ | será considerada como uma expressão, que usa os operadores '+', '/' e '=' | ||
+ | |||
+ | O operador '=' é um OPERADOR DE ATRIBUIÇÃO e indica que a expressão do lado direito | ||
+ | do '=' será atribuída a variável do lado esquerdo. | ||
+ | |||
+ | Neste curso, para mantermos coerência com a Linguagem C, consideraremos que a expressão | ||
+ | como um todo resulta no valor que é atribuído a variável. | ||
+ | |||
+ | ===Operadores Aritméticos=== | ||
+ | |||
+ | Os operadores aritméticos que usaremos neste curso serão os disponíveis no C: | ||
+ | |||
+ | {| border="1" cellpadding="2" | ||
+ | !Operador | ||
+ | !Significado | ||
+ | |- | ||
+ | | + | ||
+ | |adição | ||
+ | |- | ||
+ | | - | ||
+ | |subtração | ||
+ | |- | ||
+ | |* | ||
+ | |multiplicação | ||
+ | |- | ||
+ | |/ | ||
+ | |divisão | ||
+ | |- | ||
+ | |% | ||
+ | |resto | ||
+ | |} | ||
+ | |||
+ | O único operador desconhecido aqui é o resto, cujo significado é o resto entre dois númerosinteiros. Exemplo, se B possui o valor 9, então o resultado da atribuição na expressão: | ||
+ | A = B%2 | ||
+ | será 1. | ||
+ | |||
+ | ===Operadores relacionais=== | ||
+ | |||
+ | Os operadores relacionais permitem realizar comparações entre dois operandos. Os operadores são os seguintes: | ||
+ | |||
+ | {| border="1" cellpadding="2" | ||
+ | !Operador | ||
+ | !Significado | ||
+ | |- | ||
+ | |> | ||
+ | |maior que | ||
+ | |- | ||
+ | |>= | ||
+ | |maior ou igual que | ||
+ | |- | ||
+ | |< | ||
+ | |menor que | ||
+ | |- | ||
+ | |<= | ||
+ | |menor ou igual que | ||
+ | |- | ||
+ | |== | ||
+ | |igual a (se o operando a esquerda é maior que o da direita) | ||
+ | |- | ||
+ | |!= | ||
+ | |diferente de (se o operando a esquerda é diferente do da direita) | ||
+ | |} | ||
+ | |||
+ | ===Operadores Lógicos=== | ||
+ | |||
+ | É possível construir expressões ainda mais completas usando os operadores lógicos, apresentados abaixo: | ||
+ | |||
+ | {| border="1" cellpadding="2" | ||
+ | !Operador | ||
+ | !Significado | ||
+ | |- | ||
+ | |&& | ||
+ | |AND | ||
+ | |- | ||
+ | |<nowiki>||</nowiki> | ||
+ | |OR | ||
+ | |- | ||
+ | |! | ||
+ | |NOT | ||
+ | |} | ||
+ | |||
+ | Uma expressão lógica tem como resultado da sua avaliação um valor VERDADEIRO ou FALSO. Para manter a coerência com a linguagem C | ||
+ | qualquer expressão que resultar em 0 será considerada FALSA e se resultar em algo diferente de 0 será considerada verdadeira. | ||
+ | |||
+ | PROBLEMA: Entrar com um número inteiro pelo teclado. Se o número for maior que 1 e menor que 10, imprimir uma mensagem "Número maior que 1 e menor que 10". | ||
+ | |||
+ | DADO DE ENTRADA: NUM /* Número inteiro a ser comparado */ | ||
+ | DADO DE SAÍDA: Mensagem no display | ||
+ | PROBLEMA: Entrar com um número inteiro pelo teclado. Se o número for menor ou igual a 1 OU se for maior ou igual a 10 então | ||
+ | mostrar a mensagem "Número menor ou igual a 1 ou maior ou igual a 10" | ||
+ | |||
+ | DADO DE ENTRADA: NUM /* Número inteiro a ser comparado */ | ||
+ | DADO DE SAÍDA: Mensagem no display | ||
+ | |||
+ | Uma outra solução para este último problema poderia ser: | ||
+ | |||
=== Possíveis linguagens de programação === | === Possíveis linguagens de programação === |
Edição das 21h34min de 14 de agosto de 2013
PRG1 - PROGRAMAÇÃO I
DADOS DA DISCIPLINA
CARGA HORÁRIA
TOTAL: 72 HORAS (4 HORAS/SEMANA)
TEÓRICA: 36 HORAS
LABORATÓRIO: 36 HORAS
DIAS COM AULA: 36 (18 semanas)
PRÉ REQUISITOS: LÓGICA
EMENTA
Introdução a lógica de programação e algoritmos. Constantes, variáveis e tipos de dados. Operadores aritméticos, relacionais e lógicos. Concepção de fluxograma e pseudocódigo. Estruturas de decisão e estruturas de repetição. Introdução a linguagem de programação c. Vetores de caracteres e multidimensionais. Ponteiros e aritmética de ponteiros. Funções: chamada por valor e por referência. Chamada recursiva de funções. Tipos de dados compostos. Operação com arquivos textos e binários.
Bibliografia Básica
- SCHILDT, Herbert. C Completo e Total - 3.ed. [S.l.]: Makron, 1997. 830p. ISBN 978-8534605953
Bibliografia Básica
- SCHILDT, Herbert. C Completo e Total - 3.ed. [S.l.]: Makron, 1997. 830p. ISBN 978-8534605953
Referências Complementares
- Apostila adotada: Curso de Linguagem C - Engenharia Elétrica - UFMG
AULAS
AULA 1 DIA 15/08/2013 | ||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
AULA 1 DIA 15/08/2013Como fazer um churrascoVamos observar atentamente este vídeo para iniciarmos o nosso curso de programação: EmbedVideo received the bad id "U0xSYIXE9vo#!" for the service "youtube". O que tem o churrasco com a nossa aula?? Trata-se de uma sequência de passos para execução de um objetivo. EXERCÍCIO: Na forma textual, descrever as etapas para fazer um bom churrasco. O que é um algoritmoUm algoritmo pode ser visto como uma sequência de instruções ou operações que resolvem um dado problema. A receita de um bom churrasco corresponde a um algoritmo. Como representar um algoritmo ?Uma forma é representar na forma textual ordenada: 1.Comprar a carne 2.Colocar carvão na churrasqueira 3.Acender o carvão 4.Cortar a carne (picanha) 5.Espetar a carne 6.Salgar a carne 7.Colocar a carne na churrasqueira 8.Aguardar a carne ficar no ponto desejado 9.Bater a carne 10.Servir a carne Outras formas são mais apropriadas para o uso no meio computacional:
A PENSAR: É possível mudar a ordem das instruções? É possível paralelizar algumas instruções? O problema da raposa, do milho e da galinhaEmbedVideo received the bad id "yifW9XueSaI#!" for the service "youtube".
EXERCÍCIO 1: Descrever na forma de etapas um solução para o problema da raposa, do milho e da galinha. Note que somente é possível escrever o algoritmo se tivermos uma solução para o problema. EXERCÍCIO 2: Descrever na forma de etapas uma solução para o problema dos canibais/padres. Torres de HanoiVeja este jogo: EmbedVideo received the bad id "hLnuMXO95f8#!" for the service "youtube". EXERCÍCIO 3: Escrever na forma de etapas numeradas a solução para o problema das torres de Hanói usando 3 discos. EXERCÍCIO 4: Escrever na forma de etapas numeradas a solução para o problema das torres de Hanói usando 4 discos. E para quem são os algoritmos?Uma receita de bolo é apropriada para ser executada por um ser humano. Um procedimento de como trocar um pneu também. Mas muitas vezes queremos que o algoritmo seja executado por uma máquina! O computador é perfeito para isto! Neste curso vamos nos concentrar no desenvolvimento de algoritmos simples, desde a sua concepção até a sua implementação através de uma LINGUAGEM DE PROGRAMAÇÃO - a linguagem C , por exemplo. Um PROGRAMA implementa um algoritmo. É o algoritmo materializado na forma de uma sequência de instruções. Neste sentido, vamos entender minimamente o funcionamento de um computador (próxima aula) A Descrição de Algoritmos usando FluxogramasUm fluxograma é uma linguagem semi-gráfica que pode ser utilizada para descrição de algoritmos. Exemplo: O algoritmo de cálculo da média de dois números da aula anterior: Pontos fortes:
Ponto fraco:
Observe no exemplo anterior que nada é dito sobre as variáveis NUM1, NUM2 e MEDIA. Símbolos de um FluxogramaTeste de MesaConstantes, VariáveisAlgoritmos operam sobre dados. O que podem ser estes dados? Variáveis e Constantes No exemplo anterior podemos identificar três variáveis NUM1, NUM2 e MEDIA Também podemos identificar uma CONSTANTE. O número 2.
Ex: NUM1 = 5.5 /* NUM1 é uma variável real */
Ex: RES = TRUE /* RES é uma variável booleana */
Ex: LETRA = 'A'
Ex: FRASE = "ALO MUNDO" E como estas variáveis armazenam os dados?? Depende da linguagem usada. Vamos passar uma primeira noção do C ExpressõesExpressões sentenças que relacionam variáveis e constantes através de operadores matemáticos e que RESULTAM em um valor. A instrução do algoritmo: MEDIA = (NUM1 + NUM2) / 2 será considerada como uma expressão, que usa os operadores '+', '/' e '=' O operador '=' é um OPERADOR DE ATRIBUIÇÃO e indica que a expressão do lado direito do '=' será atribuída a variável do lado esquerdo. Neste curso, para mantermos coerência com a Linguagem C, consideraremos que a expressão como um todo resulta no valor que é atribuído a variável. Operadores AritméticosOs operadores aritméticos que usaremos neste curso serão os disponíveis no C:
O único operador desconhecido aqui é o resto, cujo significado é o resto entre dois númerosinteiros. Exemplo, se B possui o valor 9, então o resultado da atribuição na expressão: A = B%2 será 1. Operadores relacionaisOs operadores relacionais permitem realizar comparações entre dois operandos. Os operadores são os seguintes:
Operadores LógicosÉ possível construir expressões ainda mais completas usando os operadores lógicos, apresentados abaixo:
Uma expressão lógica tem como resultado da sua avaliação um valor VERDADEIRO ou FALSO. Para manter a coerência com a linguagem C qualquer expressão que resultar em 0 será considerada FALSA e se resultar em algo diferente de 0 será considerada verdadeira. PROBLEMA: Entrar com um número inteiro pelo teclado. Se o número for maior que 1 e menor que 10, imprimir uma mensagem "Número maior que 1 e menor que 10". DADO DE ENTRADA: NUM /* Número inteiro a ser comparado */ DADO DE SAÍDA: Mensagem no display PROBLEMA: Entrar com um número inteiro pelo teclado. Se o número for menor ou igual a 1 OU se for maior ou igual a 10 então mostrar a mensagem "Número menor ou igual a 1 ou maior ou igual a 10" DADO DE ENTRADA: NUM /* Número inteiro a ser comparado */ DADO DE SAÍDA: Mensagem no display Uma outra solução para este último problema poderia ser:
Possíveis linguagens de programaçãoNa prática, é inviável desenvolver programas complexos em LINGUAGEM DE MÁQUINA. Em geral, utilizamos linguagens de ALTO NÍVEL que podem, de alguma forma, serem traduzidas (compiladas) para a linguagem de baixo nível ou interpretadas em tempo de execução. Exemplo:
Neste curso utilizaremos a linguagem C. Por que? É uma linguagem muito usada na implementação de produtos eletrônicos, incluindo àqueles voltados as Telecomunicações. Compilando um programa CNeste curso usaremos o compilador da coleção gcc do projeto GNU. O manual completo do gcc pode ser encontrado aqui. O processo de desenvolvimento do programa envolve:
mkdir ExerciciosC cd Exercicios Exemplo: salve o programa abaixo como teste.c
#include <stdio.h>
main()
{
printf("Alo Mundo\n");
}
gcc teste.c -o teste
./teste Nota: o atributo -o permite que se forneça um nome para o executável diferente de a.out É possível somente compilar (gerar código objeto): gcc -c teste.c Observe os subprodutos listando com detalhes: ls -l
Um exemplo completoPROBLEMA: Computar a média de dois números reais fornecidos pelo teclado. Mostrar o resultado no monitor. SOLUÇÃO: ALGORITMO DADOS DE ENTRADA: NUM1 e NUM2 DADOS DE SAÍDA: MEDIA INÍCIO 1.Ler NUM1 2.Ler NUM2 3.MEDIA <- (NUM1+NUM2)/2 4.Mostrar MEDIA FIM /* Calculador de media de dois números reais */
#include <stdio.h>
main()
{
float num1,num2, media;
printf("Entrar com o primeiro número\n");
scanf(&num1);
printf("Entrar com o segundo número\n");
scanf(&num2);
media = (num1+num2)/2;
printf ("media = \n", media);
}
EXERCÌCIO 5: Implementar o algoritmo com o Scratch. O conceito de variáveis e constantesNo exemplo anterior criamos três variáveis dar suporte ao programa: num1, num2 e num3. Variáveis podem ser vistas como um lugar que pode armazenar um valor. Para simplificar ainda mais, podemos imaginar a variável como uma CAIXA onde podemos armazenar um valor. A CAIXA possui um nome e um tipo. O nome IDENTIFICA a CAIXA enquanto o tipo da variável determina a natureza dos valores que podemos armazenar na CAIXA: +-----+ | 1.5 | num1 +-----+ A variável num1 é do tipo float e, portanto, está apta a armazenar valores reais. No C, para que possamos usar uma variável temos que definí-la. A forma de fazer isto é: float num1; Plano de EnsinoAgora que temos uma ideia do que será tratado neste curso, vamos apresentar o plano de ensino. |