Mudanças entre as edições de "PRG29002 - Programação I - Eng.Telecom 2015-2"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
 
(33 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 11: Linha 11:
 
{{collapse bottom}}
 
{{collapse bottom}}
  
{{collapse top| AULA 2 - [[AULA 2 - Programação 1 - Engenharia |  Dia 9/10/2015 - Lógica de Programação: Expressões - Estruturas de Decisão]]}}
+
{{collapse top| AULA 2 - [[AULA 2 - Programação 1 - Engenharia |  Dia 7/10/2015 - Lógica de Programação: Expressões - Estruturas de Decisão]]}}
 
{{collapse bottom}}
 
{{collapse bottom}}
  
Linha 23: Linha 23:
 
{{collapse bottom}}
 
{{collapse bottom}}
  
{{collapse top|AULA 6 -  Programação 1 - Engenharia |   Dia 21/10/15 -Exercícios}}
+
{{collapse top|AULA 6 -  Programação 1 - Engenharia -   Dia 21/10/15 -Exercícios}}
 
{{collapse bottom}}
 
{{collapse bottom}}
  
{{collapse top|AULA 7-  Programação 1 - Engenharia |   Dia 26/10/15 -Exercícios}}
+
{{collapse top|AULA 7-  Programação 1 - Engenharia -   Dia 26/10/15 -Exercícios}}
 
{{collapse bottom}}
 
{{collapse bottom}}
  
{{collapse top|AULA 8- [[AULA 6 - Programação 1 - Engenharia |  Dia 20/8/14 -Estruturas de Repetição no C]]}}
+
{{collapse top|AULA 8- [[AULA 6 - Programação 1 - Engenharia |  Dia 28/10/14 -Estruturas de Repetição no C]]}}
 
{{collapse bottom}}
 
{{collapse bottom}}
  
{{collapse top|AULA 9- [[Exercícios Preparação para Avaliação I | Dia 04/10/2015]]}}
+
{{collapse top|AULA 9- [[Exercícios Preparação para Avaliação I | Dia 04/11/2015 - Exercícios Preparação para Avaliação I]]}}
 
{{collapse bottom}}
 
{{collapse bottom}}
  
Linha 48: Linha 48:
 
:[[PRG29002-2015-2-Aval1A]]
 
:[[PRG29002-2015-2-Aval1A]]
 
:[[PRG29002-2015-2-Aval1B]]
 
:[[PRG29002-2015-2-Aval1B]]
 +
 +
:[[PRG29002-2015-2-REC]]
  
 
{{collapse top|AULA 15 - [[AULA 10 - Programação 1 - Engenharia |  Dia 23/11/15 - Vetores no C]]}}
 
{{collapse top|AULA 15 - [[AULA 10 - Programação 1 - Engenharia |  Dia 23/11/15 - Vetores no C]]}}
Linha 135: Linha 137:
  
 
b) Inserir uma funcionalidade para armazenar nomes e pontuação de usuários. Ao final de cada programa mostrar a tabela de usuários com pontuação. Dica: criar 2 tabelas: uma de strings e outra de inteiros. A primeira para armazenar os nomes de usuários e a segunda para armazenar a pontuação.
 
b) Inserir uma funcionalidade para armazenar nomes e pontuação de usuários. Ao final de cada programa mostrar a tabela de usuários com pontuação. Dica: criar 2 tabelas: uma de strings e outra de inteiros. A primeira para armazenar os nomes de usuários e a segunda para armazenar a pontuação.
 +
{{collapse bottom}}
 +
 +
{{collapse top|AULA 21-[[AULA ?? - Programação 1 - Engenharia  14/12/2015 - Estruturas }}
 
{{collapse bottom}}
 
{{collapse bottom}}
  
Linha 144: Linha 149:
 
<ol>
 
<ol>
 
<li>
 
<li>
Implementar uma função da forma:
+
Implementar uma função que desenha uma figura no terminal e cujo ''esqueleto'' é:
  
 
<syntaxhighlight lang=c>
 
<syntaxhighlight lang=c>
Linha 170: Linha 175:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Os parâmetros inidicam:  
+
Os parâmetros indicam:  
 
   (1) 'margem' - número de espaços em branco da última linha  
 
   (1) 'margem' - número de espaços em branco da última linha  
 
   (2) 'lado' -  número de caracteres 'car1' na úlima linha e  
 
   (2) 'lado' -  número de caracteres 'car1' na úlima linha e  
 
   (3) 'car1' - o caracter da figura.   
 
   (3) 'car1' - o caracter da figura.   
 
</li>
 
</li>
 +
<li>
 +
Implementar uma função que recebe como parâmetros um vetor de inteiros e o seu tamanho. A função deve retornar a média entre todos os números armazenados no vetor.
 +
Exemplo:
 +
<syntaxhighlight lang=c>
 +
float media_vet(int vetor[], int tamanho)
 +
{
 +
 +
}
 +
main()
 +
{
 +
  float media;
 +
  int x[10] = {1,8,6,5,9,14,2,3,10,0};
 +
 
 +
  media = media_vet(x,10);
 +
}
 +
</syntaxhighlight>
 +
</li> 
  
 +
<li>
 +
Implementar uma função que recebe como parâmetros um vetor de inteiros e o  tamanho deste vetor. A função deve retornar o maior número armazenado neste vetor. Exemplo:
 +
<syntaxhighlight lang=c>
 +
int maior_vet(int vetor[], int tamanho)
 +
{
 +
 +
}
 +
main()
 +
{
 +
  int  maior;
 +
  int x[10] = {1,8,6,5,9,14,2,3,10,0};
 +
 
 +
  maior = maior_vet(x,10); /* o valor retornado deve ser 14 */
 +
}
 +
</syntaxhighlight>
 +
</li>
 +
<li> Implementar uma função que recebe uma matriz 2x3 de floats. Ela deve retornar a média entre todos os elements da matriz. Exemplo:
 +
<syntaxhighlight lang=c>
 +
float media_mat(float  matriz[2][3])
 +
{
 +
}
 +
main()
 +
{
 +
  float x[2][3] = {
 +
                    {2.6,-7.4,3.9},
 +
                    {8.6,9.4,5.1}
 +
                  };
 +
  float media;
 +
  media = media_mat(x);
 +
}
 +
</syntaxhighlight>
 +
</li>
 +
<li>
 +
Considere uma tabela global com nomes (user ids)  armazenados. Implementar uma função para buscar um user_id na tabela. A função deve retornar 0 se foi encontrado o tem e -1 se não foi encontrado.
 +
<syntaxhighlight lang=c>
 +
char tabela_userid[5][10] = {
 +
  "alfa",
 +
  "delta",
 +
  "gama",
 +
  "epson",
 +
  "beta"
 +
};
 +
 +
int procurar_userid(char user_id[])
 +
{
 +
}
 +
</syntaxhighlight>
 +
</li>
 +
<li>
 +
Implementar uma função que recebe dois vetores de inteiros e retorna a maior média dentre os seus componentes.
 +
<syntaxhighlight lang=c>
 +
float calc_media(int vet1[], int tam1, int vet2[], int tam2)
 +
{
 +
}
 +
main()
 +
{
 +
  int x[5]={2,6,3,4,9};
 +
  int y[7]={4,2,8,1,0,3,8};
 +
  float media;
 +
 
 +
  media = calc_media(x,5,y,7);
 +
}
 +
</syntaxhighlight>
 +
<li>
 +
Implementar uma função que calcula a média de todos os elementos de um vetor de inteiros maiores que um determinado número passado como parâmetro.
 +
<syntaxhighlight lang=c>
 +
float calc_media(int vet1[], int tam1, int numero)
 +
{
 +
}
 +
main()
 +
{
 +
  int x[5]={1,4,6,3,5};
 +
  float media;
 +
 
 +
  media = calc_media (x,5,3); /*retorna a media de todos os elementos maiores que 3*/
 +
}
 +
</syntaxhighlight>
 +
</li>
 +
<li>
 +
Implementar uma função que recebe duas strings como parâmero e
 +
retorna 0  se último caracter destas strings são diferentes, 1 se iguais. Exemplo:
 +
<syntaxhighlight lang=c>
 +
int comp_ult(char vet1[], char vet2[])
 +
 +
}
 +
main()
 +
{
 +
  int ret;
 +
  char x[]="alfa";
 +
  char y[]="beta";
 +
 
 +
  ret=comp_ult(vet1,vet2);
 +
}
 +
</syntaxhighlight>
 +
</li>
 
</ol>
 
</ol>
 +
 +
{{collapse bottom}}
 +
 +
{{collapse top|Dia 21/12/2015 - AULA 22 - Avaliação de Laboratório }}
 +
{{collapse bottom}}
 +
 +
{{collapse top|Dia 23/12/2015 - AULA 23 - Correção da Avaliação  }}
 +
{{collapse bottom}}
 +
 +
{{collapse top|Dia 1/2/2016 - AULA 24  Revisão de Estruturas  }}
 +
{{collapse bottom}}
 +
 +
{{collapse top|Dia 1/2/2016 - AULA 25  [[AULA 17 - Programação 1 - Engenharia |  Dia 1/2/2016 - Ponteiros ]]  }}
 +
{{collapse bottom}}
 +
 +
{{collapse top|AULA 26 [[AULA 19 - Programação 1 - Engenharia |  Dia 15/1/2016 - Vetor de Ponteiros e Ponteiro Para Estruturas]]}}
 +
{{collapse bottom}}
 +
 +
{{collapse top|AULA 27 [[AULA 20 - Programação 1 - Engenharia |  Dia 22/2/2016 - Alocação Dinâmica de Memória]]}}
 +
{{collapse bottom}}
 +
 +
{{collapse top|AULA 28 [[AULA 21 - Programação 1 - Engenharia |  Dia 24/2/14 - Exercícios e Listas ligadas simples]] }}
 +
{{collapse bottom}}
 +
 +
{{collapse top|AULA 29 [[AULA 25 - Programação 1 - Engenharia |  Dia 29/2/2016 - Múltiplos Arquivos]]  }}
 +
{{collapse bottom}}
 +
 +
{{collapse top|AULA 30 Dia 2/3/2016 - Desenvolvimento do Projeto }}
 +
 +
=PROJETO FINAL - Requisitos Iniciais=
 +
 +
*Sistema de Controle de Acesso de ambiente
 +
*Os usuários devem ter userid e senha e devem estar organizados através de uma fila;
 +
*O usuário admin tem direitos adicionais de
 +
**acrescentar e remover usuário;
 +
**desbloquear usuário
 +
*deve ser previsto o bloqueio de usuário após certo número de acessos: configurar na linha de comando
 +
*o sistema deve conter 3 arquivos fonte (.c) e três headers (.h): o main.c, main.h, user.c, user.h, admin.c e admin.h. Um Makefile deve ser construído para compilar o programa.
 +
 +
Adicional para equipe com 3:
 +
 +
*O sistema deve permitir que o administrador configure o período inicial e final de acesso
 +
 +
SUGESTÕES
 +
 +
*Pseudo-código para  a função para adicionar usuário (arquivo admin.c)
 +
<syntaxhighlight lang=c>
 +
 +
int add_user()
 +
{
 +
Ler userid do usuário a ser inserido
 +
Verificar se o usuário já está na lista de usuários /* chamar função auxiliar */
 +
Se o usuário já estiver na lista
 +
    Editar o usuário
 +
Senão {
 +
    Criar uma estrutura para o usuário
 +
    Popular a estrutura com os dados do usuário
 +
    Inserir o usuário na Lista
 +
}     
 +
}
 +
</syntaxhighlight>
 +
 +
*Pseudo código do tratar_usuario
 +
 +
<syntaxhighlight lang=c>
 +
void tratar_usuario(char *userid)
 +
{
 +
  Verifica se existe um usuário com o userid na lista /* chamar função de apoio que retorna NULL ou um ponteiro para o usuário */
 +
  Se não existir
 +
      Informa usuário inexistente
 +
  Senão {
 +
      Se usuário estiver bloqueado
 +
          Informa que ele está bloqueado
 +
      Senão {
 +
          Pede para entrar com a senha
 +
          Se senha ok
 +
              abre a porta
 +
          Senão
 +
              Msg de senha incorreta
 +
      }
 +
}
 +
 +
</syntaxhighlight>
 +
{{collapse bottom}}
 +
 +
{{collapse top|Dia 7/3/2016 - AULA 31 - Avaliação II de Laboratório }}
 +
{{collapse bottom}}
 +
 +
 +
{{collapse top|AULA 32  [[AULA 22 - Programação 1 - Engenharia |  9/3/2016 - Tratamento de Arquivos - Parte I]] }}
 +
{{collapse bottom}}
 +
 +
{{collapse top|AULA 33 - 14/3/2016 - Desenvolvimento do Projeto }}
 +
{{collapse bottom}}
 +
 +
{{collapse top|AULA 34  - 16/3/2016 - Recuperação }}
 
{{collapse bottom}}
 
{{collapse bottom}}

Edição atual tal como às 19h56min de 16 de março de 2016

Plano de Ensino

Plano de Ensino da Disciplina

Aulas

AULA 1 - Dia 5/10/2015 - Aula Inaugural
AULA 2 - Dia 7/10/2015 - Lógica de Programação: Expressões - Estruturas de Decisão
AULA 3 - Dia 14/10/15 - Lógica de Programação: Estruturas de Repetição/Subprogramas
AULA 4 - Dia 17/10/15 -Introdução a Programação C
AULA 5 - Dia 19/10/15 -Estruturas de Decisão
AULA 6 - Programação 1 - Engenharia - Dia 21/10/15 -Exercícios
AULA 7- Programação 1 - Engenharia - Dia 26/10/15 -Exercícios
AULA 8- Dia 28/10/14 -Estruturas de Repetição no C
AULA 9- Dia 04/11/2015 - Exercícios Preparação para Avaliação I
AULA 10 - Dia 9/11/2015 -Funções no C
AULA 11- Dia 11/11/2015
AULA 12 - Dia 16/11/2015 - Vetores no C
AULA 13 - Dia 18/11/2015 - Avaliação 1
PRG29002-2015-2-Aval1A
PRG29002-2015-2-Aval1B
PRG29002-2015-2-REC
AULA 15 - Dia 23/11/15 - Vetores no C
AULA 14 - Dia 25/11/15 - Correção da Avaliação I]
AULA 16 - Dia 30/11/15 - Vetores no C
AULA 17 - Dia 2/12/2015 - Arranjos Multidimensionais
AULA 18 - Dia 7/12/2015 - Exercícios
AULA 19 - Dia 9/12/2015 - Exercícios - Continuação Batalha Naval


AULA 20 - Dia 12/12/2015 - Exercícios - Continuação Batalha Naval

Adendos:

a) Inserir uma função após o tiro para fornecer uma dica do número de navios que se encontra nas casas imediatamente vizinhas ao tiro realizado.

solução 1 - Testar
int TestarVizinhanca(int x, int y)
{
 int cont=0;
 
 if(x>0) {
    if (y>0) { 
 		if (ZonaGuerra[x-1][y-1]>0 && ZonaGuerra[x-1][y-1]<4)
    		cont++;
    }
 	if (ZonaGuerra[x-1][y]>0 && ZonaGuerra[x-1][y]<4)
    	cont++;
    if(y<9) {
 		if (ZonaGuerra[x-1][y+1]>0 && ZonaGuerra[x-1][y+1]<4)
    		cont++;
    }  
 }
 
 if (y>0) {   
 	if (ZonaGuerra[x][y-1]>0 && ZonaGuerra[x][y-1]<4)
    	cont++;
 }
 if(y<9) {   
 	if (ZonaGuerra[x][y+1]>0 && ZonaGuerra[x][y+1]<4)
    	cont++;
 }
 
 if (x<9) {
    if (y>0) {
 		if (ZonaGuerra[x+1][y-1]>0 && ZonaGuerra[x+1][y-1]<4)
    		cont++;
    }
 	if (ZonaGuerra[x+1][y]>0 && ZonaGuerra[x+1][y]<4)
    	cont++;
    if(y<9) {     	
 		if (ZonaGuerra[x+1][y+1]>0 && ZonaGuerra[x+1][y+1]<4)
    		cont++;
    }      
 }   
}
solução 2 - Testar
int TestarVizinhanca(int x, int y)
{
  int i,j,cont;
  
  for (i=x-1;i<x+2;i++) {
     for (j=y-1;j<y+2;j++) {
           if (!(i==-1 || i==10 || j==-1 || j==10 || (i==x && j==y)))
           	if (ZonaDeGuerra[i][j]>0 && ZonaDeGuerra[i][j]<4)
               		cont++;
      }
  }
  return cont;
}

b) Inserir uma funcionalidade para armazenar nomes e pontuação de usuários. Ao final de cada programa mostrar a tabela de usuários com pontuação. Dica: criar 2 tabelas: uma de strings e outra de inteiros. A primeira para armazenar os nomes de usuários e a segunda para armazenar a pontuação.

{{collapse top|AULA 21-[[AULA ?? - Programação 1 - Engenharia 14/12/2015 - Estruturas }}

|}

AULA 21- Dia 16/12/2015 - Estruturas
Exercícios adicionais de preparação para avaliação 1 de Laboratório
  1. Implementar uma função que desenha uma figura no terminal e cujo esqueleto é:
     void plotar_fig(int margem, int lado, char car1)
    

    Exemplo de uso:

      plotar_fig(6,5,'A')
    

    A figura deverá ser desenhada da forma (onde aparece 'b' é espaço em branco):

    bbbbbbA
    
    bbbbbbAA
    
    bbbbbbAAA
    
    bbbbbbAAAA
    
    bbbbbbAAAAA
    

    Os parâmetros indicam:

      (1) 'margem' - número de espaços em branco da última linha 
      (2) 'lado' -  número de caracteres 'car1' na úlima linha e 
      (3) 'car1' - o caracter da figura.  
    
  2. Implementar uma função que recebe como parâmetros um vetor de inteiros e o seu tamanho. A função deve retornar a média entre todos os números armazenados no vetor. Exemplo:
    float media_vet(int vetor[], int tamanho)
    {
    
    }
    main()
    {
      float media;
      int x[10] = {1,8,6,5,9,14,2,3,10,0};
      
      media = media_vet(x,10);
    }
    
  3. Implementar uma função que recebe como parâmetros um vetor de inteiros e o tamanho deste vetor. A função deve retornar o maior número armazenado neste vetor. Exemplo:
    int maior_vet(int vetor[], int tamanho)
    {
    
    }
    main()
    {
      int  maior;
      int x[10] = {1,8,6,5,9,14,2,3,10,0};
      
      maior = maior_vet(x,10); /* o valor retornado deve ser 14 */
    }
    
  4. Implementar uma função que recebe uma matriz 2x3 de floats. Ela deve retornar a média entre todos os elements da matriz. Exemplo:
    float media_mat(float  matriz[2][3])
    {
    }
    main()
    { 
      float x[2][3] = {
                         {2.6,-7.4,3.9},
                         {8.6,9.4,5.1}
                      };
      float media;
      media = media_mat(x);
    }
    
  5. Considere uma tabela global com nomes (user ids) armazenados. Implementar uma função para buscar um user_id na tabela. A função deve retornar 0 se foi encontrado o tem e -1 se não foi encontrado.
    char tabela_userid[5][10] = {
      "alfa",
      "delta",
      "gama",
      "epson",
      "beta"
    };
    
    int procurar_userid(char user_id[])
    {
    }
    
  6. Implementar uma função que recebe dois vetores de inteiros e retorna a maior média dentre os seus componentes.
    float calc_media(int vet1[], int tam1, int vet2[], int tam2)
    {
    }
    main()
    {
      int x[5]={2,6,3,4,9};
      int y[7]={4,2,8,1,0,3,8};
      float media;
      
      media = calc_media(x,5,y,7);
    }
    
  7. Implementar uma função que calcula a média de todos os elementos de um vetor de inteiros maiores que um determinado número passado como parâmetro.
    float calc_media(int vet1[], int tam1, int numero)
    {
    }
    main()
    {
      int x[5]={1,4,6,3,5};
      float media;
      
      media = calc_media (x,5,3); /*retorna a media de todos os elementos maiores que 3*/
    }
    
  8. Implementar uma função que recebe duas strings como parâmero e retorna 0 se último caracter destas strings são diferentes, 1 se iguais. Exemplo:
     int comp_ult(char vet1[], char vet2[])
     {   
     }
     main()
     {
       int ret;
       char x[]="alfa";
       char y[]="beta";
       
       ret=comp_ult(vet1,vet2); 
     }
    
Dia 21/12/2015 - AULA 22 - Avaliação de Laboratório
Dia 23/12/2015 - AULA 23 - Correção da Avaliação
Dia 1/2/2016 - AULA 24 Revisão de Estruturas
Dia 1/2/2016 - AULA 25 Dia 1/2/2016 - Ponteiros
AULA 26 Dia 15/1/2016 - Vetor de Ponteiros e Ponteiro Para Estruturas
AULA 27 Dia 22/2/2016 - Alocação Dinâmica de Memória
AULA 28 Dia 24/2/14 - Exercícios e Listas ligadas simples
AULA 29 Dia 29/2/2016 - Múltiplos Arquivos
AULA 30 Dia 2/3/2016 - Desenvolvimento do Projeto

PROJETO FINAL - Requisitos Iniciais

  • Sistema de Controle de Acesso de ambiente
  • Os usuários devem ter userid e senha e devem estar organizados através de uma fila;
  • O usuário admin tem direitos adicionais de
    • acrescentar e remover usuário;
    • desbloquear usuário
  • deve ser previsto o bloqueio de usuário após certo número de acessos: configurar na linha de comando
  • o sistema deve conter 3 arquivos fonte (.c) e três headers (.h): o main.c, main.h, user.c, user.h, admin.c e admin.h. Um Makefile deve ser construído para compilar o programa.

Adicional para equipe com 3:

  • O sistema deve permitir que o administrador configure o período inicial e final de acesso

SUGESTÕES

  • Pseudo-código para a função para adicionar usuário (arquivo admin.c)
int add_user() 
{
 Ler userid do usuário a ser inserido
 Verificar se o usuário  está na lista de usuários /* chamar função auxiliar */
 Se o usuário  estiver na lista
    Editar o usuário
 Senão {
    Criar uma estrutura para o usuário
    Popular a estrutura com os dados do usuário
    Inserir o usuário na Lista 
 }       
}
  • Pseudo código do tratar_usuario
void tratar_usuario(char *userid)
{
  Verifica se existe um usuário com o userid na lista /* chamar função de apoio que retorna NULL ou um ponteiro para o usuário */
  Se não existir 
      Informa usuário inexistente
  Senão {
      Se usuário estiver bloqueado
          Informa que ele está bloqueado
      Senão {
          Pede para entrar com a senha
          Se senha ok
              abre a porta
          Senão
              Msg de senha incorreta
      }
}
Dia 7/3/2016 - AULA 31 - Avaliação II de Laboratório


AULA 32 9/3/2016 - Tratamento de Arquivos - Parte I
AULA 33 - 14/3/2016 - Desenvolvimento do Projeto
AULA 34 - 16/3/2016 - Recuperação