Mudanças entre as edições de "PRG29002 - Programação I - Eng.Telecom 2019-1"
(110 revisões intermediárias por 2 usuários não estão sendo mostradas) | |||
Linha 148: | Linha 148: | ||
https://wiki.sj.ifsc.edu.br/index.php/AULA_6_-_Programa%C3%A7%C3%A3o_1_-_Engenharia | https://wiki.sj.ifsc.edu.br/index.php/AULA_6_-_Programa%C3%A7%C3%A3o_1_-_Engenharia | ||
− | = | + | =20/03/2019: Estruturas de Repetição (Prof. Eraldo)= |
==Objetivos== | ==Objetivos== | ||
Linha 344: | Linha 344: | ||
*A função deve copiar a string do primeiro vetor para o segundo, invertendo a mesma. | *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: | *A função também deve retornar a quantidade de caracteres 'i' na string. Exemplo: | ||
− | |||
<syntaxhighlight lang=c> | <syntaxhighlight lang=c> | ||
Linha 370: | Linha 369: | ||
otutitsni 2 | otutitsni 2 | ||
− | {{collapse top | }} | + | {{collapse top | Solução exercício 1}} |
<syntaxhighlight lang=c> | <syntaxhighlight lang=c> | ||
− | + | #include<stdio.h> | |
+ | #include<string.h> | ||
+ | |||
+ | int inverte (char vet1[10], char vet2[10]){ | ||
+ | |||
+ | int tam1=0,tam2=0,i=0,k=0,cont=0; | ||
+ | |||
+ | tam1 = strlen(vet1); //verifica tamanho dos vetores | ||
+ | tam2 = strlen(vet2); | ||
+ | |||
+ | for (i=0;i<tam1;i++){ //varre o vetor até o final | ||
+ | if (vet1[i] == 'i') //conta ocorrências de 'i' | ||
+ | cont++; | ||
+ | } | ||
+ | |||
+ | for (i=tam1-1;i>=0;i--){ //inverte o vetor | ||
+ | vet2[k] = vet1[i]; | ||
+ | k++; | ||
+ | } | ||
+ | vet2[k] = 0; //indica o fim do vetor, após cópia | ||
+ | return cont; | ||
+ | } | ||
+ | |||
+ | int main(){ | ||
+ | |||
+ | char aux1[10]="ifsc", aux2[10]="instituto", aux3[10]; | ||
+ | int i,len=0; | ||
+ | |||
+ | len=inverte(aux1,aux3); | ||
+ | printf("%s %d\n", aux3,len); | ||
+ | |||
+ | len=inverte(aux2,aux3); | ||
+ | printf("%s %d\n", aux3,len); | ||
+ | |||
+ | return 0; | ||
+ | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
{{collapse bottom}} | {{collapse bottom}} | ||
+ | <!-- | ||
+ | {{collapse top | Esqueleto código}} | ||
+ | <syntaxhighlight lang=c> | ||
#include <stdio.h> | #include <stdio.h> | ||
Linha 411: | Linha 448: | ||
printf("%s %d\n", aux3,len); | printf("%s %d\n", aux3,len); | ||
} | } | ||
+ | </syntaxhighlight> | ||
+ | {{collapse bottom}} | ||
+ | --> | ||
+ | |||
+ | {{collapse top | solução 01}} | ||
+ | <syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | #include <string.h> | ||
+ | |||
+ | int copiar_string(char fonte[], char dest[]) { | ||
+ | |||
+ | int i = strlen(fonte) - 1, j = 0; | ||
+ | |||
+ | printf("tam : %d \n", i); | ||
+ | int cont = 0; | ||
+ | while (i >= 0) { | ||
+ | if (fonte[i] != 0) | ||
+ | dest[j] = fonte[i]; | ||
+ | if (fonte[i] == 'i') { | ||
+ | cont = cont + 1; | ||
+ | } | ||
+ | i--; | ||
+ | j++; | ||
+ | } | ||
+ | |||
+ | return cont; //numero de loops-1 corresponde ao tamanho da "string" copiada | ||
+ | } | ||
+ | |||
+ | int main() { | ||
+ | char aux1[100] = "ifsc", aux2[100] = "inst", 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); | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | {{collapse bottom}} | ||
===Exercício 2=== | ===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. | 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. | ||
− | |||
<syntaxhighlight lang=c> | <syntaxhighlight lang=c> | ||
#include <stdio.h> | #include <stdio.h> | ||
Linha 431: | Linha 506: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | {{collapse top | solução exercício 2}} | ||
+ | <syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | |||
+ | int conta_par(int vet[], int len) | ||
+ | { | ||
+ | int cont=0,i=0; | ||
+ | while(i<len){ | ||
+ | if(vet[i]%2==0){ | ||
+ | cont++; | ||
+ | } | ||
+ | i++; | ||
+ | } | ||
+ | return cont; | ||
+ | } | ||
+ | |||
+ | main() | ||
+ | { | ||
+ | int x[10]={1,2,5,9,4,3,2,4,10,23}; | ||
+ | |||
+ | printf("Quantidade de pares = %d\n", conta_par(x,10)); | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | {{collapse bottom}} | ||
===Exercício 3=== | ===Exercício 3=== | ||
Linha 436: | Linha 536: | ||
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. | 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. | ||
− | = | + | {{collapse top | solução exercício 3}} |
+ | <syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | |||
+ | #define TAM 5 | ||
+ | |||
+ | float diagonal(float mat[TAM][TAM]) | ||
+ | { | ||
+ | int i,j; | ||
+ | float soma, media; | ||
+ | |||
+ | |||
+ | for(i=0;i<TAM;i++){ | ||
+ | for(j=0;j<TAM;j++){ | ||
+ | if (i == j){ | ||
+ | soma = soma + mat[i][j]; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | media = (soma/TAM); | ||
+ | return media; | ||
+ | } | ||
+ | |||
+ | int main() | ||
+ | { | ||
+ | float mat[TAM][TAM]={ 1.1,1.2,1.3,1.4,1.5, | ||
+ | 2.1,2.2,2.3,2.4,2.5, | ||
+ | 3.1,3.2,3.3,3.4,3.5, | ||
+ | 4.1,4.2,4.3,4.4,4.5, | ||
+ | 5.1,5.2,5.3,5.4,5.5}; | ||
+ | |||
+ | printf("A média da diagonal principal eh: %.2f \n", diagonal(mat)); | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | <!-- | ||
+ | {{collapse top | solução exercício 3}} | ||
+ | <syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | #include <string.h> | ||
+ | |||
+ | float calcula_media(float matriz[5][5]) | ||
+ | { | ||
+ | int i =0, j=0; | ||
+ | float soma=0; | ||
+ | for( i = 0; i < 5; i++ ){ | ||
+ | for( j = 0; j < 5; j++ ){ | ||
+ | if( i==j ){ | ||
+ | soma += matriz[i][j]; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | return soma/5; | ||
+ | |||
+ | } | ||
+ | |||
+ | int main() | ||
+ | { | ||
+ | float matriz[5][5] = {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}; | ||
+ | int i,j; | ||
+ | float media; | ||
+ | media = calcula_media(matriz); | ||
+ | printf("%f",media); | ||
+ | |||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | {{collapse bottom}} | ||
+ | --> | ||
+ | |||
+ | = Avaliação 2 - 03/05/2019 = | ||
+ | *Avaliação 2 (Lab. Redes de Computadores). | ||
+ | |||
+ | =Resolução Avaliação 2 (vista de prova) - 08/05/2019= | ||
+ | *Correção da [http://tele.sj.ifsc.edu.br/~tisemp/PRG/avaliacao_2.pdf Avaliação 2] | ||
+ | *Enviar os exercícios resolvidos por e-mail: ''tisemp@ifsc.edu.br'' | ||
+ | |||
+ | ===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. 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. | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | int eliminar_espaco(char x[], char y[]) | ||
+ | { | ||
+ | } | ||
+ | |||
+ | main() | ||
+ | { | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | {{collapse top | solução}} | ||
+ | <syntaxhighlight lang=c> | ||
+ | //desenvolvido pelo aluno: Jeferson Jair (2019-1) | ||
+ | |||
+ | #include <stdio.h> | ||
+ | |||
+ | int contar_espaco(char x[], char y[]){ | ||
+ | |||
+ | int i, cont=0; | ||
+ | |||
+ | for(i=0; x[i]!=0 ;i++){ | ||
+ | y[i]=x[i]; | ||
+ | if(x[i]==' ') | ||
+ | cont++; | ||
+ | } | ||
+ | y[i++]=0; | ||
+ | return cont; | ||
+ | } | ||
+ | |||
+ | int main(){ | ||
+ | |||
+ | char a[40] = "Instituto Federal do Santa Catarina"; | ||
+ | char b[40]; | ||
+ | |||
+ | printf("String b = %s com um total de %d espaços\n", b, contar_espaco(a,b)); | ||
+ | |||
+ | return 0; | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | <!-- | ||
+ | {{collapse top | solução}} | ||
+ | <syntaxhighlight lang=c> | ||
+ | #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); | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | {{collapse bottom}} | ||
+ | --> | ||
+ | ===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) | ||
+ | |||
+ | {{collapse top | solução}} | ||
+ | <syntaxhighlight lang=c> | ||
+ | #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); | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | ===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) | ||
+ | |||
+ | {{collapse top|solução}} | ||
+ | <syntaxhighlight lang=c> | ||
+ | #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; | ||
+ | } | ||
+ | |||
+ | int 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); | ||
+ | printf("Média: %.2f\n", media); | ||
+ | return 0; | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | =Estruturas no C - 10/05/2019= | ||
==Objetivos== | ==Objetivos== | ||
Linha 446: | Linha 793: | ||
*[https://wiki.sj.ifsc.edu.br/index.php/AULA_13_-_Programa%C3%A7%C3%A3o_1_-_Engenharia Estruturas no C] | *[https://wiki.sj.ifsc.edu.br/index.php/AULA_13_-_Programa%C3%A7%C3%A3o_1_-_Engenharia Estruturas no C] | ||
− | = | + | =Paralização - 15/05/2019= |
+ | * Sem atividades letivas. | ||
+ | |||
+ | =Avaliação de Recuperação 2 - 17/05/2019= | ||
+ | * Recuperação da Avaliação 2. | ||
+ | |||
+ | =Estruturas no C - 22/05/2019 = | ||
==Objetivos== | ==Objetivos== | ||
Linha 456: | Linha 809: | ||
*[https://wiki.sj.ifsc.edu.br/index.php/AULA_13_-_Programa%C3%A7%C3%A3o_1_-_Engenharia Estruturas no C] | *[https://wiki.sj.ifsc.edu.br/index.php/AULA_13_-_Programa%C3%A7%C3%A3o_1_-_Engenharia Estruturas no C] | ||
− | = | + | =Introdução aos ponteiros no C - dia 24/05/2019= |
==Objetivos== | ==Objetivos== | ||
Linha 466: | Linha 819: | ||
*[https://wiki.sj.ifsc.edu.br/index.php/AULA_17_-_Programa%C3%A7%C3%A3o_1_-_Engenharia Introdução a Ponteiros] | *[https://wiki.sj.ifsc.edu.br/index.php/AULA_17_-_Programa%C3%A7%C3%A3o_1_-_Engenharia Introdução a Ponteiros] | ||
− | = | + | =Introdução aos ponteiros no C - dia 29/05/2019= |
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | *Resolução de exercícios sobre ponteiros no C. | ||
+ | |||
+ | ==Material de Referência== | ||
+ | |||
+ | *[https://wiki.sj.ifsc.edu.br/index.php/AULA_17_-_Programa%C3%A7%C3%A3o_1_-_Engenharia Introdução a Ponteiros] | ||
+ | |||
+ | =Vetor de Ponteiros, Ponteiros para estruturas e Passagem de argumentos em linha de comando - 31/05/2019= | ||
==Objetivos== | ==Objetivos== | ||
Linha 481: | Linha 844: | ||
*revisão e exercícios para recuperação. | *revisão e exercícios para recuperação. | ||
− | ==Correção da Avaliação | + | ==Correção da Avaliação A== |
− | + | <!-- | |
===Questão 1=== | ===Questão 1=== | ||
Linha 550: | Linha 913: | ||
{{collapse top|solução}} | {{collapse top|solução}} | ||
− | |||
<syntaxhighlight lang=c> | <syntaxhighlight lang=c> | ||
#include <stdio.h> | #include <stdio.h> | ||
Linha 636: | Linha 998: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
{{collapse bottom}} | {{collapse bottom}} | ||
+ | --> | ||
− | ==Correção da Avaliação - | + | ==Correção da Avaliação - B== |
− | + | <!-- | |
===Questão 1=== | ===Questão 1=== | ||
Linha 767: | Linha 1 130: | ||
} | } | ||
− | main() | + | int main() |
{ | { | ||
float x[TAM][TAM] = { 1 ,2, 3, 4 ,5, | float x[TAM][TAM] = { 1 ,2, 3, 4 ,5, | ||
Linha 779: | Linha 1 142: | ||
media = media_lin_col(x); | media = media_lin_col(x); | ||
+ | printf("Média: %.2f\n", media); | ||
+ | return 0; | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
{{collapse bottom}} | {{collapse bottom}} | ||
+ | --> | ||
− | = | + | = Alocação Dinâmica de Memória - 05/06/2019= |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
*Alocação dinâmica de memória; | *Alocação dinâmica de memória; | ||
Linha 827: | Linha 1 175: | ||
Requisitos de TODOS os projetos: | Requisitos de TODOS os projetos: | ||
*No arquivo da função ''main'' deve ter um texto explicativo do que o programa faz | *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; |
− | * | + | *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 DO PROJETO== |
− | *Avaliação individual | + | *Avaliação individual; |
+ | *A Cada semana 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. | *O trabalho será defendido individualmente podendo ser solicitado pequenas implementações no processo. | ||
+ | ==GRUPOS (duplas)== | ||
+ | # '''Layza''': Sistema de Autenticação de Usuários; | ||
+ | # '''Murillo''': Sistema de Agendamento de Eventos; | ||
+ | # '''Jeferson e Leonardo''': Sistema de Gerenciamento de biblioteca; | ||
+ | # '''Maria e Cristiane:''' Sistema de Controle de listas de compras de supermercados; | ||
+ | # '''Maykon e Matheus''': Sistema de Gerenciamento de biblioteca; | ||
+ | # '''Lucas e Salmom''': Sistema de Controle de listas de compras de supermercados; | ||
+ | # '''Ary e Júlio''': Sistema de Controle de alimentação de animais. | ||
− | == | + | ==Referências== |
− | + | *[https://wiki.sj.ifsc.edu.br/index.php/AULA_20_-_Programa%C3%A7%C3%A3o_1_-_Engenharia Alocação Dinâmica de Memória] | |
+ | *[https://wiki.sj.ifsc.edu.br/index.php/AULA_21_-_Programa%C3%A7%C3%A3o_1_-_Engenharia Listas Ligadas] | ||
− | + | =Acesso a Arquivos em C - 07/06/2019 = | |
− | |||
− | =AULA 28 - = | + | *Acesso a arquivos no C |
+ | *Desenvolvimento do Projeto | ||
+ | |||
+ | ==Material de Referência== | ||
+ | |||
+ | *[[AULA 22 - Programação 1 - Engenharia]] | ||
+ | |||
+ | =Avaliação 3 - 12/06/2019 = | ||
+ | <!--[[Arquivo:Avaliacao3.pdf]]--> | ||
+ | *[https://wiki.sj.ifsc.edu.br/images/7/70/Avaliacao_3.pdf Avaliação 3] | ||
+ | |||
+ | =Recuperação da Avaliação 3 - 14/06/2019 = | ||
+ | * Recuperação Avaliação 3. | ||
+ | |||
+ | =Desenvolvimento do Projeto - 19/06/2019 = | ||
+ | * Desenvolvimento do projeto. | ||
+ | |||
+ | =Desenvolvimento do Projeto - 26/06/2019 = | ||
+ | * Desenvolvimento do projeto. | ||
+ | |||
+ | =Apresentação/Defesa do Projeto - 28/06/2019 = | ||
+ | * Defesa do projeto -> individual. | ||
+ | |||
+ | =Apresentação/Defesa do Projeto - 03/07/2019 = | ||
+ | * Defesa do projeto -> individual. | ||
+ | |||
+ | =Recuperações (reapresentações projeto) - 05/07/2019 = | ||
+ | |||
+ | =Encerramento da disciplina - 10/07/2019 = | ||
+ | |||
+ | =Material extra - Uso de múltiplos arquivos nos projetos= | ||
*Acesso a arquivos no C | *Acesso a arquivos no C | ||
*uso de múltiplos arquivos nos projetos | *uso de múltiplos arquivos nos projetos | ||
− | == | + | ==Referências== |
*[https://wiki.sj.ifsc.edu.br/index.php/AULA_25_-_Programa%C3%A7%C3%A3o_1_-_Engenharia aula de referência] | *[https://wiki.sj.ifsc.edu.br/index.php/AULA_25_-_Programa%C3%A7%C3%A3o_1_-_Engenharia aula de referência] | ||
− | + | {{collapse top | Exemplo timer}} | |
− | |||
<code> | <code> | ||
// Baseado em http://forums.codeguru.com/showthread.php?356101-How-to-use-timer-in-Unix | // Baseado em http://forums.codeguru.com/showthread.php?356101-How-to-use-timer-in-Unix | ||
Linha 900: | Linha 1 285: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | {{collapse bottom}} | ||
− | = | + | =Exercícios extras - Desafios= |
− | |||
− | |||
+ | {{collapse top | Desafios}} | ||
==EX1== | ==EX1== | ||
Linha 1 060: | Linha 1 445: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | {{collapse bottom}} | ||
− | = | + | =MATERIAIS EXTRAS DE APOIO= |
− | * | + | *[[FuncoesDeTempoNoC | Funções de Tempo no C]] |
− | + | *[[ExemploDeInsercaoSimplesTabela | Exemplo de Inserção Simples na Tabela]] | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | *[[ | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
*[https://wiki.sj.ifsc.edu.br/index.php/Opera%C3%A7%C3%B5es_com_Bits_-_Programa%C3%A7%C3%A3o_1_-_Engenharia ] | *[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] | *[http://mtm.ufsc.br/~azeredo/cursoC/index.html Enums] | ||
*[https://www.programiz.com/c-programming/c-enumeration enums] | *[https://www.programiz.com/c-programming/c-enumeration enums] | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |
Edição atual tal como às 13h48min de 26 de junho 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
- https://www.w3resource.com/c-programming-exercises
- Lógica de Programação, de Paulo Sérgio de Moraes
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
TAREFA
- Estudar AULA 2 e 3 de Apostila de C - UFMG
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
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
Avaliação 1 - 22/03/2019
- Avaliação 1 - Laboratório de Programação.
Resolução Avaliação 1 (vista de prova) - 27/03/2019
- Correção da Avaliação 1
- Enviar os exercícios resolvidos por e-mail: tisemp@ifsc.edu.br
Arranjos unidimensionais - 29/03/2019
- Vetores (arranjos unidimensionais).
Material de Referência
Vetores e Strings - 03/04/2019
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
Recuperação Avaliação 1 - 05/04/2019
- Recuperação da Avaliação 1 -
Funções - 10/04/19
Objetivos
- Correção da Recuperação (Alternativas)
- Funções e parâmetros
- Variáveis Locais e Globais
Material de Referência
Vetores: continuação (int, float, etc) - 12/04/19
Objetivos
- Vetores de inteiros, floats etc (arranjos unidimensionais)
Material de Referência
Matrizes - 17/04/19
Objetivos
- Definindo matrizes no C
- Operações com matrizes e passagem de parâmetros tipo matriz
- Matrizes com caracteres
Material de Referência
Matrizes (cont) - 24/04/19
Objetivos
- Continuação do conteúdo de matrizes: resolução de exercícios.
- Aula com Prof. Eraldo Silveira e Silva.
Material de Referência
Exercícios de Preparação para Avaliação 2 - 26/04/2019
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 exercício 1 |
---|
#include<stdio.h>
#include<string.h>
int inverte (char vet1[10], char vet2[10]){
int tam1=0,tam2=0,i=0,k=0,cont=0;
tam1 = strlen(vet1); //verifica tamanho dos vetores
tam2 = strlen(vet2);
for (i=0;i<tam1;i++){ //varre o vetor até o final
if (vet1[i] == 'i') //conta ocorrências de 'i'
cont++;
}
for (i=tam1-1;i>=0;i--){ //inverte o vetor
vet2[k] = vet1[i];
k++;
}
vet2[k] = 0; //indica o fim do vetor, após cópia
return cont;
}
int main(){
char aux1[10]="ifsc", aux2[10]="instituto", aux3[10];
int i,len=0;
len=inverte(aux1,aux3);
printf("%s %d\n", aux3,len);
len=inverte(aux2,aux3);
printf("%s %d\n", aux3,len);
return 0;
}
|
solução 01 |
---|
#include <stdio.h>
#include <string.h>
int copiar_string(char fonte[], char dest[]) {
int i = strlen(fonte) - 1, j = 0;
printf("tam : %d \n", i);
int cont = 0;
while (i >= 0) {
if (fonte[i] != 0)
dest[j] = fonte[i];
if (fonte[i] == 'i') {
cont = cont + 1;
}
i--;
j++;
}
return cont; //numero de loops-1 corresponde ao tamanho da "string" copiada
}
int main() {
char aux1[100] = "ifsc", aux2[100] = "inst", 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);
}
|
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));
}
solução exercício 2 |
---|
#include <stdio.h>
int conta_par(int vet[], int len)
{
int cont=0,i=0;
while(i<len){
if(vet[i]%2==0){
cont++;
}
i++;
}
return cont;
}
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.
solução exercício 3 |
---|
#include <stdio.h>
#define TAM 5
float diagonal(float mat[TAM][TAM])
{
int i,j;
float soma, media;
for(i=0;i<TAM;i++){
for(j=0;j<TAM;j++){
if (i == j){
soma = soma + mat[i][j];
}
}
}
media = (soma/TAM);
return media;
}
int main()
{
float mat[TAM][TAM]={ 1.1,1.2,1.3,1.4,1.5,
2.1,2.2,2.3,2.4,2.5,
3.1,3.2,3.3,3.4,3.5,
4.1,4.2,4.3,4.4,4.5,
5.1,5.2,5.3,5.4,5.5};
printf("A média da diagonal principal eh: %.2f \n", diagonal(mat));
}
|
Avaliação 2 - 03/05/2019
- Avaliação 2 (Lab. Redes de Computadores).
Resolução Avaliação 2 (vista de prova) - 08/05/2019
- Correção da Avaliação 2
- Enviar os exercícios resolvidos por e-mail: tisemp@ifsc.edu.br
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. 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 |
---|
//desenvolvido pelo aluno: Jeferson Jair (2019-1)
#include <stdio.h>
int contar_espaco(char x[], char y[]){
int i, cont=0;
for(i=0; x[i]!=0 ;i++){
y[i]=x[i];
if(x[i]==' ')
cont++;
}
y[i++]=0;
return cont;
}
int main(){
char a[40] = "Instituto Federal do Santa Catarina";
char b[40];
printf("String b = %s com um total de %d espaços\n", b, contar_espaco(a,b));
return 0;
}
|
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;
}
int 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);
printf("Média: %.2f\n", media);
return 0;
}
|
Estruturas no C - 10/05/2019
Objetivos
- Estruturas no C;
Material de Referência
Paralização - 15/05/2019
- Sem atividades letivas.
Avaliação de Recuperação 2 - 17/05/2019
- Recuperação da Avaliação 2.
Estruturas no C - 22/05/2019
Objetivos
- Estruturas no C;
Material de Referência
Introdução aos ponteiros no C - dia 24/05/2019
Objetivos
- Introdução aos ponteiros no C.
Material de Referência
Introdução aos ponteiros no C - dia 29/05/2019
Objetivos
- Resolução de exercícios sobre ponteiros no C.
Material de Referência
Vetor de Ponteiros, Ponteiros para estruturas e Passagem de argumentos em linha de comando - 31/05/2019
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 A
Correção da Avaliação - B
Alocação Dinâmica de Memória - 05/06/2019
- 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;
- 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 DO PROJETO
- Avaliação individual;
- A Cada semana 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 (duplas)
- Layza: Sistema de Autenticação de Usuários;
- Murillo: Sistema de Agendamento de Eventos;
- Jeferson e Leonardo: Sistema de Gerenciamento de biblioteca;
- Maria e Cristiane: Sistema de Controle de listas de compras de supermercados;
- Maykon e Matheus: Sistema de Gerenciamento de biblioteca;
- Lucas e Salmom: Sistema de Controle de listas de compras de supermercados;
- Ary e Júlio: Sistema de Controle de alimentação de animais.
Referências
Acesso a Arquivos em C - 07/06/2019
- Acesso a arquivos no C
- Desenvolvimento do Projeto
Material de Referência
Avaliação 3 - 12/06/2019
Recuperação da Avaliação 3 - 14/06/2019
- Recuperação Avaliação 3.
Desenvolvimento do Projeto - 19/06/2019
- Desenvolvimento do projeto.
Desenvolvimento do Projeto - 26/06/2019
- Desenvolvimento do projeto.
Apresentação/Defesa do Projeto - 28/06/2019
- Defesa do projeto -> individual.
Apresentação/Defesa do Projeto - 03/07/2019
- Defesa do projeto -> individual.
Recuperações (reapresentações projeto) - 05/07/2019
Encerramento da disciplina - 10/07/2019
Material extra - Uso de múltiplos arquivos nos projetos
- Acesso a arquivos no C
- uso de múltiplos arquivos nos projetos
Referências
Exemplo timer |
---|
|
Exercícios extras - Desafios
Desafios |
---|
EX1Considere 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:
#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"));
}
|