Mudanças entre as edições de "PRG29002-2020-1-Tarde"
(88 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 162: | Linha 162: | ||
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_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== | ||
+ | |||
+ | #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: | ||
+ | <syntaxhighlight lang=c> | ||
+ | |||
+ | 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 | ||
+ | } | ||
+ | |||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | ==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== | ||
+ | |||
+ | *[https://wiki.sj.ifsc.edu.br/index.php/Fun%C3%A7%C3%B5es_-_Programa%C3%A7%C3%A3o_1_-_Engenharia Funções] | ||
+ | |||
+ | =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== | ||
+ | |||
+ | *[https://drive.google.com/open?id=1aM1YHlJB_jGabym1Dh9odvrzDma_Shwd Explicação do Exercício 1 da Tarefa 4] | ||
+ | *[https://drive.google.com/open?id=1YceW6eIXSRiKLQbDe3zI705eUgwMVnE7 Explicação do Exercício 2 da Tarefa 4] | ||
+ | *[https://drive.google.com/open?id=12yDkqK3_iRMxWr7TFfXMJ1GLKFzJkWzC Vídeo da Aula da Manhã - O que é função no C] | ||
+ | *[https://wiki.sj.ifsc.edu.br/index.php/Fun%C3%A7%C3%B5es_-_Programa%C3%A7%C3%A3o_1_-_Engenharia Funções] | ||
+ | |||
+ | |||
+ | =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 | ||
+ | |||
+ | *[https://drive.google.com/file/d/1K_47tgAVwHrevh72oWNUAC73WalfzIwI/view?usp=sharing Exercício 1 - Funções] | ||
+ | *[https://drive.google.com/file/d/1bqYgDcdhYqGWAWRPStte1JrANY22l0ma/view?usp=sharing Exercício 2 - Funções] | ||
+ | *[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 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== | ||
+ | |||
+ | *[https://wiki.sj.ifsc.edu.br/index.php/AULA_5_-_Programa%C3%A7%C3%A3o_1_-_Engenharia#Comandos_de_decis.C3.A3o_if.28.29_e_if.28.29_else Wiki - if-else] | ||
+ | |||
+ | ==Vídeos Explicativos== | ||
+ | |||
+ | *[https://drive.google.com/file/d/1YUfCNZlA_bD0QDIZJk3fHlU_Db-K13Hc/view?usp=sharing Média de 3 números] | ||
+ | *[https://drive.google.com/file/d/1M-6QteMGgQDhAvK3uHM663NlOOhFaLBb/view?usp=sharing Comando IF-ELSE: Maior de dois números] | ||
+ | *[https://drive.google.com/file/d/1WP2hRn89GnJQ6ef53ToD6NE129JTIEfq/view?usp=sharing Análise Problema 1 Tarefa 1] | ||
+ | |||
+ | =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== | ||
+ | |||
+ | * 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== | ||
+ | |||
+ | 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 [http://mirror.pop-sc.rnp.br/mirror/ubuntu-releases/18.04/] 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 [https://www.virtualbox.org/wiki/Downloads] 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. | ||
+ | |||
+ | *[https://www.dropbox.com/s/4xfdhqq8lruvq8m/LinuxSobreVM.odp?dl=0 Slides de Instalação] | ||
+ | |||
+ | 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... |
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
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
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
- 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=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
- 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 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
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
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
- 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
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
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
- 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
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)
- 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 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
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
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
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
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"
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...