Home RecentChanges

Lesson01

Apresentação e funcionamento

Programa

  1. Linguagem de programação C.
  2. Análise e estudo da eficiência de algoritmos e estruturas de dados.
  3. Algoritmos de ordenação: inserção directa, selecção directa, bubblesort, quicksort, shellsort, heapsort e radixsort.
  4. Estruturas de dados: pilhas, filas de espera, filas de prioridade, amontoados, árvores e tabelas de dispersão.
  5. Grafos: representação, pesquisa em largura e profundidade, àrvores abrangentes de menor custo, caminhos mais curtos de fonte única.

Avaliação

Referências

Introdução à Linguagem C (K&R: Capitulo 1)

Hello world

     1	#include <stdio.h>
     2	#include <stdlib.h>
       
     3	int
     4	main(int argc, char * argv[])
     5	{
     6	    printf("Hello, world!\n");
       
     7	    return EXIT_SUCCESS;
     8	}
[aplf@darkstar ~]$ gcc -Wall -ansi -pedantic -o hello hello.c
[aplf@darkstar ~]$ ./hello 
Hello, world!
[aplf@darkstar ~]$

Ambiente de desenvolvimento

Sistema operativo Unix-like, por exemplo uma qualquer distribuição de GNU/Linux (nos laboratórios temos Debian), um dos BSD, incluindo o Mac OS X. Nas aulas vamos utilizar GNU C Compiler (gcc), o gdb e o valgrind para debugging, e um qualquer editor de texto (vi, emacs, vim, gedit, kate, textmate, sublime, jedit, etc.). Podem existir outros compiladores de C nos vossos sistemas, por exemplo o Clang no FreeBSD? e no Mac OS X, e que podem utilizar. Notar no entanto que os projectos serão compilados com o gcc no sistema de submissão.

Nota importante: quer o compilador quer as outras ferramentas podem não vir instaladas por omissão no sistema, caso em que teremos de as instalar (normalmente disponíveis através do gestor de pacotes).

Embora nas aulas não seja utilizado um IDE (Integrated Development Environment), seguindo a escolha na maioria das disciplinas da LEIC, sugerimos o Eclipse a todos aqueles que preferirem utilizar um IDE nesta disciplina.

Unix/Linux Command Reference. Linux Command. Command line reference for common operations.

No Técnico existe pelo menos um repositório de onde podemos fazer download de várias distribuições de Linux ou de um dos BSD: http://darkstar.ist.utl.pt/

É também possível aceder a um dos servidores disponíveis no IST e que têm todas as ferramentas necessárias, nomeadamente ao sigma.ist.utl.pt e ao nexus.rnl.ist.utl.pt. Para aceder a partir de um sistema Unix-like basta utilizar os comandos ssh, scp, e sftp para obter acesso a shell e para transferir ficheiros. A partir de um sistema Windows sugerimos a utilização do putty e ferramentas associadas (http://www.putty.org/).

Para instalar o ambiente de desenvolvimento em Mac OS X sugerimos seguir as instruções da Apple a respeito das Command Line Tools for Xcode package e do próprio Xcode. Ou, em alternativa, a utilização do Fink e/ou do OS X GCC Installer. No caso do Windows recomendamos o MinGW ou o Cygwin.

C vs Python (factorial como exemplo)

O factorial em python pode ser implementado como:

def factorial(n):
  if n == 0:
    return 1
  else:
    return n*factorial(n-1)

Em C podemos implementar da seguinte forma:

int factorial (int n)
{
  if (n == 1) {
    return 1;
  }
  else {
    return n*factorial(n-1);
  }
}

Principais diferenças:

Mais detalhes em C for Python programmers.