Mudanças entre as edições de "PRG29002 - Programação I - Eng.Telecom 2017-2"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 566: Linha 566:
  
 
== Funções ==
 
== Funções ==
<!--{{collapse top | Funções}}-->
+
{{collapse top | Funções}}
 
*O que é uma função? Khan Academy {{#ev:youtube|k2-wVKJvsqs}}
 
*O que é uma função? Khan Academy {{#ev:youtube|k2-wVKJvsqs}}
 
*O que é uma função - noção intuitiva - MeSalva! {{#ev:youtube|oHupEt5YPqw}}
 
*O que é uma função - noção intuitiva - MeSalva! {{#ev:youtube|oHupEt5YPqw}}
Linha 576: Linha 576:
 
*#Faça um programa que calcula a média de 2 números float utilizando uma função “calculaMedia” que recebe estes parâmetros e retorna a resposta. Na função main deve ser declarado o comando de printf da resposta.
 
*#Faça um programa que calcula a média de 2 números float utilizando uma função “calculaMedia” que recebe estes parâmetros e retorna a resposta. Na função main deve ser declarado o comando de printf da resposta.
  
<!--{{collapse bottom}}-->
+
{{collapse bottom}}
  
 
{{collapse top | A função main}}
 
{{collapse top | A função main}}

Edição das 08h34min de 20 de outubro de 2017

Dados importantes

Dados da Disciplina

Algoritmos utilizando fluxograma

Introdução aos algoritmos utilizando fluxograma

Introdução aos algoritmos utilizando fluxograma
  • Ementa disponível nos slides disponibilizados no moodle.
  • Conceito de Algoritmo: Sequência ordenada de passos para resolução de um dado problema.
  • Para que serve e como abordaremos?
    • Algoritmos estão associados a automação de processos, permitem descrever os passos que uma máquina (mecânica ou eletrônica) irá realizar geralmente de maneira repetitiva (garantindo repetibilidade). Vídeo What is an Algorithm
    • Trabalharemos neste curso com problemas bem definidos que possuem objetivos, caminhos de solução e expectativa de solução claros.
  • Formas de representação
    • Descrição narrativa: Descrição informal de uma situação e passos para solução de um problema
    • Fluxograma: Operações são representadas por formas geométricas
    • Pseudo-código: Representação de comportamento e ações por meio de regra predefinida
    • Códigos de programação: Um PROGRAMA implementa um algoritmo. É o algoritmo materializado na forma de uma sequência de instruções.
  • Descrição narrativa
    • Trata-se de um texto livre mas é sugerido organizar em tópicos como os seguintes:
      • Cenário;
      • Problema;
      • Dados de entrada e saída;
      • Solução esperada;
      • Etapas;
      • Solução proposta.
    • Exemplos comuns são receitas de culinária, mas pode-se descrever de forma narrativa qualquer tipo de algoritmo.
      • Descreva o algoritmo para fazer um ovo frito
      • Descreva o algoritmo para cozinhar macarrão instantâneo
  • Fluxogramas
    • Um fluxograma é uma linguagem semi-gráfica que pode ser utilizada para descrição de algoritmos.
    • Existem diferentes padrões, aqui utilizaremos o ANSI.
    • Para desenvolver um algoritmo utilizaremos operações basicamente as seguintes operações:
      • Sinalização de início e fim do algoritmo (ovalado): representam quando o programa é instanciado e quando é destruído
      • Processamento (Instrução): são ações gerais, podem ser processamentos matemáticos, ações físicas de movimentação e muitas outras. Há outros símbolos de fluxograma que especificam mais ações como gravar em banco de dados, gerar relatório, neste caso aqui podemos usar o símbolo de processamento para representar estas ações bastando especificá-las.
      • Entrada de dados: representa algo que o programa lê, alguma informação vinda, normalmente do usuário, que está sendo inserida no programa.
      • Saída de dados: representa alguma informação que o programa gerou ao usuário, pode ser uma mensagem na tela, uma luz piscando, etc.
      • Decisão: Este bloco representa a tomada de decisão, a resposta a uma pergunta que normalmente pode ser SIM ou NÃO. Terá portanto duas flexas de saída. Observe que o programa poderá tomar cursos diferentes a partir deste bloco.
      • Processo pré-definido (subrotina): Usado na abstração de alguns processos que seriam melhor descritos isoladamente. O início e fim de uma subrotina utiliza os mesmos blocos início e fim descritos acima (utilizando o nome da subrotina para especificar).
      • Terminador (início/fim) redondo: representa normalmente um concentrador de fluxo, quando vários caminhos chegam a um certo ponto. Pode também ser usado na paginação numerando términos parciais para representação em outra área do desenho.

Ansi flowchart.jpg

  • No libreoffice utilize a ferramenta Libreoffice Draw, há uma paleta específica para fluxogramas.

Flowchart libreoffice.png

  • Exemplos de algoritmos (como seriam os fluxogramas destes algoritmos?):
    • Calcula média de dois números
      Media de dois numeros.jpg
    • Observar uso de Terminador de inicio, Entrada de dados: NUM1, Entrada de dados: NUM2, Calcula, Exibe a média e Terminador de fim
  • Outros exemplos de algoritmos para exercitar fluxogramas (pode-se abstrair e fazer de modo simplificado na forma de uma série de processos ou modo mais completo com condicionais):
    • Fritar um ovo
    • Trocar o pneu de um carro
    • Enviar um e-mail
    • Pegar um livro na biblioteca
    • Calcular a área de um cômodo
    • Cozinhar macarrão instantâneo
    • Cozinhar miojo com ovo Vídeo Manual do Mundo
  • Outros conceitos trabalhados
    • abstração
    • estruturas de dados

Desenvolvendo algoritmos na forma de fluxogramas

Desenvolvendo algoritmos na forma de fluxogramas

Exercícios para resolver em sala de aula:

  • Desenvolve um algoritmo na forma de fluxograma para cálculo da média de dois números fracionários exibindo o resultado
  • Desenvolva um algoritmo na forma de fluxograma que calcula a média de consumo de um veículo. Deve obter a distância que um veículo percorreu e a quantidade de litros consumida, exibindo em tela o consumo médio em km/l.
  • Desenvolva um algoritmo na forma de fluxograma que lê dois valores inteiros e apresenta qual é o valor maior
  • Desenvolva um algoritmo na forma de fluxograma que lê dois valores inteiros e apresenta a diferença do maior para o menor
  • Desenvolva um algoritmo na forma de fluxograma que obtém a nota do aluno e mostra em tela o conceito sabendo que A >= 9.0, 9.0 > B >= 7.5, 7.5 > C >= 6.0, e D < 6.0
  • Desenvolva um algoritmo na forma de fluxograma que obtém do usuário 10 valores, calcula a média e exibe (utilize uma estrutura de repetição)
  • Desenvolva um algoritmo na forma de fluxograma que implementa a técnica de pomodoro na forma de um aplicativo, mostrando ao usuário o cronômetro e mensagens de quando deve fazer pausas (Siga os passos descritos aqui
    • Solicitar ao usuário digitar o nome da tarefa que ele vai se concentrar
    • Iniciar o cronômetro em 25 minutos para realizar o pomodoro.
      • Mostrar o cronômetro decrescente até alcançar 0:00.
    • Não fez os 4 pomodoros ainda?
      • Iniciar o cronômetro em 5 minutos para o "break".
        • Mostrar o cronômetro decrescente até alcançar 0:00.
        • Repetir o pomodoro
    • Senão (caso já tenha feito 4 pomodoros)
      • Colocar o cronômetro para um "long break" de 15 minutos.
      • Mostrar o cronômetro decrescente até alcançar 0:00.
      • Fim do programa
  • Desenvolva um algoritmo na forma de fluxograma que exibe todos os números pares de 1 a 100

Pseudo-código

Pseudo-código utilizando Portugol - Introdução e condicionais

  • Slides sobre pseudocódigo disponibilizados no moodle.

Ver exemplos de códigos Portugol dentro do software portugol (menu Arquivo->Abrir exemplo)

Desenvolvendo algoritmos na forma de pseudo-código - condicionais

Exercícios para resolver em sala de aula:

  • Desenvolve um algoritmo na forma de pseudo-código para cálculo da média de dois números fracionários exibindo o resultado
  • Desenvolva um algoritmo na forma de pseudo-código que calcula a média de consumo de um veículo. Deve obter a distância que um veículo percorreu e a quantidade de litros consumida, exibindo em tela o consumo médio em km/l.
  • Desenvolva um algoritmo na forma de pseudo-código que lê dois valores inteiros e apresenta qual é o valor maior
  • Desenvolva um algoritmo na forma de pseudo-código que lê dois valores inteiros e apresenta a diferença do maior para o menor
  • Desenvolva um algoritmo na forma de pseudo-código que obtém a nota do aluno e mostra em tela o conceito sabendo que A >= 9.0, 9.0 > B >= 7.5, 7.5 > C >= 6.0, e D < 6.0
Desenvolvendo algoritmos na forma de pseudo-código - repetição
  • Desenvolva um algoritmo na forma de pseudo-código que obtém do usuário 10 valores, calcula a média e exibe (utilize uma estrutura de repetição)
  • Desenvolva um algoritmo na forma de pseudo-código que exibe todos os números pares de 1 a 100
Exercícios - Pseudocodigo (série 0)

Exercícios - Pseudocodigo (série 0):

  1. Implemente por fluxograma e pseudocódigo um controlador de acesso que verifica se a senha digitada é igual a senha padrão “1234” abrindo a porta. O sistema deve sinalizar tanto no caso de acesso liberado ou negado. (id:0.07)
  2. Implemente um pseudocódigo que converte “celsius para fahrenheit” ou “fahrenheit para celsius” conforme opção que deve ser apresentada pelo algoritmo. (id:0.09)
  3. Desenvolva um algoritmo na forma de pseudocódigo que obtenha três números inteiros distintos e escreva na tela os valores do menor para o maior. (id:0.10)
  4. Desenvolva um algoritmo na forma de pseudocódigo que obtenha duas datas fornecidas pelo usuário (três números inteiros cada: dia, mês e por último ano com 4 dígitos) e mostra como resultado qual das duas datas é cronologicamente maior. (id:0.13)
  5. Implementar em pseudocódigo um algoritmo que através do valor ôhmico dado diz qual é a sequencia de cores de um resistor. Considere apenas resistores de 4 bandas de cores incluindo a tolerância, porém neste exercício ignore a tolerância. Desconsidere resistores de precisão, aqueles com multiplicadores ouro e prata. Considere que o multiplicador máximo é de 10MOhm (violeta). (id:0.12)
  6. Implementar em pseudocódigo um algoritmo que através de uma sequencia de cores de um resistor dado dá o valor ôhmico do resistor. Considere apenas resistores de 4 bandas de cores incluindo a tolerância, porém neste exercício ignore a tolerância. Desconsidere resistores de precisão, aqueles com multiplicadores ouro e prata. Considere que o multiplicador máximo é de 10MOhm (violeta). (id. 0.17)
  7. Implemente em pseudocódigo o algoritmo descrito no fluxograma abaixo (clique na imagem para ampliar) (id:0.08):
    Bhaskara.png
  8. Implementar em pseudocódigo algoritmo que imprime em tela o ranking de países através das medalhas obtidas nas olimpíadas. Sabendo que fica melhor colocado no ranking o país que soma mais medalhas de ouro, caso haja empate aquele que soma mais prata entre os empetados e caso haja empate na quantidade de prata também será melhor colocado no ranking o que tiver mais bronzes. O algoritmo deve ser capaz de armazenar e ranquear três países. Dica: crie as variáveis paisA_ouro, paisA_prata e paisA_bronze como numéricas para armazenar as medalhas obtidas pelo país A, da mesma forma para o país B e país C. Você pode limitar a quantidade de medalhas total e determinar pesos para obter um valor absoluto de pontuação. (id:0.18)
  9. Implemente um algoritmo em pseudocódigo que informa ao usuário se ele é obrigado ou não a fazer sua declaração de imposto de renda. O algoritmo deve solicitar ao usuário que responda sim ou não para as seguintes questões, sendo que o contribuinte deve declarar se se enquadrar em uma delas ou conforme descreve as condições (o texto está resumido, caso de dúvidas ver fonte):
    1. Recebeu RENDIMENTOS TRIBUTÁVEIS superior a R$ 28.123,91
    2. Recebeu RENDIMENTOS ISENTOS superior a R$ 40.000,00
    3. OBTEVE GANHO DE CAPITAL NA ALIENAÇÃO DE BENS ou BOLSAS DE VALORES
    4. Caso relacionado a ATIVIDADE RURAL: obteve receita superior a R$ 140.619,55 ou pretenda compensar, PREJUÍZOS de anos anteriores
    5. Tem POSSE total superior a R$ 300.000,00, estando dispensado se seus bens estiverem lançados na declaração do cônjuge
    6. Passou à CONDIÇÃO DE RESIDENTE no Brasil em qualquer mês
    7. Quem optou pela ISENÇÃO DO IMPOSTO SOBRE A RENDA INCIDENTE SOBRE O GANHO DE CAPITAL auferido na VENDA DE IMÓVEIS RESIDENCIAIS
  10. Implemente um algoritmo que solicita ao usuário entrar com 10 temperaturas, o algoritmo deve usar um laço de repetição para isso. No final deve mostrar a maxima, minima e média das temperaturas (id:0.16)
  11. Desenvolva em pseucodigo um algortimo que testa o vencedor de uma rodada de truco. A sequencia das cartas esta descrita na imagem abaixo bem como dos naipes franceses. Além da sequencia ali descrita, uma carta será sorteada e fará com que se torne a mais forte (manilha) aquela de força imediatamente superior sorteada (no caso da carta sorteada ser um 3 a manilha é o 4). A rodada é vencida numa disputa de melhor de três. As manilhas nunca empatam, neste caso prevalesce o naipe conforme sequencia. No caso de empate no último turno vence a rodada quem venceu o primeiro turno. Na ocorrência de empate nos três turnos vence a rodada quem foi o primeiro a jogar. Este algoritmo não precisa embaralhar ou distribuir cartas, faz apenas a checagem de quem venceu cada turno e finalmente quem venceu a rodada de um jogo entre dois jogadores. (id:0.19)
    Truco.jpg

Pseudo-código utilizando Portugol - repetições

Exercícios - Pseudocodigo (série 1)

Exercícios - Pseudocodigo (série 1):

  1. Implemente um algoritmo que solicita ao usuario entrar com um numero negativo qualquer. O algoritmo deve mostrar todos os números impares e pares de 0 até este negativo indicado. Utilize a estrutura para, verifique qual o passo adequado para resolver esta questão. (id:1.07)
  2. Desenvolva uma algoritmo para marcar o placar de um jogo de futebol, deve solicitar ao usuário digitar A ou B, ao digitar A é somado um gol a equipe A e o mesmo para a B. Se digitado F deve encerrar e mostrar o placar final. (id:1.11)
  3. Implemente um algoritmo que obtém um número do usuário e utilizando laço para verifica se um número primo. Valide seu algoritmo comparando com a lista de primos Lista de números primos (id:1.14)
  4. Implemente um algoritmo que obtém dois números inteiros positivos do usuário e utilizando laço de repetição realização a multiplicação destes dois números através de operações de soma. (id:1.09)
  5. Implemente um algoritmo que obtém dois números inteiros positivos do usuário e utilizando laço de repetição realização a divisão destes dois números através de operações de subtração. (id:1.10)
  6. Faça um algoritmo que apresente a sequencia de Fibonacci dado um valor “n” que representa a quantidade de números em série que se deseja exibir. (id:1.15)
  7. Implemente um algoritmo que utiliza uma estrutura "PARA" afim de desenhar uma moldura com 10 colunas e "n" linhas. A quantidade de linhas "n" deve ser obtida do usuário. Se o usuário digitar 6 ficaria conforme mostrado a seguir:

XXXXXXXXXX X X X X X X X X XXXXXXXXXX </syntaxhighlight>

Exercícios - Pseudocodigo (série 2)

Exercícios - Pseudocpodigo (série 2):

  1. Rode e teste o exemplo do "Quadro 42 - Exemplo de uso de vetores em Portugol" do TCC de Antônio Medeiros, compare com a implementação de teste de números primos feito na lista anterior. Com o uso de vetores o que mudou?
  2. Implemente um algoritmo que solicita do usuário 10 números, após a leitura mostra ao usuários os números na ordem inversa em que foram digitados
  3. Escreva um algoritmo que solicita ao usuário digitar 6 números para uma aposta na megasena. O algoritmo deve utilizar a estrutura repita, gravar em um vetor cada número que deve estar entre 1 e 60. Deve garantir que os 6 números são diferentes entre si e no final mostrar os números digitados
  4. Implemente o pseudocódigo de uma calculadora que realiza operações de soma ou subtração de dois números. A calculadora deve operar em um laço infinito encerrando sua operação se o usuário digitar "q"
  5. Implemente o pseudocódigo de um programa que solicita o nome e idade de 5 pessoas gravando em dois vetores distintos (um literal e outro numérico). No final imprime em tela o indice de memória de cada usuário e seus dados como no exemplo a seguir "O nome do usuário '1' é 'Joao' e tem 40 ano(s)" (Neste exemplo o usuário digitou nome: Joao, Idade: 40). Utilize estrutura de repetição REPITA.
  6. Implemente o pseudocódigo de um programa que utiliza uma matriz para armazenar informações NUMERICAS de um estoque de produtos. Cada linha desta matriz representa um produto, usaremos o limite de 5 produtos para este exercicio. A matrriz deve ter 3 colunas, a primeira representará a quantidade em estoque, a segunda o valor de custo e a terceira o preço de venda. O programa deve apresentar uma entrada de dados para receber do usuário parâmetros destes 5 produtos. No final um relatório deve ser apresentado mostrando a quantidade em estoque e o lucro bruto em % que está sendo aplicado para cada produto. Utilize estrutura de repetição ENQUANTO.
  7. Implemente em pseudocódigo um programa que obtém o nome de 10 alunos e suas 4 notas para cada aluno. No final deve imprimir um relatório mostrando cada aluno por nome, a média de suas notas e sua situação final (aprovado se a média for >= 6). Utilize vetores, matrizes e estruturas de repetição PARA.
  8. Desenvolva uma algoritmo na forma de pseudocódigo para calcular o consumo médio de energia de uma casa ao longo de 12 meses. Para isso implemente um loop principal que solicita ao usuário que digite os valores de potencia em kWh consumidos em cada mês. Armazene em uma matriz 3x4, onde cada linha representa uma estação do ano. Apresente a média de consumo em cada estação, exibindo nome da estação e valor. Deve também exibir a média geral do ano no final. Considere verão os meses 12, 1 e 2; Outono 3, 4 e 5; Inverno 6, 7 e 8 e Primavera 9, 10 e 11.
  9. Implemente em pseudocódigo o código descrito no fluxograma abaixo:
    Fluxograma Mediana.png

Exercícios complementares:

  • Sessão 12.5 (página 294) de Araújo, Everton Coimbra de. Algoritmos: fundamento e prática; 3ª ed. [S.l]:Visual Books, 2007. 414p. ISBN 9788575022092.

Pseudo-código utilizando Portugol - sub-rotinas e registros

Exercícios - Pseudocodigo (série 3)

Exercícios - Pseudocodigo (série 3):

  1. Execute o código do TCC do Antonio Medeiros, "Quadro 49 - Exemplo de passagem de parâmetros por referência em Portugol"
  2. Execute o código do TCC do Antonio Medeiros, "Quadro 50 - Exemplo de uso de sub-rotina que retorna valor em Portugol"
  3. Implemente um algoritmo que realiza análises combinatórias pelo uso de uma sub-rotina de cálculo de fatorial. Neste caso o usuário deve entrar com um inteiro e o algoritmo deve retornar o número de possíveis combinações para aquele dado realizando análise de Permutações Simples. (id:3.01)
  4. Implemente um algoritmo que utilizando as sub-rotinas pré-definidas do portugol (seno e cosseno) criando outras sub-rotinas para cálculos da tangente, arco-seno, arco-coseno e arco-tangente. Neste caso utilizando angulos em radianos
  5. Implemente um algoritmo anterior agora aceitando angulos em graus
  6. Execute o código do TCC do Antonio Medeiros, "Quadro 56 - Exemplo de uso de vetor de registros em Portugol"
  7. Desenvolva uma algoritmo para marcar o placar de um jogo de futebol, deve solicitar ao usuário digitar o nome das equipes A e B, guardando esta informação em campos de registros bem como deve possuir campos para armazenar o placar de cada equipe. Depois que o usuário digitar os nomes deve aguardar o anúncio de gols. Ao digitar A é somado um gol a equipe A e o mesmo para a B. Se digitado F deve encerrar e mostrar o placar final mostrando os nomes das equipes.
  8. Implemente o pseudocódigo de um programa que solicita o nome e idade de 5 pessoas gravando em uma estrutura de dados tipo registro com dois campos (um literal e outro numérico). No final imprime em tela o indice de memória de cada usuário e seus dados como no exemplo a seguir "O nome do usuário '1' é 'Joao' e tem 40 ano(s)" (Neste exemplo o usuário digitou nome: Joao, Idade: 40).
  9. Implemente um algoritmo em pseudocódigo para cálculo de pagamento de horas trabalhadas e análise de produtividade de funcionários. Os dados estão fornecidos na tabela a seguir, responda aos seguintes itens:
    1. Crie uma estrutura na forma de registro com os campos “Salario_hora”, “Horas_trabalhadas” e “produzidos” todos numéricos. Obtenha do usuário os dados, no final imprima os dados capturados.
    2. Calcule e imprima quanto cada trabalhador faturou na semana
    3. Calcule e imprima o total de salários pagos
    4. Calcule e imprima a quantidade total de dispositivos fabricados
    5. Calcule e imprima o custo médio por dispositivo, ou seja, de acordo com a produtividade de cada trabalhador qual é o custo unitário de produção e em seguida a média destes custos
Trabalhador 1 Trabalhador 2 Trabalhador 3 Trabalhador 4 Trabalhador 5
Salário por hora ($) 5,00 5,50 6,50 6,00 6,25
Horas de trabalho (h) 40 43 37 50 45
Produção (dispositivos) 1000 1100 1000 1200 1100

Parte da implementação do problema das funções trigonométricas algoritmo

 declare angulo,s,c,t numerico
 escreva "Digite um angulo: "
 leia angulo
 s <- arredonda(seno(angulo))
 escreva "O seno do angulo ",angulo," é: ",s
 c <- arredonda(cosseno(angulo))
 escreva "O cosseno do angulo ",angulo," é: ",c
 t <- arredonda(tangente(angulo))
 escreva "O tangente do angulo ",angulo," é: ",t

fim_algoritmo

sub-rotina tangente (x numerico)

 declare aux numerico
 aux <- seno(x) / cosseno(x)
 retorne aux

fim_sub_rotina tangente </syntaxhighlight>

Programação em C (ANSI)

Programação em C (ANSI) - Introdução ao C

Introdução ao C e funções de saída e entrada de dados
  • Introdução
    • C e Java lideram os principais rankings de popularidade, sendo o C a linguagem mais popular no desenvolvimento de sistemas embarcados
    • Um programa em C é composto por um conjunto de Funções.
    • A função pela qual o programa começa a ser executado chama-se “main()”.
    • Após cada comando em C deve-se colocar um ; (ponto-e-vírgula).
    • É uma linguagem “tipada”, ou seja, os dados precisam ter tipos definidos
    • Possui estruturas diversas de fluxo e controle como “if… else”, “Switch case”, etc.
  • Código básico de um programa C
    • Observar que sempre deve existir uma função main()
    • O retorno desta função por padrão C90 (gcc) será um int (mesmo se for omitido)
    • As chaves "{" e "}" representam o início e fim de um bloco de instruções
    • Os caracteres "/*" e "*/" representam o início e fim de um bloco de comentários
      int main()
      {
        /*instruções*/
      }
      
  • Preparando o ambiente
    • Como precisaremos digitar alguns comandos, vamos utilizar o terminal do linux, abra portanto o terminal
    • Por padrão o linux inicia na pasta do usuário, ficará algo assim:

aluno@sj-redes1-d1:~$ </syntaxhighlight>

    • Observe a composição é usuário@computador:pasta
    • Neste caso “~$” representa que o usuário está em sua pasta home
  • Criando uma pasta para seus projetos
    • Você pode criar uma pasta via explorador de arquivos no modo gráfico
    • Via terminal conforme segue executando os seguintes comandos para criar e entrar na pasta do usuário:

~$ mkdir ExerciciosC ~$ cd ExerciciosC </syntaxhighlight>

    • Observe que agora o terminal exibe algo como:

aluno@sj-redes1-d1:~/ExerciciosC$ </syntaxhighlight>

  • Editando um arquivo .c
    • O arquivo “.c” é o código-fonte de nosso projeto, é onde digitaremos o código na linguagem C. Trata-se de um arquivo texto simples, porém respeitando a sintaxe do C.
    • Para editar o arquivo “.c” podemos utilizar qualquer editor como o “gedit” do linux que é bem parecido com o “bloco de notas” do windows.
    • Depois de criar o arquivo precisaremos compilar este código para transformá-lo em executável e finalmente poder rodá-lo, para compilar utilizaremos o compilador gcc do linux.
  • Passo-a-passo criando o OlaMundo.c
    1. Abra o gedit com um texto em branco e salve em sua pasta de projetos com o nome “OlaMundo.c”
    2. Digite dentro do arquivo em branco criado o seguinte código:
      #include <stdio.h>
      main()
      {
        printf("Olá Mundo!\n");
      }
      
    3. Certifique-se de salvar o arquivo “OlaMundo.c” após as alterações
    4. No terminal dê um comando ls para listar os arquivos do diretorio, como resultado deve ser exebido o arquivo OlaMundo.c que você criou no gedit

~/ExerciciosC$ ls OlaMundo.c </syntaxhighlight>

    1. No terminal compile o código através do gcc. Neste exemplo a pasta “ExerciciosC” foi criada para gravar o projeto, do gedit foi salvo nesta pasta o programa “OlaMundo.c”. Como resultado nenhuma mensagem deve ser exibida, o terminal simplesmente irá ficar pronto para um novo comando, isso significa que compilou com sucesso (sem erros)

~/ExerciciosC$ gcc OlaMundo.c -o OlaMundo </syntaxhighlight>

    1. Dê um novo comando ls para listar os arquivos do diretorio, como resultado deve ser exibido dois arquivos, o OlaMundo.c e agora o OlaMundo, um arquivo executável criado pelo compilador

~/ExerciciosC$ ls OlaMundo OlaMundo.c </syntaxhighlight>

    1. Execute OlaMundo através do comando a seguir. Observe a mensagem “Olá Mundo!” exibida no terminal.

~/ExerciciosC$ ./OlaMundo Olá Mundo! </syntaxhighlight>

  • Analisando o programa OlaMundo
    • Observe que foi realizada uma declaração antes da função main. Isto é necessário para utilização do comando de impressão em tela, o printf utilizado abaixo.
  1. include <stdio.h> </syntaxhighlight>
    • Observe que não foi definido um retorno para main, o compilador deverá tratar esta função com retorno int
    • A instrução realizada em código é de impressão em tela, neste caso a tela (terminal visualizado pelo monitor) é a saída padrão (standard)

printf("Olá Mundo!\n");</syntaxhighlight>

    • Enfim, observe que não foi especificado um retorno, do tipo “return”. Isso faz com que o retorno deste programa seja indefinido
  • Identificadores
    • São os nomes que o programador dá a suas variáveis, constantes e funções
    • Deve sempre iniciar com uma letra ou “_” (underscore )
    • A partir do segundo caracter pode também conter números
    • A linguagem não suporta caracteres especiais como letras acentuadas
    • Identificadores não podem ser escritos com espaço, exemplo “buscarCodigo()”, não pode ser escrito como “buscar codigo()”
    • A linguagem C é case-sensitive. Por exemplo, as variaveis “numero”, “Numero” e “NUMERO” são endereços diferentes
    • Deve ter no máximo 31 caracteres (compatível com TurboC)
  • Boas práticas quanto a identificadores
    • O uso de nomes auto-explicativos facilita a compreensão e manutencão futura
    • É comum variar maiúsculas e minúsculas para facilitar a leitura como “QtMedidas”, “ValorMedio”
  • Variáveis
    • O que é uma variável? - Khan Academy
    • Por uma questão de eficiência de uso de memória e processamento o C possui diversos tipos de variáveis, vamos agora trabalhar com alguns deles que servirão para praticamente todas as nossas necessidades
    • char: ocupa 1 byte na memória e varia de -127 a +127
    • int: ocupa 4 bytes e varia de -2.147.483.648 a +2.147.483.647
    • double: ocupa 8 bytes e possui dez dígitos de precisão
    • char[]: esta é o mesmo char descrito acima mas aqui simbolizando uma cadeia/vetor de caracteres (string)
    • Apenas para conhecimento neste momento, há outros tipos como short, float e long double e os tipos que não são de precisão podem ainda ser signed ou unsigned
    • Como funciona a memória de computadores? - Khan Academy
  1. Crie o arquivo através do pico “nome do arquivo.c”

~/ExerciciosC$ pico UsaVariavel.c </syntaxhighlight>

  1. Digite dentro do arquivo em brando criado o seguinte código:
    #include <stdio.h>
    main()
    {
        int x; /* declaração de uma variável inteira */
        x=5;/* atribuindo o valor 5 (constante) a variável x */
        printf ("O valor de x é %d\n",x);
    }
    
Observe que o C permite também que uma variável seja inicializada com determinado valor no momento de sua criação. Ex.:
#include <stdio.h>
main()
{
    int x = 5; /* declaração de uma variável inteira atribuindo o valor 5*/
    printf ("O valor de x é %d\n",x);
}
  1. Compile e execute
  • Continuação da teoria
    • C é uma linguagem “compilada”, ou seja, de um código fonte (escrito em C) são gerados códigos de máquina formando um ou mais arquivos executáveis e inteligíveis apenas para o computador
    • Há diversos compiladores e estes podem ter algumas diferenças de comportamento e aceitarem diferentes parametrizações
    • Um código é compilado para um sistema operacional específico e uma arquitetura de processador, portanto, um código compilado para um S.O. não tem qualquer garantia de funcionamento em outros sistemas. Da mesma forma um código que roda em um PC, não tem qualquer garantia de rodar em outras arquiteturas diversas
    • Em oposição ao código compilado temos o código interpretado
    • Sempre que um código fonte é modificado se faz necessário nova compilação para que as modificações façam efeito na execução
    • As variáveis que serão utilizadas pelo programa devem ser listadas antecipadamente
    • A linguagem C tem um conjunto de palavras reservadas, que não podem ser utilizadas para outro propósito se não o que está definido na estrutura da linguagem
      • Exemplos: break, case, if, for, while, return,...
    • O C permite que trabalhemos com bibliotecas (lib) que são conjuntos de funções que realizam certas tarefas
    • Além de podermos criar nossas próprias bibliotecas com funções úteis que podemos reutilizar em vários programas, também podemos nos apropriar de diversas libs já desenvolvidas, sejam padrão ANSI (libc) ou não, desta forma não precisamos “reinventar a roda” e já sair de largada com várias funcionalidades
      • Exemplos: <stdio.h>, <math.h>, <complex.h>, <float.h>, <string.h>, etc. (são 24 padrão ANSI no total)
  • Entendendo a compilação
    • Edição: atividade feita pelo programador
    • Preprocessamento: compilador processa o código e ignorando comentários, fazendo associações de constantes e controle de código através de diretivas especiais de compilação
    • Compilação: criação do código-objeto, é a tradução da linguagem C em linguagem de máquina
    • Linkagem: associação de diferentes código-objeto e bibliotecas
    • Carregamento: carrega o programa em memória
    • Execução: cpu realiza a execução das instruções passo a passo, armazenando os resultados em memórias definidas pelo programa e pilhas de dados para controle
  • Comentários
    • Como vimos podemos incluir no programa fonte textos livres que ajudam na compreensão do código
    • Os comentários são ignorados pelo compilador, não se tornam código de máquina
    • Para incluir comentários inicie com /* digitando então o comentário aqui e terminando com */
      • Este formato permite que digitemos varias linhas de comentários, normalmente é utilizado para textos mais extensos
    • A maioria dos compiladores também aceita o formado //comentário, que serve para incluir um comentário de apenas uma linha, apenas os caracteres depois do // serão ignorados e neste caso o terminador é o sinal de nova linha que normalmente está oculto
  • Operadores aritméticos
    • “+” adição
    • “-” subtração
    • “*” multiplicação
    • “/” divisão
    • “%” resto da divisão
  • Por padrão, multiplicações e divisões são operadas antes de somas e subtrações
  • Devemos utilizar parênteses para agrupar operações e definir a sequencia mais adequada. O compilador vai sempre resolver o que está dentro dos parênteses primeiro, de “dentro para fora” quando houver mais de um nível
    • Exemplos
      • 1+2*3 = 7 é o mesmo que 1+(2*3)
      • (1+2)*3 = 9
      • 1+2*3+4*5 = 27 é o mesmo que 1+(2*3)+(4*5)
      • (((1+2)*3)+4)*5 = 65
  • Escrevendo mensagens na tela (saída de dados)
    • A função printf da lib stdio é bastante completa para esta tarefa, permite escrever mensagens com múltiplos argumentos.
    • Formato printf (“string de controle”, lista de argumentos);
    • Exemplo:
      • printf(“Olá Mundo!\n”);
      • printf(“Digite sua idade:\n”);
      • printf(“Sua idade é: %d”,idade);
    • Para saber mais sobre o printf e seus identificadores ver c_function_printf
  • Lendo o teclado do usuário (entrada de dados)
    • A função scanf da lib stdio é bastante útil para esta tarefa, ela aguarda que o usuário entre com uma informação e tecle [ENTER] no final.
    • Esta função é blocante, ou seja, o programa fica parado esperando a entrada de dados para então dar continuidade a execução
    • Formato scanf (“string de controle”, lista de argumentos);
    • Exemplo:
      • scanf(“%d”,&idade);
  • Operadores relacionais e lógicos
    • Relacionais
      • > maior que, ex.: Se (i > j) printf(“i é maior que j”);
      • >= maior ou igual que, ex.: Se (i >= j) printf(“i é maior ou igual a j”);
      • < menor que, ex.: Se (i < j) printf(“i é menor que j”);
      • <= menor ou igual que, ex.: Se (i <= j) printf(“i é menor ou igual a j”);
    • Igualdade
      • == igual a, ex.: Se (i == j) printf(“i é igual a j”);
      • != diferente de, ex.: Se (i != j) printf(“i é diferente de j”);
    • Lógicos
      • && Lógica E (AND), ex.: Se (i > j) && (i > 0) printf(“i é maior que j e positivo”);
      • || lógica OU (OR), ex.: Se (i > j) || (i == 0) printf(“i é maior que j ou é igual a zero”);
      • ! Lógia negação (NOT), ex.: Se !(i > j) printf(“i não é maior que j”);
  • Atividade
    • Ler apostila de C da UFMG
  • Exercícios
    1. Implemente um programa em C que calcula a média de dois números reais digitados pelo usuário e imprime em tela a resposta deste cálculo
    2. Implemente um programa em C que recebe “a”, “b” e “c”, calcula e exibe o delta (delta = b*b-4ac).
    3. Implemente um programa em C que calcule a Potência dissipada por uma carga dados V e I.
    4. Implemente um programa em C que calcula a resistência R dados P e I.
    5. Implementar um programa C para converter um ângulo em radianos para graus.
    6. Implementar um programa C para converter um ângulo em graus para radianos.

Programação em C (ANSI) - Controle de fluxo em C

Programação em C (ANSI) - Condicionais

Condicionais em C
  • A declaração “if (expressão) corpo”
    • Permite o programa escolher por duas alternativas, executando o procedimento presente no corpo ou não
      • O parênteses é obrigatório
      • A expressão pode conter múltiplos testes
      • “if” se escreve com letras minúsculas
    • O corpo com múltiplos comandos deve ficar dentro de {chaves}
    • Exemplos:
        if (i > 0) printf(i é maior que zero);
      
        if ((i > 0) && (j == -1)) {
        j = i;
        printf(o novo valor de j é %d, j);
      }
      
  • A cláusula “else”
    • Permite o programa escolher por duas alternativas, executando apenas o conteúdo do corpo do if ou o conteúdo do do eles

if ( expressão ) corpo_if else corpo_else</syntaxhighlight>

    • Mesmas regras citadas para o if, observe também que os comandos sempre terminam com ;
    • Exemplos:
      if (i > j)
        max = i;
      else
        max = j;
      
      if (i > j)
        if (i > k) max = i; else max = k;
      else
        if (j > k) max = j; eles max = k;
      
  • If em cascata
    • É possível realizar séries de testes parando assim que uma for verdadeira.
    • Exemplo:
      if ((i >= 0) && (i < 6))
        printf(Conceito insuficiente);
      else if ((i >= 6) && (i < 9))
        printf(Conceito suficiente/proficiente);
      else if ((i >= 9) && (i <= 10))
        printf(Conceito excelente);
      else
        printf(Conceito inválido);
      
  • Vídeo
    • A estrutura mais elementar de decisão? Saloni em Code.org
    • O que é uma estrutura de decisão? Bill Gates em Code.org
Exercícios - C (série 0)
  • Exercícios - C (série 0)
    1. Implementar um programa que lê um número inteiro e imprime se o número é par ou ímpar. SUGESTÃO: Usar o operador de resto.
    2. Um estudo sobre sensibilidade de pessoas a temperaturas da água identificou que a maioria das pessoas considera fria a água com temperaturas abaixo de 25 graus, morna entre 25 e 30 graus, e quente acima de 30 graus. Escreva implemente em C um algoritmo que mostre as palavras "fria", "morna" ou "quente" dependendo da temperatura da água que for informada.
    3. Implementar um programa em C para ler dois números inteiros e imprime uma mensagem indicando se os números lidos são iguais ou diferentes. Caso sejam diferentes, computar a média dos mesmos.
    4. Implementar um programa para ler 4 números inteiros e imprime uma mensagem se a soma dos dois primeiros for igual ou menor que a soma dos dois últimos.
    5. Implemente um programa em C que recebe duas datas fornecidas pelo usuário (três números inteiros cada: dia, mês e ano com 4 dígitos). Deve ser calculada qual a maior data e exibi-la em tela (pesquise sobre if...else para resolver este problema)
    6. Implementar um programa para ler dois números reais e, na sequência, um número inteiro. Se o número inteiro for 1 os dois números iniciais deverão ser somados, se for 2 eles serão subtraídos, se for 3 eles serão multiplicados e se for 4 serão divididos. Mostrar mensagem de erro se o número inteiro não estiver na faixa de 1 a 4. Mostrar mensagem caso a divisão não seja possível.
    7. Melhore o programa de cálculo de delta, e calcule as raízes de uma equação de segundo grau. Faça testes para saber se há duas raízes reais (delta > 0), apenas uma (delta = 0) ou não há raízes reais (delta < 0). Usar a função sqrtf ou sqrt de <math.h> (utilizando funções de math.h talvez seja necessário adicionar a flag "-lm" na compilação).
    8. Uma empresa irá ajustar o salário de seus funcionários de acordo com a categoria de trabalho dos funcionários: CAT A (10% de aumento), CAT B (15% de aumento) e CAT C (20% de aumento). Faça um programa que leia o plano de trabalho e o salário atual de um funcionário e calcula e imprime o seu novo salário. Use o comando switch.
    9. Faça um programa que leia um número entre 0 e 10, e escreva este número por extenso. Use o comando switch.

Programação em C (ANSI) - Repetições

Estruturas de repetição em C
  • Vídeos
  • O que é uma estrutura de repetição? Chris Bosh em Code.org
  • O que é um laço de repetição? - Mark Zuckerberg Code.org
  • Como funciona a estrutura de repetição tipo contagem (for no C)? - Code.org
  • Exemplo de menu de programa
    #include <stdio.h>
     
    main()
    {
      int opcao;
      while (opcao != 2)
      {
        system("clear");
        printf("MENU\n");
        printf("0: Faz isso\n");
        printf("1: faz aquilo\n");
        printf("2: Sair\n");
    
        scanf("%d",&opcao);
        switch (opcao)
        {
          case 0://Faz isso 
            break;
          case 1://faz aquilo
            break;
          case 2: 
            printf("Saindo...\n");
            break;
          default:
            printf("Opção inválida\n");
        }
      }
    }
    
Exercícios - C (série 1)
  • Exercícios - C (série 1)
    1. Assistir os vídeos da sessão "Condicionais em C" e "Estruturas de repetição em C"
    2. Dado um número inteiro positivo, calcular a soma de todos os números inteiros compreendidos entre 0 e o número dado. Fazer uma versão com while e outra com for.
    3. Faça um algoritmo que apresente a sequencia de Fibonacci dado um valor “n” que representa a quantidade de números em série que se deseja exibir
    4. Desenvolva uma algoritmo em C para marcar o placar de um jogo de futebol, deve solicitar ao usuário digitar A ou B, ao digitar A é somado um gol a equipe A e o mesmo para a B. Se digitado F deve encerrar e mostrar o placar final. (id:1.09)
    5. Implemente um algoritmo em C que obtém um número do usuário e utilizando laço para verifica se um número primo. Valide seu algoritmo comparando com a lista de primos Lista de números primos
    6. Escreva um algoritmo em C que solicita ao usuário digitar 6 números para uma aposta na megasena. O algoritmo deve utilizar a estrutura do...while, gravar em variaveis distintas cada número que deve estar entre 1 e 60. Deve garantir que os 6 números são diferentes entre si e no final mostrar os números digitados (id:1.06)
    7. Implemente em C uma calculadora que realiza operações de soma ou subtração de dois números. A calculadora deve operar em um laço infinito encerrando sua operação se o usuário digitar "q"
    8. Usando o comando for aninhado, construa um programa que implemente a figura abaixo. A margem esquerda (margem de espaços), o caracter do desenho, o número de linhas vazadas e o tamanho horizontal da figura devem ser lidos pelo teclado. Na figura abaixo representa uma saída quando a margem esquerda é 0, o caractere do desenho é 'a', o número de linhas vazadas é 1 e o tamanho horizontal é 10 (id.:1.08)

aaaaaaaaaa a a aaaaaaaaaa</syntaxhighlight>

    1. Construa um programa para desenhar a seguinte figura de forma parametrizável (dado caracter, margem, e número de linhas):

AAAAAAAAAA AAAAAAAA AAAAAA AAAA AA BB BBBBB BBBBBBBB BBBBBBBBBBB</syntaxhighlight>

Funções

Funções
  • O que é uma função? Khan Academy
  • O que é uma função - noção intuitiva - MeSalva!
  • Exercícios
    1. Faça um programa helloworld usando uma função específica, neste caso a função main apenas invoca uma outra função que você deve criar chamada "helloWorld" que não recebe nenhum parâmetro (argumento) e não retorna nada (void). Esta função simplesmente imprime a mensagem "Hello world" em tela.
    2. Faça um programa "saudacao" usando uma função específica, neste caso a função main apenas invoca uma outra função que você deve criar chamada "saudacao" que recebe um inteiro como parâmetro e não retorna nada (void). Esta função, ao receber o cídigo parâmetro "1" imprime "Bem vindo ao programa!" e se receber o parâmetro "2" imprime a mensagem "Programa finalizado!" em tela.
    3. Faça um programa que verifica se um número é par ou ímpar. Na função main obtenha um número qualquer e invoque uma função que recebe um inteiro como parâmetro e retorna também um inteito com zero se o número for par e 1 se for ímpar. No main verifique este retorno e imprima ao usuário a resposta.
    4. Faça um programa que calcula a média de 2 números float utilizando uma função “calculaMedia” que recebe estes parâmetros e retorna a resposta. Na função main deve ser declarado o comando de printf da resposta.
A função main
O programa inicia pela primeira instrução contida na função main() e também se encerra na última instrução. O retorno padrão da função main é um int que representa um código de erros reconhecidos por muitos sistemas operacionais. Se o programa terminou sua execução corretamente o retorno deverá ser 0 (zero).
 int main(void)
 {
  //Programa
  return 0;
 }
  • A omissão do retorno da função main (por padrão int) ou utilização de outro tipo de retorno pode ser feita no C99 porém desta forma o código não fica portável a alguns padrões de C e não estaria adequado ao retorno de um programa que convencionalmente é esperado por sistemas operacionais.
  • Quando o programador não especifica este retorno o compilador provavelmente estará atribuindo o retorno como int.
  • Programas que devem ficar rodando indefinidamente normalmente definem um laço infinito na função main para que esta não alcance o final do código salvo se for dado um comando de terminação, por exemplo.
O método exit()

Uma alternativa a terminação do programa chegando ao fim da função main é a função exit da biblioteca <stdlib.h>. Para esta função deve-se passar um argumento inteiro que tem o mesmo significado do código de retorno da função main, portanto exit(0) representa uma terminação normal, alternativamente exit(EXIT_SUCCESS). Para representar uma terminação anormal pode-se utilizar exit(EXIT_FAILURE) ou exit(1).
Há outros códigos de erro (ver aqui) porém são pouco usuais, no geral o que se pretende é saber apenas se a operação do programa terminou de forma bem sucedida ou não.
Para verificar o código de erro retornado por uma aplicação, após encerrar o programa executar: $ echo $?</syntaxhighlight>

Exercícios - C (série 2)
  • Exercícios - C (série 2)
    1. Implemente o cálculo da sequencia de Fibonacci dado um valor “n” em uma função "calculaFibonacci" que recebe um argumento inteiro que representa a quantidade de números em série que se deseja exibir e a própria função imprime em tela os resultados, neste caso esta função não retorna valor nenhum.
    2. Implemente um algoritmo em C que obtém um número do usuário e invoca uma função "verificaPrimo" que recebe o número obtido e retorna uma representação de verdadeiro ou falso para informar se o número é ou não é primo. Para representar verdadeiro ou falso pode-se utilizar o tipo de variável "_Bool" ou uma representação de inteiro (int, char ou variantes). Valide seu algoritmo comparando com a lista de primos Lista de números primos.
    3. Uma empresa irá ajustar o salário de seus funcionários de acordo com a categoria de trabalho dos funcionários: CAT A (10% de aumento), CAT B (15% de aumento) e CAT C (20% de aumento). Faça um programa que lê o plano de trabalho e o salário atual de um funcionário e invoca uma função "calculaReajuste" que recebe dois argumento tipo float, o salário atual e o índice de reajuste, calculando e retornando o salário reajustado. A rotina no main que invoca a função de reajuste deve obter a resposta e imprimir em tela o resultado.
    4. Implemente um programa em C que calcule a Potência dissipada em um resistor e a corrente dados valores de V e R. O mesmo programa deve ser capaz de calcular a R dados P e V e R dados V e I. Faça então um menu inicial para que o usuário possa selecionar a opção de cálculo desejada. Crie diferentes funções para opção.
    5. Implemente um programa em C de uma calculadora de soma e subtração. Para isso, a função main deve ter um loop infinito, encerrando o programa se digitado 's'. Dentro do loop invoque uma função "imprimirMenu" de retorno void que imprime as opções do menu utilizando "1 para soma", "2 para subtração" ou "s para sair". Se o usuário digitar 1, invoque uma outra função chamada "soma" que recebe dois float obtidos dentro do próprio main e passados como parâmetros. A função deve retornar a soma destes números para que main imprima o resultado ao usuaŕio. Um processo similar deve ser feito para subtracao.

Referências

Referências bibliográficas
  • Araújo, Everton Coimbra de. Algoritmos: fundamento e prática; 3ª ed. [S.l]:Visual Books, 2007. 414p. ISBN 9788575022092.
  • KERNIGHAN, Brian W.; RITCHIE, Dennis M C: a linguagem de programação padrão ANSI; 1ª ed.[S.l]:Campus, 1989. 304p. ISBN 9788570015860.
  • SCHILDT, Herbert C Completo e Total; 3ª ed. [S.l]:Makron Books, 2009. 827p. ISBN 9788534605953.
  • FORBELLONE, Andre L. Lógica de Programação; 3ª ed. [S.l]:Makron Books, 2005. 197p. ISBN 9788576050247.
  • KING, K.N. C Programming: A Modern Approach; 2ª ed. [S.l]:W. W. Norton & Company, 2008. 832p. ISBN 9780393979503.
  • MANZANO, Jose Augusto Navarro Garcia Estudo Dirigido em Linguagem C. ; 16ª ed. [S.l]:Erica, 2012. 216p. ISBN 9788571948877.
  • NEVES, Júlio Cézar Programação Shell Linux; 5a ed. Rio de Janeiro:Brasport, 2005. 408p. ISBN 8574522031.
  • VEIGA, Roberto G. A. Comandos do Linux: guia de consulta rápida; ed. São Paulo:Novatec, 2004. 144p. ISBN 85-7522-060-8.


Ferramentas úteis
  • VisualG3: Uma IDE para desenvolvimento de programas em pseudocódigo (freeware), permite editar e compilar programas utilizando uma sintaxe própria de pseudocódigo muito parecida com a que trabalhamos em sala. Muito útil para verificar o funcionamento real dos algoritmos. Ver exemplos de códigos visualG3 em Exemplos VisualG3
  • LibreOffice: O LibreOffice é um programa gratuito (freeware) e de código aberto (opensource). Além de editor de textos, planilhas e apresentações tem a ferramenta Draw que permite a criação de fluxogramas.
  • VirtualBox: O Oracle VirtualBox é um programa gratuito (freeware) que permite criar e instanciar máquinas virtuais. O uso de máquinas virtuais é bastante interessante quando desejamos ter diferentes sistemas operacionais em um computador bem como quando se está realizando ensaios e deseja-se isolar estes experimentos do sistema principal.
  • Debian: O Debian, é umas das distribuições Linux mais estáveis existentes, suportando atualmente 12 arquiteturas de processador. É software livre e de código aberto e mantido por uma ampla comunidade com mais de 18000 desenvolvedores. Sua versão atual é a 8.5 (codinome Jessie, do filme Toy Story).
  • Ubuntu: O Ubuntu é uma distribuição linux (freeware e opensource) bastante estável e com uma comunidade bastante ativa que está sempre atualizando o sistema e presente nos foruns e redes sociais para dirimir dúvidas.
  • LinuxMint: O LinuxMint é uma distribuição linux (freeware e opensource) bastante estável e confortável aos usuários windows, pois traz um gerenciador de janelas configurado de uma forma mais natural para estes usuários e vem com um conjunto de programas pré-instalados que consegue atender a maior parte das demandas inicias.
  • dbDesigner4: O dbDesigner é uma ferramenta gratuita para elaboração de diagramas de bancos de dados relacionais. Não trabalhamos com bancos na disciplina PRG29002, porém trabalhamos com dados, esta ferramenta é útil para organizá-los em diagramas.
  • coliru: Compilador online

Plano de aula

Aula Data Horas Conteúdo Recursos
1 28/7 2 Sem atividades de PRG – reposição de férias – horário disponível para outras atividades letivas Lab Redes 1
2 1/8 2 Sem atividades de PRG – reposição de férias – horário disponível para outras atividades letivas Lab Redes 1
3 4/8 2 Aula inaugural, apresentação do professor e turma, apresentação da disciplina e introdução aos algoritmos Lab Redes 1 ou Redes 2
4 8/8 2 Prática de fluxogramas Lab Redes 1
5 11/8 2 Introdução ao pseudocódigo até condicionais com resolução de exercícios Lab Redes 1 ou Redes 2
6 15/8 2 Prática: Resolução de problemas em pseudocódigo e fluxogramas (declaração de variáveis, leia e escreva, uso de condicionais e biblioteca portugol) Lab Redes 1
7 18/8 2 Pseudocódigo: Uso de vetores e sub-rotinas Lab Redes 1 ou Redes 2
8 22/8 2 Prática: Resolução de problemas com vetores e sub-rotinas Lab Redes 1
9 25/8 2 Pseudocódigo e fluxogramas: Registros e revisão geral Lab Redes 1 ou Redes 2
10 29/8 2 Pseudocódigo e fluxogramas: Exercícios de preparação para prova Lab Redes 1
11 1/9 2 Avaliação1: Introdução a algoritmos (fluxograma e pseudocódigo) Lab Redes 1 ou Redes 2
12 5/9 2 Prática: Correção da Avaliação Lab Redes 1
13 12/9 2 Recuperação1? / Introdução ao C, primeiros conceitos de compilação, variáveis, controle de fluxo, entrada e saída de dados Lab Redes 1
14 15/9 2 Continuação C, condicionais, operadores relacionais, operadores lógicos. Prática: Controle de fluxo em C, entrada e saída de dados Lab Redes 1 ou Redes 2
15 19/9 2 Prática C Lab Redes 1
16 22/9 2 Continuação C: estruturas de repetição Lab Redes 1 ou Redes 2
17 26/9 2 Prática: estruturas de repetição Lab Redes 1
18 29/9 2 Continuação C: funções Lab Redes 1 ou Redes 2
19 3/10 2 Prática: Funções em C Lab Redes 1
20 6/10 2 Avaliação2: C até funções Lab Redes 1 ou Redes 2
21 10/10 2 Correção da prova Lab Redes 1
22 17/10 2 Recuperação2? / Prática para resolução de exercícios Lab Redes 1
23 20/10 2 Introdução a vetores e matrizes em C. Lab Redes 1 ou Redes 2
24 24/10 2 Resolução de exercícios de vetores Prática: Resolução de exercícios de fixação de vetores. Lab Redes 1
25 27/10 2 Structs e Unions Lab Redes 1 ou Redes 2
26 31/10 2 Prática: Structs e unions Lab Redes 1
27 7/11 2 Prática: Structs e unions / Compreendendo melhor a função main e exit, gerando números pseudo-aleatórios, defines e operadores e precedências Lab Redes 1
28 10/11 2 Ponteiros Lab Redes 1 ou Redes 2
29 14/11 2 Prática: Exercicios ponteiros Lab Redes 1
30 17/11 2 Vetor de Ponteiros e Ponteiro Para Estruturas, typedef, recursividade, apresentação do projeto Lab Redes 1 ou Redes 2
31 21/11 2 Prática de Ponteiros e structs Lab Redes 1
32 24/11 2 Avaliação: C até structs e ponteiros Lab Redes 1 ou Redes 2
33 28/11 2 Prática: Correção da Avaliação / Desenvolvimento do projeto Lab Redes 1
34 1/12 2 Apresentação do projeto. Prática: Desenvolvimento do Projeto Lab Redes 1 ou Redes 2
35 5/12 2 Recuperação3? / Prática: Desenvolvimento do Projeto Lab Redes 1
36 8/12 2 Prática: Desenvolvimento do Projeto Lab Redes 1 ou Redes 2
37 12/12 2 Avaliação4: Apresentação do projeto Lab Redes 1
38 15/12 2 Avaliação4 (continuação): Apresentação do projeto Lab Redes 1 ou Redes 2
39 19/12 2 Encerramento da disciplina / Recuperação4? Lab Redes 1
TOTAL 80

Conceitos

Ver moodle da disciplina.