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

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 164: Linha 164:
 
=AULA 11 - 27/03/2019=
 
=AULA 11 - 27/03/2019=
  
*Correção da Avaliação1
+
*Correção da [http://tele.sj.ifsc.edu.br/~tisemp/PRG/avaliacao_1.pdf Avaliação 1]
 
*Vetores (arranjos unidimensionais)
 
*Vetores (arranjos unidimensionais)
  

Edição das 18h46min de 26 de março de 2019

PROFESSOR

Professor: Tiago Semprebom
Email: tisemp@ifsc.edu.br
diretório web:: tele.sj.ifsc.edu.br/~tisemp

IMPORTANTE: o direito de recuperar uma avaliação em que se faltou somente existe mediante justificativa reconhecida pela coordenação. Assim, deve-se protocolar a justificativa no prazo de 48 horas, contando da data e horário da avaliação, e aguardar o parecer da coordenação. O não cumprimento desse procedimento implica a impossibilidade de fazer a recuperação, e assim a reprovação na disciplina.

ATENDIMENTO PARALELO

SEGUNDA: 14h:30 às 15h35 QUINTA: 11h:00 às 12h:00.

LOCAL: Sala 2 de Professores de Telecomunicações.

MONITORIA

  • Aluno(a): Sarom da Silva Torres
  • e-mail: sarom.t@aluno.ifsc.edu.br
  • Horários:

Segunda-feira: 13:30 - 15:30
Terça-feira: 13:30 - 16:30
Quarta-feira: 13:00 - 16:00
Quinta-feira: 16:00 - 17:30
Sexta-feira: 11:30 - 14:00

  • Local de Atendimento: Sala de monitoria (ao lado do banheiro masculino do térreo).

Links Interessantes

Introdução a algoritmos - 13/02/2019

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

Introdução: fluxogramas e pseudocódigo - 15/02/2019

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

Fluxograma e pseudocódigo: Estruturas de decisão - 20/02/2019

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

Introdução à linguagem C - 22/02/2019

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

Programação C: estruturas de decisão - 27/02/2019

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

Programação C: estruturas de decisão - 01/03/2019

  • 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

Programação C: estruturas de decisão - 06/03/2019

  • Quarta-feira de cinzas - aula a partir das 14h.
  • Resolução de exercícios

Programação C: estruturas de repetição - 08/03/2019

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


Programação C: estruturas de repetição (resolução exercícios) - 13/03/2019

Objetivos

  • Resolução de exercícios de fixação sobre estruturas de repetição.

Programação C: estruturas de repetição - 15/03/2019

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 - 20/03/2019: Estruturas de Repetição (Prof. Eraldo)

Objetivos

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

Material e Referência

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

AULA 10 - 22/03/2019

  • Avaliação 1 - Laboratório de Programação.

AULA 11 - 27/03/2019


Material de Referência

AULA 12 -

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 -

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

AULA 14 -

Objetivos

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

Material de Referência

AULA 15 -

Objetivos

  • Vetores de inteiros, floats etc (arranjos unidimensionais)

Material de Referência


AULA 16 -

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 -

Objetivos

Material de Referência


AULA 18 -

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 -

Objetivos

  • Estruturas no C;

Material de Referência

AULA 20 -

Objetivos

  • Estruturas no C;

Material de Referência

AULA 21 -

Objetivos

  • Introdução aos ponteiros no C.

Material de Referência

AULA 22 -

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 -

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

  • Recuperação Avaliação II

AULA 25 -

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 -

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

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

AULA 28 -

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

  • Avaliação III

AULA 31 -

  • Acesso a arquivos no C
  • Desenvolvimento do Projeto

Material de Referência

AULA 32 -

  • Desenvolvimento do Projeto

AULA 33 -

  • Desenvolvimento do Projeto

AULA 34 -

  • Desenvolvimento do Projeto

AULA 35 -

  • Apresentação/Defesa do Projeto

AULA 36 -

  • Apresentação/Defesa do Projeto

AULA 37 -

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

AULA 38 -

  • Recuperação final

AULA 39 -

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

AULAS DE APOIO