Mudanças entre as edições de "PRG1-2014-1-Engenharia Programação 1 - Engenharia"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 295: Linha 295:
 
       O-->  
 
       O-->  
 
       m=1Kg    F=1N
 
       m=1Kg    F=1N
 +
{{collapse top|AULA 2 DIA 14/02/2014}}
 +
== AULA 2 DIA 14/02/2014==
 +
 +
===Objetivos ===
 +
 +
O aluno deverá saber utilizar expressões com:
 +
 +
*Operadores Relacionais e Lógicos
 +
*Comandos de Decisão
 +
*Comandos de decisão com aninhamento
 +
 +
===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)
 +
|}
 +
 +
Note que com operadores lógicos podemos construir expressões tais como indicado no exemplo abaixo:
 +
 +
Exemplo: O algoritmo abaixo lê dois número inteiros para dentro das variáveis A e B e atribue a variável X o resultado da comparação do primeiro com o segundo. Se
 +
 +
 +
<code>
 +
ALGORITMO exemplo
 +
VARIÁVEIS:
 +
  A: inteiro
 +
  B: inteiro
 +
  X: booleana
 +
INÍCIO
 +
  LER A
 +
  LER B
 +
  X = A>B
 +
  MOSTRAR "A expressão A>B é ", X
 +
FIM
 +
</syntaxhighlight> 
 +
 +
Exercício: Fazer um fluxograma para o algoritmo acima.
 +
 +
===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 (E)
 +
|-
 +
|<nowiki>||</nowiki>
 +
|OR (OU)
 +
|-
 +
|!
 +
|NOT (NÃO)
 +
|}
 +
 +
 +
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.
 +
 +
Exemplo: Considere uma variação do exercício anterior onde se compara 3 números inteiros: o primeiro com o segundo e o primeiro com o terceiro.
 +
 +
<code>
 +
ALGORITMO exemplo
 +
VARIÁVEIS:
 +
  A: inteiro
 +
  B: inteiro
 +
  C: inteiro
 +
  X: booleana
 +
INÍCIO
 +
  LER A
 +
  LER B
 +
  LER C
 +
  X = A>B E A < C
 +
  MOSTRAR "A expressão A>B E A<C é ", X
 +
FIM
 +
</syntaxhighlight> 
 +
 +
===Sheldon e o fluxograma da amizade===
 +
 +
Vamos observar o fluxograma da amizade do Sheldom da série de TV "Big Bang Theory"
 +
 +
<center>{{#ev:youtube|VAX4jLlNo-Q#!}} </center>
 +
 +
Observe que a caixa no formato de LOSANGO permite testar uma condição: é uma caixa de decisão.
 +
 +
===Controle do Fluxo de Execução: Estruturas de Decisão===
 +
 +
Você deve ter observado que instruções simples (retângulo) possuem uma entrada e uma saída indicando que o fluxo de saída está claramente determinado.
 +
 +
Em algumas situações é necessário realizar algum teste sobre uma expressão e neste caso a execução é condicional. O teste da expressão pode resultar em VERDADEIRO e neste caso uma sequência de ações é realizada. Se o resultado for FALSO, uma outra sequência é realizada.
 +
 +
Seja o problema:
 +
 +
====Problema do Controle de Acesso====
 +
 +
PROBLEMA: Controlar o acesso a uma porta usando uma senha pré-configurada no sistema.
 +
 +
DADO DE ENTRADA: SENHA (variável alfanumérica)
 +
 +
DADO DE SAÌDA: porta aberta (simulado com msg "PORTA ABERTA") ou mensagem de "SENHA NAO CONFERE"
 +
 +
VARIÁVEIS: SENHA (tiipo alfanumérica)
 +
 +
=====Algoritmo usando Fluxograma=====
 +
 +
[[imagem:FluxogramaControleAcessoI.jpg|450px]]
 +
 +
=====Algoritmo usando Pseudo-código=====
 +
 +
<code>
 +
ALGORITMO ControleAcesso
 +
VARIÁVEIS
 +
  SENHA: alfanumérica
 +
INICIO
 +
  LER SENHA
 +
  SE SENHA=="alfa" ENTÃO
 +
          "Abrir a porta"
 +
  SENÃO
 +
          "Senha não confere"
 +
  FIMSE
 +
  IR PARA INICIO
 +
FIM
 +
</syntaxhighlight>
 +
 +
===Aninhamento de estruturas de decisão===
 +
 +
Note que é possível aninhar estruturas de decisão. Seja o exemplo ebaico que lê três lados de um possível triângulo e imprime se NÂO é um triângulo, ou, caso seja, imprime se é EQUILÁTERO, ISÓSCELES ou ESCALENO.
 +
 +
<code>
 +
ALGORITMO trangulo
 +
VARIAVEIS
 +
  lado1,lado2,lado3: real
 +
INICIO
 +
  SE lado1>(lado2+lado3) OU lado2>(lado1+lado3) OU lado3>(lado1+lado2) ENTÃO
 +
      MOSTRAR "não é triângulo"
 +
  SENÃO
 +
      SE lado1==lado2 E lado1==lado3 ENTÃO
 +
        MOSTRAR "equilatero"
 +
      SENAO
 +
        SE lado1==lado2 OU lado1==lado3 OU lado2==lado3 ENTÃO
 +
            MOSTRAR "isósceles"
 +
        SENÃO
 +
            MOSTRAR "escaleno"
 +
      FIMSE
 +
  FIMSE
 +
FIM
 +
</syntaxhighlight>
 +
 +
===Exercícios===
 +
 +
EXERCÍCIO 1:
 +
 +
Elaborar um fluxograma para o o problema de controle de acesso prevendo um procedimento para modificar a senha de acesso. Neste caso a senha deverá ser armazenada em uma variável.
 +
Para tanto, assuma a existência de uma senha de administrador fixa (por exemplo, "ADMIN"). Se a senha do administrador for fornecida, mostrar uma mensagem de ENTRE COM A NOVA SENHA de senha.
 +
 +
[[imagem:Prg1-ControleAcessoEx1.jpg|450px]]
 +
 +
EXERCÍCIO 2:
 +
 +
Inserir a noção de UserID. Para abrir a porta o usuário entra com o UserId e com
 +
a senha. De fábrica o UserId é "alfa" e a senha "alfa". O UserId do admin é "admin" e a senha "beta".
 +
 +
EXERCÍCIO 3:
 +
 +
Inserir a noção de bloqueio do usuário. Se o usuário comum tentar 3 vezes e errar ele é bloqueado.
 +
A mudança de UserId deve desbloquear o usuário.
 +
 +
{{collapse bottom}}

Edição das 10h18min de 14 de fevereiro de 2014

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)

AVALIAÇÂO

Avaliações Semanais

Toda semana nas quinta feiras (aproximadamente 16 avaliações) - conceito se possível na hora

  • meses de avaliação (março a junho)
  • a última avaliação do mês terá caráter de recuperação
  • não será permitida a consulta na avaliação

PROJETO FINAL

  • grupos com 3 alunos;
  • avaliação individual.

RECUPERAÇÃO FiNAL

  • Ficará para recuperação o aluno que não conseguiu obter o conceito mínimo para passar em pelo menos uma das etapas avaliadas (mês) OU não obteve o sucesso no PROJETO FINAL
  • última aula do semestre
  • recuperação toda matéria

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

Referências Complementares

AULAS

AULA 1 DIA 15/08/2013

AULA 1 DIA 15/08/2013

Como fazer um churrasco

Vamos 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 algoritmo

Um 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:

  • pseudo-código
  • fluxogramas
A PENSAR: É possível mudar a ordem das instruções?
É possível paralelizar algumas instruções?


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 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:

FluxogramaMediaDoisNumeros.jpg

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

TabelaSimbolosFluxograma.jpg

Teste de Mesa

TesteMesaMediaDoisNumeros.jpg

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:

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.

Representando o algoritmo com pseudo-código

ALGORITMO MEDIA VARIAVEIS

  NUM1: INTEIRO
  NUM2: INTEIRO
  MEDIA: REAL

INICIO

  LER NUM1
  LER NUM2
  MEDIA = (NUM1+NUM2)/2
  MOSTRAR MEDIA

FIM </syntaxhighlight>

Representando o algoritmo em linguagem C

#include <stdio.h>

main()
{
  int num1,num2;
  float media;

  scanf("%d",&num1);
  scanf("%d",&num2);
  media = (num1+num2)/2.0;
  prinft("media = %f\n", media);
}

Exercícios

1.Fazer um algoritmo na forma de fluxograma para calcular o valor y de uma função de uma reta dado x. Identifique quem são as variáveis e constantes do problema.

2.Fazer um algoritmo na forma de fluxograma para calcular o DELTA de uma equação do segundo grau, dados os coeficientes a e b. OBS: .

2A.Apresente uma variação de solução do exercício (2) usando apenas duas variáveis para armazenamento de dados.

3.Implementar um algoritmo na forma de fluxograma para calcular o ponto de intersecção de duas retas dados: a1,b1,a2 e b2.

4.Implementar um algoritmo na forma de pseudocódigo para calcular a conversão de CELSIUS para Farenheit.

5.Implementar um algoritmo na forma de pseudo-código para calcular a corrente sobre um resistor, dado a tensão V aplicada sobre ele. Considere um resistor com R constante de 1K ohm.

6.Incremente o exercício 5 para computar também a potência dissipada sobre o resistor.

7.Implementar um algoritmo na forma de pseudo-código para converter um ângulo em radianos para graus.

8.O problema da raposa, do milho e da galinha

EmbedVideo received the bad id "yifW9XueSaI#!" for the service "youtube".


EXERCÍCIO 8A: 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 8B: Descrever na forma de etapas uma 
solução para o problema dos canibais/padres.

9.Torres de Hanoi

Veja este jogo:

EmbedVideo received the bad id "hLnuMXO95f8#!" for the service "youtube".
EXERCÍCIO 9A: Escrever na forma de etapas numeradas a solução para o problema 
das torres de Hanói usando 3 discos.
EXERCÍCIO 9B: Escrever na forma de etapas numeradas a solução para o problema 
das torres de Hanói usando 4 discos.

10.Implementar um fluxograma para computar a área e o comprimento de uma circunferência dado o RAIO.

11.Implementar um fluxograma para ler um número complexo (ler por partes) no formato retangular e apresentar o módulo e o ângulo EM GRAUS do mesmo (formato polar). Suponha que você dispõe de uma função ATG() que calcula o arco em radianos de uma dada tangente.

12.Implementar um fluxograma para apresentar a velocidade no instante T (a ser fornecido) de um corpo de massa 1Kg que está inicialmente parado (em T=0) e submetido a força F também fornecida como entrada. Despreze atrito.

      Vi=0
      O--> 
      m=1Kg    F=1N
AULA 2 DIA 14/02/2014

AULA 2 DIA 14/02/2014

Objetivos

O aluno deverá saber utilizar expressões com:

  • Operadores Relacionais e Lógicos
  • Comandos de Decisão
  • Comandos de decisão com aninhamento

Operadores relacionais

Os operadores relacionais permitem realizar comparações entre dois operandos. Os operadores são os seguintes:

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)

Note que com operadores lógicos podemos construir expressões tais como indicado no exemplo abaixo:

Exemplo: O algoritmo abaixo lê dois número inteiros para dentro das variáveis A e B e atribue a variável X o resultado da comparação do primeiro com o segundo. Se


ALGORITMO exemplo VARIÁVEIS:

  A: inteiro
  B: inteiro
  X: booleana

INÍCIO

  LER A
  LER B
  X = A>B
  MOSTRAR "A expressão A>B é ", X

FIM </syntaxhighlight>

Exercício: Fazer um fluxograma para o algoritmo acima.

Operadores Lógicos

É possível construir expressões ainda mais completas usando os operadores lógicos, apresentados abaixo:

Operador Significado
&& AND (E)
|| OR (OU)
! NOT (NÃO)


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.

Exemplo: Considere uma variação do exercício anterior onde se compara 3 números inteiros: o primeiro com o segundo e o primeiro com o terceiro.

ALGORITMO exemplo VARIÁVEIS:

  A: inteiro
  B: inteiro
  C: inteiro
  X: booleana

INÍCIO

  LER A
  LER B
  LER C
  X = A>B E A < C
  MOSTRAR "A expressão A>B E A<C é ", X

FIM </syntaxhighlight>

Sheldon e o fluxograma da amizade

Vamos observar o fluxograma da amizade do Sheldom da série de TV "Big Bang Theory"

EmbedVideo received the bad id "VAX4jLlNo-Q#!" for the service "youtube".

Observe que a caixa no formato de LOSANGO permite testar uma condição: é uma caixa de decisão.

Controle do Fluxo de Execução: Estruturas de Decisão

Você deve ter observado que instruções simples (retângulo) possuem uma entrada e uma saída indicando que o fluxo de saída está claramente determinado.

Em algumas situações é necessário realizar algum teste sobre uma expressão e neste caso a execução é condicional. O teste da expressão pode resultar em VERDADEIRO e neste caso uma sequência de ações é realizada. Se o resultado for FALSO, uma outra sequência é realizada.

Seja o problema:

Problema do Controle de Acesso

PROBLEMA: Controlar o acesso a uma porta usando uma senha pré-configurada no sistema.

DADO DE ENTRADA: SENHA (variável alfanumérica)

DADO DE SAÌDA: porta aberta (simulado com msg "PORTA ABERTA") ou mensagem de "SENHA NAO CONFERE"

VARIÁVEIS: SENHA (tiipo alfanumérica)

Algoritmo usando Fluxograma

FluxogramaControleAcessoI.jpg

Algoritmo usando Pseudo-código

ALGORITMO ControleAcesso VARIÁVEIS

  SENHA: alfanumérica

INICIO

  LER SENHA 
  SE SENHA=="alfa" ENTÃO
         "Abrir a porta"
  SENÃO
         "Senha não confere"
  FIMSE
  IR PARA INICIO

FIM </syntaxhighlight>

Aninhamento de estruturas de decisão

Note que é possível aninhar estruturas de decisão. Seja o exemplo ebaico que lê três lados de um possível triângulo e imprime se NÂO é um triângulo, ou, caso seja, imprime se é EQUILÁTERO, ISÓSCELES ou ESCALENO.

ALGORITMO trangulo VARIAVEIS

 lado1,lado2,lado3: real

INICIO

 SE lado1>(lado2+lado3) OU lado2>(lado1+lado3) OU lado3>(lado1+lado2) ENTÃO
     MOSTRAR "não é triângulo"
 SENÃO
     SE lado1==lado2 E lado1==lado3 ENTÃO
        MOSTRAR "equilatero"
     SENAO
        SE lado1==lado2 OU lado1==lado3 OU lado2==lado3 ENTÃO
            MOSTRAR "isósceles"
        SENÃO
            MOSTRAR "escaleno"
     FIMSE
 FIMSE

FIM </syntaxhighlight>

Exercícios

EXERCÍCIO 1:

Elaborar um fluxograma para o o problema de controle de acesso prevendo um procedimento para modificar a senha de acesso. Neste caso a senha deverá ser armazenada em uma variável. Para tanto, assuma a existência de uma senha de administrador fixa (por exemplo, "ADMIN"). Se a senha do administrador for fornecida, mostrar uma mensagem de ENTRE COM A NOVA SENHA de senha.

Prg1-ControleAcessoEx1.jpg

EXERCÍCIO 2:

Inserir a noção de UserID. Para abrir a porta o usuário entra com o UserId e com a senha. De fábrica o UserId é "alfa" e a senha "alfa". O UserId do admin é "admin" e a senha "beta".

EXERCÍCIO 3:

Inserir a noção de bloqueio do usuário. Se o usuário comum tentar 3 vezes e errar ele é bloqueado. A mudança de UserId deve desbloquear o usuário.