Mudanças entre as edições de "PRG29002-2020-1-Manha"
(48 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 174: | Linha 174: | ||
https://wiki.sj.ifsc.edu.br/index.php/AULA_5_-_Programa%C3%A7%C3%A3o_1_-_Engenharia | https://wiki.sj.ifsc.edu.br/index.php/AULA_5_-_Programa%C3%A7%C3%A3o_1_-_Engenharia | ||
− | =AULA 8 | + | =AULA 8 10/03/2020= |
==Objetivos== | ==Objetivos== | ||
Linha 520: | Linha 520: | ||
#include <string.h> | #include <string.h> | ||
− | int str_cat(str1 [],str2 []) | + | int str_cat(char str1 [],char str2 []) |
{ | { | ||
Linha 543: | Linha 543: | ||
*[https://wiki.sj.ifsc.edu.br/index.php/AULA_Exercicios_Strings_-_Programa%C3%A7%C3%A3o_1_-_Engenharia#Computa.C3.A7.C3.A3o_do_tamanho_da_String_-_Fun.C3.A7.C3.A3o_strlen.28.29] | *[https://wiki.sj.ifsc.edu.br/index.php/AULA_Exercicios_Strings_-_Programa%C3%A7%C3%A3o_1_-_Engenharia#Computa.C3.A7.C3.A3o_do_tamanho_da_String_-_Fun.C3.A7.C3.A3o_strlen.28.29] | ||
− | =SUPORTE DURANTE A | + | =AULA VIRTUAL Síncrona 23/06/2020 = |
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | *Exercício de Comparação de Strings | ||
+ | *Introdução a arranjos multidimensionais no C | ||
+ | |||
+ | ==EXERCÍCIO DE COMPARAÇÃO ENTRE DUAS STRINGS== | ||
+ | |||
+ | *[https://drive.google.com/file/d/1Gh3kb6QAuIud1jaMShngKF0gm9ajyujp/view?usp=sharing Vídeo - Análise do Problema de Comparação de Strings] | ||
+ | *[https://drive.google.com/file/d/1Bvi1LyENWlaLLuQps6tY5lFpkATgMeL9/view?usp=sharing Vídeo - Uma solução para o Problema de Comparação de Strings] | ||
+ | |||
+ | ==Introdução a Arranjos Multidimensionais - Wiki desta aula== | ||
+ | |||
+ | *[https://wiki.sj.ifsc.edu.br/index.php/Programa%C3%A7%C3%A3o_1_-_Engenharia_-_Arrays_Multidimensionais#Como_definir_e_operar_com_matrizes_no_C Arranjos Multidimensionais] | ||
+ | *[https://drive.google.com/file/d/1hF7PVsXxsujK3w2WVbfSLLofEXLyWf8k/view?usp=sharing Vídeo da Aula Arranjos Multidimensionais - Introdução] | ||
+ | |||
+ | ==Exercício em Sala== | ||
+ | |||
+ | #Implementar um programa para calcular a média de todos elementos da matriz C (exemplo inicial da wiki). | ||
+ | #Fazer uma função que recebe duas matrizes 2x3 como parâmetros e retorna a média entre todos elementos da matriz soma destas matrizes. | ||
+ | |||
+ | =AULA VIRTUAL Síncrona 25/06/2020 = | ||
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | *Exemplo Arranjo Multidimensional: Batalha Naval | ||
+ | *[https://wiki.sj.ifsc.edu.br/index.php/Programa%C3%A7%C3%A3o_1_-_Engenharia_-_Arrays_Multidimensionais#Como_definir_e_operar_com_matrizes_no_C Arranjos Multidimensionais] | ||
+ | |||
+ | =AULA VIRTUAL Síncrona 2/07/2020 = | ||
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | *Arranjo Multidimensional: Vetor de Strings | ||
+ | |||
+ | ==Referência para eta aula== | ||
+ | |||
+ | *[https://wiki.sj.ifsc.edu.br/index.php/Programa%C3%A7%C3%A3o_1_-_Engenharia_-_Arrays_Multidimensionais#Como_definir_e_operar_com_matrizes_no_C Arranjos Multidimensionais] | ||
+ | |||
+ | ==Exercício em sala== | ||
+ | |||
+ | Implementar um programa para "abrir uma porta" para um usuário que se encontra em uma tabela de usuários. Faça uma versão com (i) uma função implementada por você para comparar strings (ii) a função strcmp() da biblioteca | ||
+ | |||
+ | |||
+ | =AULA VIRTUAL Síncrona 7/07/2020 = | ||
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | *Arranjo Multidimensional: Exercício de Vetor de Strings | ||
+ | |||
+ | ==Exercício (ver [https://wiki.sj.ifsc.edu.br/index.php/Programa%C3%A7%C3%A3o_1_-_Engenharia_-_Arrays_Multidimensionais#Como_definir_e_operar_com_matrizes_no_C Arranjos Multidimensionais])== | ||
+ | |||
+ | #Implementar controle de acesso para múltiplos usuários e com senha associada a cada um deles. | ||
+ | #Implementar um contador de acesso para cada usuário. | ||
+ | |||
+ | |||
+ | =AULA VIRTUAL Síncrona 9/07/2020 = | ||
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | *Arranjo Multidimensional: Exercício de Vetor de Strings - (continuação) | ||
+ | |||
+ | |||
+ | ==Exercício (ver [https://wiki.sj.ifsc.edu.br/index.php/Programa%C3%A7%C3%A3o_1_-_Engenharia_-_Arrays_Multidimensionais#Como_definir_e_operar_com_matrizes_no_C Arranjos Multidimensionais])== | ||
+ | |||
+ | #Implementar controle de acesso para múltiplos usuários e com senha associada a cada um deles. | ||
+ | #Implementar um contador de acesso para cada usuário. | ||
+ | |||
+ | =AULA VIRTUAL Síncrona 4/08/2020 = | ||
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | *Estruturas: Parte 1 | ||
+ | |||
+ | ==Referências== | ||
+ | |||
+ | *[https://wiki.sj.ifsc.edu.br/index.php/AULA_13_-_Programa%C3%A7%C3%A3o_1_-_Engenharia#Aplica.C3.A7.C3.A3o_no_Controle_de_Acesso Wiki sobre Estruturas] | ||
+ | |||
+ | =AULA VIRTUAL Síncrona 6/08/2020 = | ||
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | *Estruturas: Parte 1 | ||
+ | |||
+ | ==Referências== | ||
+ | |||
+ | *[https://wiki.sj.ifsc.edu.br/index.php/AULA_13_-_Programa%C3%A7%C3%A3o_1_-_Engenharia#Aplica.C3.A7.C3.A3o_no_Controle_de_Acesso Wiki sobre Estruturas] | ||
+ | |||
+ | =AULA VIRTUAL Síncrona 11/08/2020 = | ||
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | |||
+ | *Exercícios sobre Estruturas- Questionário A3.1 - SIGA A | ||
+ | |||
+ | =AULA VIRTUAL Síncrona 13/08/2020 = | ||
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | *Introdução Ponteiros no C | ||
+ | *Exercícios - Questionário A3.1 - SIGA A | ||
+ | |||
+ | ==Material de Referência== | ||
+ | |||
+ | https://wiki.sj.ifsc.edu.br/index.php/AULA_17_-_Programa%C3%A7%C3%A3o_1_-_Engenharia | ||
+ | |||
+ | =AULA VIRTUAL Síncrona 18/08/2020 = | ||
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | *Avisos: | ||
+ | **Novos exercícios funções e strings (preparação avaliação) | ||
+ | **Avaliação 1 - Recuperação - Semana dia 31/8 - a marcar | ||
+ | **A2 - Dia 27/08 | ||
+ | **Ficar atento aos exercícios do SIGAA | ||
+ | *Ponteiros para char e ponteiros para vetores | ||
+ | * | ||
+ | |||
+ | ==Material de Referência== | ||
+ | |||
+ | https://wiki.sj.ifsc.edu.br/index.php/AULA_17_-_Programa%C3%A7%C3%A3o_1_-_Engenharia | ||
+ | |||
+ | |||
+ | =AULA VIRTUAL Síncrona 20/08/2020 = | ||
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | *Conceito de Vetor de Ponteiros | ||
+ | *Passagem de parâmetros na linha de comando | ||
+ | *Ponteiro para estruturas | ||
+ | |||
+ | ==Material de Referência== | ||
+ | |||
+ | https://wiki.sj.ifsc.edu.br/index.php/AULA_19_-_Programa%C3%A7%C3%A3o_1_-_Engenharia#Ponteiros_para_qualquer_.22coisa.22... | ||
+ | |||
+ | =AULA VIRTUAL Síncrona 25/08/2020 = | ||
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | *Exercícios de Preparação para Avaliação 2 (ver TAREFAS SIGAA) | ||
+ | *Distribuição de Projetos e Etapa 1 | ||
+ | |||
+ | ==Material de Referência== | ||
+ | |||
+ | *[https://wiki.sj.ifsc.edu.br/index.php/AULA_Proposta_de_Projetos_-_Programa%C3%A7%C3%A3o_1_-_Engenharia#Projeto_final Descrição da Proposta de Projeto Final] | ||
+ | |||
+ | |||
+ | =AULA VIRTUAL Síncrona 27/08/2020 = | ||
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | Avaliação 2 | ||
+ | |||
+ | |||
+ | =AULA VIRTUAL Síncrona 1/09/2020 = | ||
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | *Etapa 1 do Projeto - Encaminhamento | ||
+ | |||
+ | ==Material de Referência== | ||
+ | |||
+ | https://wiki.sj.ifsc.edu.br/index.php/AULA_Proposta_de_Projetos_-_Programa%C3%A7%C3%A3o_1_-_Engenharia#Projeto_final | ||
+ | |||
+ | |||
+ | =AULA VIRTUAL Síncrona 3/09/2020 = | ||
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | *Construção de Programas C usando Múltiplos Arquivos | ||
+ | |||
+ | ==Material de Referência== | ||
+ | |||
+ | *[https://wiki.sj.ifsc.edu.br/index.php/AULA_25_-_Programa%C3%A7%C3%A3o_1_-_Engenharia Aula Múltiplos Arquivos] | ||
+ | *[https://wiki.sj.ifsc.edu.br/index.php/AULA_Proposta_de_Projetos_-_Programa%C3%A7%C3%A3o_1_-_Engenharia#Projeto_final Projeto Final] | ||
+ | |||
+ | =AULA VIRTUAL Síncrona 8/09/2020 = | ||
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | *Construção de Programas C usando Múltiplos Arquivos | ||
+ | |||
+ | ==Material de Referência== | ||
+ | |||
+ | *[https://wiki.sj.ifsc.edu.br/index.php/AULA_25_-_Programa%C3%A7%C3%A3o_1_-_Engenharia Aula Múltiplos Arquivos] | ||
+ | *[https://wiki.sj.ifsc.edu.br/index.php/AULA_Proposta_de_Projetos_-_Programa%C3%A7%C3%A3o_1_-_Engenharia#Projeto_final Projeto Final] | ||
+ | *[https://drive.google.com/file/d/1OD0NDrIBzBLrw1ga5gEsXqdfLJk4HnoZ/view?usp=sharing Vídeo Muliplos arquivos Aula PAssada] | ||
+ | ==Data de Avaliação== | ||
+ | |||
+ | *Aval3: 18/09 - na mesma data REC Aval1 | ||
+ | **Assunto: Estruturas e Ponteiros | ||
+ | |||
+ | *Rec Aval2 e Aval3: 02/Out | ||
+ | **Assunto Aval2: Funções e Arranjos | ||
+ | |||
+ | =AULA VIRTUAL Síncrona 8/09/2020 = | ||
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | *Desenvolvimento do Projeto - Etapa 2 | ||
+ | |||
+ | ==Procedimento== | ||
+ | |||
+ | *Discutir e e encaminhar a etapa 2 com cada equipe. | ||
+ | |||
+ | =AULA VIRTUAL Síncrona 15/09/2020 = | ||
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | *AVAL 3 - Semana que vem!!! | ||
+ | *Breve revisão do Conceito de Ponteiros | ||
+ | *Ponteiro Para Estruturas | ||
+ | |||
+ | ==Lembrando: aulas para a Aval.3== | ||
+ | |||
+ | {{collapse top|[[AULA 13 - Programação 1 - Engenharia | Estruturas ]]}} | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | {{collapse top|[[AULA 17 - Programação 1 - Engenharia | Ponteiros ]] }} | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | {{collapse top|[[AULA 19 - Programação 1 - Engenharia | Vetor de Ponteiros e Ponteiro Para Estruturas]]}} | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | |||
+ | ==Material de Referência== | ||
+ | |||
+ | *[https://wiki.sj.ifsc.edu.br/index.php/AULA_17_-_Programa%C3%A7%C3%A3o_1_-_Engenharia Ponteiros] | ||
+ | *[https://wiki.sj.ifsc.edu.br/index.php/AULA_19_-_Programa%C3%A7%C3%A3o_1_-_Engenharia Vetor de Ponteiros e Ponteiros para Estruturas] | ||
+ | |||
+ | ===Exercício sobre Gerenciamento de REGISTRO (structs) COM "LACUNAS LIVRES"=== | ||
+ | |||
+ | [https://drive.google.com/file/d/19uyA2FZAl5VKFtMznrFZUKMuzuUWn8g5/view?usp=sharing Link Vídeo Explicativo] | ||
+ | |||
+ | Reimplementar o programa abaixo, modificando as funções adicionar_usuario e remover_usuario() para que usem a função | ||
+ | retornar_ptr_item_livre_tab_usuarios() no lugar de retornar_item_livre_tab_usuarios(). | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | #include <unistd.h> | ||
+ | #include <stdlib.h> | ||
+ | #include <string.h> | ||
+ | |||
+ | |||
+ | /* Autores: Professores PRG1 - IFSC -SJ */ | ||
+ | /******************************************/ | ||
+ | /* | ||
+ | *Para fins didáticos, demonstramos como gerenciar um | ||
+ | vetor de structs marcando registros livres através de um flag | ||
+ | * Note que existem formas mais eficientes de fazer busca em tabelas (ver PRG 2) | ||
+ | */ | ||
+ | /******************************************/ | ||
+ | |||
+ | #define LIVRE 0 | ||
+ | #define OCUPADO 1 | ||
+ | |||
+ | #define TAM_USER 10 | ||
+ | #define TAM_NOME 20 | ||
+ | |||
+ | /******************************************/ | ||
+ | /* Protótipos de funções - colocar em .h */ | ||
+ | /******************************************/ | ||
+ | |||
+ | void gerenciar_usuarios(); | ||
+ | void adicionar_usuario(); | ||
+ | void remover_usuario(); | ||
+ | void iniciar_tabela(); | ||
+ | int retornar_item_livre_tab_usuarios(); | ||
+ | |||
+ | |||
+ | /******************************************/ | ||
+ | /* Variáveis Globais */ | ||
+ | /******************************************/ | ||
+ | |||
+ | /* a fazer */ | ||
+ | |||
+ | struct tipo_usuario{ | ||
+ | char nome[TAM_NOME]; | ||
+ | int idade; | ||
+ | char flag; /* se 0 registro livre - se 1 ocupado */ | ||
+ | } tab_usuarios[TAM_USER]; | ||
+ | |||
+ | /******************************************/ | ||
+ | |||
+ | int main() | ||
+ | { | ||
+ | iniciar_tabela(); /* liberar todos os registros */ | ||
+ | gerenciar_usuarios(); | ||
+ | } | ||
+ | |||
+ | /* | ||
+ | Esta função inicia a tabela com todos registros livres | ||
+ | Aqui seria uma boa oportunidade para ler dados de um arquivo e iniciar a tabela | ||
+ | */ | ||
+ | void iniciar_tabela() | ||
+ | { | ||
+ | int i; | ||
+ | |||
+ | for (i=0;i<TAM_USER;i++){ | ||
+ | tab_usuarios[i].flag=LIVRE; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /* | ||
+ | retorna -1 se não existe item livre na tabela | ||
+ | ou retorna o índice onde existe item livre | ||
+ | */ | ||
+ | int retornar_item_livre_tab_usuarios() | ||
+ | { | ||
+ | int i=0; | ||
+ | |||
+ | while(i<TAM_USER && tab_usuarios[i].flag==OCUPADO) { | ||
+ | i++; | ||
+ | } | ||
+ | if (i==TAM_USER) | ||
+ | i=-1; | ||
+ | return i; | ||
+ | } | ||
+ | |||
+ | /* | ||
+ | retorna -1 se não existe item livre na tabela | ||
+ | ou retorna o índice onde existe item livre | ||
+ | */ | ||
+ | struct tipo_usuario *retornar_ptr_item_livre_tab_usuarios() | ||
+ | { | ||
+ | int i=0; | ||
+ | struct tipo_usuario *p = &tab_usuarios[0]; | ||
+ | |||
+ | while(i<TAM_USER && p->flag==OCUPADO) { | ||
+ | i++; | ||
+ | // p = &tab_usuarios[i]; | ||
+ | p++; | ||
+ | } | ||
+ | if (i==TAM_USER) | ||
+ | p = NULL; | ||
+ | return p; | ||
+ | } | ||
+ | |||
+ | /* | ||
+ | * Esta função insere usuário na tabela. NOTE que ela não testa se o | ||
+ | * usuário já se encontra na mesma... Poderia ser criada uma função para isto... | ||
+ | */ | ||
+ | void adicionar_usuario() | ||
+ | { | ||
+ | int ret; | ||
+ | ret = retornar_item_livre_tab_usuarios(); | ||
+ | if (ret==-1) | ||
+ | printf("Não existe espaço\n"); | ||
+ | else { | ||
+ | printf("Entre com usuario\n"); | ||
+ | scanf("%s", tab_usuarios[ret].nome); | ||
+ | tab_usuarios[ret].flag = OCUPADO; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void remover_usuario() | ||
+ | { | ||
+ | char buffer[TAM_NOME]; | ||
+ | int i=0; | ||
+ | |||
+ | printf("Qual o nome do usuário a remover?\n"); | ||
+ | scanf ("%s", buffer); | ||
+ | for (i=0;i<TAM_USER;i++){ | ||
+ | if (tab_usuarios[i].flag == OCUPADO && strcmp(buffer, tab_usuarios[i].nome)==0) { | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | if (i<TAM_USER) {/* usuário encontrado */ | ||
+ | tab_usuarios[i].flag = LIVRE; | ||
+ | printf("usuario %s removido da posição %d\n", tab_usuarios[i].nome, i); | ||
+ | } else { | ||
+ | printf("Usuário não se encontra na tabela\n"); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | /***************************************************/ | ||
+ | /* Esta funções deveriam estar em arquivo separado */ | ||
+ | /***************************************************/ | ||
+ | void gerenciar_usuarios() | ||
+ | { | ||
+ | int opcao; | ||
+ | |||
+ | do { | ||
+ | system("clear"); | ||
+ | printf("**********************************\n"); | ||
+ | printf("Menu Nível 2 - Gerenciar Usuários\n\n"); | ||
+ | printf("1. Adicionar Usuário\n"); | ||
+ | printf("2. Remover Usuário\n"); | ||
+ | printf("3. Sair do Gerenciar Usuários\n"); | ||
+ | printf("**********************************\n"); | ||
+ | scanf("%d",&opcao); | ||
+ | switch (opcao) { | ||
+ | case 1: adicionar_usuario(); | ||
+ | break; | ||
+ | case 2: remover_usuario(); | ||
+ | break; | ||
+ | case 3: printf("Finalizando Gerenciar Usuários...\n"); | ||
+ | sleep(1); /* tempo somente para fins de visualização */ | ||
+ | break; | ||
+ | default: printf("Opção inexistente. Tente novamente...\n"); | ||
+ | sleep(1); /* tempo somente para fins de visualização */ | ||
+ | break; | ||
+ | } | ||
+ | |||
+ | } while (opcao != 3); | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | =AULA VIRTUAL Síncrona 17/09/2020 = | ||
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | *Exercícios de Preparação para Aval.3 | ||
+ | *Visão de alocação dinâmica... | ||
+ | |||
+ | ==Ex1== | ||
+ | |||
+ | Implementar a função abaixo. | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | |||
+ | typedef struct{ | ||
+ | char rua[100]; | ||
+ | int numero; | ||
+ | } tipo_endereco; | ||
+ | |||
+ | tipo_endereco ifsc; | ||
+ | |||
+ | /* | ||
+ | * implementar uma função para atualizar o número de uma estrutura | ||
+ | * passada como parametro. | ||
+ | * A função retorna o ponteiro para a estrutura atualizada | ||
+ | */ | ||
+ | tipo_endereco *atualizar_num(tipo_endereco *p, int num) | ||
+ | { | ||
+ | |||
+ | } | ||
+ | |||
+ | int main() | ||
+ | { | ||
+ | tipo_endereco *p; | ||
+ | p = atualizar_num(&ifsc, 100); | ||
+ | printf("Num = %d\n", p->numero); | ||
+ | return 0; | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==Ex2== | ||
+ | |||
+ | Usar strcpy() da biblioteca. | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | include <stdio.h> | ||
+ | |||
+ | typedef struct{ | ||
+ | char rua[100]; | ||
+ | int numero; | ||
+ | } tipo_endereco; | ||
+ | |||
+ | tipo_endereco ifsc; | ||
+ | |||
+ | /* | ||
+ | * implementar uma função para atualizar a rua e o número de uma estrutura | ||
+ | * passada como parametro. | ||
+ | * A função retorna o ponteiro para a estrutura atualizada | ||
+ | */ | ||
+ | tipo_endereco *atualizar_rua_num(tipo_endereco *p, char *rua, int num) | ||
+ | { | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | int main() | ||
+ | { | ||
+ | tipo_endereco *p; | ||
+ | p = atualizar_rua_num(&ifsc, "Pedro Alvares Cabral", 100); | ||
+ | printf("Rua %s Num = %d\n", p->rua, p->numero); | ||
+ | return 0; | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==Ex3 == | ||
+ | |||
+ | Corrija o problema do exercício abaixo. | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | |||
+ | typedef struct{ | ||
+ | char rua[100]; | ||
+ | int numero; | ||
+ | } tipo_endereco; | ||
+ | |||
+ | |||
+ | |||
+ | /* | ||
+ | * implementar uma função para atualizar a rua e o número de uma estrutura | ||
+ | * passada como parametro. | ||
+ | * A função retorna o ponteiro para a estrutura atualizada | ||
+ | */ | ||
+ | tipo_endereco *atualizar_rua_num(char *rua, int num) | ||
+ | { | ||
+ | tipo_endereco ifsc; | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | int main() | ||
+ | { | ||
+ | tipo_endereco *p; | ||
+ | p = atualizar_rua_num("Pedro Alvares Cabral", 100); | ||
+ | printf("Rua %s Num = %d\n", p->rua, p->numero); | ||
+ | return 0; | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | =AULA VIRTUAL Síncrona 22/09/2020 = | ||
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | *Avaliação 3 | ||
+ | |||
+ | =AULA VIRTUAL Síncrona 24/09/2020 = | ||
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | *Introdução ao Sistema de Arquivos | ||
+ | |||
+ | ==Material de Referência== | ||
+ | |||
+ | *[https://wiki.sj.ifsc.edu.br/index.php/AULA_22_-_Programa%C3%A7%C3%A3o_1_-_Engenharia Introdução ao Sistema de Arquivos] | ||
+ | |||
+ | =AULA VIRTUAL Síncrona 29/09/2020 = | ||
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | *Orientação do Projeto | ||
+ | |||
+ | =AULA VIRTUAL Síncrona 1/10/2020 = | ||
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | *Orientação do Projeto | ||
+ | *Agendamento de Avaliações | ||
+ | |||
+ | ==Agendamento Defesa do Projeto== | ||
+ | |||
+ | *Defesa do Trabalho dia: 08/10/2020 | ||
+ | **Começa 10h00 - Vou sugerir escala | ||
+ | *Mais uma tarefa será aberta para versão final até o dia 8 | ||
+ | *REC da Aval.1 dia 9/10 às 8H | ||
+ | *REC da Aval.2 dia 13/10 às 8H | ||
+ | *REC da Aval.3. dia 16/10/2010 às 8h | ||
+ | |||
+ | *ATENÇÂO: FICAR ATENTO AS ANPS DE RECUPERAÇÃO | ||
+ | |||
+ | =AULA VIRTUAL Síncrona 6/10/2020= | ||
+ | ==Objetivos== | ||
+ | |||
+ | * Aula revisão rec A1 e A2 | ||
+ | |||
+ | ==Exercício solução TAREFA A1.2== | ||
+ | IMPLEMENTAR um programa C para ler uma sequência de números inteiros positivos e calcular: | ||
+ | |||
+ | 1)média destes números | ||
+ | |||
+ | 2)O maior valor entre eles | ||
+ | |||
+ | NÂO usar vetor. Quando for fornecido um número ZERO ou NEGATIVO o programa deve mostrar o resultados e se encerrar. | ||
+ | |||
+ | |||
+ | ATENÇÂO: POSTADA TAREFA DE RECUPERAÇÂO DE A1.2 e A1.3 | ||
+ | |||
+ | ==Exercício solução TAREFA A2.1== | ||
+ | Implementar um programa C para ler 10 números inteiros para um vetor e imprimir o número de números abaixo da média e que seja positivos. OBS: Definir um contador, iniciado em zero. Ler os 10 números para um vetor e calcular a media. Fazer um segundo loop sobre o vetor testando cada item para verificar se é maior que a média. Incrementar o vetor a cada item acima da média. | ||
+ | |||
+ | ==Exercício solução TAREFA A2.2== | ||
+ | TAREFA T2.2 - Básico de Vetor de char | ||
+ | (ver https://www.geeksforgeeks.org/c-program-to-count-number-of-vowels-and-consonants-in-a-string/) | ||
+ | |||
+ | 1) Implementar um programa C para criar um array de char iniciado com um nome do time de futebol de sua preferência. O programa deve "printar" o nome do time, o número de caracteres do nome e o número de ocorrência de vogais. | ||
+ | |||
+ | 2) Implementar uma função para para capitalizar uma string inserida pelo teclado. A função deve retornar o número de caracteres que foram capitalizados. Testar no programa principal (main). Obs; se um caractere já estiver maiúsculo não conta.... | ||
+ | |||
+ | =SUPORTE DURANTE A SITUAÇÃO DE CRISE= | ||
==Instalando o Linux na VirtualBox== | ==Instalando o Linux na VirtualBox== |
Edição atual tal como às 10h40min de 26 de outubro de 2020
PROFESSOR
- Eraldo Silveira e Silva
ATENDIMENTO PARALELO
SEGUNDA: 14h30 às 15h30 QUARTA: 10h às 11h
LOCAL: Sala 1 de Professores de Telecomunicações ou em algum dos laboratórios de TELE/CAD
MONITORIA
- Aluna:
- Horários:
Links Interessantes
AULA 1 - Dia 11/02/2020
Objetivos
- Apresentar o plano de ensino
- Discutir a forma de avaliação
- Introdução a Lógica de Programação
Material de Referência
Aula Introdutória sobre Lógica de Programação
AULA 2 - 13/02/2012
Objetivos
- Introdução a Fluxograma e pseudocódigo.
- Estruturas de Decisão
Material de Referência
Lógica de Programação: Estruturas de Decisão
AULA 3 - 18/02/2020
Objetivos
- Floxograma: Estruturas de Repetição
Material de Referência
AULA 4 - 20/02/2020
Objetivos
- Exercícios de Lógica de Porogramação.
Exercício Proposto 1
- Faça um fluxograma para entrar com N números e com um número de referência (REF). Mostrar quantos números estão abaixo desta referência.
Exercício Proposto 2
- Faça um fluxograma para entrar com N números e com dois números de referência (REF1 e REF2). Mostrar a média dos números que estão entre estas referÊncias (inclusive). OBS: Considere que REF2 sempre será maior que REF1, para simplificar a solução. OBS2: LEMBRAR que não pode ser realizada uma divisão por ZERO. Proteger esta operação com uma estrutura de decisão.
Exercício Proposto 3
- Faça um fluxograma para calcular a média de uma prova realizada com N alunos. N será fornecido no início do algoritmo. Mostrar quantos alunos estão com nota acima de 6. Mostrar também quantos alunos precisam recuperar esta prova (abaixo ou igual a 5). OBS: Considere que as notas das provas são números inteiros de 0 a 10.
Exercício Proposto 4
- Modificar o exercício anterior para que seja também mostrada a maior nota da prova. SUGESTÂO: criar uma variável auxiliar MAIOR e iniciá-la com ZERO. Comparar cada nota com o valor desta variável. Se ela form maior, substituir o valor de MAIOR pela nota.
Material de Referência
AULA 5 27/02/2020
Objetivos
- Exercícios de Lógica de Programação.
Exercício Proposto 1
Faça um fluxograma para computar a média de números fornecidos como entrada. Caso o número fornecido seja ZERO o sistema deve fazer o cálculo da média, mostrá-la e encerrar.
Exercício Proposto 2
Modifique a solução para o exercício anterior de forma que o sistema ignore entradas que estejam na faixa OU . (recordar notação de intervalos aqui: https://www.infoescola.com/matematica/intervalo/)
Exercício Proposto 3
Considere um sistema de controle de acesso que abre uma porta através de uma senha alfanumérica. Ao ser ligado o sistema pergunta qual a senha desejada para ser utilizada. O usuário deve fornecer a senha que deseja usar e na sequência um código fornecido na caixa do produto, de forma a validar o processo. Se o código fornecido for errado então ele será perguntado novamente até que seja fornecido corretamente.
Na sequência, o sistema abre a porta normalmente para a senha colocada. Entretanto, se em algum momento o usuário errar por 3 vezes, o sistema é bloqueado fornecendo uma mensagem "ENTRE COM O CÒDIGO DO PRODUTO" para desbloquear, permanecendo no aguardo para o fornecimento deste código. . Se fornecido corretamente o sistema é desbloqueado e volta a funcionar normalmente, caso contrário volta a perguntar pelo CÓDIGO do produto.
Exercício Proposto 4
A fórmula de um termo de uma PG (progressão Geométrica) é dado por:
- ou
Sem usar fórmulas de SOMA de termos faça um fluxograma para calcular a média dos 10 primeiros termos, dado e . Supor que não são fornecidos "ZEROS" para estes valores.
Exercício Proposto 5
Flexibilize a solução do problema anterior para computar a média dos N primeiros termos, onde N é inicialmente fornecido.
Exercício Proposto 6
Elabore um fluxograma para receber como entrada dois números (suponha inteiro positivos). Computar o fatorial do maior número.
AULA 6 03/03/2020
Objetivos
- Introdução a Programação C
Material de Referência
https://wiki.sj.ifsc.edu.br/index.php/AULA_4_-_Programa%C3%A7%C3%A3o_1_-_Engenharia
AULA 7 05/03/2020
Objetivos
- Introdução a Programação C
- Declaração de Variáveis
- Comandos de Decisão
Material de Referência
https://wiki.sj.ifsc.edu.br/index.php/AULA_4_-_Programa%C3%A7%C3%A3o_1_-_Engenharia
https://wiki.sj.ifsc.edu.br/index.php/AULA_5_-_Programa%C3%A7%C3%A3o_1_-_Engenharia
AULA 8 10/03/2020
Objetivos
- Introdução a Programação C
- Declaração de Variáveis
- Comandos de Decisão (continuação)
Material de Referência
https://wiki.sj.ifsc.edu.br/index.php/AULA_4_-_Programa%C3%A7%C3%A3o_1_-_Engenharia
https://wiki.sj.ifsc.edu.br/index.php/AULA_5_-_Programa%C3%A7%C3%A3o_1_-_Engenharia
AULA 9 12/03/2020
Objetivos
- Comandos de Decisão (continuação)
- variável tipo char e discussão sobre a sujeira do teclado
Material de Referência
https://wiki.sj.ifsc.edu.br/index.php/AULA_4_-_Programa%C3%A7%C3%A3o_1_-_Engenharia
https://wiki.sj.ifsc.edu.br/index.php/AULA_5_-_Programa%C3%A7%C3%A3o_1_-_Engenharia
AULA 11 26/03/2020
Objetivos
- Comandos de repetição while e do while
Material de Referência
https://wiki.sj.ifsc.edu.br/index.php/AULA_6_-_Programa%C3%A7%C3%A3o_1_-_Engenharia
AULA 12 31/03/2020
Objetivos
- Comandos de repetição while e do while
- Comando for
Material de Referência
https://wiki.sj.ifsc.edu.br/index.php/AULA_6_-_Programa%C3%A7%C3%A3o_1_-_Engenharia
AULA 13 2/04/2020
Objetivos
- Comando for
Material de Referência
https://wiki.sj.ifsc.edu.br/index.php/AULA_6_-_Programa%C3%A7%C3%A3o_1_-_Engenharia
AULA VIRTUAL 14 7/04/2020
Objetivos
- Revisão de comandos de repetição
- Variações do exercício de sorteio do while()
- Exercícios 5 6 da wiki nível inicial
Material de Referência
https://wiki.sj.ifsc.edu.br/index.php/AULA_6_-_Programa%C3%A7%C3%A3o_1_-_Engenharia
AULA VIRTUAL 14 7/04/2020
Objetivos
- Exercícios
Exercício para resolução em sala - Extra Wiki
- Exercícios 1 e 2 de nível médio da wiki: aula de comandos de repetição.
- Implemente um programa para geração de 6 números da megasena (de 1 a 60). Note que os números não podem se repetir.
Não usar vetor. Armazenar os valores gerados em variáveis de nome num1, num2,...num6. OBS: como ainda não aprendemos vetores teremos que a cada geração verificar se não coincide com o número anterior.Uma seugestão seria:
int main() {
int i,num1,num2,num3,num4,num5,num6;
/* gerar primeiro número e armazenar em num1 */
for (i=2;i<=6;i++) { /* gerar próximos 5 números */
switch (i) {
2: /*fazer um loop com do while ou while para gerar num2 confrontando com num1 */
break;
3: /*fazer um loop com do while ou while para gerar num3 confrontando com num1 e num2 */
: etc
}
}
}
AULA VIRTUAL 15 14/04/2020
Objetivos
- Funções
Material de Referência
AULA VIRTUAL 16 23/04/2020
Objetivos
- Explicação do Exercício
- Funções (continuação)
- Conceito de Função
- Como definir e declarar função;
- O papel da função em implementar sub-problemas
- Exercício
Material de Referência
- Explicação do Exercício 1 da Tarefa 4
- Explicação do Exercício 2 da Tarefa 4
- Vídeo da Aula da Manhã - O que é função no C
- Funções
AULA VIRTUAL (Esta aula não terá encontro síncrono) 28/04/2020
Objetivos
- Funções (continuação) - Ver os vídeos dos exercícios abaixo.
- Conceito de Função
- Como definir e declarar função;
AULA VIRTUAL 30/04/2020
Objetivos
- Continuação Funções
- Conceito de Variáveis Globais e Locais;
- Inicialização de Variáveis
- Exercícios
Material de Referência
AULA/reunião VIRTUAL 19/05/2020
Objetivos
- Discutir como encaminhar a matéria
Revisão da Matéria - até dia 29/05
- assistir vídeos/aulas wiki revisão - links a serem colocados como tarefas no siga a;
- assistir vídeos explicativos tarefa A1.1
- fazer dois exercícios a serem entregues dia 29/05
Instalação do CLion
semana que vem...
Revisão de Funções
semana que vem
AULA/reunião VIRTUAL 21/05/2020
Objetivos
- Revisão Comando if else: exercício Maior entre 3 números
- Resolução Exercício 1 da Tarefa A1.1
Comando if-else - Problema Maior
AULA VIRTUAL Síncrona 26/05/2020
Objetivos
- Revisão Comandos de Repetição
- Resolução Exercício 1 da Tarefa A1.2
Material de Referência
https://wiki.sj.ifsc.edu.br/index.php/AULA_6_-_Programa%C3%A7%C3%A3o_1_-_Engenharia
AULA VIRTUAL Síncrona 2/06/2020
Objetivos
- Introdução a arrays unidimensionais no C
- Arrays de inteiros e de floats
- Exercício de ler 5 números e computar quantos estão acima da média.
Material de Referência
AULA VIRTUAL Síncrona 4/06/2020
Objetivos
- Introdução a arrays unidimensionais no C (Continuação)
- Arrays de inteiros e de floats
- Exercício de ler 5 números e computar quantos estão acima da média.
Exercício
Implementar uma função que recebe um vetor de float com tamanho 10 como parâmetro. A função deve retornar a média dos números armazenados no vetor. Teste a função no "main". Crie um vetor local inicializado.
Material de Referência
/*
Implementar uma função que recebe um
vetor de float com tamanho 10 como parâmetro.
A função deve retornar a média dos números positivos armazenados no vetor.
Teste a função no "main". Crie um vetor local inicializado.
Problema: divisão por zero...
*/
#include <stdio.h>
float calcular_media_positivos(float vetor[10])
{
int i,cont=0;
float soma_ac, media;
for(i=0;i<10;i=i+1){
if(vetor[i]>0) {
soma_ac = soma_ac + vetor[i];
cont = cont + 1;
}
}
media = soma_ac/cont;
return(media);
}
int main()
{
float alfa[10] = {3.5,2.7,9.7,8.5,2,9,4.7,3,2,3};
float beta[10] = {6.5,8.7,3.7,8.5,1,9,4.7,3,2,3};
float media_final;
media_final = (calcular_media_positivos(alfa) + calcular_media_positivos(beta))/2;
printf("media = %f\n", media_final);
}
AULA VIRTUAL Síncrona 9/06/2020
Objetivos
- Arrays unidimensionais no C (Continuação)
- Arrays de char e Strings NULL terminadas
Material de Referência
Exercício de Base da Aula
- Fazer um programa para computar o número de caracteres de uma cadeia (string) lida pelo teclado.Use o comando while;
- Fazer uma variação para um array iniciado;
- Fazer uma variação implementando uma função que retorna o número de caracteres.
AULA VIRTUAL Síncrona 16/06/2020
Objetivos
- Arrays de char e Strings NULL terminadas (Continuação)
Material de Referência
Exercício de Base da Aula
- Implementar um programa C para criar um array de char iniciado com um nome do time de futebol de sua preferência. O programa deve "printar" o nome do time, o número de caracteres do nome e o número de ocorrência de vogais.
- Implementar uma função para para capitalizar uma string inserida pelo teclado. A função deve retornar o número de caracteres que foram capitalizados.
- Implementar uma função para concatenar duas strings que estão armazenadas em dois vetores separados. Criar um terceiro vetor para comportar a concatenação.
AULA VIRTUAL Síncrona 18/06/2020
Objetivos
- Funções da Biblioteca para Operação com Strings
- Exercícios de Operação sobre strings
Exercícios 1 em Sala Virtual
Elaborar uma função C para computar o tamanho de uma string conforme esqueleto mostrado baixo.
#include <stdio.h>
int str_len(char str [])
{
//retorna o tamanho da string armazenada em str[]
}
int main()
{
char x[100] = "IFSC-";
char y[100] = "Telecom SJ";
int tam;
tam = str_len(x);
printf("x - > %s com tamanho %d\n", x, tam);
tam = str_len(y);
printf("y - > %s com tamanho %d\n", y, tam);
return 0;
}
Exercícios 2 em Sala Virtual
Construir um função para concatenar duas strings conforme esqueleto mostrado abaixo. A funçã deve retornar o tamanho total da string concatenada.
#include <stdio.h>
#include <string.h>
int str_cat(char str1 [],char str2 [])
{
//retorna o tamanho da string armazenada em str[]
}
int main()
{
char x[100] = "IFSC-";
char y[100] = "Telecom SJ";
int tam;
tam = str_cat(x,y);
printf("x - > %s com tamanho %d\n", x, tam);
return 0;
}
Material de Referência
AULA VIRTUAL Síncrona 23/06/2020
Objetivos
- Exercício de Comparação de Strings
- Introdução a arranjos multidimensionais no C
EXERCÍCIO DE COMPARAÇÃO ENTRE DUAS STRINGS
- Vídeo - Análise do Problema de Comparação de Strings
- Vídeo - Uma solução para o Problema de Comparação de Strings
Introdução a Arranjos Multidimensionais - Wiki desta aula
Exercício em Sala
- Implementar um programa para calcular a média de todos elementos da matriz C (exemplo inicial da wiki).
- Fazer uma função que recebe duas matrizes 2x3 como parâmetros e retorna a média entre todos elementos da matriz soma destas matrizes.
AULA VIRTUAL Síncrona 25/06/2020
Objetivos
- Exemplo Arranjo Multidimensional: Batalha Naval
- Arranjos Multidimensionais
AULA VIRTUAL Síncrona 2/07/2020
Objetivos
- Arranjo Multidimensional: Vetor de Strings
Referência para eta aula
Exercício em sala
Implementar um programa para "abrir uma porta" para um usuário que se encontra em uma tabela de usuários. Faça uma versão com (i) uma função implementada por você para comparar strings (ii) a função strcmp() da biblioteca
AULA VIRTUAL Síncrona 7/07/2020
Objetivos
- Arranjo Multidimensional: Exercício de Vetor de Strings
Exercício (ver Arranjos Multidimensionais)
- Implementar controle de acesso para múltiplos usuários e com senha associada a cada um deles.
- Implementar um contador de acesso para cada usuário.
AULA VIRTUAL Síncrona 9/07/2020
Objetivos
- Arranjo Multidimensional: Exercício de Vetor de Strings - (continuação)
Exercício (ver Arranjos Multidimensionais)
- Implementar controle de acesso para múltiplos usuários e com senha associada a cada um deles.
- Implementar um contador de acesso para cada usuário.
AULA VIRTUAL Síncrona 4/08/2020
Objetivos
- Estruturas: Parte 1
Referências
AULA VIRTUAL Síncrona 6/08/2020
Objetivos
- Estruturas: Parte 1
Referências
AULA VIRTUAL Síncrona 11/08/2020
Objetivos
- Exercícios sobre Estruturas- Questionário A3.1 - SIGA A
AULA VIRTUAL Síncrona 13/08/2020
Objetivos
- Introdução Ponteiros no C
- Exercícios - Questionário A3.1 - SIGA A
Material de Referência
https://wiki.sj.ifsc.edu.br/index.php/AULA_17_-_Programa%C3%A7%C3%A3o_1_-_Engenharia
AULA VIRTUAL Síncrona 18/08/2020
Objetivos
- Avisos:
- Novos exercícios funções e strings (preparação avaliação)
- Avaliação 1 - Recuperação - Semana dia 31/8 - a marcar
- A2 - Dia 27/08
- Ficar atento aos exercícios do SIGAA
- Ponteiros para char e ponteiros para vetores
Material de Referência
https://wiki.sj.ifsc.edu.br/index.php/AULA_17_-_Programa%C3%A7%C3%A3o_1_-_Engenharia
AULA VIRTUAL Síncrona 20/08/2020
Objetivos
- Conceito de Vetor de Ponteiros
- Passagem de parâmetros na linha de comando
- Ponteiro para estruturas
Material de Referência
AULA VIRTUAL Síncrona 25/08/2020
Objetivos
- Exercícios de Preparação para Avaliação 2 (ver TAREFAS SIGAA)
- Distribuição de Projetos e Etapa 1
Material de Referência
AULA VIRTUAL Síncrona 27/08/2020
Objetivos
Avaliação 2
AULA VIRTUAL Síncrona 1/09/2020
Objetivos
- Etapa 1 do Projeto - Encaminhamento
Material de Referência
AULA VIRTUAL Síncrona 3/09/2020
Objetivos
- Construção de Programas C usando Múltiplos Arquivos
Material de Referência
AULA VIRTUAL Síncrona 8/09/2020
Objetivos
- Construção de Programas C usando Múltiplos Arquivos
Material de Referência
Data de Avaliação
- Aval3: 18/09 - na mesma data REC Aval1
- Assunto: Estruturas e Ponteiros
- Rec Aval2 e Aval3: 02/Out
- Assunto Aval2: Funções e Arranjos
AULA VIRTUAL Síncrona 8/09/2020
Objetivos
- Desenvolvimento do Projeto - Etapa 2
Procedimento
- Discutir e e encaminhar a etapa 2 com cada equipe.
AULA VIRTUAL Síncrona 15/09/2020
Objetivos
- AVAL 3 - Semana que vem!!!
- Breve revisão do Conceito de Ponteiros
- Ponteiro Para Estruturas
Lembrando: aulas para a Aval.3
Material de Referência
Exercício sobre Gerenciamento de REGISTRO (structs) COM "LACUNAS LIVRES"
Reimplementar o programa abaixo, modificando as funções adicionar_usuario e remover_usuario() para que usem a função retornar_ptr_item_livre_tab_usuarios() no lugar de retornar_item_livre_tab_usuarios().
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
/* Autores: Professores PRG1 - IFSC -SJ */
/******************************************/
/*
*Para fins didáticos, demonstramos como gerenciar um
vetor de structs marcando registros livres através de um flag
* Note que existem formas mais eficientes de fazer busca em tabelas (ver PRG 2)
*/
/******************************************/
#define LIVRE 0
#define OCUPADO 1
#define TAM_USER 10
#define TAM_NOME 20
/******************************************/
/* Protótipos de funções - colocar em .h */
/******************************************/
void gerenciar_usuarios();
void adicionar_usuario();
void remover_usuario();
void iniciar_tabela();
int retornar_item_livre_tab_usuarios();
/******************************************/
/* Variáveis Globais */
/******************************************/
/* a fazer */
struct tipo_usuario{
char nome[TAM_NOME];
int idade;
char flag; /* se 0 registro livre - se 1 ocupado */
} tab_usuarios[TAM_USER];
/******************************************/
int main()
{
iniciar_tabela(); /* liberar todos os registros */
gerenciar_usuarios();
}
/*
Esta função inicia a tabela com todos registros livres
Aqui seria uma boa oportunidade para ler dados de um arquivo e iniciar a tabela
*/
void iniciar_tabela()
{
int i;
for (i=0;i<TAM_USER;i++){
tab_usuarios[i].flag=LIVRE;
}
}
/*
retorna -1 se não existe item livre na tabela
ou retorna o índice onde existe item livre
*/
int retornar_item_livre_tab_usuarios()
{
int i=0;
while(i<TAM_USER && tab_usuarios[i].flag==OCUPADO) {
i++;
}
if (i==TAM_USER)
i=-1;
return i;
}
/*
retorna -1 se não existe item livre na tabela
ou retorna o índice onde existe item livre
*/
struct tipo_usuario *retornar_ptr_item_livre_tab_usuarios()
{
int i=0;
struct tipo_usuario *p = &tab_usuarios[0];
while(i<TAM_USER && p->flag==OCUPADO) {
i++;
// p = &tab_usuarios[i];
p++;
}
if (i==TAM_USER)
p = NULL;
return p;
}
/*
* Esta função insere usuário na tabela. NOTE que ela não testa se o
* usuário já se encontra na mesma... Poderia ser criada uma função para isto...
*/
void adicionar_usuario()
{
int ret;
ret = retornar_item_livre_tab_usuarios();
if (ret==-1)
printf("Não existe espaço\n");
else {
printf("Entre com usuario\n");
scanf("%s", tab_usuarios[ret].nome);
tab_usuarios[ret].flag = OCUPADO;
}
}
void remover_usuario()
{
char buffer[TAM_NOME];
int i=0;
printf("Qual o nome do usuário a remover?\n");
scanf ("%s", buffer);
for (i=0;i<TAM_USER;i++){
if (tab_usuarios[i].flag == OCUPADO && strcmp(buffer, tab_usuarios[i].nome)==0) {
break;
}
}
if (i<TAM_USER) {/* usuário encontrado */
tab_usuarios[i].flag = LIVRE;
printf("usuario %s removido da posição %d\n", tab_usuarios[i].nome, i);
} else {
printf("Usuário não se encontra na tabela\n");
}
}
/***************************************************/
/* Esta funções deveriam estar em arquivo separado */
/***************************************************/
void gerenciar_usuarios()
{
int opcao;
do {
system("clear");
printf("**********************************\n");
printf("Menu Nível 2 - Gerenciar Usuários\n\n");
printf("1. Adicionar Usuário\n");
printf("2. Remover Usuário\n");
printf("3. Sair do Gerenciar Usuários\n");
printf("**********************************\n");
scanf("%d",&opcao);
switch (opcao) {
case 1: adicionar_usuario();
break;
case 2: remover_usuario();
break;
case 3: printf("Finalizando Gerenciar Usuários...\n");
sleep(1); /* tempo somente para fins de visualização */
break;
default: printf("Opção inexistente. Tente novamente...\n");
sleep(1); /* tempo somente para fins de visualização */
break;
}
} while (opcao != 3);
}
AULA VIRTUAL Síncrona 17/09/2020
Objetivos
- Exercícios de Preparação para Aval.3
- Visão de alocação dinâmica...
Ex1
Implementar a função abaixo.
#include <stdio.h>
typedef struct{
char rua[100];
int numero;
} tipo_endereco;
tipo_endereco ifsc;
/*
* implementar uma função para atualizar o número de uma estrutura
* passada como parametro.
* A função retorna o ponteiro para a estrutura atualizada
*/
tipo_endereco *atualizar_num(tipo_endereco *p, int num)
{
}
int main()
{
tipo_endereco *p;
p = atualizar_num(&ifsc, 100);
printf("Num = %d\n", p->numero);
return 0;
}
Ex2
Usar strcpy() da biblioteca.
include <stdio.h>
typedef struct{
char rua[100];
int numero;
} tipo_endereco;
tipo_endereco ifsc;
/*
* implementar uma função para atualizar a rua e o número de uma estrutura
* passada como parametro.
* A função retorna o ponteiro para a estrutura atualizada
*/
tipo_endereco *atualizar_rua_num(tipo_endereco *p, char *rua, int num)
{
}
int main()
{
tipo_endereco *p;
p = atualizar_rua_num(&ifsc, "Pedro Alvares Cabral", 100);
printf("Rua %s Num = %d\n", p->rua, p->numero);
return 0;
}
Ex3
Corrija o problema do exercício abaixo.
#include <stdio.h>
typedef struct{
char rua[100];
int numero;
} tipo_endereco;
/*
* implementar uma função para atualizar a rua e o número de uma estrutura
* passada como parametro.
* A função retorna o ponteiro para a estrutura atualizada
*/
tipo_endereco *atualizar_rua_num(char *rua, int num)
{
tipo_endereco ifsc;
}
int main()
{
tipo_endereco *p;
p = atualizar_rua_num("Pedro Alvares Cabral", 100);
printf("Rua %s Num = %d\n", p->rua, p->numero);
return 0;
}
AULA VIRTUAL Síncrona 22/09/2020
Objetivos
- Avaliação 3
AULA VIRTUAL Síncrona 24/09/2020
Objetivos
- Introdução ao Sistema de Arquivos
Material de Referência
AULA VIRTUAL Síncrona 29/09/2020
Objetivos
- Orientação do Projeto
AULA VIRTUAL Síncrona 1/10/2020
Objetivos
- Orientação do Projeto
- Agendamento de Avaliações
Agendamento Defesa do Projeto
- Defesa do Trabalho dia: 08/10/2020
- Começa 10h00 - Vou sugerir escala
- Mais uma tarefa será aberta para versão final até o dia 8
- REC da Aval.1 dia 9/10 às 8H
- REC da Aval.2 dia 13/10 às 8H
- REC da Aval.3. dia 16/10/2010 às 8h
- ATENÇÂO: FICAR ATENTO AS ANPS DE RECUPERAÇÃO
AULA VIRTUAL Síncrona 6/10/2020
Objetivos
- Aula revisão rec A1 e A2
Exercício solução TAREFA A1.2
IMPLEMENTAR um programa C para ler uma sequência de números inteiros positivos e calcular:
1)média destes números
2)O maior valor entre eles
NÂO usar vetor. Quando for fornecido um número ZERO ou NEGATIVO o programa deve mostrar o resultados e se encerrar.
ATENÇÂO: POSTADA TAREFA DE RECUPERAÇÂO DE A1.2 e A1.3
Exercício solução TAREFA A2.1
Implementar um programa C para ler 10 números inteiros para um vetor e imprimir o número de números abaixo da média e que seja positivos. OBS: Definir um contador, iniciado em zero. Ler os 10 números para um vetor e calcular a media. Fazer um segundo loop sobre o vetor testando cada item para verificar se é maior que a média. Incrementar o vetor a cada item acima da média.
Exercício solução TAREFA A2.2
TAREFA T2.2 - Básico de Vetor de char (ver https://www.geeksforgeeks.org/c-program-to-count-number-of-vowels-and-consonants-in-a-string/)
1) Implementar um programa C para criar um array de char iniciado com um nome do time de futebol de sua preferência. O programa deve "printar" o nome do time, o número de caracteres do nome e o número de ocorrência de vogais.
2) Implementar uma função para para capitalizar uma string inserida pelo teclado. A função deve retornar o número de caracteres que foram capitalizados. Testar no programa principal (main). Obs; se um caractere já estiver maiúsculo não conta....
SUPORTE DURANTE A SITUAÇÃO DE CRISE
Instalando o Linux na VirtualBox
Conforme comentando em aula, o Linux pode ser instalado sobre uma máquina VIRTUAL em um sistema (hospedeiro) Windows ou Linux. Pode-se selecionar (ver condições de uso) uma distribuição gratuita do Linux e de uma Máquina Virtual. Ver abaixo procedimento para instalação. SEMPRE salve seus dados antes de qualquer operação sobre o sistema Windows ou Linux ou MacOS. NÃO recomendo DUAL BOOT pois pode (ainda que com baixa probabilidade) danificar o sistema hospedeiro.
- Fazer Download do arquivo ISO em [2] versão Ubuntu 18.04.3 LTS. Escolher a opção Desktop. Confira se o seu PC é 64 bits (os mais novos são).
- Instalar a VirtualBox (já está instalada no nosso Lab). Baixar de [3] e selecionar para a máquina hospedeira alvo. Selecione o sistema hospedeiro (o seu sistema) correto.
- O procedimento abaixo é para instalação de uma máquina virtual sobre o hospedeiro Linux Ubuntu mas para o Windows é bastante similar. Se tiver dúvidas pesquise no google como fazer a instalação sobre o Windows. Note que o VirtualBox é instalado como aplicativo tanto no Windows como Ubuntu.
Caso a distribuição que tenha instalado não possua o GCC, pode instalá-lo usando na linha de comando (para a familília Debian/Ubuntu):
$ sudo apt install g++
Note que $ é o prompt (não faz parte do comando).
Compilador C no Android
Eu instalei e testei sem problemas (mas não posso garantir nada)) no meu Android, o compilador C "Coding C" (a partir do Play Store). Para testar pequenos programas pode ser uma solução interessante. Ele permite compilar offline, ou seja, não precisa usar a rede.
DevC++ no Windows
Como comentei em aula, em situação normal não recomendo usar um compilador C sobre o Windows diretamente. Como estamos em situação emergencial, uma opção seria instalar o DevC++diretamente no Ubuntu.
Vi um tutorial em : http://linguagemc.com.br/tutorial-de-instalacao-do-dev-c/ Não testei...