====== Laboratório de Programação ======
Nesta disciplina estudaremos a linguagem C, porém este curso não é um curso de Linguagem C. Muitos alunos pensam isso, mas apenas vamos usar a linguagem C para aplicar conhecimentos adquiridos em outras disciplinas, como Estrutura de Dados, em exercícios práticos de laboratório.
===== Referências =====
* KERNIGHAN,B.W. & RITCHIE,D.M. **A Linguagem de Programação C. Padrão ANSI**. Rio de Janeiro, Editora Campus, 1990. 289p. Livro Texto ([[Errata]])
* [[wp>C_language|Linguagem C]] (em inglês)
* [[wpbr>Linguagem_C|Linguagem C]] (em português)
[[http://prezi.com/6119qvt354ey/historia-do-unix/|História do Sistema Unix]]
~~NOCACHE~~
===== Calendário 2011/2 =====
{{iCalEvents>http://www.google.com/calendar/ical/otm5dmpccapbue6e753l12duho%40group.calendar.google.com/public/basic.ics}}
===== Apresentações =====
==== A história do Unix ====
===== Exercícios de aula =====
==== lab1 ====
Fazer um programa em C que:
- Crie um vetor de inteiros aleatórios com 100 elementos.
- Ordene este vetor.
- Faça uma busca binária neste vetor ordenado.
===== Trabalhos =====
* Turma 2012-1 : {{2006-1-sudoku.pdf}}
* Turma 2011-2 - [[Trabalho 2007-1| A Pequena donzela encarcerada]]
* Turma 2011-1 - [[Trabalho 2011-2|Kings' Birds ]]
* Turma 2010-2 - [[Trabalho 2006-2|Criptografia Assimétrica ]]
* Turma 2010-1 - [[Trabalho 2010-1| Aquém do 3D!]]
* Turma 2009-2 - [[Trabalho 2009-2| Me Parece um Celacanto]]
* Turma 2009-1 - [[Trabalho 2008-2| O Mundo de Darwin2]]
* Turma 2008-2 - [[Trabalho 2008-2| O Mundo de Darwin]]
* Turma 2008-1 - [[Trabalho 2008-1|Um gosto de Armagedon]]
* Turma 2007-2 - [[Trabalho 2007-2|Dilema dos Prisioneiros]]
* Turma 2007-1 - [[Trabalho 2007-1| A Pequena donzela encarcerada]]
* Turma 2006-2 - [[Trabalho 2006-2|Criptografia Assimétrica]]
* Turma 2006-1 : {{2006-1-sudoku.pdf}}
===== Provas =====
- [[c:Primeira Prova - 2010-2]]
- [[c:Segunda Prova - 2010-1]]
- [[c:Primeira Prova - 2010-1]]
- [[c:Primeira Prova - 2009-1]]
- [[c:Primeira Prova - 2008-2]]
- [[c:Segunda Prova - 2008-1]]
- [[c:Primeira Prova - 2008-1]] (com resolução)
- [[c:Primeira Prova - 2007-2]] (com resolução)
- [[c:Primeira Prova - 2007-1]]
- [[c:Segunda Prova - 2006-2]].
- [[Primeira Prova - 2006-2]].
- [[c:Primeira Prova - 2005-2]].
- [[c:Primeira Prova - 2005-1]] (com resolução).
{{:c:notas2008-2.png?498x368|Notas turma 2008-1 P1}}
**Gráfico para turma de 2008-2, primeira prova.**
===== Avaliação =====
- Duas provas P1 e P2 (peso 7)
- Um Trabalho T (peso 2)
- Listas de Exercícios: L1,L2...,Ln (peso 1)
===== Cálculo da Nota =====
{Média=} {0.7*{1/2}sum{n=1}{2}{P_n}}+0.2*T+0.1*{1/N}sum{n=1}{N}{L_n}
== Média com prova final ==
{Média Final=} {Média+PF}/2
===== Critérios =====
* Média >= 7,0 Aprovado
* Média <4,0 Reprovado
* Média >=4,0 e <7,0 Prova Final
* Média Final >=5,0 Aprovado
* Média Final <5 Reprovado
===== Write in C =====
{{youtube>large:XHosLhPEN3k}}
===== Compilador e S.O. =====
Durante o curso será utilizado o compilador GCC, e todos os programas serão corrigidos com este compilador em ambiente Linux.
===== Dicas =====
Para usar a biblioteca **math.h** com o gcc, use o comando **gcc -lm **. Esta opção linka seu programa com a **math.h**.
Para enviar caracteres de escape e controlar o console, podemos usar o **printf** e os caracteres de controle que são escritos dentro da string de formatação. Para isso, colocamos **\e[** antes do caracter de controle do console.
Os caracteres de escape do console no linux podem ser consultados com o comando **//man console_codes//**.
exemplo:
escreve em vermelho: **''printf("\e[31m %d",3);''**
escreve em preto: **''printf("\e[30m %d",3)''**
limpa a tela: **''printf("\e[H\e[2J");''**
melhor ainda, use um **#define** no início de seu programa e chame ele como uma função normal:
**
#define clrscr() printf("\e[H\e[2J")
**
Quando usamos um arquivo editado no Windows, pelo Notepad ou similares, o caractere de return é composto, na verdade, de dois caracteres. No Linux é composto apenas por um. Quando o arquivo é aberto, aparecem uns ^M no final de cada linha, que são os caracteres que sobraram.
Para eliminá-los no Linux, basta fazer em um console:
**''tr -d '\r' < arquivo_dos''**
se quiser pode redirecionar para ter outro arquivo como saída:
**''tr -d '\r' < arquivo_dos > arquivo_linux''**
Se você entrou no KDE e ele está uma bagunça e não dá nem mesmo para ver a barra de programas, você pode seguir o seguinte procedimento:
- Dê logout no sistema.
- Abra o console, apertando **CTRL+ALT+F2**.
- Faça seu login no modo texto.
- entre o comando **"cd .kde"**. Este comando é essencial. Não faça nada enquanto não fizer isto e ver no seu prompt a indicação de que você está dentro do diretório **".kde"**.
- Olhe de novo se você está dentro deste diretório.
- Agora que você tem certeza absoluta que está em **".kde"** (não diga que eu não avisei para você garantir isso). Faça: **"rm -R -f *"**. Isto vai apagar todas as suas configurações do kde, que estavam defeituosas.
- Faça logout do modo texto digitando **"exit"**.
- Pressione **CTRL+ALT+F7**, para entrar no modo gráfico.
- Faça login no modo gráfico e //voilà//! o kde deve estar normal agora.
Para acessar o pendrive nos laboratórios pelo linux, pode ser de duas maneiras:
- Em uma janela de console digitar "**mount /mnt/sda1**";
- Pelo konqueror acessar: midia de armazenamento e escolher o drive **sda1**.
obs: no caso da montagem ser a opção nro 1, o acesso ao pendrive também pode ser feito pelo konqueror.
//Definição das cores pelo console
#define PRETO "\e[40m \e[49m"
#define VERMELHO "\e[41m \e[49m"
#define VERDE "\e[42m \e[49m"
#define MARROM "\e[43m \e[49m"
#define AZUL "\e[44m \e[49m"
#define MAGENTA "\e[45m \e[49m"
#define CIANO "\e[46m \e[49m"
#define CINZA "\e[47m \e[49m"
printf(VERMELHO);
printf(VERDE);
printf(CINZA);
printf(MARROM);
printf(AZUL);
printf(PRETO);
printf(MAGENTA);
printf(CIANO);
printf(CIANO);