PRG29002-2020-1-Manha: mudanças entre as edições

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Eraldo (discussão | contribs)
Eraldo (discussão | contribs)
 
(34 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  09/03/2020=
=AULA 8  10/03/2020=


==Objetivos==
==Objetivos==
Linha 611: Linha 611:
#Implementar um contador de acesso para cada usuário.
#Implementar um contador de acesso para cada usuário.


=SUPORTE DURANTE A SITUAÇÂO DE CRISE=
=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

1 PROFESSOR

  • Eraldo Silveira e Silva

2 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

3 MONITORIA

  • Aluna:
  • Horários:

4 Links Interessantes

5 AULA 1 - Dia 11/02/2020

5.1 Objetivos

  • Apresentar o plano de ensino
  • Discutir a forma de avaliação
  • Introdução a Lógica de Programação

5.2 Material de Referência

Aula Introdutória sobre Lógica de Programação


6 AULA 2 - 13/02/2012

6.1 Objetivos

  • Introdução a Fluxograma e pseudocódigo.
  • Estruturas de Decisão

6.2 Material de Referência

Lógica de Programação: Estruturas de Decisão

7 AULA 3 - 18/02/2020

7.1 Objetivos

  • Floxograma: Estruturas de Repetição

7.2 Material de Referência

Estruturas de Repetição


8 AULA 4 - 20/02/2020

8.1 Objetivos

  • Exercícios de Lógica de Porogramação.

8.2 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.

8.3 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.

8.4 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.

8.5 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.

8.6 Material de Referência

Estruturas de Repetição


9 AULA 5 27/02/2020

9.1 Objetivos

  • Exercícios de Lógica de Programação.

9.2 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.


9.3 Exercício Proposto 2

Modifique a solução para o exercício anterior de forma que o sistema ignore entradas que estejam na faixa [10,50] OU [100,130]. (recordar notação de intervalos aqui: https://www.infoescola.com/matematica/intervalo/)

9.4 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.

9.5 Exercício Proposto 4

A fórmula de um termo de uma PG (progressão Geométrica) é dado por:

a1=s
an=q×an1 ou
an=a1.qn1

Sem usar fórmulas de SOMA de termos faça um fluxograma para calcular a média dos 10 primeiros termos, dado s e q. Supor que não são fornecidos "ZEROS" para estes valores.


9.6 Exercício Proposto 5

Flexibilize a solução do problema anterior para computar a média dos N primeiros termos, onde N é inicialmente fornecido.

9.7 Exercício Proposto 6

Elabore um fluxograma para receber como entrada dois números (suponha inteiro positivos). Computar o fatorial do maior número.

10 AULA 6 03/03/2020

10.1 Objetivos

  • Introdução a Programação C

10.2 Material de Referência

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

11 AULA 7 05/03/2020

11.1 Objetivos

  • Introdução a Programação C
  • Declaração de Variáveis
  • Comandos de Decisão

11.2 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

12 AULA 8 10/03/2020

12.1 Objetivos

  • Introdução a Programação C
  • Declaração de Variáveis
  • Comandos de Decisão (continuação)

12.2 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

13 AULA 9 12/03/2020

13.1 Objetivos

  • Comandos de Decisão (continuação)
  • variável tipo char e discussão sobre a sujeira do teclado

13.2 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

14 AULA 11 26/03/2020

14.1 Objetivos

  • Comandos de repetição while e do while

14.2 Material de Referência

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


15 AULA 12 31/03/2020

15.1 Objetivos

  • Comandos de repetição while e do while
  • Comando for

15.2 Material de Referência

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

16 AULA 13 2/04/2020

16.1 Objetivos

  • Comando for

16.2 Material de Referência

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


17 AULA VIRTUAL 14 7/04/2020

17.1 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

17.2 Material de Referência

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

18 AULA VIRTUAL 14 7/04/2020

18.1 Objetivos

  • Exercícios

18.2 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=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
     }

  }
}

19 AULA VIRTUAL 15 14/04/2020

19.1 Objetivos

  • Funções

19.2 Material de Referência

20 AULA VIRTUAL 16 23/04/2020

20.1 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

20.2 Material de Referência

21 AULA VIRTUAL (Esta aula não terá encontro síncrono) 28/04/2020

21.1 Objetivos

  • Funções (continuação) - Ver os vídeos dos exercícios abaixo.
    • Conceito de Função
    • Como definir e declarar função;


22 AULA VIRTUAL 30/04/2020

22.1 Objetivos

  • Continuação Funções
    • Conceito de Variáveis Globais e Locais;
    • Inicialização de Variáveis
  • Exercícios

22.2 Material de Referência


23 AULA/reunião VIRTUAL 19/05/2020

23.1 Objetivos

  • Discutir como encaminhar a matéria

23.2 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

23.3 Instalação do CLion

semana que vem...

23.4 Revisão de Funções

semana que vem

24 AULA/reunião VIRTUAL 21/05/2020

24.1 Objetivos

  • Revisão Comando if else: exercício Maior entre 3 números
  • Resolução Exercício 1 da Tarefa A1.1

24.2 Comando if-else - Problema Maior


25 AULA VIRTUAL Síncrona 26/05/2020

25.1 Objetivos

  • Revisão Comandos de Repetição
  • Resolução Exercício 1 da Tarefa A1.2

25.2 Material de Referência

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

26 AULA VIRTUAL Síncrona 2/06/2020

26.1 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.

26.2 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

27 AULA VIRTUAL Síncrona 4/06/2020

27.1 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.

27.2 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.

27.3 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


/*
 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);
}

28 AULA VIRTUAL Síncrona 9/06/2020

28.1 Objetivos

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

28.2 Material de Referência

28.3 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.

29 AULA VIRTUAL Síncrona 16/06/2020

29.1 Objetivos

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

29.2 Material de Referência

29.3 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 caracteres 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.

30 AULA VIRTUAL Síncrona 18/06/2020

30.1 Objetivos

  • Funções da Biblioteca para Operação com Strings
  • Exercícios de Operação sobre strings

30.2 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;
}

30.3 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;
}

30.4 Material de Referência

31 AULA VIRTUAL Síncrona 23/06/2020

31.1 Objetivos

  • Exercício de Comparação de Strings
  • Introdução a arranjos multidimensionais no C

31.2 EXERCÍCIO DE COMPARAÇÃO ENTRE DUAS STRINGS

31.3 Introdução a Arranjos Multidimensionais - Wiki desta aula

31.4 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.

32 AULA VIRTUAL Síncrona 25/06/2020

32.1 Objetivos

33 AULA VIRTUAL Síncrona 2/07/2020

33.1 Objetivos

  • Arranjo Multidimensional: Vetor de Strings

33.2 Referência para eta aula

33.3 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


34 AULA VIRTUAL Síncrona 7/07/2020

34.1 Objetivos

  • Arranjo Multidimensional: Exercício de Vetor de Strings

34.2 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.


35 AULA VIRTUAL Síncrona 9/07/2020

35.1 Objetivos

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


35.2 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.

36 AULA VIRTUAL Síncrona 4/08/2020

36.1 Objetivos

  • Estruturas: Parte 1

36.2 Referências

37 AULA VIRTUAL Síncrona 6/08/2020

37.1 Objetivos

  • Estruturas: Parte 1

37.2 Referências

38 AULA VIRTUAL Síncrona 11/08/2020

38.1 Objetivos

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

39 AULA VIRTUAL Síncrona 13/08/2020

39.1 Objetivos

  • Introdução Ponteiros no C
  • Exercícios - Questionário A3.1 - SIGA A

39.2 Material de Referência

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

40 AULA VIRTUAL Síncrona 18/08/2020

40.1 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

40.2 Material de Referência

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


41 AULA VIRTUAL Síncrona 20/08/2020

41.1 Objetivos

  • Conceito de Vetor de Ponteiros
  • Passagem de parâmetros na linha de comando
  • Ponteiro para estruturas

41.2 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...

42 AULA VIRTUAL Síncrona 25/08/2020

42.1 Objetivos

  • Exercícios de Preparação para Avaliação 2 (ver TAREFAS SIGAA)
  • Distribuição de Projetos e Etapa 1

42.2 Material de Referência


43 AULA VIRTUAL Síncrona 27/08/2020

43.1 Objetivos

Avaliação 2


44 AULA VIRTUAL Síncrona 1/09/2020

44.1 Objetivos

  • Etapa 1 do Projeto - Encaminhamento

44.2 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


45 AULA VIRTUAL Síncrona 3/09/2020

45.1 Objetivos

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

45.2 Material de Referência

46 AULA VIRTUAL Síncrona 8/09/2020

46.1 Objetivos

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

46.2 Material de Referência

46.3 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

47 AULA VIRTUAL Síncrona 8/09/2020

47.1 Objetivos

  • Desenvolvimento do Projeto - Etapa 2

47.2 Procedimento

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

48 AULA VIRTUAL Síncrona 15/09/2020

48.1 Objetivos

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

48.2 Lembrando: aulas para a Aval.3

Estruturas
Ponteiros
Vetor de Ponteiros e Ponteiro Para Estruturas


48.3 Material de Referência

48.3.1 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);
}

49 AULA VIRTUAL Síncrona 17/09/2020

49.1 Objetivos

  • Exercícios de Preparação para Aval.3
  • Visão de alocação dinâmica...

49.2 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;
}

49.3 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;
}

49.4 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;
}

50 AULA VIRTUAL Síncrona 22/09/2020

50.1 Objetivos

  • Avaliação 3

51 AULA VIRTUAL Síncrona 24/09/2020

51.1 Objetivos

  • Introdução ao Sistema de Arquivos

51.2 Material de Referência

52 AULA VIRTUAL Síncrona 29/09/2020

52.1 Objetivos

  • Orientação do Projeto

53 AULA VIRTUAL Síncrona 1/10/2020

53.1 Objetivos

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

53.2 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

54 AULA VIRTUAL Síncrona 6/10/2020

54.1 Objetivos

  • Aula revisão rec A1 e A2

54.2 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

54.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.

54.4 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....

55 SUPORTE DURANTE A SITUAÇÃO DE CRISE

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

55.2 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.

55.3 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...