Mudanças entre as edições de "PRG29002-2020-1-Tarde"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
 
(59 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 202: Linha 202:
 
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
  
=AULA XX 4/03/2020=
+
=AULA XX 3/04/2020=
 
 
 
==Objetivos==
 
==Objetivos==
  
*comando while, do while e comando for
+
* comando while, do while e comando for
  
 
==Material de Referência==
 
==Material de Referência==
 
 
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
 
  
 
=AULA XX  6/04/2020=
 
=AULA XX  6/04/2020=
Linha 264: Linha 261:
 
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
  
=AULA VIRTUAL    15/04/2020=
+
=AULA VIRTUAL    17/04/2020=
  
 
==Objetivos==
 
==Objetivos==
Linha 305: Linha 302:
 
*[https://drive.google.com/file/d/1bD2w_yCe_R7yDmglkdwI4-KLyojWAc07/view?usp=sharing Exercício 3 - Média entre 3 números]
 
*[https://drive.google.com/file/d/1bD2w_yCe_R7yDmglkdwI4-KLyojWAc07/view?usp=sharing Exercício 3 - Média entre 3 números]
  
=AULA/reunião VIRTUAL  19/05/2020=
+
=AULA/reunião VIRTUAL  18/05/2020=
 
==Objetivos==
 
==Objetivos==
  
Linha 320: Linha 317:
  
 
==Revisão de Funções==
 
==Revisão de Funções==
 
 
semana que vem
 
semana que vem
  
Linha 379: Linha 375:
 
https://wiki.sj.ifsc.edu.br/index.php/AULA_9_-_Programa%C3%A7%C3%A3o_1_-_Engenharia#ARRAYS_unidimensionais_.28vetores.29
 
https://wiki.sj.ifsc.edu.br/index.php/AULA_9_-_Programa%C3%A7%C3%A3o_1_-_Engenharia#ARRAYS_unidimensionais_.28vetores.29
  
=SUPORTE DURANTE A SITUAÇÂO DE CRISE=
+
=AULA VIRTUAL Síncrona 8/06/2020=
 +
==Objetivos==
 +
 
 +
* Arrays unidimensionais no C (Continuação)
 +
* Arrays de char e Strings NULL terminadas
 +
 
 +
==Material de Referência==
 +
 
 +
* https://wiki.sj.ifsc.edu.br/index.php/AULA_10_-_Programa%C3%A7%C3%A3o_1_-_Engenharia
 +
 +
 
 +
==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  15/06/2020 =
 +
 
 +
==Objetivos==
 +
 
 +
*Arrays de char e Strings NULL terminadas (Continuação)
 +
 
 +
==Material de Referência==
 +
 
 +
*https://wiki.sj.ifsc.edu.br/index.php/AULA_10_-_Programa%C3%A7%C3%A3o_1_-_Engenharia
 +
 
 +
==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 carcteres 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.
 +
 
 +
==Vídeos Explicativos dos Exercícios==
 +
 
 +
*[https://drive.google.com/file/d/1EYMT5ecQd2UHKZjImjg_zV6b9oOH0gxO/view?usp=sharing Explicação do exercício 1]
 +
*[https://drive.google.com/file/d/1HEWkYP2DLPJafTNpUMWITX3CxCZRqpZg/view?usp=sharing Explicação do exercício 2]
 +
 
 +
=AULA VIRTUAL Síncrona  19/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.
 +
 
 +
<syntaxhighlight lang=c>
 +
#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;
 +
}
 +
</syntaxhighlight>
 +
 
 +
==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.
 +
 
 +
<syntaxhighlight lang=c>
 +
#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;
 +
}
 +
</syntaxhighlight>
 +
 
 +
==Exercícios 3 em Sala Virtual==
 +
 
 +
Elaborar uma função C para computar o  número de caracteres 'i' de uma string armazenada em um vetor de char.
 +
Ver esqueleto abaixo.
 +
 
 +
<syntaxhighlight lang=c>
 +
#include <stdio.h>
 +
 
 +
int count_i(char str [])
 +
{
 +
 
 +
  //retorna o número de 'is' armazenados na string em str[]
 +
}
 +
 
 +
int main()
 +
{
 +
    char x[100] = "IFSC-";
 +
    int tam;
 +
 
 +
    tam = count_i(x);
 +
    printf("número de is na string x - > %s é %d\n", x, tam);
 +
}
 +
</syntaxhighlight>
 +
 
 +
==Material de Referência==
 +
 
 +
*[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]
 +
 
 +
=AULA VIRTUAL Síncrona  22/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 Análise do Problema de Comparação de Strings]
 +
*[https://drive.google.com/file/d/1Bvi1LyENWlaLLuQps6tY5lFpkATgMeL9/view?usp=sharing 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  26/06/2020 =
 +
 
 +
==Objetivos==
 +
 
 +
*Exemplo Arranjo Multidimensional: Batalha Naval
 +
 
 +
==ReferÊncia para esta 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/1AF-9TPBJyfoPP-vE0UURN4-qtXQXMZQD/view?usp=sharing Vídeo Explicativo do Jogo Batalha Naval]
 +
*[https://drive.google.com/file/d/1n2jbaUk2fhEt1zyKOJsPXy73HQT95WH_/view?usp=sharing Vídeo Explicando uma estrutura de solução da Batalha Naval]
 +
 
 +
=AULA VIRTUAL Síncrona  3/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]
 +
 
 +
*[https://drive.google.com/file/d/195TNb-xICTV5ffwjCT8eItXXRcaieBxr/view?usp=sharing Vídeo Explicativo do Vetor de Strings]
 +
 
 +
*[https://drive.google.com/file/d/14bPt0CeShQoNjur3JS_w1EwomKRuYh4n/view?usp=sharing Vídeo Explicando o Exercício de Controle de Acesso]
 +
 
 +
=AULA VIRTUAL Síncrona  6/07/2020 =
 +
 
 +
==Objetivos==
 +
 
 +
*Arranjo Multidimensional: Exercício de 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==
 +
 
 +
Exercício 3 da wiki. Controle de acesso com senha.
 +
 
 +
=AULA VIRTUAL Síncrona  6/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  10/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  3/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  7/08/2020 =
 +
 
 +
==Objetivos==
 +
 
 +
*Estruturas: Parte 2
 +
 
 +
==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  10/08/2020 =
 +
 
 +
==Objetivos==
 +
 
 +
*Exercícios - Questionário A3.1 - SIGA A
 +
 
 +
=AULA VIRTUAL Síncrona  14/08/2020 =
 +
 
 +
==Objetivos==
 +
 
 +
*Introdução Ponteiros no C
 +
*Exercícios - Questionário A3.2 - 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  17/08/2020 =
 +
 
 +
==Objetivos==
 +
 
 +
*Avisos:
 +
**Novos exercícios funções e strings (preparação avaliação)
 +
**Avaliação 1 - Recuperação - Semana dia 31/8
 +
**A2 - Dia 28/08
 +
*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  21/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  24/08/2020 =
 +
 
 +
==Objetivos==
 +
 
 +
*Exercícios de Preparação para Avaliação 2
 +
*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
 +
 
 +
=AULA VIRTUAL NÃO Síncrona  28/08/2020 =
 +
 
 +
==Objetivos==
 +
 
 +
*Avaliação II
 +
 
 +
=AULA VIRTUAL Síncrona  31/08/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  4/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  11/09/2020 =
 +
 
 +
==Objetivos==
 +
 
 +
*Desenvolvimento do Projeto - Etapa 2
 +
 
 +
==Procedimento==
 +
 
 +
*Discutir e e encaminhar a etapa 2 com cada equipe.
 +
 
 +
==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  14/09/2020 =
 +
 
 +
==Objetivos==
 +
 
 +
*AVAL 3 - Semana que vem!!!
 +
*Breve revisão do Conceito de Ponteiros
 +
*Ponteiro Para Estruturas
 +
 
 +
==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  18/09/2020 =
 +
 
 +
==Objetivos==
 +
 
 +
*Exercícios de Preparação para  Aval.3 (DIA 21/09/2020)
 +
*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  21/09/2020 =
 +
 
 +
==Objetivos==
 +
 
 +
*Avaliação 3
 +
 
 +
=AULA VIRTUAL Síncrona 2/10/2020=
 +
==Objetivos==
 +
 
 +
* Agendamento de Avaliações
 +
* Orientação do Projeto
 +
 
 +
==Agendamento Defesa do Projeto==
 +
 
 +
* Defesa do Trabalho dia: 09/10/2020
 +
** Começa 14h30 - 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  5/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 15h38min 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 10/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 - 14/02/2020

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 - 17/02/2020

Objetivos

  • Floxograma: Estruturas de Repetição

Material de Referência

Estruturas de Repetição

AULA 4 - 21/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

Estruturas de Repetição

AULA 5 28/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

Exercício Proposto 5

Exercício Proposto 6

AULA 6 02/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 06/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 9 13/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 XX 27/03/2020

NÃO HOUVE AULA...

Objetivos

  • comando while

Material de Referência

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

AULA XX 3/04/2020

Objetivos

  • comando while, do while e comando for

Material de Referência

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

AULA XX 6/04/2020

Objetivos

  • Revisão comandos while e do while;
  • Comando for, break e continue.

Material de Referência

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

AULA XX 13/04/2020

Objetivos

  • Variações do exercício de sorteio do while()
  • Exercícios 5 6 da wiki nível inicial
  • Exercícios adicionais (ver abaixo)

Exercício para resolução em sala - Extra Wiki

  1. Exercícios 1 e 2 de nível médio da wiki: aula de comandos de repetição.
  2. 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=0;i<5;i++) { /* gerar próximos 5 números */
     switch (i) {
        1: /*fazer um loop com do while ou while para gerar num2 confrontando com num1 */
           break;
        2: /*fazer um loop com do while ou while para gerar num3 confrontando com num1 e num2 */
          
         : etc
     }

  }
}


Material de Referência

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

AULA VIRTUAL 17/04/2020

Objetivos

  • Funções

Material de Referência

AULA VIRTUAL 24/04/2020

Objetivos

  • 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


AULA VIRTUAL 27/04/2020

Objetivos

  • Funções (continuação)
    • Conceito de Função
    • Como definir e declarar função;
  • Discussão Exercícios da Tarefa

AULA/reunião VIRTUAL 18/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 VIRTUAL Sĩncrona 22/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

Vídeos Explicativos

AULA VIRTUAL Síncrona 25/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 1/06/2020

Objetivos

  • Introdução a arrays unidimensionais no C
  • Arrays de inteiros e de floats

Material de Referência

https://wiki.sj.ifsc.edu.br/index.php/AULA_9_-_Programa%C3%A7%C3%A3o_1_-_Engenharia#ARRAYS_unidimensionais_.28vetores.29

AULA VIRTUAL Síncrona 5/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

https://wiki.sj.ifsc.edu.br/index.php/AULA_9_-_Programa%C3%A7%C3%A3o_1_-_Engenharia#ARRAYS_unidimensionais_.28vetores.29

AULA VIRTUAL Síncrona 8/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

  1. Fazer um programa para computar o número de caracteres de uma cadeia (string) lida pelo teclado.Use o comando while;
  2. Fazer uma variação para um array iniciado;
  3. Fazer uma variação implementando uma função que retorna o número de caracteres.

AULA VIRTUAL Síncrona 15/06/2020

Objetivos

  • Arrays de char e Strings NULL terminadas (Continuação)

Material de Referência

Exercício de Base da Aula

  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 carcteres que foram capitalizados.
  3. 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.

Vídeos Explicativos dos Exercícios

AULA VIRTUAL Síncrona 19/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;
}

Exercícios 3 em Sala Virtual

Elaborar uma função C para computar o número de caracteres 'i' de uma string armazenada em um vetor de char. Ver esqueleto abaixo.

#include <stdio.h>

int count_i(char str [])
{

  //retorna o número de 'is' armazenados na string em str[]
}

int main()
{
    char x[100] = "IFSC-";
    int tam;

    tam = count_i(x);
    printf("número de is na string x - > %s é %d\n", x, tam);
}

Material de Referência

AULA VIRTUAL Síncrona 22/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

Introdução a Arranjos Multidimensionais - Wiki desta aula

Exercício em Sala

  1. Implementar um programa para calcular a média de todos elementos da matriz C (exemplo inicial da wiki).
  2. 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 26/06/2020

Objetivos

  • Exemplo Arranjo Multidimensional: Batalha Naval

ReferÊncia para esta aula

AULA VIRTUAL Síncrona 3/07/2020

Objetivos

  • Arranjo Multidimensional: Vetor de Strings

Referência para eta aula

AULA VIRTUAL Síncrona 6/07/2020

Objetivos

  • Arranjo Multidimensional: Exercício de Vetor de Strings

Referência para eta aula

Exercício

Exercício 3 da wiki. Controle de acesso com senha.

AULA VIRTUAL Síncrona 6/07/2020

Objetivos

  • Arranjo Multidimensional: Exercício de Vetor de Strings

Exercício (ver Arranjos Multidimensionais)

  1. Implementar controle de acesso para múltiplos usuários e com senha associada a cada um deles.
  2. Implementar um contador de acesso para cada usuário.

AULA VIRTUAL Síncrona 10/07/2020

Objetivos

  • Arranjo Multidimensional: Exercício de Vetor de Strings - (continuação)


Exercício (ver Arranjos Multidimensionais)

  1. Implementar controle de acesso para múltiplos usuários e com senha associada a cada um deles.
  2. Implementar um contador de acesso para cada usuário.


AULA VIRTUAL Síncrona 3/08/2020

Objetivos

  • Estruturas: Parte 1

Referências

AULA VIRTUAL Síncrona 7/08/2020

Objetivos

  • Estruturas: Parte 2

Referências

AULA VIRTUAL Síncrona 10/08/2020

Objetivos

  • Exercícios - Questionário A3.1 - SIGA A

AULA VIRTUAL Síncrona 14/08/2020

Objetivos

  • Introdução Ponteiros no C
  • Exercícios - Questionário A3.2 - 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 17/08/2020

Objetivos

  • Avisos:
    • Novos exercícios funções e strings (preparação avaliação)
    • Avaliação 1 - Recuperação - Semana dia 31/8
    • A2 - Dia 28/08
  • 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 21/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 24/08/2020

Objetivos

  • Exercícios de Preparação para Avaliação 2
  • 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

AULA VIRTUAL NÃO Síncrona 28/08/2020

Objetivos

  • Avaliação II

AULA VIRTUAL Síncrona 31/08/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 4/09/2020

Objetivos

  • Construção de Programas C usando Múltiplos Arquivos

Material de Referência


AULA VIRTUAL Síncrona 11/09/2020

Objetivos

  • Desenvolvimento do Projeto - Etapa 2

Procedimento

  • Discutir e e encaminhar a etapa 2 com cada equipe.

Material de Referência

AULA VIRTUAL Síncrona 14/09/2020

Objetivos

  • AVAL 3 - Semana que vem!!!
  • Breve revisão do Conceito de Ponteiros
  • Ponteiro Para Estruturas

Material de Referência

Exercício sobre Gerenciamento de REGISTRO (structs) COM "LACUNAS LIVRES"

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().

#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 18/09/2020

Objetivos

  • Exercícios de Preparação para Aval.3 (DIA 21/09/2020)
  • 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 21/09/2020

Objetivos

  • Avaliação 3

AULA VIRTUAL Síncrona 2/10/2020

Objetivos

  • Agendamento de Avaliações
  • Orientação do Projeto

Agendamento Defesa do Projeto

  • Defesa do Trabalho dia: 09/10/2020
    • Começa 14h30 - 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 5/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...