Mudanças entre as edições de "PRG29002 - Programação I - Eng.Telecom 2018-1"
(79 revisões intermediárias por 4 usuários não estão sendo mostradas) | |||
Linha 340: | Linha 340: | ||
{{cronograma-botton |76}} | {{cronograma-botton |76}} | ||
− | =AULA | + | =AULA 08 - DIA 12/03/2018= |
*Revisão Pseudicódigo | *Revisão Pseudicódigo | ||
Linha 1 058: | Linha 1 058: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | =AULA 17 DIA | + | =AULA 17 DIA 16/04/2018= |
*AVALIAÇÃO 2 - Introdução a Programação C | *AVALIAÇÃO 2 - Introdução a Programação C | ||
Linha 1 068: | Linha 1 068: | ||
=AULA 19 DIA 23/04/2018= | =AULA 19 DIA 23/04/2018= | ||
+ | ==Objetivos== | ||
+ | |||
+ | *uso do DEFINE | ||
*Exercícios sobre Vetores de Float e Inteiros | *Exercícios sobre Vetores de Float e Inteiros | ||
+ | |||
+ | == USO de DEFINE == | ||
+ | |||
+ | O define é um comando do pré-processador do C. Observe abaixo como ele pode ser usado | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | #define PI 3.1416 | ||
+ | |||
+ | main() | ||
+ | { | ||
+ | |||
+ | float x; /* declaração de uma variável real */ | ||
+ | float y; /* declaração de uma variável real */ | ||
+ | |||
+ | printf ("Entre com o valor de x "); | ||
+ | scanf("%f",&x); | ||
+ | |||
+ | y = 2*PI*x; | ||
+ | } | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | Observe que o define PI NÃO é uma variável. É simplesmente um texto que será substituído pelo número 3.1416 ANTES da compilação, em um processo que chamamos de PRÉ-COMPILAÇÃO. | ||
==Exercícios== | ==Exercícios== | ||
Linha 1 075: | Linha 1 102: | ||
#include <stdio.h> | #include <stdio.h> | ||
− | int vetor_senhas[11]={234,210,149,21,5,78,97,535,1023,476}; | + | int vetor_senhas[11]={234,210,149,21,5,78,97,535,1023,476,123}; |
main() | main() | ||
{ | { | ||
− | int user_id, /* variável para armazenar o user_id fornecido */ | + | int user_id, /* variável para armazenar o user_id fornecido */ |
− | senha; /* variável para armazenar a senha fornecida */ | + | senha; /* variável para armazenar a senha fornecida */ |
printf("Entre com o user_id \n"); | printf("Entre com o user_id \n"); | ||
Linha 1 086: | Linha 1 113: | ||
printf("Entre com a senha \n"); | printf("Entre com a senha \n"); | ||
− | scanf("%d", & | + | scanf("%d", &senha); |
Linha 1 099: | Linha 1 126: | ||
int vetor_senhas[11]={234,210,149,21,5,78,97,535,1023,476}; | int vetor_senhas[11]={234,210,149,21,5,78,97,535,1023,476}; | ||
+ | /* Esta função recebe como parâmetro o user_id e verifica se deve abrir ou não a porta */ | ||
+ | /* esta função deve retornar de imediato caso o user_id seja inválido (fora da faixa) */ | ||
void controlar_acesso(int user_id) | void controlar_acesso(int user_id) | ||
{ | { | ||
Linha 1 106: | Linha 1 135: | ||
main() | main() | ||
{ | { | ||
− | int user_id | + | int user_id; /* variável para armazenar o user_id fornecido */ |
− | + | do { | |
printf("Entre com o user_id \n"); | printf("Entre com o user_id \n"); | ||
scanf("%d", &user_id); | scanf("%d", &user_id); | ||
− | + | controlar_acesso(user_id); | |
− | |||
} while ( /* implementar condição*/ ); | } while ( /* implementar condição*/ ); | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | #Melhorar o programa anterior | + | #Melhorar o programa anterior prevendo um modo de funcionamento para administrar o vetor de senhas. Caso o user_id fornecido seja -2 ele entra em modo de administração de senhas. Ela deve permitir entrar com todo o vetor de senhas.<syntaxhighlight lang=c> |
+ | #include <stdio.h> | ||
+ | |||
+ | int vetor_senhas[11]={234,210,149,21,5,78,97,535,1023,476}; | ||
+ | |||
+ | /* Esta função recebe como parâmetro o user_id e verifica se deve abrir ou não a porta */ | ||
+ | /* esta função deve retornar de imediato caso o user_id seja inválido (fora da faixa) */ | ||
+ | void administrar_senhas() | ||
+ | { | ||
+ | /* implementar a lógica de controle de acesso aqui */ | ||
+ | } | ||
+ | |||
+ | /* esta função deve permitir atualizar todo o vetor de senha */ | ||
+ | void controlar_acesso(int user_id) | ||
+ | { | ||
+ | /* implementar a lógica de controle de acesso aqui */ | ||
+ | } | ||
+ | |||
+ | main() | ||
+ | { | ||
+ | int user_id; /* variável para armazenar o user_id fornecido */ | ||
+ | |||
+ | do { | ||
+ | printf("Entre com o user_id \n"); | ||
+ | scanf("%d", &user_id); | ||
+ | switch (user_id){ | ||
+ | case -1: break; | ||
+ | case -2: administrar_senhas(); | ||
+ | break; | ||
+ | default: controlar_acesso(user_id); | ||
+ | break; | ||
+ | } | ||
+ | } while ( /* implementar condição de saída do loop */ ); | ||
+ | } | ||
+ | </syntaxhighlight> | ||
#Considere que as notas de matemática de alunos de uma escola são armazenadas por bimestre em 4 vetores: ''bim1'', ''bim2'',''bim3'' e ''bim4''. Suponha que um aluno é identificado por um número inteiro que servirá como índice destes vetores. Construir funções que retornam: (1) a média anual da turma, (2) o desvio padrão das médias anuais da turma, (3) a média anual de um aluno dado seu índice na tabela. Na função ''main'' imprimir a média de cada aluno, a média da turma e o desvio padrão (<math>\sigma = \sqrt{\frac{1}{N} \sum_{i=1}^N (x_i - \mu)^2}, {\rm \ \ onde\ \ } \mu = \frac{1}{N} \sum_{i=1}^N x_i.</math>) da turma.<syntaxhighlight lang=c> | #Considere que as notas de matemática de alunos de uma escola são armazenadas por bimestre em 4 vetores: ''bim1'', ''bim2'',''bim3'' e ''bim4''. Suponha que um aluno é identificado por um número inteiro que servirá como índice destes vetores. Construir funções que retornam: (1) a média anual da turma, (2) o desvio padrão das médias anuais da turma, (3) a média anual de um aluno dado seu índice na tabela. Na função ''main'' imprimir a média de cada aluno, a média da turma e o desvio padrão (<math>\sigma = \sqrt{\frac{1}{N} \sum_{i=1}^N (x_i - \mu)^2}, {\rm \ \ onde\ \ } \mu = \frac{1}{N} \sum_{i=1}^N x_i.</math>) da turma.<syntaxhighlight lang=c> | ||
#define NUM_ALUNOS 6 | #define NUM_ALUNOS 6 | ||
Linha 1 147: | Linha 1 209: | ||
{{collapse top| soluções}} | {{collapse top| soluções}} | ||
− | ex. | + | ex.4 |
Solução:<syntaxhighlight lang=c> | Solução:<syntaxhighlight lang=c> | ||
#include <math.h> | #include <math.h> | ||
Linha 1 205: | Linha 1 267: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | ex. | + | ex.5 |
<syntaxhighlight lang=c> | <syntaxhighlight lang=c> | ||
main() | main() | ||
Linha 1 227: | Linha 1 289: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | {{collapse bottom}} | ||
{{collapse top| soluções}} | {{collapse top| soluções}} | ||
Linha 1 310: | Linha 1 373: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
{{collapse bottom}} | {{collapse bottom}} | ||
+ | |||
+ | =AULA 20 DIA 26/04/2018= | ||
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | *Conceituar e operar strings através da indexação | ||
+ | |||
+ | ==Material de Referência== | ||
+ | |||
+ | *[https://wiki.sj.ifsc.edu.br/index.php/AULA_10_-_Programa%C3%A7%C3%A3o_1_-_Engenharia#Passando_a_string_como_par.C3.A2metro Aula de Strings] | ||
+ | |||
+ | |||
+ | =AULA 21 DIA 3/05/2018= | ||
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | *Arranjos Multidimensionais no C | ||
+ | |||
+ | ==Material de Referência== | ||
+ | |||
+ | *[https://wiki.sj.ifsc.edu.br/index.php/AULA_12_-_Programa%C3%A7%C3%A3o_1_-_Engenharia Wiki da Aula de Matrizes] | ||
+ | |||
+ | =AULA 22 DIA 7/05/2018= | ||
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | *Arranjos Multidimensionais no C | ||
+ | |||
+ | *exercícios | ||
+ | |||
+ | =AULA 23 DIA 10/05/2018= | ||
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | *Arranjos Multidimensionais no C | ||
+ | |||
+ | *exercícios | ||
+ | |||
+ | ===Exercícios Adicionais=== | ||
+ | |||
+ | 1.Implementar uma função para multiplicar duas matrizes 5x5. São fornecidos mA e mB e o resiltado é colocado em mC. | ||
+ | |||
+ | void multiplicar_mat(float mA[5][5], float mB[5][5],float mC[5][5]) | ||
+ | |||
+ | =AULA 24 DIA 14/05/2018= | ||
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | *estruturas | ||
+ | |||
+ | ==Linka para aula== | ||
+ | |||
+ | https://wiki.sj.ifsc.edu.br/index.php/AULA_13_-_Programa%C3%A7%C3%A3o_1_-_Engenharia | ||
+ | |||
+ | =AULA 25 DIA 17/05/2018= | ||
+ | |||
+ | *Avaliação 3 - Funções, Vetores, Strings e Matrizes | ||
+ | |||
+ | =AULA 26 DIA 21/05/2018= | ||
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | *estruturas | ||
+ | |||
+ | ==Linka para aula== | ||
+ | |||
+ | https://wiki.sj.ifsc.edu.br/index.php/AULA_13_-_Programa%C3%A7%C3%A3o_1_-_Engenharia | ||
+ | |||
+ | =AULA 27 DIA 24/05/2018= | ||
+ | |||
+ | *Introdução aos ponteiros | ||
+ | |||
+ | ==Material de Referência== | ||
+ | |||
+ | https://wiki.sj.ifsc.edu.br/index.php/AULA_17_-_Programa%C3%A7%C3%A3o_1_-_Engenharia | ||
+ | |||
+ | =AULA 28 DIA 4/06/2018= | ||
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | *Vetor de Ponteiros, Ponteiros para estruturas e Vetor de Ponteiros; | ||
+ | |||
+ | ==Aula de Referência== | ||
+ | |||
+ | https://wiki.sj.ifsc.edu.br/index.php/AULA_19_-_Programa%C3%A7%C3%A3o_1_-_Engenharia | ||
+ | |||
+ | =AULA 29 DIA 7/06/2018= | ||
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | *Alocação Dinâmica de Mempória | ||
+ | *Exercícios sobre Ponteiros; | ||
+ | |||
+ | ==Referência== | ||
+ | |||
+ | [[AULA 20 - Programação 1 - Engenharia | Aula Alocação Dinâmica]] | ||
+ | |||
+ | =AULA 30 DIA 11/06/2018= | ||
+ | |||
+ | *Aula de Exercícios | ||
+ | |||
+ | ==Exercícios Selecionados== | ||
+ | |||
+ | *Exercício 5 da https://wiki.sj.ifsc.edu.br/index.php/AULA_19_-_Programa%C3%A7%C3%A3o_1_-_Engenharia | ||
+ | *Exercícios 1 e 2 da Aula https://wiki.sj.ifsc.edu.br/index.php/AULA_20_-_Programa%C3%A7%C3%A3o_1_-_Engenharia | ||
+ | |||
+ | ==Exercícios Adicionais== | ||
+ | |||
+ | |||
+ | Exercício 0 - Implementar uma função para armazenar uma sequência de números reais a serem fornecidos pelo teclado. A quantidade de números fornecidos | ||
+ | é inicialmente fornecida na linha de comando. A função deve armazenar os números em uma tabela dinamicamente criada e deve computar a quantidade de números | ||
+ | acima da média. Esta quantidade de números deve ser retornada pela função. | ||
+ | |||
+ | |||
+ | Exercício 1 - Verificar qual o erro do código abaixo. Propor uma solução SEM e COM alocação dinâmica de memória para resolver o problema. | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | main() | ||
+ | { | ||
+ | struct TTeste { | ||
+ | int x; | ||
+ | int y; | ||
+ | } *teste; | ||
+ | |||
+ | t->y = 5; | ||
+ | |||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | O código correto está mostrado abaixo: | ||
+ | |||
+ | {{collapse top|solução}}<syntaxhighlight lang=c> | ||
+ | |||
+ | #include <stdio.h> | ||
+ | |||
+ | void main() | ||
+ | { | ||
+ | struct TTeste { | ||
+ | int x; | ||
+ | int y; | ||
+ | }teste; | ||
+ | |||
+ | teste.y = 5; | ||
+ | printf("Valor de y %d\n",teste.y); | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | </syntaxhighlight> | ||
+ | {{collapse bottom}} | ||
+ | Exercício 2 - Qual o valor a ser impresso no printf do programa abaixo. | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | |||
+ | struct TTeste { | ||
+ | int x; | ||
+ | int y; | ||
+ | struct TTeste *p; | ||
+ | }; | ||
+ | |||
+ | main() | ||
+ | { | ||
+ | |||
+ | struct TTeste x = {4,7,NULL}; | ||
+ | struct TTeste y = {10,8,NULL}; | ||
+ | |||
+ | struct TTeste *teste; | ||
+ | |||
+ | x.p = &y; | ||
+ | teste = &x; | ||
+ | |||
+ | printf ("Valor = %d\n", teste->p->x); | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Exercício 3 | ||
+ | |||
+ | Considere uma tabela de usuários de um sistema de controle de acesso conforme código abaixo. Implemente as funções abaixo usando alocação dinâmica de memória. Observe que as entradas livres são iniciadas com NULL. | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | |||
+ | #define TAM_MAX 10 | ||
+ | |||
+ | struct TEndereco { | ||
+ | char *pRuaNumero; | ||
+ | char *pCidade; | ||
+ | char *pEstado; | ||
+ | }; | ||
+ | |||
+ | struct TUsuario /* struct TUsuario é o nome do tipo que está sendo criado */ | ||
+ | { | ||
+ | char *userID; | ||
+ | char *senha; | ||
+ | struct TEndereco *pEndereco; | ||
+ | } TabelaUsuarios[TAM_MAX]={ | ||
+ | {NULL,NULL,NULL}, | ||
+ | {NULL,NULL,NULL}, | ||
+ | {NULL,NULL,NULL}, | ||
+ | {NULL,NULL,NULL}, | ||
+ | }; | ||
+ | |||
+ | /* adiciona usuario - retorna 0 se tudo ok e -1 se não conseguiu alocar */ | ||
+ | /* ler dados com scanf */ | ||
+ | |||
+ | int add_user() | ||
+ | { | ||
+ | } | ||
+ | |||
+ | /* remove o usuário - perguntar com scanf */ | ||
+ | void del_user() | ||
+ | { | ||
+ | } | ||
+ | |||
+ | main() | ||
+ | { | ||
+ | /* exemplo de uso */ | ||
+ | |||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | {{collapse top|solução}}<syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | #include <stdlib.h> | ||
+ | #include <string.h> | ||
+ | |||
+ | #define TAM_MAX 10 | ||
+ | |||
+ | struct TEndereco { | ||
+ | char *pRuaNumero; | ||
+ | char *pCidade; | ||
+ | char *pEstado; | ||
+ | }; | ||
+ | |||
+ | struct TUsuario /* struct TUsuario é o nome do tipo que está sendo criado */ | ||
+ | { | ||
+ | char *userID; | ||
+ | char *senha; | ||
+ | struct TEndereco *pEndereco; | ||
+ | } TabelaUsuarios[TAM_MAX]={ | ||
+ | {NULL,NULL,NULL}, | ||
+ | {NULL,NULL,NULL}, | ||
+ | {NULL,NULL,NULL}, | ||
+ | {NULL,NULL,NULL}, | ||
+ | {NULL,NULL,NULL}, | ||
+ | {NULL,NULL,NULL}, | ||
+ | {NULL,NULL,NULL}, | ||
+ | {NULL,NULL,NULL}, | ||
+ | {NULL,NULL,NULL}, | ||
+ | {NULL,NULL,NULL}, | ||
+ | }; | ||
+ | |||
+ | /* adiciona usuario - retorna 0 se tudo ok e -1 se não conseguiu alocar */ | ||
+ | /* ler dados com scanf */ | ||
+ | |||
+ | int add_user() | ||
+ | { | ||
+ | char aux[100]; | ||
+ | int i; | ||
+ | |||
+ | /* procurar a primeira entrada livre na tabela */ | ||
+ | for(i=0;i<TAM_MAX;i++) { | ||
+ | if (TabelaUsuarios[i].userID==NULL) | ||
+ | break; | ||
+ | } | ||
+ | |||
+ | if (i==TAM_MAX) | ||
+ | return -1; | ||
+ | |||
+ | /* ler userid para variavel auxiliar */ | ||
+ | printf("Entre com o userID\n"); | ||
+ | scanf("%s", aux); | ||
+ | |||
+ | if( (TabelaUsuarios[i].userID = (char *) malloc(strlen(aux)+1)) == NULL) { | ||
+ | return -1; | ||
+ | } | ||
+ | |||
+ | strcpy(TabelaUsuarios[i].userID, aux); | ||
+ | |||
+ | printf("Entre com o senha\n"); | ||
+ | scanf("%s", aux); | ||
+ | |||
+ | if((TabelaUsuarios[i].senha = (char *) malloc(strlen(aux)+1)) == NULL) { | ||
+ | free(TabelaUsuarios[i].userID); | ||
+ | TabelaUsuarios[i].userID = NULL; | ||
+ | return -1; | ||
+ | } | ||
+ | |||
+ | strcpy(TabelaUsuarios[i].senha, aux); | ||
+ | |||
+ | if((TabelaUsuarios[i].pEndereco = (struct TEndereco *) malloc(sizeof(struct TEndereco))) == NULL) { | ||
+ | free(TabelaUsuarios[i].userID); | ||
+ | free(TabelaUsuarios[i].senha); | ||
+ | TabelaUsuarios[i].userID = NULL; | ||
+ | TabelaUsuarios[i].senha = NULL; | ||
+ | return -1; | ||
+ | } | ||
+ | |||
+ | printf("Entre com a rua\n"); | ||
+ | scanf("%s", aux); | ||
+ | |||
+ | if( (TabelaUsuarios[i].pEndereco->pRuaNumero = (char *) malloc(strlen(aux)+1)) == NULL) { | ||
+ | free(TabelaUsuarios[i].userID); | ||
+ | free(TabelaUsuarios[i].senha); | ||
+ | TabelaUsuarios[i].userID = NULL; | ||
+ | TabelaUsuarios[i].senha = NULL; | ||
+ | free(TabelaUsuarios[i].pEndereco); | ||
+ | TabelaUsuarios[i].pEndereco = NULL; | ||
+ | return -1; | ||
+ | |||
+ | } | ||
+ | strcpy(TabelaUsuarios[i].pEndereco->pRuaNumero, aux); | ||
+ | |||
+ | return 0; | ||
+ | } | ||
+ | |||
+ | /* remove o usuário - perguntar com scanf */ | ||
+ | void del_user() | ||
+ | { | ||
+ | } | ||
+ | |||
+ | main() | ||
+ | { | ||
+ | /* exemplo de uso */ | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | Exercício 5 | ||
+ | |||
+ | Seja a seguinte estrutura: | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | struct tipo_carro { | ||
+ | char *marca; | ||
+ | char *modelo; | ||
+ | int potencia; | ||
+ | }; | ||
+ | |||
+ | typedef tipo_carro tcarro; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | Implpementar as funções abaixo: | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | /* cria dinamicamente uma estrutura, | ||
+ | preenche os dados dos campos | ||
+ | e retorna um ponteiro para a estrutura criada | ||
+ | Retorna NULL caso não consiga alocar área | ||
+ | */ | ||
+ | tcarro *ler_carro() | ||
+ | { | ||
+ | } | ||
+ | |||
+ | /* | ||
+ | recebe dois ponteiros para estruturas do tipo carro e | ||
+ | retorna -1 caso pelo menos um dos ponteiros seja NULL, | ||
+ | retorna 0 se os modelos forem iguais | ||
+ | e retorna 1 se os modelos forem diferentes */ | ||
+ | int compara_modeloa(tcarro *p1, tcarro *p2) | ||
+ | { | ||
+ | } | ||
+ | |||
+ | /* libera a área da estrutura passada como parâmetro */ | ||
+ | void deleta_estrutura(tcarro *p) | ||
+ | { | ||
+ | } | ||
+ | |||
+ | main() | ||
+ | { | ||
+ | /*testar as funções aqui */ | ||
+ | /* criar dois carros */ | ||
+ | /* comparar o modelo dos dois carros. Testar o retorno */ | ||
+ | /* liberar a área das estruturas */ | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Exercício 6 | ||
+ | |||
+ | Criar um programa para receber duas strings pela linha de comando. Elas devem ser armazenadas na estrutura fornecida abaixo. | ||
+ | Use criação dinâmica para criar área de memória para estas strings. | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | struct tipo_param { | ||
+ | char *ptr_arg1; | ||
+ | char *ptr_arg2; | ||
+ | }; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==Exemplos Adicionais== | ||
+ | |||
+ | https://www.programiz.com/c-programming/examples/dynamic-memory-allocation-largest | ||
+ | |||
+ | https://www.programiz.com/c-programming/examples/structure-dynamic-memory-allocation | ||
+ | |||
+ | |||
+ | =AULA 31 DIA 14/06/2018= | ||
+ | |||
+ | |||
+ | *Objetivos | ||
+ | |||
+ | Avaliação 4: ponteiros, vetor de ponteiros, ponteiros para estruturas, alocação dinâmica de memória | ||
+ | |||
+ | =AULA 32 DIA 18/06/2018= | ||
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | *Uso de múltiplos arquivos no projeto; | ||
+ | *Apresentação/Distribuição dos Projetos | ||
+ | *Projetos com Múltiplos arquivos | ||
+ | *Acesso ao sistemas de arquivos | ||
+ | |||
+ | ==Material de Referência== | ||
+ | |||
+ | [[AULA 25 - Programação 1 - Engenharia]] | ||
+ | |||
+ | ==Apresentação/Distribuição dos Projetos== | ||
+ | |||
+ | *[[PRG1-2018-1-Controle-Lista-Compras]] | ||
+ | *[[PRG1-2018-1-Agenda-Pessoal]] | ||
+ | *[[PRG1-2018-Controle-Estoque-Tele]] | ||
+ | *[[Gabriel: Controle de Estimação de Estados entre dois nodos com configuração repassada pelo controlador]] | ||
+ | *[[PRG1-2018-1-Sistema-Validação-Senha]] | ||
+ | *Luan: PetFeeder Distribuído para Canil. Um sistema de controle comanda a abertura de alimentadores para cães. | ||
+ | *[[PRG1-2018-1-Sistema-Controle-Hospital]] | ||
+ | *[[PRG1-2018-1-Controle-Estoque-Produtos]] | ||
+ | *Vitor: [[PRG1-2018-1-Sistema-Controle-Ar-Condicionado]] | ||
+ | |||
+ | ==Sugestões Adicionais== | ||
+ | |||
+ | ===Proposta 1=== | ||
+ | |||
+ | Considere um sistema de controle de ar condicionado que permite controlar salas de uma instituição. | ||
+ | Elaborar uma estrutura para representar estas salas. | ||
+ | Uma sala possui um nome e uma temperatura que deve ser controlada. Um administrador deve ter as seguintes funções: | ||
+ | *inserir nova sala; | ||
+ | *editar sala; | ||
+ | *remover sala; | ||
+ | *modificar temperatura da sala; | ||
+ | Duas salas não podem ter o mesmo nome. As temperaturas controladas somente podem estar na faixa de 0 a 30 graus. | ||
+ | |||
+ | Referências: https://wiki.sj.ifsc.edu.br/index.php/AULA_24_-_Programa%C3%A7%C3%A3o_1_-_Engenharia | ||
+ | |||
+ | ===Proposta 2=== | ||
+ | |||
+ | Construir um sistema de gerenciamento de estoques para o almoxarifado de tele. O sistema de ve permitir organizar componentes nas seguintes categorias: | ||
+ | |||
+ | *CI, Transistor, Resistor, Capacitor, Indutor; | ||
+ | *Dentro da categoria deve permitir descrever código (ex: BF547, 747 etc) | ||
+ | *Quantidade de peças disponíveis | ||
+ | |||
+ | ===Proposta 3=== | ||
+ | |||
+ | Agenda pessoal de tarefas/reuniões; | ||
+ | |||
+ | ===Proposta 4=== | ||
+ | |||
+ | Lista de supermercado organizada em categorias | ||
+ | |||
+ | ===Proposta 5=== | ||
+ | |||
+ | Jogo da Velha com armazenamento de histórico de resultados. | ||
+ | |||
+ | ===Proposta 6=== | ||
+ | |||
+ | ==O que deve ter no Projeto== | ||
+ | |||
+ | *Deve ser registrado na Wiki. Os seguintes pontos devem ser abordados: | ||
+ | **Título do Projeto; | ||
+ | **Descrição Textual focando O QUE o programa faz. Mínimo 2 parágrafos. Incluir como comentário no código; | ||
+ | **Código Fonte Documentado (ver https://www.ime.usp.br/~pf/algoritmos/aulas/docu.html) | ||
+ | *O programa deve usar acesso a arquivos; | ||
+ | *O programa deve usar o conceito de struct/vetores e funções; | ||
+ | *O programa deve subdividir problemas em subproblemas, encapsulando estes subproblemas em funções; | ||
+ | *Utilizar diretivas de pré-compilação (por exemplo, defines); | ||
+ | *Utilizar ponteiros e alocação dinâmica de memória; | ||
+ | *Utilizar parâmetros em linha de comando; | ||
+ | *Pelo menos 2 arquivos .c com .h e usar o make. | ||
+ | |||
+ | =AULA 33 DIA 21/06/2018= | ||
+ | |||
+ | *Desenvolvimento do Projeto | ||
+ | |||
+ | =AULA 34 DIA 25/06/2018= | ||
+ | |||
+ | *Desenvolvimento do Projeto | ||
+ | *Acesso a arquivos; | ||
+ | |||
+ | [[AULA 22 - Programação 1 - Engenharia]] | ||
+ | |||
+ | =AULA 35 DIA 28/06/2018= | ||
+ | |||
+ | *Desenvolvimento do Projeto | ||
+ | *Recuperação parcial das avaliações anteriores; | ||
+ | |||
+ | =AULA 36 DIA 2/07/2018= | ||
+ | |||
+ | |||
+ | *Apresentação/Defesa do Projeto | ||
+ | |||
+ | =AULA 37 DIA 5/07/2018= | ||
+ | |||
+ | *Apresentação do Projeto | ||
+ | |||
+ | =AULA 38 DIA 9/07/2018= | ||
+ | |||
+ | *RECUPERAÇÂO FINAL |
Edição atual tal como às 18h40min de 7 de julho de 2018
Dados importantes
- Professor da Disciplina: Heron Eduardo de Lima Ávila
- Email: heron.avila@ifsc.edu.br
- Atendimento paralelo: quartas das 14:30 às 15:30 na Sala dos Professores de Tele II
Substituído por:
- Professor da Disciplina: Eraldo Silveira e Silva
- Email: [1]
- Atendimento paralelo:
- quartas das 10:45 às 11:45 na Sala dos Professores de Tele I
- quintas das 15:30 às 16:30 na Sala dos Professores de Tele I
Dados da Disciplina
- Ementa da disciplina na wiki: Engenharia de Telecomunicações 2ª Fase
- Página no moodle: moodle
- Monitoria: Programa_de_monitoria_dos_cursos_superiores_de_Telecomunicações
Algoritmos utilizando fluxograma
Introdução aos algoritmos utilizando fluxograma
Introdução aos algoritmos utilizando fluxograma |
---|
|
Desenvolvendo algoritmos na forma de fluxogramas
Desenvolvendo algoritmos na forma de fluxogramas |
---|
Exercícios para resolver em sala de aula:
|
Pseudo-código
Pseudo-código utilizando Portugol - Introdução e condicionais
- Slides sobre pseudocódigo disponibilizados no moodle.
Ver exemplos de códigos Portugol dentro do software portugol (menu Arquivo->Abrir exemplo)
Desenvolvendo algoritmos na forma de pseudo-código - condicionais |
---|
Exercícios para resolver em sala de aula:
|
Desenvolvendo algoritmos na forma de pseudo-código - repetição |
---|
|
Pseudo-código utilizando Portugol - repetições
Exercícios - Pseudocodigo (série 1) |
---|
Exercícios - Pseudocodigo (série 1):
|
Pseudo-código utilizando Portugol - sub-rotinas e registros
Exercícios - Pseudocodigo (série 3) | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Exercícios - Pseudocodigo (série 3):
Parte da implementação do problema das funções trigonométricas
|
Projeto final
O aluno deve propor ao professor um projeto de sua preferência que respeite os requisitos mínimos. Sendo aceito deverá desenvolver o projeto e apresentá-lo.
Requisitos mínimos
- Utilizar funções (ao menos três além do main, sendo que devem receber argumentos e possuir retorno);
- Apresentar menu utilizando switch case e conter laço infinito;
- Utilizar Structs ou Unions;
- Utilizar bibliotecas (além da stdio.h);
- Utilizar diretivas de pré-compilação;
- Utilizar comentários;
- Utilizar Ponteiros;
- Aceitar argumento de entrada no programa;
- Realizar acesso a arquivo, lendo e escrevendo informações (busque requisitos que requerem persistência de dados);
- Gravar informações de operações em log;
Modelo
- Trabalho individual
Metodologia
- Apresentar a proposta de projeto ao professor
- Opcional: Documentar o escopo do projeto utilizando descrição narrativa (descrição simples)
- Cenário
- Problema
- Dados de entrada e saída
- O planejamento do cronograma não será cobrado porém cabe ao aluno se organizar quanto ao tempo para entrega no prazo
- Desenvolver o projeto
- Apresentar individualmente ao professor
- Serão realizados testes diversos, arguido sobre o funcionamento, possibilidades de alterações, etc
Algumas ideias de projetos
- Sugestão geral: veja em outras disciplinas que processos podem ser automatizados e proponha um projeto que realiza esta tarefa como de cálculos diversos de eletrônica, de rádio transmissão, etc.
- Implementar o jogo Pedra, papel ou tesoura. Neste jogo dois ou mais jogadores em diferentes computadores devem rodar um aplicativo que fará a leitura de um arquivo compartilhado. O algoritmo deve tratar as etapas do jogo (Setup do aplicativo, entrada na sala, escolha da figura e apresentação do resultado)
- Implementar o jogo da velha escrevendo em arquivo. Neste jogo dois jogadores em diferentes computadores devem rodar um aplicativo que fará a leitura de um arquivo compartilhado. O algoritmo deve tratar as etapas do jogo (Setup do aplicativo, entrada na sala, seleção das casas e apresentação do resultado)
- Implementar controle de empréstimo de objetos. Neste software o usuário poderá digitar nomes de objetos que emprestou, a pessoa a quem emprestou e automaticamente o software guarda a data. Deve haver uma opção para gerar relatório dos itens emprestados e opção para marcar a devolução (podendo manter o registro em histórico ou apagando o registro).
- Implementar software gerador de lista de compras. Neste software o usuário poderá digitar itens de supermercado com nome e quantidade. O software escreve num arquivo que poderá depois ser impresso. O software também pode ter função de numa segunda execução já trazer a antiga listagem digitada e permitir que o usuário apenas selecione novas quantidades ou inclua novos itens.
- Implementar software para realização de cálculos de eletrônica. Neste software um menu apresenta várias opções de cálculo como de potencia através de tensão e corrente, como obtenção do valor de um resistor, como solução de equivalência de paralelo de vários resistores e outras. Num arquivo texto pode ser armazenado um histórico de operações realizadas.
- Implementação de software para apostas na mega sena. Neste software são dadas sugestões de números para apostas de acordo com o número do sorteio da mega sena. Com este histórico armazenado é possível então entrar com um número de sorteio e digitar quais foram os números verdadeiramente sorteados na loteria federal checagem os acertos.
Referências
Referências bibliográficas |
---|
|
Ferramentas úteis |
---|
|
Plano de aula
Aula | Data | Horas | Conteúdo | Recursos | |
---|---|---|---|---|---|
1 | 15/2 | 2 | Aula inaugural, apresentação do professor e turma, apresentação da disciplina e introdução aos algoritmos | Sala 10 | |
2 | 19/2 | 2 | Prática de fluxogramas | Lab. Informática, Turma A [13:30 às 15:20], Turma B [15:40 às 17h30] (máximo 11 alunos por turma) | |
3 | 22/2 | 2 | Exercícios de fluxogramas | Sala 10 | |
4 | 26/2 | 2 | Introdução ao pseudocódigo até condicionais com resolução de exercícios | Lab. Informática, Turma A [13:30 às 15:20], Turma B [15:40 às 17h30] (máximo 11 alunos por turma) | |
5 | 1/3 | 2 | Resolução de problemas em pseudocódigo e fluxogramas (declaração de variáveis, leia e escreva, uso de condicionais e biblioteca portugol): Exercícios de preparação para a prova | Sala 10 | |
6 | 5/3 | 2 | Avaliação1a: Introdução a algoritmos (fluxograma e pseudocódigo) | Lab Redes 1 | |
7 | 8/3 | 2 | Correção da Avaliação 1a | Lab Redes 1 | |
8 | 12/3 | 2 | Pseudocódigo: Uso de vetores e sub-rotinas com resolução de exercícios | Lab Redes 1 | |
9 | 15/3 | 2 | Pseudocódigo: Registros e revisão geral | Lab Redes 1 | |
10 | 22/3 | 2 | Avaliação1b: Pseudocódigo: vetores, sub-rotinas e registros | Lab Redes 1 | |
11 | 26/3 | 2 | Correção da Avaliação 1b | Lab Redes 1 | |
12 | 29/3 | 2 | Recuperação1? / Introdução ao C, primeiros conceitos de compilação, variáveis, controle de fluxo, entrada e saída de dados | Lab Redes 1 | |
13 | 2/4 | 2 | Continuação C, condicionais, operadores relacionais, operadores lógicos. Prática: Controle de fluxo em C, entrada e saída de dados | Lab Redes 1 | |
14 | 5/4 | 2 | Prática C | Lab Redes 1 | |
15 | 9/4 | 2 | Continuação C: estruturas de repetição | Lab Redes 1 | |
16 | 12/4 | 2 | Prática: estruturas de repetição | Lab Redes 1 | |
17 | 16/4 | 2 | Continuação C: funções | Lab Redes 1 | |
18 | 19/4 | 2 | Prática: Funções em C | Lab Redes 1 | |
19 | 23/4 | 2 | Avaliação2: C até funções | Lab Redes 1 | |
20 | 26/4 | 2 | Correção da prova | Lab Redes 1 | |
21 | 3/5 | 2 | Recuperação2? / Prática para resolução de exercícios | Lab Redes 1 | |
22 | 7/5 | 2 | Introdução a vetores e matrizes em C. | Lab Redes 1 | |
23 | 10/5 | 2 | Resolução de exercícios de vetores Prática: Resolução de exercícios de fixação de vetores. | Lab Redes 1 | |
24 | 14/5 | 2 | Structs e Unions | Lab Redes 1 | |
25 | 17/5 | 2 | Prática: Structs e unions | Lab Redes 1 | |
26 | 21/5 | 2 | Prática: Structs e unions / Compreendendo melhor a função main e exit, gerando números pseudo-aleatórios, defines e operadores e precedências | Lab Redes 1 | |
27 | 24/5 | 2 | Ponteiros | Lab Redes 1 | |
28 | 28/5 | 2 | Prática: Exercicios ponteiros | Lab Redes 1 | |
29 | 4/6 | 2 | Vetor de Ponteiros e Ponteiro Para Estruturas, typedef, recursividade, apresentação do projeto | Lab Redes 1 | |
30 | 7/6 | 2 | Prática de Ponteiros e structs | Lab Redes 1 | |
31 | 11/6 | 2 | Avaliação: C até structs e ponteiros | Lab Redes 1 | |
32 | 14/6 | 2 | Prática: Correção da Avaliação / Desenvolvimento do projeto | Lab Redes 1 | |
33 | 18/6 | 2 | Apresentação do projeto. Prática: Desenvolvimento do Projeto | Lab Redes 1 | |
34 | 21/6 | 2 | Recuperação3? / Prática: Desenvolvimento do Projeto | Lab Redes 1 | |
35 | 25/6 | 2 | Prática: Desenvolvimento do Projeto | Lab Redes 1 | |
36 | 28/6 | 2 | Prática: Desenvolvimento do Projeto | Lab Redes 1 | |
37 | 2/7 | 2 | Avaliação4: Apresentação do projeto | Lab Redes 1 | |
38 | 5/7 | 2 | Encerramento da disciplina / Recuperação4? | Lab Redes 1 | |
TOTAL | 76 |
AULA 08 - DIA 12/03/2018
- Revisão Pseudicódigo
- Uso do Portugol
- Declaração de variáveis e atribuição
- Operadores aritméticos, relacionais e lógicos
- Comandos Condicionais
- Comandos de Repetição
Material de Referência
- Slides Cleber/Heron;
Exercícios
- Desenvolve um algoritmo na forma de pseudo-código para que 3 números seja lidos para as variáveis A,B e C. Na sequência os valores das variáveis devem ser trocados. O que estava em A vai para B, o que estava em B colocar C e o que estava em C em A. Imprimir os valores de A,B,C para conferir.
algoritmo
declare A,B,C,AUX numerico
escreva "Entre com A"
leia A
escreva "Entre com B"
leia B
escreva "Entre com C"
leia C
AUX<-B
B<-A
A<-C
C<-AUX
escreva "VALOR DE A = ", A
escreva "VALOR DE B = ", B
escreva "VALOR DE C = ", C
fim_algoritmo
</syntaxhighlight>
- Desenvolve um algoritmo na forma de pseudo-código para cálculo da média de dois números fracionários exibindo o resultado
algoritmo
declare NUM1, NUM2,MEDIA numerico
escreva "Entre com NUM1"
leia NUM1
escreva "Entre com NUM2"
leia NUM2
MEDIA <- (NUM1+NUM2)/2
escreva " media de ", NUM1, " com ", NUM2, " é ", MEDIA
fim_algoritmo
</syntaxhighlight>
- Desenvolva um algoritmo para calcular o DELTA de uma equação do segundo grau:
algoritmo
declare DELTA, A,B,C numerico
escreva "Entre com A"
leia A
escreva "Entre com B"
leia B
escreva "ENTRE COM C"
leia C
DELTA <- B * B - 4 * A * C
escreva " DELTA é ", DELTA
fim_algoritmo
</syntaxhighlight>
- Desenvolva um programa para calcular as raízes de uma equação do segundo grau. Trata-se da aplicação de um comando CONDICIONAL
algoritmo
declare DELTA, A,B,C,RAIZ1,RAIZ2 numerico
escreva "Entre com A"
leia A
escreva "Entre com B"
leia B
escreva "ENTRE COM C"
leia C
DELTA <- B * B - 4 * A * C
escreva " DELTA é ", DELTA
se DELTA < 0 entao
escreva "raízes imaginárias"
senao se DELTA = 0 entao
inicio
RAIZ1 <- -b/2*a
escreva "raizes iguais com valor ", RAIZ1
fim
senao
inicio
RAIZ1 <- (-B+raiz_quadrada(DELTA))/2*A
RAIZ2 <- (-B-raiz_quadrada(DELTA))/2*A
escreva "raiz um igual a ", RAIZ1
escreva "raiz um igual a ", RAIZ2
fim
fim_algoritmo</syntaxhighlight>. Consulte o TCC passado como referência para o cálculo da raiz.
- Desenvolva um programa para calcular o e-nésimo termo de uma progressão aritmética dados o primeiro termo (A1) e a razão (R).
</syntaxhighlight>
- Modifique o programa anterior para calcular a SOMA dos n primeiros termos, dados o primeiro termo (A1) e a razão (R). NÃO USAR a fórmula da soma e USAR o comando PARA.
- Desenvolva um programa para abrir uma porta caso a senha seja "ABCD". Se não for a senha correta uma mensagem será dada. Não precisa usar repetição. O código se executa uma única vez
algoritmo
declare SENHA literal
SENHA <- ""
escreva "entre com a senha"
leia SENHA
se SENHA = "ABCD" entao
escreva "Abra a porta"
senao
escreva "Nao abra a porta"
fim_algoritmo
</syntaxhighlight>
- Modificar o programa para validar a abertura da porta com o nome do usuário e com a senha.
- Modificar o programa para que se a pessoa errar a SENHA ela seja solicitada novamente.
- Desenvolver um programa para calcular a hipotenusa de um triângulo retângulo dado os catetos. Validar as entradas para garantir que os valores sejam positivos.
- Desenvolver um programa para desenhar um retângulo configurável da forma que se segue. O número de linhas com 'A' e o número de 'A's deve ser fornecido como entrada.
- AAAAAAAAAAAAAAAAAA*
- AAAAAAAAAAAAAAAAAA*
</syntaxhighlight>
AULA 9 - DIA 15/03/2018
TAREFA
- Estudar AULA 2 e 3 de Apostila de C - UFMG
AULA 10 - DIA 22/03/2018
AULA 11 - DIA 26/03/2018
AULA 12 - DIA 29/03/2018
Objetivos
- Revisão na forma de um exercício
- Instruções de Repetição
Exercício
- Fazer programa em C (sem copiar nada da wiki) que lê 5 números e mostra a quantidade de números lidos que é maior que a média destes números.
OBS1: lembrar que ainda não vimos vetores etc.
OBS2: Usar uma variável contador de apoio.
Instruções de Repetição
AULA 13 - DIA 2/04/2018
Objetivos
- Instruções de Repetição: finalização da aula anterior
- Exercícios
Exercício Sem Consulta
Exercícios Adicionais
1.Faça um programa para desenhar um gráfico de barras para um conjunto de 3 valores inteiros, conforme a saída abaixo
AULA 14 - DIA 5/04/2018
Objetivos da Aula
- Conceito de Funções
- Divisão de Problemas em Subproblemas
Conteúdo da Aula
AULA 15 - DIA 9/04/2018
Objetivos da Aula
- Exercícios de Preparação para Avaliação
QUESTÃO 1
Implementar uma função que calcula através de um loop a soma de todos os números naturais (inteiros começando em zero) até um dado número (inclusive) passado como parâmetro.
A equação matemática, o esqueleto da função e um código de teste é dado abaixo:
Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle SomaNat=\sum_{i=0}^{numero}i}
- include <stdio.h>
int soma_naturais(int numero)
{
int soma_nat=0;
int i;
/* implementar aqui*/
return soma_nat;
}
main()
{
printf("Para numero = %d tem=se soma = %d\n", 3, soma_naturais(3));
printf("Para numero = %d tem=se soma = %d\n", 10, soma_naturais(10));
printf("Para numero = %d tem=se soma = %d\n", 8, soma_naturais(8));
}
</syntaxhighlight>
QUESTÃO 2
Observe que a soma de números naturais é um problema conhecido: Ver https://pt.wikipedia.org/wiki/1_%2B_2_%2B_3_%2B_4_%2B_%E2%8B%AF
Reimplemente a função acima usando a fórmula fornecida no link.
QUESTÃO 3
Implementar uma função que calcula o quadrado da soma de naturais conforme abaixo.
Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle QuadrSomaNat=(\sum_{i=0}^{numero}i)^2}
- include <stdio.h>
int quad_soma_naturais(int numero)
{
/* implementar aqui */
}
main()
{
printf("Para numero = %d tem=se quad_soma = %d\n", 3, quad_soma_naturais(3));
printf("Para numero = %d tem=se quad_soma = %d\n", 10, quad_soma_naturais(10));
printf("Para numero = %d tem=se quad_soma = %d\n", 8, quad_soma_naturais(8));
}
</syntaxhighlight>
QUESTÃO 4
Implementar uma função que calcula através de um loop a soma de todos os números naturais (inteiros começando em zero) até um dado número (inclusive) passado como parâmetro.
A equação matemática, o esqueleto da função e um código de teste é dado abaixo:
Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle DifSomaQuadNat=(\sum_{i=0}^{numero}i)^2 - \sum_{i=0}^{numero}i }
- include <stdio.h>
int soma_naturais(int numero)
{
/* implementação aqui */
}
int quad_soma_naturais(int numero)
{
/* implementação aqui */
}
int dif_soma_quad(int numero)
{
/* implementação aqui - reusar as funções já desenvolvidas
}
main()
{
printf("Para numero = %d tem=se dif_quad_soma = %d\n", 3, dif_soma_quad(3));
printf("Para numero = %d tem=se dif_quad_soma = %d\n", 10, dif_soma_quad(10));
printf("Para numero = %d tem=se dif_quad_soma = %d\n", 8, dif_soma_quad(8));
}
</syntaxhighlight>
QUESTÃO 5
Implemente um jogo de adivinhação em que o usuário deve adivinhar a soma de dois dados lançados pelo computador. O valor da cada dado deve ser mostrado e a soma dos mesmo no momento que o usuário adivinhar ou
após três chances de adivinhação. Use o comando do while e a função rand. Todo o teste para encerramento de loop deve estar na condição do while. Um esqueleto do programa é dado como apoio.
- include <stdio.h>
- include <stdlib.h>
- include <time.h>
int main ()
{
int dado1,dado2, soma, adivinhacao, tentativas=1;
/* initialize random seed: */
srand ( 0 /*time(NULL)*/ );
/* gera dado 1: */
dado1 = rand() % 6 + 1;
/* gera dado 2: */
dado2 = rand() % 6 + 1;
soma=dado1+dado2;
/* implementar aqui */
}
</syntaxhighlight>
AULA 16 - DIA 12/04/2018
Objetivos da Aula
- Exercícios
Exercício 1 - NÃO USAR FUNÇÕES
Três pessoas fizeram um churrasco. Cada uma delas comprou no mercado alguns dos produtos, gastando um determinado valor. Faça um programa que permita entrar com o valor gasto por cada uma das pessoas. Na sequência o programa deve calcular e mostrar o total de gastos, a média por pessoa e o quanto cada uma delas deve receber ou pagar. O programa deve dizer por exemplo: pessoa 1 deve pagar xxx, pessoa 2 deve receber xxx, pessoa 3 não precisa pagar.
Exercício 2
Melhorar o programa anterior fazendo uma função que permita verificar se uma pessoa precisa pagar ou receber, substituindo o código no programa principal nesta parte. A função deve imprimir a mensagem devidamente. A função deve também retornar o valor a receber ou pagar (negativo se for valor devido).
int testar_pessoa (float media_valor, float valor_pago, int pessoa)
Exercício 3
Considere a fórmula para cálculo de combinações com N (ver https://pt.wikipedia.org/wiki/Combina%C3%A7%C3%A3o_(matem%C3%A1tica)#F%C3%B3rmula):
Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle C^N_k={N\choose k} =\frac{N!}{k!\cdot\left(N-k\right)!}\,\!}
Elaborar duas funções: (i) uma que calcula e retorna o fatorial de um número e (ii) outra que utiliza a função do fatorial para calcular e retornar a combinação N k a k. Segue esqueleto do programa:
- include <stdio.h>
int fatorial(int numero)
{
}
int combinacao(int N, int k)
{
}
main()
{
printf("Combinações 4 2 a 2 = %d\n", combinacao(4,2));
printf("Combinações 5 2 a 2 = %d\n", combinacao(5,2));
printf("Combinações 10 2 a 2 = %d\n", combinacao(10,2));
printf("Combinações 10 5 a 5 = %d\n", combinacao(10,5));
Exercício 4
Implementar uma função para calcular e retornar a soma de todos os números pares (positivos) compreendidos em uma dada faixa (inclusive os limites). A função deve retornar -1 caso o limite 2 seja menor que o limite 1. Ver protótipo abaixo:
- include <stdio,h>
int soma_pares(int lim1, lim2)
{
}
main()
{
printf("Soma dos pares na faixa de 1 a 10 é %d\n", soma_pares(1,10));
printf("Soma dos pares na faixa de 1 a 9 é %d\n", soma_pares(1,9));
printf("Soma dos pares na faixa de 5 a 9 é %d\n", soma_pares(5,9));
printf("Soma dos pares na faixa de 2 a 70 é %d\n", soma_pares(2,70));
}
</syntaxhighlight>
Exercício 5
Implementar uma função que calcula numericamente (usando loop) a integral definida da função da reta (ver [2]). Usar um comando while. A função deve ter o seguinte aspecto:
float integral_reta (float a, float b, float lim_inf, float lim_sup, float step)
{
}
</syntaxhighlight>
onde
a-> coeficiente angular
b-> coeficiente linear
lim_inf -> limite inferior da integração
lim_sup -> limite superiot da integração
step -> passo da integração
Exercícios Adicionais
A fórmula de Heron permite calcular a área de um triângulo dado os 3 lados (a, b e c) :
Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle A_t = \sqrt{p(p-a)(p-b)(p-c)}}
onde Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle p= \frac{a+b+c}{2}}
Construa uma função que permita calcular e retornar a área do retângulo dado os 3 lados. Use a função matemática sqrtf para calcular a
raiz de um float (fazer man sqrtf para obter o manual.
- include <math.h>
float area_triang(float a, float b, float c)
{
/* Implementar aqui */
}
main()
{
printf ("area para os lados 4.5 7.8 9.6 é %f\n" area_triang(4.5,7.8,9.6));
}
</syntaxhighlight>
AULA 17 DIA 16/04/2018
- AVALIAÇÃO 2 - Introdução a Programação C
AULA 18 DIA 19/04/2018
AULA 19 DIA 23/04/2018
Objetivos
- uso do DEFINE
- Exercícios sobre Vetores de Float e Inteiros
USO de DEFINE
O define é um comando do pré-processador do C. Observe abaixo como ele pode ser usado
#include <stdio.h>
#define PI 3.1416
main()
{
float x; /* declaração de uma variável real */
float y; /* declaração de uma variável real */
printf ("Entre com o valor de x ");
scanf("%f",&x);
y = 2*PI*x;
}
Observe que o define PI NÃO é uma variável. É simplesmente um texto que será substituído pelo número 3.1416 ANTES da compilação, em um processo que chamamos de PRÉ-COMPILAÇÃO.
Exercícios
- Considere que em um sistema de controle de acesso, as senhas de 11 alunos que acessam um laboratório são armazenadas em vetor de inteiros. O aluno para acessar fornece o seu identificador (user_id) que é um número inteiro de 0 a 10. No vetor está armazenada a senha de cada aluno na posição indexada pelo user_id. Faça no programa principal um programa que lê a senha e abre a porta caso a senha seja correta. Simule o abrir porta com um printf. Segue esqueleto do código. Considere que o vetor é inicializado de fábrica. Considere que o programa se encerra em uma sessão de acesso
#include <stdio.h>
int vetor_senhas[11]={234,210,149,21,5,78,97,535,1023,476,123};
main()
{
int user_id, /* variável para armazenar o user_id fornecido */
senha; /* variável para armazenar a senha fornecida */
printf("Entre com o user_id \n");
scanf("%d", &user_id);
printf("Entre com a senha \n");
scanf("%d", &senha);
/* fazer aqui o código que confere a senha - testar o limite do vetor antes de acessar!! */
}
- Melhore o exercício anterior da seguinte forma:
- o programa permanece em loop infinito até que seja fornecido -1 quando ele se encerra.
- encapsular a função de leitura de user_id/senha e verificação e abertura da porta em uma função. Segue esqueleto do programa:
#include <stdio.h>
int vetor_senhas[11]={234,210,149,21,5,78,97,535,1023,476};
/* Esta função recebe como parâmetro o user_id e verifica se deve abrir ou não a porta */
/* esta função deve retornar de imediato caso o user_id seja inválido (fora da faixa) */
void controlar_acesso(int user_id)
{
/* implementar a lógica de controle de acesso aqui */
}
main()
{
int user_id; /* variável para armazenar o user_id fornecido */
do {
printf("Entre com o user_id \n");
scanf("%d", &user_id);
controlar_acesso(user_id);
} while ( /* implementar condição*/ );
}
- Melhorar o programa anterior prevendo um modo de funcionamento para administrar o vetor de senhas. Caso o user_id fornecido seja -2 ele entra em modo de administração de senhas. Ela deve permitir entrar com todo o vetor de senhas.
#include <stdio.h>
int vetor_senhas[11]={234,210,149,21,5,78,97,535,1023,476};
/* Esta função recebe como parâmetro o user_id e verifica se deve abrir ou não a porta */
/* esta função deve retornar de imediato caso o user_id seja inválido (fora da faixa) */
void administrar_senhas()
{
/* implementar a lógica de controle de acesso aqui */
}
/* esta função deve permitir atualizar todo o vetor de senha */
void controlar_acesso(int user_id)
{
/* implementar a lógica de controle de acesso aqui */
}
main()
{
int user_id; /* variável para armazenar o user_id fornecido */
do {
printf("Entre com o user_id \n");
scanf("%d", &user_id);
switch (user_id){
case -1: break;
case -2: administrar_senhas();
break;
default: controlar_acesso(user_id);
break;
}
} while ( /* implementar condição de saída do loop */ );
}
- Considere que as notas de matemática de alunos de uma escola são armazenadas por bimestre em 4 vetores: bim1, bim2,bim3 e bim4. Suponha que um aluno é identificado por um número inteiro que servirá como índice destes vetores. Construir funções que retornam: (1) a média anual da turma, (2) o desvio padrão das médias anuais da turma, (3) a média anual de um aluno dado seu índice na tabela. Na função main imprimir a média de cada aluno, a média da turma e o desvio padrão (Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \sigma = \sqrt{\frac{1}{N} \sum_{i=1}^N (x_i - \mu)^2}, {\rm \ \ onde\ \ } \mu = \frac{1}{N} \sum_{i=1}^N x_i.}
) da turma.
#define NUM_ALUNOS 6
float bim1[NUM_ALUNOS]={5.5,3.7,10.0,8.5,9.6,6.6};
float bim2[NUM_ALUNOS]={4.5,2.3,9.0,7.5,9.3,7.0};
float bim3[NUM_ALUNOS]={5.5,1.7,10.0,8.0,9.0,7.6};
float bim4[NUM_ALUNOS]={6.5,1.2,10.0,7.8,9.6,5.6};
float media_aluno(int aluno)
{
}
float media_turma()
{
}
float desvio_padrao()
{
}
main()
{
/* chamar aqui as funções e imprimir os retornos */
}
- Para o exercício anterior, construir na função main um código que calcula o número de alunos que estão dentro da faixa determinada pelo desvio padrão.
soluções
ex.4
Solução:#include <math.h>
#include <stdio.h>
#define NUM_ALUNOS 6
float bim1[NUM_ALUNOS]={5.5,3.7,10.0,8.5,9.6,6.6};
float bim2[NUM_ALUNOS]={4.5,2.3,9.0,7.5,9.3,7.0};
float bim3[NUM_ALUNOS]={5.5,1.7,10.0,8.0,9.0,7.6};
float bim4[NUM_ALUNOS]={6.5,1.2,10.0,7.8,9.6,5.6};
float media_aluno(int aluno)
{
float media;
media = (bim1[aluno]+bim2[aluno]+bim3[aluno]+bim4[aluno])/4;
return media;
}
float media_turma()
{
int i;
float media;
media = 0;
for (i=0;i<NUM_ALUNOS;i++)
media = media + media_aluno(i);
media = media/NUM_ALUNOS;
return media;
}
float desvio_padrao()
{
float media, prod;
int i;
media = media_turma();
prod=0;
for (i=0;i<NUM_ALUNOS;i++)
prod = powf(media_aluno(i)-media_turma(),2) + prod;
prod = sqrt(prod/NUM_ALUNOS);
return prod;
}
main()
{
/* chamar aqui as funções e imprimir os retornos */
printf("Media Anual do aluno 0 -> %.2f\n", media_aluno(0));
printf("Media Anual da Turma -> %.2f\n", media_turma());
printf("Desvio Padrão da Turma -> %.2f\n", desvio_padrao());
}
ex.5
main()
{
float desvp,lim_sup,lim_inf,media,aux;
int i,cont;
/* chamar aqui as funções e imprimir os retornos */
printf("Media Anual do aluno 0 -> %.2f\n", media_aluno(0));
printf("Media Anual da Turma -> %.2f\n", media=media_turma());
printf("Desvio Padrão da Turma -> %.2f\n", desvp=desvio_padrao());
cont=0;
lim_sup=media+desvp;
lim_inf=media-desvp;
for(i=0;i<NUM_ALUNOS;i++){
aux = media_aluno(i);
if (aux <= lim_sup && aux >= lim_inf)
cont++;
}
printf("Número de alunos dentro da faixa do desvio -> %d\n",cont);
}
soluções
ex.1
Solução:#include <math.h>
#include <stdio.h>
#define NUM_ALUNOS 6
float bim1[NUM_ALUNOS]={5.5,3.7,10.0,8.5,9.6,6.6};
float bim2[NUM_ALUNOS]={4.5,2.3,9.0,7.5,9.3,7.0};
float bim3[NUM_ALUNOS]={5.5,1.7,10.0,8.0,9.0,7.6};
float bim4[NUM_ALUNOS]={6.5,1.2,10.0,7.8,9.6,5.6};
float media_aluno(int aluno)
{
float media;
media = (bim1[aluno]+bim2[aluno]+bim3[aluno]+bim4[aluno])/4;
return media;
}
float media_turma()
{
int i;
float media;
media = 0;
for (i=0;i<NUM_ALUNOS;i++)
media = media + media_aluno(i);
media = media/NUM_ALUNOS;
return media;
}
float desvio_padrao()
{
float media, prod;
int i;
media = media_turma();
prod=0;
for (i=0;i<NUM_ALUNOS;i++)
prod = powf(media_aluno(i)-media_turma(),2) + prod;
prod = sqrt(prod/NUM_ALUNOS);
return prod;
}
main()
{
/* chamar aqui as funções e imprimir os retornos */
printf("Media Anual do aluno 0 -> %.2f\n", media_aluno(0));
printf("Media Anual da Turma -> %.2f\n", media_turma());
printf("Desvio Padrão da Turma -> %.2f\n", desvio_padrao());
}
ex.2
main()
{
float desvp,lim_sup,lim_inf,media,aux;
int i,cont;
/* chamar aqui as funções e imprimir os retornos */
printf("Media Anual do aluno 0 -> %.2f\n", media_aluno(0));
printf("Media Anual da Turma -> %.2f\n", media=media_turma());
printf("Desvio Padrão da Turma -> %.2f\n", desvp=desvio_padrao());
cont=0;
lim_sup=media+desvp;
lim_inf=media-desvp;
for(i=0;i<NUM_ALUNOS;i++){
aux = media_aluno(i);
if (aux <= lim_sup && aux >= lim_inf)
cont++;
}
printf("Número de alunos dentro da faixa do desvio -> %d\n",cont);
}
AULA 20 DIA 26/04/2018
Objetivos
- Conceituar e operar strings através da indexação
Material de Referência
AULA 21 DIA 3/05/2018
Objetivos
- Arranjos Multidimensionais no C
Material de Referência
AULA 22 DIA 7/05/2018
Objetivos
- Arranjos Multidimensionais no C
- exercícios
AULA 23 DIA 10/05/2018
Objetivos
- Arranjos Multidimensionais no C
- exercícios
Exercícios Adicionais
1.Implementar uma função para multiplicar duas matrizes 5x5. São fornecidos mA e mB e o resiltado é colocado em mC.
void multiplicar_mat(float mA[5][5], float mB[5][5],float mC[5][5])
AULA 24 DIA 14/05/2018
Objetivos
- estruturas
Linka para aula
https://wiki.sj.ifsc.edu.br/index.php/AULA_13_-_Programa%C3%A7%C3%A3o_1_-_Engenharia
AULA 25 DIA 17/05/2018
- Avaliação 3 - Funções, Vetores, Strings e Matrizes
AULA 26 DIA 21/05/2018
Objetivos
- estruturas
Linka para aula
https://wiki.sj.ifsc.edu.br/index.php/AULA_13_-_Programa%C3%A7%C3%A3o_1_-_Engenharia
AULA 27 DIA 24/05/2018
- Introdução aos ponteiros
Material de Referência
https://wiki.sj.ifsc.edu.br/index.php/AULA_17_-_Programa%C3%A7%C3%A3o_1_-_Engenharia
AULA 28 DIA 4/06/2018
Objetivos
- Vetor de Ponteiros, Ponteiros para estruturas e Vetor de Ponteiros;
Aula de Referência
https://wiki.sj.ifsc.edu.br/index.php/AULA_19_-_Programa%C3%A7%C3%A3o_1_-_Engenharia
AULA 29 DIA 7/06/2018
Objetivos
- Alocação Dinâmica de Mempória
- Exercícios sobre Ponteiros;
Referência
AULA 30 DIA 11/06/2018
- Aula de Exercícios
Exercícios Selecionados
Exercícios Adicionais
Exercício 0 - Implementar uma função para armazenar uma sequência de números reais a serem fornecidos pelo teclado. A quantidade de números fornecidos
é inicialmente fornecida na linha de comando. A função deve armazenar os números em uma tabela dinamicamente criada e deve computar a quantidade de números
acima da média. Esta quantidade de números deve ser retornada pela função.
Exercício 1 - Verificar qual o erro do código abaixo. Propor uma solução SEM e COM alocação dinâmica de memória para resolver o problema.
main()
{
struct TTeste {
int x;
int y;
} *teste;
t->y = 5;
}
O código correto está mostrado abaixo:
solução
#include <stdio.h>
void main()
{
struct TTeste {
int x;
int y;
}teste;
teste.y = 5;
printf("Valor de y %d\n",teste.y);
}
Exercício 2 - Qual o valor a ser impresso no printf do programa abaixo.
#include <stdio.h>
struct TTeste {
int x;
int y;
struct TTeste *p;
};
main()
{
struct TTeste x = {4,7,NULL};
struct TTeste y = {10,8,NULL};
struct TTeste *teste;
x.p = &y;
teste = &x;
printf ("Valor = %d\n", teste->p->x);
}
Exercício 3
Considere uma tabela de usuários de um sistema de controle de acesso conforme código abaixo. Implemente as funções abaixo usando alocação dinâmica de memória. Observe que as entradas livres são iniciadas com NULL.
#include <stdio.h>
#define TAM_MAX 10
struct TEndereco {
char *pRuaNumero;
char *pCidade;
char *pEstado;
};
struct TUsuario /* struct TUsuario é o nome do tipo que está sendo criado */
{
char *userID;
char *senha;
struct TEndereco *pEndereco;
} TabelaUsuarios[TAM_MAX]={
{NULL,NULL,NULL},
{NULL,NULL,NULL},
{NULL,NULL,NULL},
{NULL,NULL,NULL},
};
/* adiciona usuario - retorna 0 se tudo ok e -1 se não conseguiu alocar */
/* ler dados com scanf */
int add_user()
{
}
/* remove o usuário - perguntar com scanf */
void del_user()
{
}
main()
{
/* exemplo de uso */
}
solução
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TAM_MAX 10
struct TEndereco {
char *pRuaNumero;
char *pCidade;
char *pEstado;
};
struct TUsuario /* struct TUsuario é o nome do tipo que está sendo criado */
{
char *userID;
char *senha;
struct TEndereco *pEndereco;
} TabelaUsuarios[TAM_MAX]={
{NULL,NULL,NULL},
{NULL,NULL,NULL},
{NULL,NULL,NULL},
{NULL,NULL,NULL},
{NULL,NULL,NULL},
{NULL,NULL,NULL},
{NULL,NULL,NULL},
{NULL,NULL,NULL},
{NULL,NULL,NULL},
{NULL,NULL,NULL},
};
/* adiciona usuario - retorna 0 se tudo ok e -1 se não conseguiu alocar */
/* ler dados com scanf */
int add_user()
{
char aux[100];
int i;
/* procurar a primeira entrada livre na tabela */
for(i=0;i<TAM_MAX;i++) {
if (TabelaUsuarios[i].userID==NULL)
break;
}
if (i==TAM_MAX)
return -1;
/* ler userid para variavel auxiliar */
printf("Entre com o userID\n");
scanf("%s", aux);
if( (TabelaUsuarios[i].userID = (char *) malloc(strlen(aux)+1)) == NULL) {
return -1;
}
strcpy(TabelaUsuarios[i].userID, aux);
printf("Entre com o senha\n");
scanf("%s", aux);
if((TabelaUsuarios[i].senha = (char *) malloc(strlen(aux)+1)) == NULL) {
free(TabelaUsuarios[i].userID);
TabelaUsuarios[i].userID = NULL;
return -1;
}
strcpy(TabelaUsuarios[i].senha, aux);
if((TabelaUsuarios[i].pEndereco = (struct TEndereco *) malloc(sizeof(struct TEndereco))) == NULL) {
free(TabelaUsuarios[i].userID);
free(TabelaUsuarios[i].senha);
TabelaUsuarios[i].userID = NULL;
TabelaUsuarios[i].senha = NULL;
return -1;
}
printf("Entre com a rua\n");
scanf("%s", aux);
if( (TabelaUsuarios[i].pEndereco->pRuaNumero = (char *) malloc(strlen(aux)+1)) == NULL) {
free(TabelaUsuarios[i].userID);
free(TabelaUsuarios[i].senha);
TabelaUsuarios[i].userID = NULL;
TabelaUsuarios[i].senha = NULL;
free(TabelaUsuarios[i].pEndereco);
TabelaUsuarios[i].pEndereco = NULL;
return -1;
}
strcpy(TabelaUsuarios[i].pEndereco->pRuaNumero, aux);
return 0;
}
/* remove o usuário - perguntar com scanf */
void del_user()
{
}
main()
{
/* exemplo de uso */
}
Exercício 5
Seja a seguinte estrutura:
struct tipo_carro {
char *marca;
char *modelo;
int potencia;
};
typedef tipo_carro tcarro;
Implpementar as funções abaixo:
/* cria dinamicamente uma estrutura,
preenche os dados dos campos
e retorna um ponteiro para a estrutura criada
Retorna NULL caso não consiga alocar área
*/
tcarro *ler_carro()
{
}
/*
recebe dois ponteiros para estruturas do tipo carro e
retorna -1 caso pelo menos um dos ponteiros seja NULL,
retorna 0 se os modelos forem iguais
e retorna 1 se os modelos forem diferentes */
int compara_modeloa(tcarro *p1, tcarro *p2)
{
}
/* libera a área da estrutura passada como parâmetro */
void deleta_estrutura(tcarro *p)
{
}
main()
{
/*testar as funções aqui */
/* criar dois carros */
/* comparar o modelo dos dois carros. Testar o retorno */
/* liberar a área das estruturas */
}
Exercício 6
Criar um programa para receber duas strings pela linha de comando. Elas devem ser armazenadas na estrutura fornecida abaixo.
Use criação dinâmica para criar área de memória para estas strings.
struct tipo_param {
char *ptr_arg1;
char *ptr_arg2;
};
Exemplos Adicionais
https://www.programiz.com/c-programming/examples/dynamic-memory-allocation-largest
https://www.programiz.com/c-programming/examples/structure-dynamic-memory-allocation
AULA 31 DIA 14/06/2018
- Objetivos
Avaliação 4: ponteiros, vetor de ponteiros, ponteiros para estruturas, alocação dinâmica de memória
AULA 32 DIA 18/06/2018
Objetivos
- Uso de múltiplos arquivos no projeto;
- Apresentação/Distribuição dos Projetos
- Projetos com Múltiplos arquivos
- Acesso ao sistemas de arquivos
Material de Referência
Apresentação/Distribuição dos Projetos
- PRG1-2018-1-Controle-Lista-Compras
- PRG1-2018-1-Agenda-Pessoal
- PRG1-2018-Controle-Estoque-Tele
- Gabriel: Controle de Estimação de Estados entre dois nodos com configuração repassada pelo controlador
- PRG1-2018-1-Sistema-Validação-Senha
- Luan: PetFeeder Distribuído para Canil. Um sistema de controle comanda a abertura de alimentadores para cães.
- PRG1-2018-1-Sistema-Controle-Hospital
- PRG1-2018-1-Controle-Estoque-Produtos
- Vitor: PRG1-2018-1-Sistema-Controle-Ar-Condicionado
Sugestões Adicionais
Proposta 1
Considere um sistema de controle de ar condicionado que permite controlar salas de uma instituição.
Elaborar uma estrutura para representar estas salas.
Uma sala possui um nome e uma temperatura que deve ser controlada. Um administrador deve ter as seguintes funções:
- inserir nova sala;
- editar sala;
- remover sala;
- modificar temperatura da sala;
Duas salas não podem ter o mesmo nome. As temperaturas controladas somente podem estar na faixa de 0 a 30 graus.
Referências: https://wiki.sj.ifsc.edu.br/index.php/AULA_24_-_Programa%C3%A7%C3%A3o_1_-_Engenharia
Proposta 2
Construir um sistema de gerenciamento de estoques para o almoxarifado de tele. O sistema de ve permitir organizar componentes nas seguintes categorias:
- CI, Transistor, Resistor, Capacitor, Indutor;
- Dentro da categoria deve permitir descrever código (ex: BF547, 747 etc)
- Quantidade de peças disponíveis
Proposta 3
Agenda pessoal de tarefas/reuniões;
Proposta 4
Lista de supermercado organizada em categorias
Proposta 5
Jogo da Velha com armazenamento de histórico de resultados.
Proposta 6
O que deve ter no Projeto
- Deve ser registrado na Wiki. Os seguintes pontos devem ser abordados:
- Título do Projeto;
- Descrição Textual focando O QUE o programa faz. Mínimo 2 parágrafos. Incluir como comentário no código;
- Código Fonte Documentado (ver https://www.ime.usp.br/~pf/algoritmos/aulas/docu.html)
- O programa deve usar acesso a arquivos;
- O programa deve usar o conceito de struct/vetores e funções;
- O programa deve subdividir problemas em subproblemas, encapsulando estes subproblemas em funções;
- Utilizar diretivas de pré-compilação (por exemplo, defines);
- Utilizar ponteiros e alocação dinâmica de memória;
- Utilizar parâmetros em linha de comando;
- Pelo menos 2 arquivos .c com .h e usar o make.
AULA 33 DIA 21/06/2018
- Desenvolvimento do Projeto
AULA 34 DIA 25/06/2018
- Desenvolvimento do Projeto
- Acesso a arquivos;
AULA 35 DIA 28/06/2018
- Desenvolvimento do Projeto
- Recuperação parcial das avaliações anteriores;
AULA 36 DIA 2/07/2018
- Apresentação/Defesa do Projeto
AULA 37 DIA 5/07/2018
- Apresentação do Projeto
AULA 38 DIA 9/07/2018
- RECUPERAÇÂO FINAL