Mudanças entre as edições de "PRG29002-2018-2"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
 
(13 revisões intermediárias por 2 usuários não estão sendo mostradas)
Linha 5: Linha 5:
 
=ATENDIMENTO PARALELO=
 
=ATENDIMENTO PARALELO=
  
SEGUNDA: 11h às 12h
+
SEGUNDA: 10h45 às 11h45
 
QUARTA:  13h30 às 14h30.
 
QUARTA:  13h30 às 14h30.
  
Linha 894: Linha 894:
 
Considere o código de um programa ''inacabado'' que visa construir e gerenciar uma tabela de alunos de um colégio.
 
Considere o código de um programa ''inacabado'' que visa construir e gerenciar uma tabela de alunos de um colégio.
 
Alunos são colocados em uma tabela através de uma função ''insert_aluno'' e removidos através de uma função ''delete_aluno''. Estude o código e faça as seguintes modificações:
 
Alunos são colocados em uma tabela através de uma função ''insert_aluno'' e removidos através de uma função ''delete_aluno''. Estude o código e faça as seguintes modificações:
#Modifique a função ''insert_aluno'' para que receba (e atualize) como parâmetro adicional a idade do aluno;
+
#Modifique a função ''insert_aluno'' para que receba (e atualize) como parâmetro adicional a idade do aluno (resolvido na aula);
#Acrescente na estrutura um ponteiro para uma estrutura endereço. Crie uma função para atualizar o endereço de um determinado aluno passado como parâmetro (ver equeleto da função);
+
#Acrescente na estrutura um ponteiro para uma estrutura endereço (resolvido na aula). Crie uma função para atualizar o endereço de um determinado aluno passado como parâmetro (ver esqueleto da função);
 
#Crie uma função ''print_aluno'' para imprimir todos os dados específicos de um aluno;
 
#Crie uma função ''print_aluno'' para imprimir todos os dados específicos de um aluno;
#Crie uma função ''print_turma'' para imprimir dados de toda a turma. Reutilize a função ''print_aluno''.
+
#Crie uma função ''print_turma'' para imprimir dados de toda a turma.  
  
 
<syntaxhighlight lang=c>
 
<syntaxhighlight lang=c>
Linha 926: Linha 926:
 
   for(i=0;i<5 && alunos[i]!=NULL;i++);
 
   for(i=0;i<5 && alunos[i]!=NULL;i++);
 
   if(i<5) {
 
   if(i<5) {
     alunos[i] = malloc(sizeof(struct tipo_aluno));
+
     alunos[i] = malloc(sizeof(struct tipo_aluno)); // lembrar: o retorno de malloc deveria sempre ser testado...
 
     strcpy(alunos[i]->nome, p_nome);
 
     strcpy(alunos[i]->nome, p_nome);
 
     alunos[i]->idade = idade;
 
     alunos[i]->idade = idade;
Linha 988: Linha 988:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 +
==EX2==
  
 
<syntaxhighlight lang=c>
 
<syntaxhighlight lang=c>
Linha 1 051: Linha 1 052:
 
=AULA 31 - 20/11/2018=
 
=AULA 31 - 20/11/2018=
  
*Uso de IDE
+
*Acesso a arquivos no C
*Tópicos adicionais: outros tipos no C
 
*precedência de operadores
 
 
*Desenvolvimento do Projeto
 
*Desenvolvimento do Projeto
 +
 +
==Material de Referência==
 +
 +
*[[AULA 22 - Programação 1 - Engenharia]]
  
 
=AULA 32 - 22/11/2018=
 
=AULA 32 - 22/11/2018=
Linha 1 075: Linha 1 078:
  
 
* Apresentação/Defesa do Projeto
 
* Apresentação/Defesa do Projeto
 +
 +
*[https://wiki.sj.ifsc.edu.br/index.php/Opera%C3%A7%C3%B5es_com_Bits_-_Programa%C3%A7%C3%A3o_1_-_Engenharia ]
 +
*[http://mtm.ufsc.br/~azeredo/cursoC/index.html Enums]
 +
*[https://www.programiz.com/c-programming/c-enumeration enums]
  
 
=AULA 37 - 11/12/2018=
 
=AULA 37 - 11/12/2018=
Linha 1 087: Linha 1 094:
  
 
*REAPRESENTAÇÂO PROJETO FINAL (recuperação projeto)
 
*REAPRESENTAÇÂO PROJETO FINAL (recuperação projeto)
 +
 +
=AULAS DE APOIO=
 +
 +
*[[FuncoesDeTempoNoC | Funções de Tempo no C]]
 +
*[[ExemploDeInsercaoSimplesTabela | Exemplo de Inserção Simples na Tabela]]

Edição atual tal como às 08h38min de 6 de dezembro de 2018

PROFESSOR

  • Eraldo Silveira e Silva

ATENDIMENTO PARALELO

SEGUNDA: 10h45 às 11h45 QUARTA: 13h30 às 14h30.

LOCAL: Sala 1 de Professores de Telecomunicações ou em algum dos laboratórios de TELE/CAD

MONITORIA

  • Aluna: Sarom
  • Horários:
    • Segunda-feira 16h15 - 18h45 (2,5 horas)
    • Quarta-feira 11h30 - 14h00 (2,5 horas)
    • Quinta-feira 13h30 - 17h30 (4 horas)
    • Sexta-feira 11h30 - 14h30 (3 horas)

Links Interessantes

AULA 1 - 26/07/2018

Objetivos

  • Apresentação do Plano de Ensino;
  • Introdução a Fluxograma e pseudocódigo.

Material de Referência

Aula Introdutória sobre Lógica de Programação

AULA 2 - 31/07/2018

Objetivos

  • Introdução a Fluxograma e pseudocódigo.
  • Estruturas de Decisão

Material de Referência

Lógica de Programação: Estruturas de Decisão

AULA 3 - 2/08/2018

Objetivos

  • Introdução a Fluxograma e pseudocódigo.
  • Estruturas de Decisão

Material de Referência

Lógica de Programação: Estruturas de Repetição

AULA 4 - 7/08/2018

Objetivos

O aluno devera ser capaz de:

descrever o processo de compilação;
diferenciar código fonte, objeto e executável;
compilar, executar pequenos programa em C usando o gcc;
declarar e usar variáveis locais inteiras e reais;
usar as funções de entrada e saída: scanf() e printf.

Material de Referência

Introdução a Programação C

TAREFA

AULA 5 - 9/08/2018

Objetivos

O aluno deverá ser capaz de:

Utilizar os operadores relacionais e lógicos na programação C
um pouco mais sobre variáveis: tipo char
Utilizar o comando de decisão if else
Utilizar o comando switch

Material e Referência

https://wiki.sj.ifsc.edu.br/index.php/AULA_5_-_Programa%C3%A7%C3%A3o_1_-_Engenharia

AULA 6 - 14/08/2018

  • Continuação da aula anterior.

Objetivos

O aluno deverá ser capaz de:

Utilizar os operadores relacionais e lógicos na programação C
um pouco mais sobre variáveis: tipo char
Utilizar o comando de decisão if else
Utilizar o comando switch

Material e Referência

https://wiki.sj.ifsc.edu.br/index.php/AULA_5_-_Programa%C3%A7%C3%A3o_1_-_Engenharia


AULA 7 - 16/08/2018

Objetivos

  • Estruturas de Repetição

Material e Referência

https://wiki.sj.ifsc.edu.br/index.php/AULA_6_-_Programa%C3%A7%C3%A3o_1_-_Engenharia

AULA 8 - 21/08/2018

Objetivos

  • Estruturas de Repetição: break, loop
  • Uso de biblioteca matemática;
  • Uso do Nemiver

Material e Referência

https://wiki.sj.ifsc.edu.br/index.php/AULA_6_-_Programa%C3%A7%C3%A3o_1_-_Engenharia

AULA 9 - 23/08/2018

Objetivos

  • Estruturas de Repetição: lista de exercícios de preparação para avaliação proposta no SIGA A

Material e Referência

https://wiki.sj.ifsc.edu.br/index.php/AULA_6_-_Programa%C3%A7%C3%A3o_1_-_Engenharia

AULA 10 - 28/08/2018

  • Avaliação 1 - Proposta no SIGA A


AULA 11 - 29/08/2018

  • Vetores (arranjos unidimensionais)


Material de Referência

AULA 12 - 04/08/2018

Objetivos

  • Continuação Vetores e Strings
  • Funções

Material de Referência

https://wiki.sj.ifsc.edu.br/index.php/AULA_8_-_Programa%C3%A7%C3%A3o_1_-_Engenharia


AULA 13 - 6/09/2018

  • Recuperação da Avaliação 1 -

AULA 14 - 11/9/2018

Objetivos

  • Correção da Recuperação (Alternativas)
  • Funções e parâmetros
  • Variáveis Locais e Globais

Material de Referência

AULA 15 - 13/9/2018

Objetivos

  • Vetores de inteiros, floats etc (arranjos unidimensionais)

Material de Referência


AULA 16 - 18/9/2018

Objetivos

  • Exercício da Prova
  • Vetores de inteiros, floats etc (arranjos unidimensionais)
  • Matrizes

Exercício da Prova

1) Implementar um programa C com os requisitos abaixo:

  • O programa deve ler N números inteiros;
  • Deve ser mostrado a quantidade de números que estão na faixa (-100,100).
  • Deve ser realizada a média dos números que estão na faixa acima.
solução
#include <stdio.h>

main()
{
  int i,N, num,cont;
  float media, soma_ac;

  printf("Entre com a quantidade de números a serem fornecidos\n");
  scanf("%d", &N);

  soma_ac=0;
  cont=0;
  j=0;
  for(i=0;i<N;i++) {
      printf("Entre com um numero\n");
      scanf("%d",&num);
      if ((num>=-100) && (num<=100)) {
         soma_ac = soma_ac + num;
         cont++;
      }
  } 

  media = soma_ac/cont;

  printf("quantidade de numeros = %d\n", cont);
  printf("media = %.2f\n", media);
}

2) Refazer o exercício armazenando os valores da faixa indicada em um vetor. Fazer a média dos números da faixa usando os dados armazenados no vetor.

solução
#include <stdio.h>

#define TAM_MAX 300


void mostrar_vet(int x[], int tamanho)
{
  int i;

  printf("Imprime vetor\n");
  for (i=0;i<tamanho;i++)
      printf("x[%d] = %d  \n", i, x[i]);
  printf("==== FIM VETOR ====\n");
}

int main()
{
  int i,N, num,cont, 
      vetor[TAM_MAX]; /* vetor superdimensionado para comportar até 300 elementos */
  float media, soma_ac;

  printf("Entre com a quantidade de números a serem fornecidos\n");
  scanf("%d", &N);

  if (N>TAM_MAX) {
      printf ("Vetor não comporta o número especificado\n");
      return 1; /* um código de erro poderia ser retornado aqui */
  }

  cont=0;
  /* primeiro loop para leitura dos dados */
  for(i=0;i<N;i++) {
      printf("Entre com um numero\n");
      scanf("%d",&num);
      if ((num>=-100) && (num<=100)) {
         vetor[cont]=num;
         cont++;
      }
  } 

  printf("quantidade de numeros = %d\n", cont);
  
  /* segundo loop para processar os dados */
  soma_ac=0;
  for(i=0;i<cont;i++)
      soma_ac = soma_ac + vetor[i];

  /* media dos números armazenados no vetor */
  media = soma_ac/cont;

  mostrar_vet(vetor, cont);

  printf("media = %.2f\n", media);

  return 0;
}

3) Refazer o exercício criando uma função para receber um vetor e seu tamanho e retornar a média. Substituir o segundo loop pela função.

Material de Referência

AULA 17 - 20/9/2018

Objetivos

Material de Referência


AULA 18 - 25/9/2018

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

Exercício 1

Elaborar uma função que recebe como parâmetro um vetor contendo uma string e um vetor com dados não identificados.

  • A função deve copiar a string do primeiro vetor para o segundo, invertendo a mesma.
  • A função também deve retornar a quantidade de caracteres 'i' na string. Exemplo:


#include <stdio.h>

int  copiar_string(char vet1[100], char vet2[100])
{
  /* implementar aqui */
}

main()
{
  char aux1[100]="ifsc", aux2[100]="instituto",aux3[100];
  int len;

  len=copiar_string(aux1,aux3);
  printf("%s %d\n", aux3,len);
  len=copiar_string(aux2,aux3);
  printf("%s %d\n", aux3,len);
}

A saída deve ser:

 csfi 1
 otutitsni 2
solução sugerida pelos alunos Alehandro e Arthur (em breve)


Exercício 2

Elaborar uma função que recebe um vetor de inteiros e sua dimensão como parâmetro. Ela deverá retornar a quantidade de números pares do vetor.

#include <stdio.h>

int conta_par(int vet[], int len)
{
 /* implementar aqui */
}

main()
{
  int x[10]={1,2,5,9,4,3,2,4,10,23};
  
  printf("Quantidade de pares = %d\n", conta_par(x,10));
}

Exercício 3

Elaborar uma função que recebe uma matriz quadrada 5x5 de "floats" passada como parâmetro. A função deve retornar a média da diagonal. Teste a função chamando-a a partir do programa principal.

AULA 19 - 02/10/2018

Objetivos

  • Estruturas no C;

Material de Referência

AULA 20 - 04/10/2018

Objetivos

  • Estruturas no C;

Material de Referência

AULA 21 - 09/10/2018

Objetivos

  • Introdução aos ponteiros no C.

Material de Referência

AULA 22 - 11/10/2018

Objetivos

  • Vetor de Ponteiros, Ponteiros para estruturas e Vetor de Ponteiros. Passagem de Parâmetro na linha de comando.

Material de Referência

AULA 23 - 16/10/2018

  • correção da avaliação II
  • revisão e exercícios para recuperação.

Correção da Avaliação - Dia

Questão 1

Implementar uma função C que recebe dois vetores de char como parâmetro. No primeiro vetor se encontra uma string qualquer. A função deve copiar esta string para o segundo vetor MAS deve eliminar todos os espaços em branco. A função deve retornar a quantidade de espaços em branco eliminados. Segue o esqueleto e uma saída para a situação colocada no main.

#include <stdio.h>

int eliminar_espaco(char x[], char y[])
{
}

main()
{
}

Solução:

solução
#include <stdio.h>
 
int eliminar_espaco(char x[], char y[])
{
   int i, /* index do vetor fonte */
       j, /* index do vetor de destino */
       cont;
   
   i=0;
   j=0;  
   cont=0;
   while(x[i]!='\0') {
     if (x[i]==' ') {
         cont++; /* contar ocorrências do espaço */
     } else {
         y[j]=x[i]; /* copiar normalmente */
         j++;       /* incrementar para avançar o index de y após a cópia */
     } 
     i++; /* sempre avançar o index de x */
   }
   y[j]='\0';
   return cont; /* retornar a contagem de espaços */
}
 
main()
{
  char vetor1[100]=" Instituto Federal de Santa Catarina ",
       vetor2[100];

  int espacos;

  espacos = eliminar_espaco(vetor1, vetor2);

  printf("vetor final = %s - total espaços = %d\n", vetor2, espacos);  
}

Questão 2

Implementar uma função que recebe um vetor de floats e sua dimensão como parâmetros. A função deve retornar a média entre o MENOR e o MAIOR número armazenado no vetor. Uma demonstração do uso da função deve ser apresentado no programa principal (função main) usando variáveis inicializadas (NÃO USAR scanf).

Solução 1:

Nesta solução armazenaremos o primeiro elemento do vetor em duas variáveis de apoio: maior e menor. Na sequência, percorreremos o valor examinando cada posição e testando se o que está armazenado ali é maior(ou menor) que o armazenado nas variáveis de apoio. A troca de valores é realizada se confirmado esta situação.

solução
#include <stdio.h>

#define TAM 5
 
float media_maior_menor(float vet[], int len)
{
   float media, 
         maior, /* maior corrente */
         menor; /* menor corrente */
   int i;

   maior = menor = vet[0]; /* considerado que len sempre maior que 0 */

   for (i=1;i<len;i++) {
      if (menor > vet[i])  /* testa se o a posição i de vet é menor que o MENOR corrente */
         menor = vet[i];
      if (maior < vet[i])  /* testa se o a posição i de vet é menor que o MENOR corrente */
         maior = vet[i];
   }
   printf("maior igual a %f e menor igual a %f\n", maior, menor);
   media = (maior + menor)/2;
   return media;
}
 
main()
{
  float x[TAM]={-1.5, 100.7, 94.5,-15.3,7.5};
  float media;

  media = media_maior_menor(x, TAM);

  printf("media = %f\n", media);
}

Questão 3

Implementar uma função que recebe duas matrizes de floats 5x5 como parâmetros. A função deve comparar as duas matrizes e retornar o número de elementos que são diferentes. Uma demonstração do uso da função deve ser apresentado no programa principal (função main) usando variáveis inicializadas (NÃO USAR scanf).

OBSERVAÇÃO: TODAS as funções e os testes da mesma (no main) deverão estar um arquivo único que deverá ser “uploaded” (carregado) na tarefa associada a avaliação no SIGAA.

Solução:

solução
#include <stdio.h>

#define TAM 5
 
int quant_diferentes(float vet1[TAM][TAM], float vet2[TAM][TAM])
{
  int i,
      j, 
      cont=0; /* contador de elementos diferentes */

  for (i=0;i<TAM;i++)
     for (j=0;j<TAM;j++) {
        if (vet1[i][j] != vet2[i][j])  
            cont++;
     }
  return cont;
}
 
main()
{
  float x[TAM][TAM] = { 1 ,2, 3, 4 ,5,
                        1 ,2, 3, 4 ,5,
                        1 ,2, 3, 4 ,5,
                        1 ,2, 3, 4 ,5,
                        1 ,2, 3, 4 ,5,
                      },
        y[TAM][TAM] = {
                        9 ,6, 3, 4 ,5,
                        1 ,2, 3, 7 ,5,
                        1 ,9, 3, 4 ,5,
                        1 ,2, 3, 4 ,15,
                        5 ,11, 3, 4 ,5,
                      };

  printf ("Num diferentes = %d\n", quant_diferentes(x,y));
}

Correção da Avaliação - Noite

Questão 1

Implementar uma função C que recebe dois vetores de char como parâmetro. No primeiro vetor se encontra uma string qualquer. A função deve copiar esta string para o segundo vetor MAS deve substituir cada espaço em branco por dois caracteres '?'. A função deve retornar a quantidade de espaços em branco substituídos. Segue o esqueleto e uma saída para a situação colocada no main.

#include <stdio.h>

int substituir_espaco(char x[], char y[])
{
}

main()
{
  char w[100]="Instituto Federal de Santa Catarina",
       z[100];
  int num_espacos;

  num_espacos = substituir_espaco(w, z);

  printf("string sem espaços = %s e números de substituições = %d", z, num_espacos);
}
solução
#include <stdio.h>
 
int substituir_espaco(char x[], char y[])
{
   int i, /* index do vetor fonte */
       j, /* index do vetor de destino */
       cont;
 
   i=0;
   j=0;  
   cont=0;
   while(x[i]!='\0') {
     if (x[i]==' ') {
         cont++; /* contar ocorrências do espaço */
         y[j]='?';
         j++;
         y[j]='?';
         j++;
     } else {
         y[j]=x[i]; /* copiar normalmente */
         j++;       /* incrementar para avançar o index de y após a cópia */
     } 
     i++; /* sempre avançar o index de x */
   }
   y[j]='\0';
   return cont; /* retornar a contagem de espaços */
}
 
main()
{
  char x[100]=" Instituto Federal de Santa Catarina ",
       y[100];
  int num_espacos;
 
  num_espacos = substituir_espaco(x, y);
 
  printf("string sem espaços = %s\ne números de substituições = %d\n", y, num_espacos);
}

Questão 2

Implementar uma função que recebe um vetor de inteiros e sua dimensão como parâmetros. A função deve retornar a média de TODOS os números ímpares NÃO NEGATIVOS contidos no vetor. Uma demonstração do uso da função deve ser apresentado no programa principal (função main) usando variáveis inicializadas (NÃO USAR scanf)

solução
#include <stdio.h>
 
float media_num_impar(int x[], int len)
{
  int i,soma,cont;
  
  soma=0;
  cont=0;
  for (i=0;i<len;i++){
     if (x[i]>0 && x[i]%2==1) {
        soma = soma + x[i];
        cont++;
     }
  }
  return (float)soma/cont; /* aqui teria um problema de truncamento se não houver casting*/
}
 
main()
{
  int alfa[5]={-5,-3,7,10,11};
  float media;

  media = media_num_impar(alfa, 5);
  printf("media ímpares não negativos do vetor = %f\n", media);
}

Questão 3

Implementar uma função que recebe uma matriz de floats 5x5 como parâmetro. A função deve computar a média de todos os números que fazem parte de linhas PARES e colunas ÍMPARES (considerando sempre que a primeira linha é a 0 e a primeira coluna é 0). Uma demonstração do uso da função deve ser apresentado no programa principal (função main) usando variáveis inicializadas (NÃO USAR scanf)

solução
#include <stdio.h>
 
#define TAM 5
 
float media_lin_col(float vet[TAM][TAM])
{
  int i,j;
  float media_soma=0;
  int cont=0;

  for (i=0;i<TAM;i++)
     for (j=0;j<TAM;j++) {
       if((i%2==0)&&(j%2==1)) {
          media_soma = media_soma + vet[i][j];
          cont++;
       }
     }
  media_soma = media_soma/cont;
  return media_soma;
}
 
main()
{
  float x[TAM][TAM] = { 1 ,2, 3, 4 ,5,
                        1 ,2, 3, 4 ,5,
                        1 ,2, 3, 4 ,5,
                        1 ,2, 3, 4 ,5,
                        1 ,2, 3, 4 ,5,
                      };

  float media;

  media = media_lin_col(x);
}

AULA 24 - 18/10/2018

  • Recuperação Avaliação II

AULA 25 - 23/10/2018

Objetivos

  • Revisão de Estruturas: exemplo de controle de acesso
  • Continuação de Vetor de Ponteiros e Ponteiro Para Estruturas
  • Alocação Dinâmica de Memória

Referências

AULA 26 - 25/10/2018

  • Alocação dinâmica de memória;
  • Discussão inicial sobre o projeto

SUGESTÕES DE PROJETOS

  • Sistema de Controle de Acesso:

Sistema de acesso de uma sala contendo controle de horário permitido por categoria: aluno, professor e visitante. O administrador poderá editar, criar e remover usuários. Cada usuário terá 3 tentativas de acesso quando então será bloqueado. Na segunda e terceira tentativa será perguntado, de forma randômica mas sem repetir, o dia do nascimento, o primeiro nome da mãe ou o primeiro nome do pai. As senhas configuradas deverão ser de exatamente 6 caracteres com 3 letras, 2 números e um símbolo. Uma mensagem de boas vindas configurável por usuário poderá ser configurada pelo administrador. Todos os dados de usuários deverão ser recuperados de um arquivo.

  • Sistema de controle de empréstimos de livro em uma biblioteca;
  • Sistema de controle de temperatura em salas do IFSC;
  • Batalha Naval incrementada. Controle de jogadores (login), controle de vitórias e pontuações. Configuração do número de embarcações.
  • Sistema de Gastos Pessoal: permite anotar gastos em dinheiro, cheque e cartão. Os gastos possuem categorias: saúde, lazer, transporte etc. Histórico de gastos pode deve ser armazenado.
  • Lista de Compras em supermercados;
  • Agenda de Eventos/Trabalho;

REQUISITOS DOS PROJETOS

Requisitos de TODOS os projetos:

  • No arquivo da função main deve ter um texto explicativo do que o programa faz
  • toda manipulação de string deve ser feita usando ponteiros;
  • a alocação dinâmica de memória deve ser usada em algum ponto;
  • todo programa deverá acessar arquivos;
  • todo programa deverá conter múltiplos arquivos com compilação controlada com make. As funções relacionadas a uma determinada atividade estarão em um mesmo arquivo.
  • constantes deverão ser defines
  • as regras de indentação deverão ser seguidas segundo uma das convenções informadas no link da wikipedia. Deixar claro nos comentários qual regra está sendo seguida.

AVALIAÇÃO

  • Avaliação individual. Cada dia de aula será realizado uma avaliação da evolução do trabalho
  • O trabalho será defendido individualmente podendo ser solicitado pequenas implementações no processo.


GRUPOS

AULA 27 - 1/11/2018

  • Início do Projeto - Fechamento de Temas
  • Alocação Dinâmica de Memória - Exemplo: Listas ligadas

AULA 28 - 6/11/2018

  • Acesso a arquivos no C
  • uso de múltiplos arquivos nos projetos

Uso de múltiplos arquivos nos projetos

Exemplo timer

// Baseado em http://forums.codeguru.com/showthread.php?356101-How-to-use-timer-in-Unix

  1. include <stdio.h>
  2. include <signal.h>
  3. include <sys/time.h>
  1. define INTERVALO 1

void set_alarm();


struct itimerval tout_val; int cont=0;

void meu_timer (int i) {

  printf("contador => %d\n",cont++);
  set_alarm();

}

void set_alarm() {

 tout_val.it_interval.tv_sec = 0;
 tout_val.it_interval.tv_usec = 0;
 tout_val.it_value.tv_sec = INTERVALO; 
 tout_val.it_value.tv_usec = 0;
 setitimer(ITIMER_REAL, &tout_val,0);
 signal(SIGALRM,meu_timer);

}

int main () {

 set_alarm();
 while (1)
 {
   ;
 }
 
 return 0;

} </syntaxhighlight>

AULA 29 - 8/11/2018

  • Exercícios de preparação para avaliação

EX1

Considere o código de um programa inacabado que visa construir e gerenciar uma tabela de alunos de um colégio. Alunos são colocados em uma tabela através de uma função insert_aluno e removidos através de uma função delete_aluno. Estude o código e faça as seguintes modificações:

  1. Modifique a função insert_aluno para que receba (e atualize) como parâmetro adicional a idade do aluno (resolvido na aula);
  2. Acrescente na estrutura um ponteiro para uma estrutura endereço (resolvido na aula). Crie uma função para atualizar o endereço de um determinado aluno passado como parâmetro (ver esqueleto da função);
  3. Crie uma função print_aluno para imprimir todos os dados específicos de um aluno;
  4. Crie uma função print_turma para imprimir dados de toda a turma.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


struct tipo_endereco {
  char rua[30];
  int numero;
};

struct tipo_aluno {
  char nome[30];
  int  idade;
  struct tipo_endereco *endereco;
};
 

 
struct tipo_aluno *alunos[5]={NULL,NULL,NULL,NULL,NULL};
 
void insert_aluno(char *p_nome, int idade)
{
  int i;
 
  for(i=0;i<5 && alunos[i]!=NULL;i++);
  if(i<5) {
     alunos[i] = malloc(sizeof(struct tipo_aluno)); // lembrar: o retorno de malloc deveria sempre ser testado...
     strcpy(alunos[i]->nome, p_nome);
     alunos[i]->idade = idade;
     alunos[i]->endereco = NULL;
     printf("inserido aluno %s da posição %d\n", p_nome, i);
  }
}
 
void delete_aluno(char *p_nome)
{
  int i;
  int encontrado=0;
 
  for(i=0;i<5 && encontrado==0;i++) {    
     if (alunos[i]!=NULL && strcmp(alunos[i]->nome, p_nome)==0) {
         if (alunos[i]->endereco!=NULL)
             free(alunos[i]->endereco);
         free(alunos[i]);
         alunos[i]=NULL;
         printf("removido aluno %s da posição %d\n", p_nome, i);
         encontrado=1;
     }
  }
}
 
void print_aluno(char *pnome)
{
 
}
 
void print_turma()
{
 
}
 
void update_endereco(char *p_nome, char *rua,int numero)
{
  int i;
  int encontrado=0;

  for(i=0;i<5 && encontrado==0;i++) {    
     if (alunos[i]!=NULL && strcmp(alunos[i]->nome, p_nome)==0) {
         /* testar se o ponteiro de endereço já contém algo - caso tenho reutilizar */
         alunos[i]->endereco = malloc(sizeof(struct tipo_endereco));
         strcpy(alunos[i]->endereco->rua, rua);
         alunos[i]->endereco->numero = numero;
         encontrado=1;
     }
  }
}
 
main()
{
   insert_aluno("delta", 15);
   insert_aluno("blabla", 18);
   delete_aluno("delta");
   insert_aluno("gamma", 20);
   delete_aluno("blabla");
   insert_aluno("epson", 19); 
}

EX2

#include <stdio.h>

#define NUM_ALUNOS 5

struct TNotas{
  float bim1,bim2,bim3,bim4;
};

struct TAluno {
  char nome[50];
  char cpf[12];
  struct TNotas notas; 
} Alunos[NUM_ALUNOS] = { 
                {"joao","213124348-23",{3.5,4.6,7.8,9.5}},
                {"maria","265464668-13",{4.5,4.6,9.8,9.5}},
                {"jose","756789967-12",{3.5,4.6,2.8,1.5}},
                {"ana","567814668-11",{9.5,9.6,9.8,9.5}},
                {"clara","978324567-45",{6.5,6.6,4.8,7.5}},
              };

/* Esta função recebe o nome do aluno como parâmetro e retorna a média anual */
float media_anual_aluno(char nome[])
{

}

/* Esta função retorna a quantidade de alunos cujo nome começa com o parâmetro passado em letra */
int num_alunos(char letra)
{

}

/* Esta função retorna a quantidade de alunos abaixo da média da turma */
int abaixo_media()
{

}

/* esta função recebe a quantidade de alunos cujo cpf possue os dois últimos caracteres dado pela
   cadeia passada como parâmetro */
int num_cpfs(char cadeia[3])
{

}

/* a função main é dada e serve como referência de teste */
void main()
{
  printf("media do aluno joao %f\n", media_anual_aluno("joao"));
  printf("quantidade de alunos abaixo da média = %d\n", abaixo_media());
  printf("número de alunos que começa com a letra b -> %d\n", num_alunos('b'));
  printf("número cpfs terminados em 13 %d\n", num_cpfs("13"));
}

AULA 30 - 13/11/2018

  • Avaliação III

AULA 31 - 20/11/2018

  • Acesso a arquivos no C
  • Desenvolvimento do Projeto

Material de Referência

AULA 32 - 22/11/2018

  • Desenvolvimento do Projeto

AULA 33 - 27/11/2018

  • Desenvolvimento do Projeto

AULA 34 - 29/11/2018

  • Desenvolvimento do Projeto

AULA 35 - 4/12/2018

  • Apresentação/Defesa do Projeto

AULA 36 - 6/12/2018

  • Apresentação/Defesa do Projeto

AULA 37 - 11/12/2018

  • AULÃO PARA RECUPERAÇÂO - Exercícios

AULA 38 - 13/12/2018

  • Recuperação final

AULA 39 - 18/12/2018

  • REAPRESENTAÇÂO PROJETO FINAL (recuperação projeto)

AULAS DE APOIO