Mudanças entre as edições de "PRG-2011-2"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 715: Linha 715:
 
===Exercícios===
 
===Exercícios===
  
 +
#Implementar o ex1 da avaliação na forma de um programa em C.
 +
#Implementar o ex2 da avaliação na forma de um programa em C.
 
#Refazer o fluxograma do ex1 usando caixa de decisão simples.
 
#Refazer o fluxograma do ex1 usando caixa de decisão simples.
 
 
#Refazer o fluxograma do ex2 usando caixa de decisão simples.
 
#Refazer o fluxograma do ex2 usando caixa de decisão simples.
  

Edição das 16h07min de 3 de novembro de 2011

Nome do Professor: Eraldo Silveira e Silva

email: eraldo@ifsc.edu.br

Material de Referência

Horário de Atendimento Paralelo

Quarta das 16 às 17h.

Aulas

3/08/2011:

Objetivos da Aula

-apresentar plano de ensino;

-conceitos básicos de programação e algoritmos (até pg 10 da apostila)

-apresentar o básico do fluxograma para ler 3 números e fazer a média;

5/08/2011:

1.Considere um algoritmo para calcular o comprimento de uma circunferência. Quem são os dados de entrada e os dados de saída. Fazer um fluxograma para resolver o problema.

2.Modifique o algoritmo acima para calcular, além do comprimento, a área da circunferência.

3.Construir um fluxograma para ler 3 números e calcular a média dos dois maiores números lidos.

4.Refazer o exercício 3 para calcular a média do maior e do menor número entre os 3 lidos.

10/08/2011

Objetivos

-Trabalhar estruturas de decisão e repetição simples

Exercícios

  1. Escreva um programa que leia N números e calcule a média deles;
  2. Retrabalhar o exercício 4 da aula anterior para deixá-lo genérico: média entre o maior e o menor de n n números. Supor que n é o primeiro núumero lido.

Solução 1: Usando um loop estilo GOTO

12/08/2011

Troca das turmas

-Trabalhar estruturas de decisão e repetição simples

Exercícios

  1. Você trabalha na Airbus e deve construir programa que lê as informações do manche quando ele é empurrado ou puxado (é um airbus antigo, os novos tem joystick) e gera um alarme quando o ângulo de arfagem é maior ou menor que 45 graus. O comando de leitura é LerProfundor(variavel). Ver http://pt.wikipedia.org/wiki/Profundor
  2. Um estudo sobre sensibilidade de pessoas a temperaturas da água identificou que a maioria das pessoas considera fria a água com temperaturas abaixo de 25 graus, morna entre 25 e 30 graus, e quente acima de 30 graus. Escreva um algoritmo que mostre as palavras "fria", "morna" ou "quente" dependendo da temperatura da água que for informada.
  3. Faça um algoritmo para fazer a divisão de dois números reais. Antes de dividi-los deve ser feito um teste de validade. Caso não seja possível dividi-los, deve ser mostrada uma mensagem de erro. Se for possível, deve-se mostrar o resultado da divisão.
  4. Escreva um programa que leia cinco números do teclado e mostre os dois maiores números.

17/08/2011

19/08/2011

24/08/2011

Avaliação surpresa.

26/08/2011

Não teve aula

31/08/2011

Objetivos

  1. continuar o trabalho com fluxogramas;
  2. tipo cadeia de caracteres;
  3. vetor de caracteres;

Desenvolvimento da Aula

-Apresentação do tipo vetor de caracteres (string);

Um caracter pode ser armazenado em uma "caixa" de memória correspondente a um byte. Basta usar uma codificação adequada, Por exemplo, o uso de código ASCII permite representar a letra A como o byte 41H.

Uma cadeia de caracteres (string) pode ser implementada como uma sequência de caracteres, ou seja, um vetor de caracteres. Para marcar o final da cadeia, muitas linguagens (o C, por exemplo) se utilizada do 0 (NULL) no final da cadeia.

Do ponto de vista de nossas representações em fluxogramas, vamos tratar uma cadeia de caracteres como uma variável única, referenciada por um nome.

Exercícios

1.Elaborar um fluxograma que permite controlar o acionamento de uma porta através de uma senha. Se a senha fornecida pelo usuário corresponde a uma senha previamente armazenada, a porta deve ser aberta. Caso não corresponda, uma mensagem será mostrada indicando que a senha não confere.

2.Incrementar a solução do exercício 1 para um sistema que permite armazenar até 10 senhas diferentes em um vetor de senhas.

3.Incrementar a solução do exercício 2 para um sistema que armazena em uma tabela, o nome de usuários e outra tabela que armazena as senhas. A linha correspondente ao usuário é a mesma linha que corresponde a senha na tabela de senhas.

02/09/2011

Objetivos

  1. continuar o uso de fluxogramas;
  2. apresentar a caixa correspondente ao for (laços controlados);
  3. exercícios combinando vetores de cadeias com vetores de reais e inteiros,
  4. procura por padrões em uma cadeia;

Referência adicional sobre fluxogramas

Fluxogramas

Exercícios

1.Implementar o exercício 3 da aula anterior usando a caixa de laços controlados.

2.Implementar um fluxograma que permite acrescentar senhas no caso do exercício 2 da aula anterior. Suponha que quando for fornecida uma senha de valor "1234", o sistema desvia o fluxo para entrada de nova senha. Uma senha somente pode ser inserida se existir espaço livre na tabela. Espaços livres contem senhas vazias do tipo "".

3.Considere que uma cadeia de caracteres já está armazenada em vetor X. Esta cadeia é terminada em NULL. Elabore um fluxograma que permita ler um caracter do mundo externo e contar o número de caracteres existentes na cadeia.

07/09/2011

Feriado

09/09/2011

Objetivos

  1. Revisão Geral: tipos de dados (inteiro,real,caracteres, vetores, strings); constantes e variáveis; expressões;estruturas de controle: decisão e controle;
  2. Teste relâmpago;
  3. Apresentação do Portugol: tipos de dados, definição de variáveis, entrada e saída de dados, estrutura de decisão SE.

Teste relâmpago

Portugol (extraído da página do Prof.Marcelo Sobral e Tiago Semprebom)

As aulas de Lógica de Programação usarão um software de auxílio ao ensino de algoritmos chamado Portugol, desenvolvido na Escola Superior de Engenharia do Instituto Politécnico de Tomar, em Portugal.

Guia rápido de instalação e utilização do Portugol

Abaixo segue uma breve ajuda de como obtê-lo, instalá-lo e usá-lo. Esse guia assume que você esteja usando o Ubuntu Linux 9.04 ou superior.

  1. Faça o download do Portugol.
  2. Descompacte-o com o seguinte comando:
    tar xzf portugol23.tar.gz
    
  3. Repare que existe agora um subdiretório portugol no diretório onde você o descompactou. Execute o Portugol com o seguinte comando:
    java -jar portugol/Portugol.jar
    
    Obs: você precisará ter Java instalado. Caso não o tenha, execute o comando:
    sudo apt-get install openjdk-6-jre
    
  4. Copie esse arquivo para poder ver fluxogramas coloridos, e grave-o no memso diretório onde está o Portugol.
  5. Veja a ajuda do Portugol, e use-a sempre que tiver dúvidas !


A tela inicial do Portugol segue abaixo, junto com um programa demonstrativo.

Editor-Portugol.png

Exemplos de programas iniciais em Portugol:

  1. Lendo um número e mostrando-o na tela em seguida:
    Inicio
      inteiro x
    
      Escrever "Digite um numero: ",
      Ler X
      Escrever "Numero digitado: ", x
    Fim
    
  2. Lendo dois números, somando-os e mostrando o resultado na tela:
    Inicio
      inteiro x, y
    
      Escrever "Digite um numero: ",
      Ler x
      Escrever "Digite outro numero: ",
      Ler y
      Escrever "Soma = ", x+y
    Fim
    
    O programa abaixo é equivalente:
    Inicio
      inteiro x, y, z
    
      Escrever "Digite um numero: ",
      Ler x
      Escrever "Digite outro numero: ",
      Ler y
      z <- x + y
      Escrever "Soma = ", z
    Fim
    

Problema base: Entrar com o seu nome e com a sua idade e apresentar um texto dizendo se voce tem mais ou menos que vinte anos.

Tipos de Dados e definição de varáveis e constantes

Ver:

Estrutura de Decisão SE

Ver:

Exercícios

1.Fazer em Portugol um programa para calcular a área de um círculo. Definir o PI como constante.

2.Refazer o exercício anterior com a opção de calcular a área ou a circunferência.

14/09/2011

OBJETIVOS

  1. Estruturas de Repetição: ENQUANTO, PARA, REPETE, FAZ ENQUANTO
  2. Tipos de Dados Básicos;
  3. Tipos Estruturados (arrays)

Estrutura ENQUANTO

inicio
    inteiro contador
    contador <- 0
    enquanto contador < 10 faz
        escrever contador , "\t"
        contador <- contador + 1
    fimenquanto
fim

Estrutura PARA

inicio
    inteiro contador
    para contador de 0 ate 9 passo 1
        escrever contador , "\t"
    proximo
fim

Estrutura REPETE

inicio
    inteiro mes
    repete
        escrever "introduza um mes :"
        ler mes
    ate mes > 0 e mes < 13
    escrever "\nmes introduzido :" , mes
fim

Estrutura FAZ ENQUANTO

inicio
    inteiro mes
    faz
        escrever "introduza um mes :"
        ler mes
    enquanto mes < 0 ou mes > 13
    escrever "\nmes introduzido :" , mes
fim


Tipos de Dados Básicos

ver página de ajuda do Portugol

Tipos de Dados Estruturados

ver página de ajuda do Portugol

Exercícios

  1. Ler um vetor de 10 reais e calcular a média dos elementos do vetor. Faça um fluxograma de apoio.
inicio
     constante inteiro TAM_MAX_VETOR <- 10
     real vetor_x[TAM_MAX_VETOR], media,soma
     inteiro i
     
     // Leitura dos dados para o vetor
     para i de 0 ate TAM_MAX_VETOR-1 passo 1
         escrever "Entre com vetor_x[", i, "]\n"
         ler vetor_x[i]
     proximo
     
     //Totalização da soma dos elementos
     soma <- 0
     para i de 0 ate TAM_MAX_VETOR-1 passo 1
         soma <- soma + vetor_x[i]
     proximo    
     
     //Calculo da media
     media <- soma/10
     escrever "\nmedia=", media  
  
fim
  1. Ler um vetor de N reais e calcular a média dos elementos do vetor. Defina um vetor de um certo tamanho. Leia inicialmente o número N. Teste N em relação ao tamanho definido. Faça um fluxograma de apoio.
  2. Ler um vetor de N reais e calcular a média entre o maior e o menor. Faça um fluxograma de apoio.

16/09/2011

OBJETIVOS DA AULA

Avaliação Básica de Portugol

Problemas base para a avaliação de amanhã

OBS: Note que além de ser avaliado o programa, também será avaliada a desenvoltura do aluno em executar passo-a-passo o programa, explicando as instruções.

1.Fazer um programa para ler 2 números reais em variáveis chamadas alfa e beta. No caso de elas apresentarem valores iguais, o programa deve imprimir a mensagem:

"As variáveis possuem valores iguais"

caso contrário a mensagem a ser impressa é:

"A variável <nome_variavel> possui o maior número"

2.Fazer um programa para ler um número inteiro para uma variável. Se o número for positivo, o programa deverá então imprimir todos os números inteiros entre 0 e o valor da variável. Caso contrário deverá apresentar a mensagem "Número negativo" e o programa se encerra. Exemplo: suponha que o usuário entre com o número 5, então a saída do programa é:

0 1 2 3 4 5

Se o usuário fornecer -3, então a saída é simplesmente a mensagem "Número negativo". Se o número for 0 a mensagem deve ser "ZERO!"

21/09/2011

OBJETIVOS

  1. Arrays no Portugol
  2. Exercícios

Arrays no Portugol

Exercícios

1-Implementar em Portugol, o algoritmo já implementado para abrir uma porta dado uma senha.

inicio
    variavel texto senha_armazenada <- "Inter"
    variavel texto senha_lida
    enquanto 1 = 1 faz
        ler senha_lida
        se senha_lida = senha_armazenada entao
            escrever "abrir porta\n"
        senao
            escrever "senha nao confere\n"
        fimse    
    fimenquanto
fim

2-Refazer o exercício para uma tabela com 10 senhas.

inicio
    constante inteiro tam_tabela <- 10
    constante texto tabela_senhas [ tam_tabela ] <- {"Inter" , "Gremio" , "Figueira" , "Avai" , "Coritiba" , "AtleticoPR" , "SaoPaulo" , "Palmeiras" , "Flamengo" , "Vasco"}
    variavel texto senha_lida
    variavel inteiro contador
    enquanto 1 = 1 faz
        contador <- 0
        ler senha_lida
        enquanto ( contador < 10 ) E ( tabela_senhas [ contador ] =/= senha_lida ) faz
            contador <- contador + 1
        fimenquanto
        se contador < 10 entao
            escrever "abrir porta\n"
        senao
            escrever "senha nao conta na lista de senhas\n"
        fimse
    fimenquanto
fim

3-Refazer o exercício para uma tabela de 10 usuários com uma tabela de 10 senhas.

inicio
    constante inteiro tam_tabela <- 10
    constante texto tabela_usuarios[ tam_tabela ] <- {"joao","maria", "jose","lara","vera","lucia","carlos","sofia","lourdes","odilon"}
    constante texto tabela_senhas [ tam_tabela ] <- {"Inter" , "Gremio" , "Figueira" , "Avai" , "Coritiba" , "AtleticoPR" , "SaoPaulo" , "Palmeiras" , "Flamengo" , "Vasco"}
    variavel texto senha_lida, usuario
    variavel inteiro contador
    enquanto 1 = 1 faz
        contador <- 0
        ler usuario
        enquanto ( contador < tam_tabela ) E ( tabela_usuarios [ contador ] =/= usuario ) faz
            contador <- contador + 1
        fimenquanto
        se contador < tam_tabela entao
            ler senha_lida
            se tabela_senhas[contador] = senha_lida entao
                escrever "abrir porta\n"
            senao
                escrever "Senha nao confere\n"
            fimse
        senao
            escrever "usuario nao conta na lista de senhas\n"
        fimse
    fimenquanto
fim

4-Refazer o exercício para incluir uma opção para incluir senhas. Suponha que quando for fornecido um usuario de valor "1234", o sistema desvia o fluxo para entrada de novo usuário/senha. Uma senha somente pode ser inserida se existir espaço livre na tabela de usuários. Espaços livres contem senhas vazias do tipo "".

23/09/2011

OBJETIVOS

  1. Arrays Multi dimensionais
  2. Exercícios

Arrays no Portugol

EXERCÍCIOS

1.Elaborar um programa em Portugol para ler duas matrizes de reais, A e B, ambas de dimensão MxN e calcular a uma matriz C que é a soma destas duas matrizes. Fazer um fluxograma antes de implementar.

inicio

   constante inteiro M<-5,N<-6
   variavel real A[M][N]
   variavel inteiro i,j
   para i de 0 ate M-1 passo 1
       para j de 0 ate N-1 passo 1
           escrever "\nA[",i,"]","[",j,"] = "
           ler A[i][j]
       proximo
   proximo

fim


2.Elaborar um programa para ler duas matrizes de reais, A e B, de dimensões MxN e NxP e então calcular a matriz C que é a multiplicação das duas. Lembrar que

26/09/2011

Adiantado do dia 30/09.

OBJETIVOS

Exercícios gerais sobre portugol.

EXERCÌCIOS

1.Implementar um programa em portugol que permita armazenar as notas de 4 avaliações de uma turma com 15 alunos. Defina uma tabela (array com duas dimensões) que permita realizar este armazenamento. Suponha que cada aluno é identificado por um número inteiro. O programa inicia solicitando as notas para o primeiro aluno e segue até o último.

2.Incrementar o programa anterior para inserir um menu que permite inserir as notas de um usuário especificamente ou de toda a turma.

3.Melhorar a proposta para incluir no menu uma opção de listar as notas de toda turma ou de um aluno especificamente.

4.Incluir uma opção para calcular a média de um aluno

5.Incluir uma opção para calcular a média de toda a turma por avaliação.

6.Incluir uma opção para calcular a média de toda a turma em todas as avaliações

28/09/2011

NÂO HOUVE AULA. Encaminhamentos doutorado.

30/09/2011

NÃO HOUVE AULA. Aula dada em 26/09

05/10/2011

OBJETIVOS

  1. Introdução a linguagem C
  2. Aula 1 e 2 do Curso UFMG
  3. Representação de funções/subpramas no fluxograma

Ferramentas GNU

Compilando um programa:

 gcc teste.c -o teste

Compilando para depuração

 gcc teste.c -g -o teste

EXERCÍCIOS

07/10/2011

OBJETIVOS

  1. Introdução a linguagem C
  2. Aula 2 do Curso UFMG: Introdução Básica às Entradas e Saídas, Introdução a Alguns Comandos de Controle de Fluxo

Observações

Explicar strings NULL terminated com detalhes;

14/10/2011

Exercícios de Preparação para Avaliação

1.Elaborar um fluxograma de um procedimento para ler N números reais para um vetor e, em seguida, computar a média de todos os números maiores ou iguais a 5. A média deve ser impressa. Mostrar na memória, as variáveis utilizadas.

2.Elaborar um fluxograma de um procedimento para ler o comprimento de dois catetos de um triângulo retângulo. O procedimento deve então computar a hipotenusa. Assuma que existe uma função SQRT que retorna a raiz quadrada de um número. Exemplo: Y=SQRT(4) faz com que Y assuma o valor 2.

3.Elaborar um fluxograma de um procedimento para ler um número inteiro para uma variável. Se o número for positivo, o programa deverá então imprimir todos os números inteiros entre 0 e o valor da variável.

4.Suponha que em um sistema de registro escolar JÁ existem duas tabelas disponíveis. Uma primeira chamada ALUNOS é um vetor de cadeias de caracteres com 15 alunos já registrados. Uma outra tabela chamada NOTAS é uma matriz onde a linha corresponde a um aluno e cujas colunas em número de 4 são as notas bimestrais já atualizadas. Uma mesma linha na tabela ALUNOS e na tabela NOTAS corresponde ao mesmo aluno. Elabore um fluxograma para imprimir a as notas bimestrais de um aluno específico e a média destes quatros bimestres. Note que a primeira ação a ser realizada é ler o nome do aluno. Na sequência, deve ser determinada a linha correspondente a este aluno na tabela ALUNOS. Com este índice (linha), pode-se acessar a tabela NOTAS.

AVALIAÇÂO

19/10/2011

  1. Introdução a linguagem C
  2. Aula 2 do Curso UFMG: comandos if e for
  3. Aula 3: Tipos do C, Variáveis, Operadores Aritméticos e de Atribuição, Operadores Lógicos.

EXercícios

1) Fazer um programa para computar o número de caracteres de uma cadeia (string) lida pelo teclado.Use o comando for;

#include <stdio.h>

void main ()

{

   char alfa[50];

   int i;

   printf ("Entre com a cadeia: ");

   scanf("%s",alfa);

   for (i=0;alfa[i]!=0;i++)

	;

   printf ("\nNumero de caracteres em %s = %d \n", alfa, i);

}

2) Fazer uma função para implementar o exercício (1), retornando o tamanho (tipo inteiro). Chamar a função de str_len;


21/10/2011

OBJETIVOS

  1. Introdução a linguagem C
  2. Exercícios
  3. Aula 3: Tipos do C, Variáveis, Operadores Aritméticos e de Atribuição, Operadores Lógicos.

EXERCÍCIOS

1) Fazer um programa para ler duas cadeias de caracteres (strings) e dizer qual delas possui mais caracter que a outra.

#include <stdio.h>
 
int str_len (char alfa[]) 
{
   int i;
   for (i=0;alfa[i]!=0;i++)
	;
   return i;
 
}

void main()
{
  char vetor1[50];
  char vetor2[50];
  int tam1,tam2;

  /* Entrada das strings */
  printf ("Entre com a cadeia: ");
  scanf("%s",vetor1);
  printf ("Entre com a cadeia: ");
  scanf("%s",vetor2);

  /* Computação do tamanho das strings */
  tam1 = str_len(vetor1);
  tam2 = str_len(vetor2);

  /* Comparação do tamanho das strings */
  if (tam1 > tam2) {
     printf ("\nString 1 maior que String2\n");
  } else {
     printf ("\nString 1 menor OU igual ao tamanho de String2\n");
  }
}

2) Modificar o exercício anterior implementando uma função de apoio str_len_cmp para comparar o tamanho de duas strings. A função retorna 1 se as strings tiverem o mesmo tamanho e 0 caso contrário.

#include <stdio.h>
 
int str_len (char alfa[]) 
{
   int i;
   for (i=0;alfa[i]!=0;i++)
	;
   return i;
 
}

int str_len_cmp(char cadeia1[], char cadeia2[])
{
}

void main()
{
  char vetor1[50];
  char vetor2[50];
  int tam1,tam2;

  /* Entrada das strings */
  printf ("Entre com a cadeia: ");
  scanf("%s",vetor1);
  printf ("Entre com a cadeia: ");
  scanf("%s",vetor2);
  if (str_len_cmp(vetor1,vetor2) == 0) {
     printf ("Cadeias iguais\n");
  } else {
     printf ("Cadeias diferentes\n");
  }
}

3) Implementar uma função chamada str_cmp para comparar duas strings. A função retorna 1 se as cadeias forem iguais e retorna 0 se forrem diferentes.

26/10/2011

OBJETIVOS

  1. Aprofundar tipos, variáveis, expressões no C;
  2. Aula 3 da UFMG: Tipos do C, Variáveis, Operadores Aritméticos e de Atribuição, Operadores Lógicos.

04/11/2011

OBJETIVOS

  1. Entregar e corrigir avaliação 1
  2. Converter fluxogramas em programa C (3 primeiros da avaliação);
  3. Continuar aula Aula da UFMG: Tipos do C, Variáveis, Operadores Aritméticos e de Atribuição, Operadores Lógicos.

FLUXOGRAMAS DA AVALIAÇÃO

Solução ex1 da avaliação usando caixa de repetição

Flux1 aval1.png

Solução ex2 da avaliação usando caixa de repetição

Flux2 aval2.png


Exercícios

  1. Implementar o ex1 da avaliação na forma de um programa em C.
  2. Implementar o ex2 da avaliação na forma de um programa em C.
  3. Refazer o fluxograma do ex1 usando caixa de decisão simples.
  4. Refazer o fluxograma do ex2 usando caixa de decisão simples.

09/11/2011

11/11/2011

16/11/2011

18/11/2011

23/11/2011

25/11/2011

30/12/2011

02/12/2011

07/12/2011

09/12/2011

14/12/2011

16/12/2011