Академический Документы
Профессиональный Документы
Культура Документы
12 de Setembro de 2012
CFR EN-AEL RC SO-AED 1/50
Programa
Linguagem de programao C#. Estruturas de dados e algoritmos. Carga horria: 2 aulas tericas + 2 aulas prticas. Projecto: 2 projectos, individuais. Avaliao contnua: trabalhos semanais. Docente: Fernando Correia. Pgina da cadeira: http://www.engenheiros.pt/~rcorreia
CFR EN-AEL RC
SO-AED
2/50
Programa da cadeira
1
Linguagem C#
Variveis e Estruturas Bsicas Estruturas Dinmicas Chamadas a funes Funes recursivas
Sistemas Operativos
Introduo e principais caractersticas Processamento paralelo: threads Comunicao em rede: sockets
CFR EN-AEL RC
SO-AED
3/50
Avaliao
Componente terica (T): Repetio - 17DEZ12 Projecto (P): 1 projecto 40% + 2 projecto 60%. Nota de cada aluno ponderada pela discusso nal. 1 projecto entregar a: 11NOV12 2 projecto entregar (com relatrio) a: 14JAN13 2 projecto discusso a: 15JAN13 Avaliao contnua (C): mdia dos exerccios semanais. Nota nal = 40% P + 30% T + 30% C
CFR EN-AEL RC
SO-AED
4/50
Bibliograa
Rob Miles, C# Programming Department of Computer Science University of Hull
CFR EN-AEL RC
SO-AED
5/50
A linguagem de programao C#
O Microsoft Visual C# uma linguagem de programao vocacionada para aplicaes que usam o Microsoft .NET Framework . Herda as funcionalidades das linguagens C++ e Java, eliminando inconsistencias e anacronismos, resultando numa linguagem de programao mais limpa, fcil e lgica. A verso actual do C# a verso 4.0. O C# uma linguagem orientada por objectos, perfeitamente adaptado aos ambientes de funcionamento Windows, que est otimizada para o processamente paralelo de tarefas e funcionamento com as bibliotecas de comunicaes Windows Communication Foundation (WCF). uma linguagem de programao integrada no ambiente de desenvolvimento Microsoft Visual Studio 2010.
CFR EN-AEL RC SO-AED 6/50
Ferramentas a usar
Sistema Operativo
Windows XP Windows Vista Windows 7
CFR EN-AEL RC
SO-AED
7/50
AED - Parte I
CFR EN-AEL RC
SO-AED
8/50
Construo de um programa em C#
O C# uma linguagem de programao orientada por objectos, que deriva das linguagens C++ e JAVA. Uma boa politica de programao, dene que um programa deve ser desenhado por blocos, em que cada bloco agrupa um conjunto de funcionalidades relacionadas com o mesmo tema. Numa linguagem orientada por objectos, cada objecto deve ser desenhado num bloco especco, ou seja, cheiro. Esta soluo permite a reutilizao do cdigo. O arranque do programa escrito num objecto que contem o mtodo main(). Este objecto integra todos ou parte dos objectos necessrios ao funcionamento desse mesmo programa.
CFR EN-AEL RC SO-AED 9/50
Construo de um programa em C#
CFR EN-AEL RC
SO-AED
10/50
.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Heranca { class Program { static void Main(string [] args) { ClassY y = new ClassY(); y.Display(); ClassX x = y; x.Display();
Declarao de bibliotecas de sistema. Nome do programa e denio do ambiente de programao. Agrupa todas as classes afectas a este programa. Nome da classe que contem o mtodo main() Contedo do mtodo main().
CFR EN-AEL RC
SO-AED
11/50
Ol Mundo!
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace OlaMundo { class Program { static void Main(string [] args) { Console.WriteLine(Ol Mundo.); } } }
Bibliotecas de sistema Nome do ambiente de trabalho Classe que contm o mtodo main() Mtodo main() que recebe um vector de argumentos. Estes argumentos so passados para o programa atravs da linha de comandos. Apenas uma instruo Chamada ao mtodo WriteLine da classe Console Escreve uma string na consola String Ol mundo
CFR EN-AEL RC SO-AED
Converso de temperaturas
Construir um programa que converte temperaturas da escala Fahrenheit para escala Celsius
Fahrenheit 0 20 40 60 80 260 280 300 Celsius -17 -6 4 15 26 126 137 148
CFR EN-AEL RC
SO-AED
13/50
Converso de temperaturas
Desenvolvimento do algoritmo:
Programa
Executa as instrues em ciclo at efectuar o calculo de todas as temperaturas Dado o valor de temperatura na escala Fahrenheit Enquanto a temperatura for inferior ao limite superior, fazer:
Converte temperatura para graus Celsius Escreve resultado em tabela Aumenta o valor da temperatura Fahrenheit
CFR EN-AEL RC
SO-AED
14/50
Converso de temperaturas
Parmetros do algoritmo:
Limite inferior = 0 Limite superior = 300 Passo de incremento = 20
CFR EN-AEL RC
SO-AED
15/50
CFR EN-AEL RC
SO-AED
16/50
class Program { /* Escreve tabela de converso de temperaturas */ static void Main(string [] args) { int fahr, cels, inferior, superior, incremento; fahr = inferior; // iniciar a varivel fahr while(fahr <= superior){ // ciclo while cels = 5/9*(fahr-32);
CFR EN-AEL RC
SO-AED
17/50
static void Main(string [] args) { int fahr, cels; int inferior, superior, passo; inferior = 0; superior = 300; passo = 20;
Declarao de variveis Tipos bsicos: char, short, int, long, oat, double, bool Tipos complexos: estruturas, unies, tabelas e classes (objectos)
CFR EN-AEL RC SO-AED 18/50
int inferior, superior, passo; inferior = 0; superior = 300; passo = 20; fahr = inferior; // iniciar a varivel fahr while(fahr <= superior){ // ciclo while cels = 5/9 * (fahr-32);
CFR EN-AEL RC
SO-AED
19/50
Ciclo while Sintaxe: while(expresso) <instruo > Indentao ajuda a perceber a estrutura do programa Erro frequente: while(i >= 0); i = i-1;
CFR EN-AEL RC SO-AED 20/50
Console.WriteLine escrita formatada automtica Melhorar a formatao: necessrio converso de valores inteiros ou reais para strings. Problema: com inteiros, 0F so -17,8C e no -17C
CFR EN-AEL RC SO-AED 22/50
CFR EN-AEL RC
SO-AED
23/50
Principais diferenas: double cels; cels = 5.0/9.0 * (fahr-32); Console.WriteLine("{0,3:0}{1,10:0.00}", fahr, cels); Descrio:
inteiro depois da , - dimenso do campo sinal - depois da , - alinha informao esquerda sequncia de caracteres depois de : - formato de um nmero inteiro ou real
CFR EN-AEL RC
SO-AED
24/50
CFR EN-AEL RC
SO-AED
26/50
Algoritmo:
L um caracter Enquanto o resultado de ler caracter no for indicador m de texto, fazer:
Escreve caracter L prximo caracter
CFR EN-AEL RC
SO-AED
27/50
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace LerFicheiros { class Program { static void Main(string[] args) { int c; c = Console.Read(); while (c != ) { Console.WriteLine((char)c); c = Console.Read(); } Console.Write("\nCarregue numa tecla para terminar..."); Console.ReadKey();
Contagem de caracteres
Algoritmo:
Inicializa contador a 0 Enquanto o resultado de ler um caracter != m texto Incrementa contador Escreve contador
CFR EN-AEL RC
SO-AED
29/50
Contagem de caracteres
namespace ContaCaracteres { class Program { static void Main(string[] args) { long contador = 0; while (Console.Read() != ) contador++; Console.WriteLine("Li {0} caracteres da consola.", contador); Console.ReadKey();
Varivel do tipo long Pelo menos 64 bits para guardar um nmero inteiro Instruo de incremento da varivel contador Tipicamente mais eciente que: contador = contador + 1 Tambm h ++contador
CFR EN-AEL RC SO-AED 30/50
Contagem de linhas
Algoritmo:
Inicializa contador a 0 Enquanto o resultado de ler um caracter != m de texto Se caracter lido for == m de linha (\n) Incrementa contador Escreve contador
CFR EN-AEL RC
SO-AED
31/50
Contagem de linhas
namespace ContaLinhas { class Program { static void Main(string[] args) { int caracter, contador; contador = 0; caracter = Console.Read(); while(caracter != ){ if(caracter == \n) ++contador; caracter = Console.Read(); } Console.WriteLine(Nmero de linhas: {0}, contador);
Contagem de palavras
Algoritmo:
Estado toma o valor FORA Inicializa contador de caracteres, palavras e linhas a 0 Enquanto o resultado de ler um caracter != m de dados Incrementa contador de letras Se caracter lido for == m de linha (\n)
Incrementa contador de linhas
Escreve contadores
CFR EN-AEL RC
SO-AED
33/50
Contagem de palavras
namespace ContaPalavras { class Program { const int DENTRO = 1; // denio de constante const int FORA = 0; static void Main(string[] args) { int c, nl, np, nc, estado; estado = FORA; nl = np = nc = 0; c = Console.Read(); while (c != ){ nc++; if (c == \n) nl++; if (c == || c == \n || c == \t) estado = FORA; else if (estado == FORA) { estado = DENTRO; np++; } c = Console.Read(); } Console.WriteLine("Nr. Linhas: {0}\nNr. Palavras: {1}\nNr. Caracteres: {2}", nl, np, nc);
CFR EN-AEL RC
SO-AED
34/50
Contagem de palavras
static void Main(string[] args) { int c, nl, np, nc, estado; estado = FORA; nl = np = nc = 0; c = Console.Read(); while (c != ){ ++nc; if(c == \n) ++nl;
Contagem de palavras
if (c == || c == \n || c == \t) estado = FORA; else if(estado == FORA){ estado = DENTRO; ++np; }
Operador lgico de disjuno || Operador lgico de conjuno && (tem maior precedncia que ||) Os argumentos so avaliados da esquerda para a direita. Interrompe a avaliao quando o argumento for suciente para denir o valor da expresso
CFR EN-AEL RC
SO-AED
36/50
Contagem de palavras
if (c == || c == \n || c == \t) estado = FORA; else if(estado == FORA){ estado = DENTRO; ++np; }
CFR EN-AEL RC
SO-AED
37/50
Tabelas
Programa que conta ocorrncias de dgitos, espaos e de outros caracteres.
Algoritmo
Inicializa contadores dgitos, brancos e outros Enquanto resultado de ler caracter no indicador de m de cheiro, fazer:
Se caracter lido digito, ento Incrementa contador de dgito correspondente Seno, se caracter lido branco, ento: Incrementa contador de brancos Seno: Incrementa contador de outros
Escreve contadores
CFR EN-AEL RC
SO-AED
38/50
Tabelas
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Tabelas { class Program { static void Main(string[] args) { int c, i, nbrancos, noutros; int[] ndigitos; ndigitos = new int[10]; nbrancos = noutros = 0; for (i = 0; i < 10; i++) ndigitos[i] = 0; (cont.)
CFR EN-AEL RC SO-AED 39/50
Tabelas
c = Console.Read(); while (c != ) { if (c >= 0 && c <= 9) ++ndigitos[c - 0]; else if (c == || c == \n || c == \t) ++nbrancos; else ++noutros; c = Console.Read(); } Console.WriteLine("Digitos:"); for (i = 0; i < 10; i++) Console.WriteLine("{0,5:0} - {1}", i, ndigitos[i]); Console.WriteLine("\nEspaos em branco: {0}\nOutros: {1}", nbrancos, noutros); Console.ReadKey();
CFR EN-AEL RC
SO-AED
40/50
Tabelas
static void Main(string[] args) { int c, i, nbrancos, noutros; int[] ndigitos; ndigitos = new int[10]; nbrancos = noutros = 0;
Declarao de tabelas Varivel ndigitos uma tabela de 10 inteiros ndigitos[0], ndigitos[1], , ndigitos[9]
CFR EN-AEL RC
SO-AED
41/50
Tabelas
while (c != ) { if (c >= 0 && c <= 9) ++ndigitos[c - 0]; else if (c == || c == \n || c == \t) ++nbrancos; else ++noutros; c = Console.Read(); }
Os caracteres tambm so inteiros (cdigo ASCII) Valor do dgito c c-0 Funciona porque os dgitos aparecem seguidos nas tabelas de caracteres Utilizar valor do dgito como ndice, para guardar informao sobre o dgito numa tabela. Ex: ndigitos[2-0] representa o nmero de vezes que aparece o caracter 2
CFR EN-AEL RC SO-AED 42/50
Tabelas
if(c >= 0 && c <= 9) ++ndigitos[c-0]; else if(c == || c == \n || c == \t) ++nbrancos; else ++noutros;
CFR EN-AEL RC
SO-AED
43/50
Tabelas
if(c >= 0 && c <= 9) ++ndigitos[c-0]; else if(c == || c == \n || c == \t) ++nbrancos; else ++noutros;
Indentao crescente problemtica em instrues grandes Instruo switch semelhante a ifs encadeados
CFR EN-AEL RC
SO-AED
44/50
Mtodos
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Funcoes { class Program { static void Main(string[] args) { int i; for (i = 0; i < 10; i++) Console.WriteLine("{0} - {1,5:0}{2,10:0}", i, potencia(2, i), potencia(-3, i)); Console.ReadKey();
} (cont.)
CFR EN-AEL RC
SO-AED
45/50
Mtodos
static int potencia(int vbase, int vexpoente) { int i, p = 1; for (i = 1; i <= vexpoente; i++) p *= vbase; } return p;
Os Mtodos so procedimentos ou funes que esto includos nas classes. Fazem parte do conjunto de propriedades de cada objecto. Os Mtodos podem ser estticos (static) ou no. Diz-se que mtodos estticos fazem parte da classe mas no precisam de objecto. Um mtodo esttico apenas pode chamar directamente outros mtodos do tipo esttico. Caso contrrio, chamam propriedades afectas aos objectos. Os Mtodos podem aparecer em qualquer ordem dentro da classe.
CFR EN-AEL RC SO-AED 46/50
Mtodos
/* potencia: levanta base n-esima potencia; $n>=0$ */ static int potencia(int vbase, int vexpoente) { int i, p = 1; for(i = 1; i <= vexpoente; i++) p *= vbase; return p; } Parmetros formais de funo so variaveis locais do mtodo (inacessveis a partir de outros mtodos). Instruo return especica valor a retornar Um mtodo retorna sempre um valor do mesmo tipo com que foi declarado, excepto se for do tipo void
CFR EN-AEL RC SO-AED 47/50
CFR EN-AEL RC
SO-AED
49/50
Dvidas ?
CFR EN-AEL RC
SO-AED
50/50