SlideShare uma empresa Scribd logo
Conceitos Fundamentais de Programação Jorge C. S. Cardoso, Luís Gustavo Martins jorgecardoso@ieee.org, lmartins@porto.ucp.pt Cursos de Verão na Católica 2010
Apresentação Apresentação dos docentes Jorge  Cardoso - http://jorgecardoso.eu Luís  Gustavo  Martins - http://web.me.com/lgustavomartins Apresentação dos alunos Nome, background, expectativas... Âmbito deste curso Curso de nível introdutório Não requer conhecimentos prévios de programação Organizado em três módulos: 1 - Introdução aos princípios de programação 2 - Introdução aos princípios de Programação Orientada a Objectos (OOP) 3 - Programação para Android e iPhone
Apresentação Planos Futuros de Formação Avançada em: Programação  iOS  (iPhone, iPad, iPod Touch, ...) Programação  Android Programação  C++  e  openFramworks Programação  Java  e  Processing ... Formação Certificada em Som e Imagem da Escola das Artes da Universidade Católica http://www.artes.ucp.pt/criatividadedigital/
Introdução aos princípios de programação Conteúdo Introdução à Programação Conceitos e Definições Instalação de IDEs Linguagens de Programação Java e Objective C Estrutura do código fonte Hello World em Java e Objective C Programação em Java e Objective C Variáveis Operadores Condições Ciclos Arrays Apontadores Funções
O Que é Programar? Especificar um conjunto de  instruções  para serem executadas, seguindo uma determinada ordem, por uma máquina ou pessoa Exemplo Ligar o computador Esperar que o SO arranque Aceder ao Go do Finder Escolher a opção Connect to Server Esperar pela janela de login Inserir login e password Escolher o share igual ao login
Linguagens de Programação Um programa é uma sequência de números Interpretados como instruções pelo processador (CPU) Os primeiros “programadores” de computador escreviam programas em números muito sujeito a erros... muito trabalhoso... Criou-se uma linguagem mais fácil de decorar e utilizar, baseada em mnemónicas Assembly Language .model small .stack .data message db "Hello world, I'm learning Assembly !!!", "$" .code main proc mov ax,seg message mov ds,ax mov ah,09 lea dx,message int 21h mov ax,4c00h int 21h main endp end main
Linguagens de Programação O programa pode ser descrito usando vários tipos de linguagens: Natural   (e.g., Inglês) &quot; tell Finder to open myDocument.doc &quot; Diagrama   (e.g., fluxogramas) Programação  (e.g., Java, C, Obj-C, C++) void draw() { background(0); /* actualizar posição */ x = x + dirX; if ( x < minX || x > maxX ) {       dirX = -dirX;      x = x + dirX;      lX = x; }
Linguagens de Programação As linguagens de programação foram evoluindo para sintaxes mais próximas da linguagem natural Linguagens de alto-nível source:  http://chachatelier.fr/programmation/fichiers/cpp-objc-en.pdf
Linguagens de Programação Java Permite a criação de programas que podem ser executados em várias plataformas sem modificação A sua utilização tornou-se mais conhecida através das  applets pequenos programas que podem ser executados num browser. Os programas escritos em Java são compilados num código máquina virtual que é depois (aquando da execução do programa) transformado em código máquina real. Usada como linguagem preferencial nas  plataformas  Android
Linguagens de Programação Objective-C 2.0 Baseada na linguagem ANSI C, é uma linguagem de programação reflexiva orientada a objectos que implementa a transmissão de mensagens, ao estilo do Smalltalk. É utilizada principalmente no Apple Mac OS X e GNUstep, dois ambientes baseados no padrão OpenStep e é a principal linguagem utilizada em NeXTSTEP, OPENSTEP, Cocoa e dispositivos  Apple iOS (e.g. iPod Touch, iPhone e iPad) . Programas genéricos em Objective-C (que não façam uso destas bibliotecas) também podem ser  compilados  por qualquer sistema suportado pelo  gcc , que inclui um  compilador  Objective-C. Também conhecido como ObjC, Obj-C
Linguagens de Programação:    Conceitos de Hardware CPU (Central Processing Unit) é a parte de um sistema de computador que  executa as instruções  de um programa de computador RAM (Random Access Memory) É um tipo  de memória que permite a leitura e a escrita , utilizada como memória primária em sistemas electrónicos digitais. O termo acesso aleatório identifica a capacidade de acesso a qualquer posição em qualquer momento, por oposição ao acesso sequencial, imposto por alguns dispositivos de armazenamento, como fitas magnéticas Necessita de alimentação  para preservar os dados
Linguagens de Programação:   Conceitos de Hardware Memórias FLASH É uma  memória de computador  do tipo EEPROM (Electrically-Erasable Programmable Read-Only Memory) chip  re-escrevível  que, ao contrário de uma memória RAM convencional,  preserva o seu conteúdo sem a necessidade de fonte de alimentação comumente usada em cartões de memória, flash drives USB (pen drives), MP3 Players, dispositivos como câmeras digitais, leitores MP3, smart phones (incluindp iPhone e equipamentos Android)
Linguagens de Programação:  Código Fonte Texto que o programador escreve numa determinada linguagem de programação (e.g., ObjC, Java, ...) int addTwoNumbers( int num1, int num2 ) {     //This adds two numbers     return num1 + num2;     /* Some other comment     just to show how to do it     for multiple lines. */ }
Linguagens de Programação:  Código Máquina Instruções executadas directamente pelo processador O código máquina resulta de um processo de tradução do código fonte numa linguagem entendida directamente pelo processador (sequência de números) .code main proc mov ax,seg message mov ds,ax mov ah,09 lea dx,message int 21h mov ax,4c00h int 21h main endp end main
Linguagens de Programação:    Criação de um executável em ObjC   Compilador Converte código fonte (em ObjC) em código máquina (específico para cada CPU - e.g. Intel Atom, Apple A4) Código máquina gerado pelo compilador também conhecido como &quot;código objecto&quot; Linker Combina os diferentes módulos de código máquina (i.e. previamente compilados) e gera o ficheiro final que irá ser executado pela CPU  Permite o uso de bibliotecas disponibilizadas por terceiros (e.g. Cocoa, no iPhone)
Linguagens de Programação:    Criação de executável em Java Compilador A linguagem Java é compilada em código máquina para um processador virtual (máquina virtual) O código máquina resultante é chamado &quot;bytecode&quot; Em Java não existe necessidade de &quot;linkagem&quot; Uma aplicação Java consiste num conjunto destes ficheiros (e não apenas um) A máquina virtual trata de carregar para a memória os ficheiros necessários à medida que o programa executa
Linguagens de Programação: Máquina Virtual Java A máquina virtual Java é um processador que não existe fisicamente (apenas existe a sua especificação) Este processador virtual é implementado através de software em qualquer computador Para correr um programa Java temos de ter instalado este processador virtual (Java Virtual Machine - JVM) A vantagem é que o nosso programa corre em qualquer plataforma que tenha uma JVM instalada (só temos de compilar uma vez)
Estrutura do Código Fonte  Entry point:  main Existe sempre um  bloco principal que é o primeiro a ser executado  quando se lança o programa:  a função   main Java  (myProgram.java) public static void main(String args[])  {      System.out.println(&quot;Hello world&quot;); //write your code here! } ObjC(myProgram.m) int main( int argc, const char *argv[] ) {     NSAutoreasePool * pool = [[NSAutoReleasePool alloc] init];      NSLog(@&quot;hello world&quot;);  //write your code here!!        [pool drain];        return 0; }
Hello World em ObjC Abrir o XCode File -> New Project... Selecionar: Mac OS X  no menu esquerdo Command Line Tool  no menu superior direito Choose... Dar um nome ao projecto (e.g. HelloWorld) Seleccionar o ficheiro  HelloWorld.m Implementa a função  main Rever código em ObjC  Compilar e &quot;Linkar&quot; (i.e., Build) e executar   Seleccionar  Build and Run  no menu superior do XCode  
Hello World em ObjC 7. Verificar resultado na  Debugger Console  do XCode
Hello World em Java Abrir Eclipse File -> New -> Java Project Preencher o campo &quot;Project Name&quot; com HelloWorld e clicar &quot;Finish&quot; File -> New -> Class Preencher o campo &quot;Name&quot; com HelloWord e marcar a opção &quot;public static void main....&quot;   Substituir a linha: // TODO Auto-generated method stub com a instrução    System.out.println(&quot;Hello world&quot;); Executar o programa: Run -> Run Ver o resultado na &quot;Console&quot;
Introdução à Programação  Objective C e Java Comentários: Servem para o programador se ajudar a si mesmo a lembrar porque é que fez as coisas de determinada forma São ignoradas pelo compilador // - Comentário de uma linha /* */  - Comentário de várias linhas ;  - ponto e vírgula (semicolon); acaba quase todas as linhas de código ,  - vírgula (comma), separa parâmetros de funções Em Mac: { } – Chavetas (Curly braces): [Shift][Alt] + ( ou ) [ ] – Parentesis Rectos: [Alt] + ( ou ) int addTwoNumbers( int num1, int num2 ) {     //a comment: add the two numbers     int result = num1 + num2;      /* Some other comment     just to show how to do it     for multiple lines. */     return result; }
Programação em Java e ObjC: Variáveis Variáveis são uma forma de armazenar valores durante a execução de um programa Uma variável é um nome que podemos utilizar para nos referirmos a um valor Podemos alterar o valor durante o programa Sempre que o nome é utilizado no programa é automaticamente substituído pelo valor correspondente int someNumber; int anotherNumber; int result; someNumber = 3; anotherNumber = 2; //result stores the value 3 * 2 = 6 result = someNumber * anotherNumber; 
Programação em Java e ObjC: Variáveis Antes de podermos usar uma variável temos de a  declarar .  A declaração implica indicar o  tipo  de dados  que a variável vai guardar. Inteiros ( int, long )  Decimais ( float, double ) Lógicos ( boolean, BOOL ) Caracteres ( char ) <tipo> nomeDaVariavel; <tipo> nomeDaVariavel = <valorinicial>; http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html http://www.webtechexpress.com/lessons/lesson-5-objective-c-basic-data-types-and-literal-constants/  http://en.wikipedia.org/wiki/C_syntax#Primitive_data_types  int myNumber; long anotherNumber = 13; float aFloatNumber = 0.24; double aDoublePrecisionNumber = 1.23e2; //for ObjC BOOL isActive = true; //for JAVA boolean isActive = true; char aLetter = 'P';
Para guardarmos um valor numa variável temos de atribuí-lo à variável. minhaVariavel = <valor>; Aquilo que atribuimos a uma variável não tem de ser um valor simples; pode ser o resultado de uma expressão. Uma expressão pode ser: – Literal : Um valor escrito directamente no código  idade = 33;  // 33 é um literal – Variável : O valor de uma variável idade = idadeJoao;  // idadeJoao é outra variável – Função : O valor devolvido por uma função definida previamente idade = random(10);  // random é uma função  – Expressões anteriores ligadas com operadores aritméticos : Definição recursiva!                        idade = idadeJoao + 10 * 3; Programação em Java e ObjC: Variáveis
Algumas restrições no uso de nomes em variáveis: Nomes das variáveis devem começar com uma letra do alfabeto (dígitos não são permitidos) ou por um  underscore  (_) Nomes de variáveis podem conter letras e dígitos, mas espaços ou outros caracteres especiais não são permitidos. Os nomes de variáveis são  case sensitive  (e.g.  myNumber  é diferente de  mynumber) Palavras reservadas do ObjC ou do Java não podem ser usadas como nomes de variáveis (e.g. i nt, float, for, while, do, break , ...) Os nomes das variáveis devem ser escolhidos de forma a tornar o seu significado o mais claro e legível possível. Para um guia de  estilo em programação , ver http://geosoft.no/development/cppstyle.html (focado na linguagem C++, mas aplicável ao ObjC e Java) Programação em Java e ObjC: Variáveis
Programação em Java e ObjC: Operadores Operadores aritméticos +  (adição) -  (subtracção) *  (multiplicação) /  (divisão, inteira ou fraccionária) %  (resto da divisão inteira - modulo) Os operadores numa expressão são aplicados da esquerda para a direita, mas os operadores  * , / e  %  têm precedência sobre  +  e  - Se quisermos alterar a precedência, temos de usar parêntesis:   (  ) 1 + 2 * 3 = 1 + 6 = 7 (1 + 2) * 3 = 3 * 3 = 9
Programação em Java e ObjC: Exercício 1 Crie um programa em Java e ObjC que: Armazene em duas variáveis os valores 5 e 2 realize a divisão entre as variáveis (i.e. 5 / 2) guarde o resultado numa variável imprima o resultado da operação Decisões a tomar: Que tipo de variáveis definir? int, float, double , ...?? Que tipo a usar para o resultado da divisão? int, float, double,  ...?? Existem diferenças no resultado? divisão inteira VS divisão vírgula flutuante...
Programação em Java e ObjC: Exercício 1 ObjC #import <Foundation/Foundation.h> int main (int argc, const char * argv[])  {      NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];      int aNumber = 5;      int anotherNumber = 2;      float aFloat = 2.0;      float result;      result = aNumber / anotherNumber;      NSLog(@&quot;%d divided by %d is equal to %f&quot;, aNumber, anotherNumber, result);      //try other combinations of int, floats and check the division results...      [pool drain];      return 0; } Consultar a documentação do NSLog() no XCode Docs (ou na web)! http://developer.apple.com/iphone/library/documentation/cocoa/reference/foundation/Miscellaneous/Foundation_Functions/Reference/reference.html#//apple_ref/c/func/NSLog http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html
Programação em Java e ObjC: Exercício 1 Java public class Exercicio {      public static void main(String[] args) { int aNumber = 5; int anotherNumber = 2; float aFloat = 2.0f; float result; result = aNumber / anotherNumber; System.out.println(String.format(&quot;%d divided by %d is equal to %f&quot;, aNumber, anotherNumber, result)); } } Consultar a documentação do System.out.println e String.format  http://download.oracle.com/javase/1.5.0/docs/api/java/io/PrintStream.html#println(java.lang.String) http://download.oracle.com/javase/1.5.0/docs/api/java/lang/String.html#format(java.lang.String, java.lang.Object...)
Programação em Java e ObjC: Condições Em quase todos os programas é necessário executar algumas acções apenas se uma determinada condição for verdadeira...
Programação em Java e ObjC: Condições  if Na sua forma mais simples a estrutura  if  resume-se a executar um conjunto de acções se determinada condição for verdadeira.  As chavetas  { }  delimitam as acções executadas condicionalmente.  if ([condição])  {       [acções]  }
Programação em Java e ObjC: Condições  if A condição é uma expressão do tipo  boolean ,  BOOL   Literal  true  ou  false  Variável ( boolean, BOOL ) com o valor  true  ou  false   Expressão com  operadores condicionais //JAVA boolean isActive = true; //ObjC BOOL isActive = true; if(isActive) //eqv. a if (isActive == true) {      //do something...      isActive = false; }
Programação em Java e ObjC: Condições  if As condições usadas nos testes podem usar os operadores condicionais:  igual a:  ==   (atenção!)  maior do que:  >   menor do que:  <   maior ou igual a:  >=   menor ou igual a:  <=   diferente:  !=   O resultado de uma operação condicional é um valor  true  ou  false Em ObjC ao valor  false  corresponde o inteiro 0, e ao  true  corresponde qualquer valor diferente de 0 (normalmente 1)      int aNumber = 10; int anotherNumber = 6; //replace with boolean if in JAVA BOOL correct = false;  if(9 == aNumber)      correct = true; if (anotherNumber > aNumber)      aNumber = anotherNumber;     
Programação em Java e ObjC: Condições  if Algumas variantes da estrutura  if : If... Else...  If... Else if...  If... Else if... Else... Switch
Programação em Java e ObjC: Condições  if... else... O  if  também nos permite executar acções se a condição for falsa if (<condição>) { <acções A> //executado se a condição for true... } else {      <acções B> //executado se a condição for false... }
Programação em Java e ObjC: Condições  if... else... if É possível combinar  if s  sequencialmente if (<condição A>) {      <acções A> } else if (<condição B>){       <acções B> } else {       <acções C> }
Programação em Java e ObjC: Condições  switch É possível escolher de forma mais prática o caminho a executar se a escolha for baseada num valor numérico switch (<expressão>) {     case 1:          <Acções A>         break;     case 2:         <Acções B>         break;     case <X>:         <Acções X>         break;      default:          <Acções> }
Programação em Java e ObjC: Operadores Lógicos É possível testar condições complexas através dos operadores lógicos: operadores que combinam comparações simples: AND  : As duas comparações têm de ser verdadeiras ao mesmo tempo OR  : Pelo menos uma das comparações tem de ser verdadeiro NOT  : Inverte (i.e. nega) o valor da comparação
Programação em Java e ObjC: Operadores Lógicos Keywords  AND  :  && if (x > 10 && x < 20) { NSLog(@“Entre 10 e 20”); } OR  :  || if (x < 10 || x > 20) { NSLog(@“Fora do intervalo [10; 20]”); } NOT  :  ! if (!(x < 10)) { NSLog(@“X não é menor do que 10”); }
Programação em Java e ObjC: Exercício 2 Implemente em Java e ObjC um programa que: Defina 3 variáveis para armazenar três inteiros à escolha ( num1 ,  num2  e  num3 ) Teste se  num1  é igual, maior ou menor que  num2,  e imprima uma mensagem do tipo  &quot;7 é maior do que 3&quot;. No caso de  num1  ser menor que  num2 , verifique se  num3  está dentro do intervalo  [num1, num2] , e em caso afirmativo imprima uma mensagem do tipo  &quot;7 está entre 2 e 15&quot;. Divida  num1  por  num2 , imprimindo o resultado, tendo o cuidado de verificar se  num2  é diferente de zero! Divisões por zero em Java e ObjC provocam o &quot;crash&quot; da aplicação!
Programação em Java e ObjC: Exercício 2 ObjC int num1 = 5; int num2 = 12; int num3 = 7; if(num1 == num2){      NSLog(@&quot;%d is equal to %d&quot;, num1, num2); } else if(num1 > num2){      NSLog(@&quot;%d is bigger than %d&quot;, num1, num2); } else {      NSLog(@&quot;%d is smaller than %d&quot;, num1, num2);      if (num3 > num1 && num3 < num2) { NSLog(@&quot;%d is between %d and %d&quot;, num3, num1, num2);      } } if(num2 != 0){      NSLog(@&quot;A divisão de %d por %d é %f&quot;, num1, num2, (float)num1/num2); }
Programação em Java e ObjC: Exercício 2 Java int num1 = 5; int num2 = 12; int num3 = 7; if(num1 == num2) {      System.out.println(String.format(&quot;%d is equal to %d&quot;, num1, num2)); } else if(num1 > num2){      System.out.println(String.format(&quot;%d is bigger than %d&quot;, num1, num2)); } else {      System.out.println(String.format(&quot;%d is smaller than %d&quot;, num1, num2));        if (num3 > num1 && num3 < num2) {      System.out.println(String.format(&quot;%d is between %d and %d&quot;, num3, num1, num2));      } } if(num2 != 0){      System.out.println(String.format(&quot;A divisão de %d por %d é %f&quot;, num1, num2, (float)num1/num2)); }
Programação em Java e ObjC: Exercício 3 Implemente em Java e ObjC um programa que: Defina 2 variáveis para armazenar dois inteiros à escolha ( num1 ,  num2 ), Defina uma variável para armazenar um caractere, correspondente às 4 operações aritméticas ( '+', '-', '*', '/' ) Dependendo do caractere armazenado na variável definida no ponto 2, realize a operação correspondente, usando  num1  como o primeiro operador e  num2  como o segundo, imprimindo o resultado da operação. No caso de o caractere não ser uma operação reconhecida, deverá imprimir uma mensagem de erro. Não permita divisões por zero!
Programação em Java e ObjC: Exercício 3 ObjC int num1 = 5; int num2 = 2; char op = '/'; if(num2 == 0 && op == '/'){      NSLog(@&quot;second operator is zero valued --> impossible to perform division&quot;);      return -1; } switch (op) {      case '+': NSLog(@&quot;%d + %d = %d&quot;, num1, num2, num1+num2); break;      case '-': NSLog(@&quot;%d - %d = %d&quot;, num1, num2, num1-num2); break;      case '*':          NSLog(@&quot;%d * %d = %d&quot;, num1, num2, num1*num2); break;      case '/': NSLog(@&quot;%d / %d = %f&quot;, num1, num2, num1/(float)num2); break;      default: NSLog(@&quot;Operation not recognized...&quot;); break; }
Programação em Java e ObjC: Exercício 3 Java int num1 = 5; int num2 = 0; char op = '/'; if(num2 == 0 && op == '/'){      System.out.println(String.format(&quot;second operator is zero valued --> impossible to perform division&quot;));      return; }  switch (op) {      case '+':       System.out.println(String.format(&quot;%d + %d = %d&quot;, num1, num2, num1+num2)); break;      case '-':       System.out.println(String.format(&quot;%d - %d = %d&quot;, num1, num2, num1-num2)); break;      case '*':       System.out.println(String.format(&quot;%d * %d = %d&quot;, num1, num2, num1*num2)); break;      case '/':       System.out.println(String.format(&quot;%d / %d = %f&quot;, num1, num2, num1/(float)num2)); break;      default:       System.out.println(String.format(&quot;Operation not recognized...&quot;)); break; }
Programação em Java e ObjC: Ciclos Os ciclos permitem-nos executar um conjunto de instruções repetidamente Existem duas classes de ciclos: Ciclos que executam um  número pré-determinado de vezes :  for Ciclos que  executam enquanto uma condição é verdadeira :  do  e  while
Programação em Java e ObjC: Ciclos  for Executado um número pré-determinado de vezes for (<inicialização>; <condição>; <incremento>)  {      <acções> } Exemplo: for (int i = 0; i < 10; i++) {       NSLog(@&quot;Counting... %d&quot;, i); //ObjC } Variável de ciclo inicia-se em zero (e declara-se dentro do próprio ciclo) Condição simples com o limite de iterações Incremento da variável em uma unidade (através do operador incremento ++)
Programação em Java e ObjC: Ciclos  while Executa um conjunto de instruções enquanto uma condição for verdadeira O teste é feito  antes  da execução while (<condição>)  {      <acções> } Exemplo: int i = 0; while (i <= 10) {      NSLog(@&quot;Counting... %d&quot;, i);//ObjC      i = i + 1; }
Programação em Java e ObjC: Ciclos  do Executa um conjunto de instruções enquanto uma condição for verdadeira O teste é feito  depois  da execução do { <acções> } while (<condição>); Exemplo: int i = 0; do {      NSLog(@&quot;Counting... %d&quot;,i);      i = i + 1; } while (i <= 10);
Programação em Java e ObjC: Exercício 4 Implemente em Java e ObjC um programa que calcule uma  sequência de Fibonacci , segundo a seguinte relação recorrente: F(n) = F(n-1) + F(n-2), com F(0) = 0 e F(1) = 1 e.g.: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ... 4.1. Imprima os primeiros 100 números da sequência 4.2. Imprima todos os números da sequência inferiores a 10000  http://en.wikipedia.org/wiki/Fibonacci_number
Programação em Java e ObjC: Exercício 4.2 Implemente em Java e ObjC um programa que  Calcule uma  sequência de Fibonacci , segundo a seguinte relação recorrente: F(n) = F(n-1) + F(n-2), com F(0) = 0 e F(1) = 1 e.g.: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ... 4.1. Imprima os primeiros 100 números da sequência Reparou em algo estranho nos últimos números da sequência?!? (como podem surgir valores negativos de uma soma de valores positivos???) Numeric overflow! Em ObjC, numa implementação de 32 bits, o intervalo máximo de representação para um  unsigned int  é [0, 4294967295]; num sistema de 64 bits o intervalo aumenta para [0, 18446744073709551615]. Se os inteiros tiverem sinal ( int ) os intervalos passam a ser [-2147483648, +2147483647] e [−9223372036854775808, +9223372036854775807], para implementações 32-bit e 64-bit, respectivamente. Em ObjC, o número de bits usados para representações numéricas de inteiros (bem como valores de vírgula flutuante -  float, double ) depende da plataforma (i.e. da CPU e do próprio compilador).  Ao escrever um programa em ObjC, a única garantia que se tem e que um  int  terá no mínimo 32 bits. De forma a evitar problemas futuros quando se compila o código noutras plataformas, dever-se-á sempre assumir por omissão um intervalo de representação para  int  de 32 bits.    
Programação em Java e ObjC: Exercício 4.1 ObjC  (ver solução Java para uma implementação algorítmica mais eficiente)              unsigned long long int valN_2 = 0; //F(0) --> use long long for a 64 bit int!! unsigned long long int valN_1 = 1; //F(1) unsigned long long int valN; int numFibonacciNumbers = 100; NSLog(@&quot;Printing the first %d Fibonacci  numbers...&quot;, numFibonacciNumbers);          NSLog(@&quot;0 --> %d&quot;, valN_2); //F(0) NSLog(@&quot;1 --> %d&quot;, valN_1); //F(1)          for(int n=2; n<numFibonacciNumbers; n++) { valN = valN_1 + valN_2; //F(n) = F(n-1) + F(n-2) NSLog(@&quot;%d --> %qu&quot;, n, valN); //update stored values... valN_2 = valN_1;  valN_1 = valN; }
Programação em Java e ObjC: Exercício 4.1 Java      int numFibonacciNumbers = 100; long valN = 0; long valN_1 = 1; for (int n = 0; n < numFibonacciNumbers; n++) {      System.out.println(String.format(&quot;%d --> %d&quot;, n, valN));      valN = valN + valN_1;      valN_1 = valN - valN_1; }
Programação em Java e ObjC: Exercício 4.2 ObjC  (ver solução Java para uma implementação algorítmica mais eficiente)              unsigned long long int valN_2 = 0; //F(0) --> use long long for a 64 bit int!! unsigned long long int valN_1 = 1; //F(1) unsigned long long int valN; int maxFibonacciNumber = 10000; NSLog(@&quot;Printing the Fibonacci numbers < %d&quot;, maxFibonacciNumber); if(maxFibonacciNumber >= 0) NSLog(@&quot;>> %d&quot;, valN_2); //F(0) if (maxFibonacciNumber >= 1) NSLog(@&quot;>> %d&quot;, valN_1); //F(1) valN = valN_1 + valN_2; //F(2) = F(1) + F(0) while (valN <= maxFibonacciNumber) { NSLog(@&quot;>> %qu&quot;, valN); //update stored values... valN_2 = valN_1; valN_1 = valN; valN = valN_1 + valN_2; //F(n) = F(n-1) + F(n-2) }  
Programação em Java e ObjC: Exercício 4.2 Java     int maxFibonacciNumber = 0; int valN = 0; int valN_1 = 1; while ( valN <= maxFibonacciNumber) {      System.out.println(String.format(&quot;>> %d&quot;, valN));      valN = valN + valN_1;      valN_1 = valN - valN_1; }
Programação em Java e ObjC: Arrays Um array é um contentor de valores do  mesmo tipo armazenada numa  região contígua da memória RAM Um vector tem um  nome  e várias posições que podem ser acedidas através de um  índice  (entre parêntesis rectos [ ] ) : O índice tem de ser um valor  inteiro       idade[0] = 23;          idade[1] = 47;          idade[2] = 11;          idade[3] = 92;          idade[4] = 76;          int age = idade[3]; //age = 92
Tal como qualquer outra variável, é necessário indicar qual o tipo de valores que o array irá guardar.  É necessário também definir qual o tamanho do array, antes de o utilizar. Programação em Java e ObjC: Arrays - Declaração e Inicialização ObjC <tipo> meuArray[tamanho]; Exemplo: int idades[5]; Java <tipo> meuArray[]; meuArray = new <tipo>[tamanho]; Exemplo int idades[]; idades = new int[5];
Declarar e inicializar num só passo   int idade[] = {23, 47, 11, 92, 76}; Programação em Java e ObjC: Arrays - Declaração e Inicialização
Programação em Java e ObjC: Arrays   Indice é uma expressão do tipo inteiro Literal idade[1] Variável idade[i] Expressão complexa idade[2*i+n] Pode ser usado para percorrer um array através de um ciclo  for, while , ...
Programação em Java e ObjC: Arrays Percorrer os dados de um array Para leitura Para escrita O índice não deve ultrapassar o tamanho do array! int age = idade[5] // ERROR!!      int arraySize = 5; //escreve dados no array for (int i=0; i < arraySize; i++) {      //apenas um exemplo...          idade[i] = (i+1)*(i+1);  } //imprime idades inferiores a 20 for(int i=0; i < arraySize; i++) {      if (idade[i] < 20)          NSLog(@&quot;%d&quot;, idade[i]); }
Programação em Java e ObjC: Exercício 5 Implemente um programa em ObjC e Java que: guarde num array de valores inteiros 5 idades (e.g.,  {23, 47, 11, 92, 76} ) dada uma determinada idade, calcule as respectivas diferenças com as idade armazenadas no array criado no ponto anterior as diferenças de idade deverão ser sempre positivas! guarde as diferenças de idades num vector de inteiros, e imprima-as.  
Programação em Java e ObjC: Exercício 5 ObjC          int idade[] = {23, 47, 11, 92, 76}; int arraySize = 5; int dif[arraySize]; int age = 14; for(int i=0; i<arraySize; i++) { if(age > idade[i])      dif[i] = age - idade[i]; else      dif[i] = idade[i] - age; NSLog(@&quot;%d&quot;, dif[i]); }
Programação em Java e ObjC: Exercício 5 Java      int idade[] = {23, 47, 11, 92, 76};      int arraySize = 5;      int dif[] = new int[arraySize];      int age = 14;      for(int i=0; i<arraySize; i++) {          if(age > idade[i]) {              dif[i] = age - idade[i]; } else {              dif[i] = idade[i] - age; } System.out.println(String.format(&quot;%d&quot;, dif[i]));      }
Programação em ObjC: Apontadores Um apontador é uma referência para um qualquer elemento de dados (de um tipo particular - e.g.  int, float, char , ...), armazenado num qualquer lugar (i.e. endereço) de memória. é uma variável que guarda o endereço de memória onde está armazenado um determinado valor, ou dado int aNumber = 23; int *aNumberPtr;      aNumberPtr =  & aNumber; // get address NSLog(@&quot;Value of aNumber is: %d&quot;, aNumber); //23 NSLog(@&quot; Memory address  of aNumber is: %qX&quot;, aNumberPtr);//B745CD81 NSLog(@&quot; Value pointed  by aNumberPtr is: %d&quot;,  * aNumberPtr); //23 // change value pointed  by aNumberPtr (i.e. aNumber var) * aNumberPtr = 1234; NSLog(@&quot;Value pointed by aNumberPtr is now: %d&quot;,  * aNumberPtr); //1234 NSLog(@&quot;Value of aNumber is now also: %d&quot;, aNumber); //1234            
Programação em ObjC: Apontadores e Arrays Um apontador pode ser usado, de forma conveniente, para aceder a um array, ou até para &quot;simular&quot; um array No entanto, arrays e apontadores não são a mesma coisa! int idade[] = {23, 47, 11, 92, 76}; int  * ptr; // pointer  to int // o nome de um array é automaticamente e // convenientemente convertido num apontador! ptr = idade; // obtém o endereço do array idade NSLog(@&quot;%qX == %qX ?&quot;, ptr, idade); NSLog(@&quot;%d == %d ?&quot;, *ptr, idade[0]); //obtém o 1º valor do array NSLog(@&quot;%d == %d ?&quot;, *(ptr+3), idade[3]);//lê 4º valor do array NSLog(@&quot;%d == %d ?&quot;, *(ptr+2), *(idade+2));//lê 3º valor do array *(ptr+2) = 0; //altera valor do 3º elemento do array NSLog(@&quot;%d == %d ?&quot;, *(ptr+2), *(idade+2));//lê 3º valor do arr ay      
Programação em ObjC: Apontadores e Arrays Array de  char       char a[] = &quot;hello&quot;; char *p = &quot;world&quot;;
Programação em Java e ObjC: Exercício 6 Implemente um programa em ObjC que: guarde num array de valores inteiros 5 idades (e.g.,  {23, 47, 11, 92, 76} ) dada uma determinada idade, calcule as respectivas diferenças com as idade armazenadas no array criado no ponto anterior as diferenças de idade deverão ser sempre positivas! guarde as diferenças de idades num vector de inteiros, e imprima-as.   Usando apontadores em todos os acessos aos arrays!
Programação em Java e ObjC: Exercício 6 ObjC          int idade[] = {23, 47, 11, 92, 76}; int arraySize = 5; int dif[arraySize]; int age = 14; int *idadePtr = idade; int *difPtr = dif; for(int i=0; i<arraySize; i++) { if(age > *(idadePtr+i))      *(difPtr+i) = age - *(idadePtr+i); else      *(difPtr+i) = *(idadePtr+i) - age; NSLog(@&quot;%d&quot;, *(difPtr+i)); }
Uma função* é uma porção de código que  efectua uma tarefa específica .  A divisão de um programa em várias funções permite criar programas mais  estruturados , fáceis de manter e permite também a  reutilização  de código Na sua forma mais simples, uma função é um bloco de código com um nome que podemos usar em qualquer parte do programa para &quot;chamar&quot; e executar esse bloco de código Programação em Java e ObjC: Funções * Existem muitas designações para o conceito de  função : procedimento, rotina, subrotina,  método , subprograma. Todos eles significam a mesma coisa, mas são usados em diferentes contextos.
Programação em Java e ObjC: Funções Exemplo (Java):  public static void main(String args[])  {      System.out.println(&quot;Executa o programa&quot;);      fazTarefaEspecifica1(); //chamada a uma função!      fazTarefaEspecifica2(); //chamada a outra função! } void fazTarefaEspecifica_1() {      System.out.println(&quot;Esta função executa uma série de operações para completar a tarefa 1&quot;); } void fazTarefaEspecifica_2() {      System.out.println(&quot;Esta função executa uma série de operações para completar a tarefa 2&quot;); }
Sintaxe para definir a função      void nomeFunção()           {             //código da função...         } void  é um tipo especial que significa &quot;vazio&quot;, &quot;sem tipo&quot; e neste caso indica que a função não retorna qualquer valor (ver próximos slides) Para invocar (i.e., executar o código dentro da função)          nomeFunção(); Programação em Java e ObjC: Funções
Programação em Java e ObjC: Funções com Parâmetros Funções com  parâmetros Podem operar sobre dados diferentes de cada vez que executam. Neste caso, o código que chama a função deve passar os valores sobre os quais a função irá executar Para isso temos de parametrizar a função (i.e., definir que dados o programa principal deve enviar para a função) Uso de funções com parâmetros (de entrada) Sintaxe para definir  funções com parâmetros      void nomeFunção(<tipo> nomeParam1, <tipo> nomeParam2, [...])       {          //código da função...      } Para invocar (i.e., executar o código dentro da função)          nomeFunção(valorParam1, valorParam2);
Programação em Java e ObjC: Funções com Parâmetros Exemplo (Java) public static void main(String args[])  {      soma(1, 2); // escreve &quot;3&quot;      soma(3, 5); // escreve &quot;8&quot; } void soma(int num1, int num2)  {      int resultado;      resultado = num1 + num2;      System.out.println(resultado); }
Programação em Java e ObjC: Funções com valor de retorno Funções com  valor de retorno int  soma(int num1, int num2) Em funções como a anterior, faz mais sentido que a função  devolva o valor calculado  ao código que chamou a função (em vez de o imprimir, como em exemplos anteriores...) Para tal  a função deve indicar que retorna um valor e qual o seu tipo  (neste exemplo um  int ) Na implementação da função é obrigatório finalizar com um comando  return
Programação em Java e ObjC: Funções com valor de retorno Exemplo (Java) public static void main(String args[]) {      int num1;      int num2;      int r;      num1 = 1;      num2 = 2;      r = soma(1, 2);       System.out.println(String.format(&quot;%d&quot;, r)); } int  soma(int num1, int num2) {      int resultado;      resultado = num1 + num2;      return resultado;         }
Sintaxe para definir  funções com valor de retorno <tipo>  nomeFunção(<tipo> nomeParam1, <tipo> nomeParam2, [...])  {      //código da função...      return valorDeRetorno; } Para invocar (i.e., executar o código dentro da função) variavel =  nomeFunção(valorParam1, valorParam2); // Não é necessário atribuir o resultado a uma variável, pode ser usado directamente numa expressão ou usado como parâmetro para outra função Programação em Java e ObjC: Funções com valor de retorno
Programação em Java e ObjC: Exercício 7 Implemente um programa em Java/ObjC que: Permita calcular operações (+, -, /, *) sobre fracções (numerador/denominador) O programa deve ser estruturado em funções Uma função que recebe duas fracções (numerador1, denominador1, numerador2 e denominador2) e a operação a efectuar, e consoante a operação invoca outra função específica para a operação e retorna o resultado 
Programação em Java e ObjC: Exercício 7 Java (1/3) public static void main(String[] args) {      int num1 = 1;      int denom1 = 2;      int num2 = 2;      int denom2 = 3;      char op = '*';      operacao(num1, denom1, num2, denom2, op); }
Programação em Java e ObjC: Exercício 7 Java (2/3) static void operacao(int n1, int d1, int n2, int d2, char op) { int result[] = new int[2]; switch(op) { case '+': result = soma(n1, d1, n2, d2); break; case '-': result = subtraccao(n1, d1, n2, d2); break; case '*': result = multiplicacao(n1, d1, n2, d2); break; case '/': result = divisao(n1, d1, n2, d2); break; default: System.out.println(String.format(&quot;Operação não reconhecida&quot;)); } System.out.println(String.format(&quot;O resultado de %d/%d %c %d/%d é: %d/%d&quot;, n1, d1, op, n2, d2, result[0], result[1])); }
Programação em Java e ObjC: Exercício 7 Java (3/3) static int[] soma(int n1, int d1, int n2, int d2) {                 // result[0] guarda o numerador;                  // result[1] guarda o denominador int result[] = new int[2];  int resultNum, resultDenom; resultNum = n1*d2 + d1*n2; resultDenom = d1 * d2; result[0] = resultNum; result[1] = resultDenom; return result; }
Programação em Java e Obj-C: Visibilidade das variáveis As variáveis podem ser declaradas em vários sítios do programa fora de qualquer função (variável global) dentro de uma função (variável local à função) dentro de outros blocos de código: { } (ifs, ciclos, etc) O sítio onde são declaradas determina onde podem ser lidas/escritas Uma variável global pode ser usada em qualquer parte do programa Uma variável local apenas pode ser usada no bloco (função ou bloco de código) onde foi declarada, incluindo blocos internos a esse bloco
Programação em Java e Obj-C: Visibilidade das variáveis Se tentarmos usar uma variável local fora do bloco onde foi declarada, o compilador assinala um erro No entanto, é necessário algum cuidado quando as variáveis globais e locais têm o mesmo nome Nessa situação é usada a variável com menor visibilidade (a que foi declarada dentro do bloco superior hierarquicamente mais próximo)
Fim Cursos de Verão na Católica 2010 http://porto.ucp.pt/cvc/ Jorge C. S. Cardoso, Luís Gustavo Martins jorgecardoso@ieee.org, lmartins@porto.ucp.pt http://slideshare.net/jorgecardoso (tag: cvc2010)

Mais conteúdo relacionado

PDF
Conceitos e técnicas de programação aula 2
PDF
Conceitos e técnicas de programação apresentação
PDF
Conceitos e técnicas de programação introdução
PDF
Conceitos e técnicas de programação aula 1
PPTX
Algoritmos e Técnicas de Programação - Aula 01
PPTX
Algoritmos e Técnicas de Programação - Curso Completo
PPTX
Lógica e Matemática Computacional - Aula 04
PPTX
Algoritmos e Técnicas de Programação - Aula 03
Conceitos e técnicas de programação aula 2
Conceitos e técnicas de programação apresentação
Conceitos e técnicas de programação introdução
Conceitos e técnicas de programação aula 1
Algoritmos e Técnicas de Programação - Aula 01
Algoritmos e Técnicas de Programação - Curso Completo
Lógica e Matemática Computacional - Aula 04
Algoritmos e Técnicas de Programação - Aula 03

Mais procurados (20)

PPTX
Oficina de Lógica de Programação - Uso do Scratch e do GvR
PDF
Programação Estruturada 2 - Curso Completo
PPTX
Programação Estruturada 2 - Aula 01
PDF
Apostila de Introdução aos Algoritmos - usando o Visualg
PPTX
Algoritmos e Técnicas de Programação - Aula 05
PPT
Introdução à programação
PPTX
Programação Estruturada 2 - Aula 06
PDF
Maratona de Programação
PPTX
Algoritmos e Técnicas de Programação - Aula 02
PPTX
Linguagem de Programação Java
PDF
Aula 2 - Lógica de Programação
PDF
Introdução à Programação
PDF
Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...
PDF
Lógica de Programação - Unimep/Pronatec - Aula08
PPTX
Dicas para maratonas de programação
PDF
Aula 10 - Equivalência Java x Portugol Studio - parte 2
PDF
Conceitos e técnicas de programação aula 3
PDF
Linguagem C (UFRPE)
PPT
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
PDF
Apostila programação "pascalzim"
Oficina de Lógica de Programação - Uso do Scratch e do GvR
Programação Estruturada 2 - Curso Completo
Programação Estruturada 2 - Aula 01
Apostila de Introdução aos Algoritmos - usando o Visualg
Algoritmos e Técnicas de Programação - Aula 05
Introdução à programação
Programação Estruturada 2 - Aula 06
Maratona de Programação
Algoritmos e Técnicas de Programação - Aula 02
Linguagem de Programação Java
Aula 2 - Lógica de Programação
Introdução à Programação
Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...
Lógica de Programação - Unimep/Pronatec - Aula08
Dicas para maratonas de programação
Aula 10 - Equivalência Java x Portugol Studio - parte 2
Conceitos e técnicas de programação aula 3
Linguagem C (UFRPE)
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
Apostila programação "pascalzim"
Anúncio

Semelhante a Conceitos Fundamentais de Programacao (20)

PDF
Conceitos fundamentais de_programacao
PDF
Introdução à programação em Android e iOS - Conceitos fundamentais de program...
PPTX
Introdução à Programacao em Processing
PPT
Introdução a conceitos e a Praticas de Programação
PDF
Linguagem c wellington telles - aula 02
PDF
Linguagem c
PDF
Introdução à Linguagem de Programação C
PDF
Construção de compiladores - introducao Compilador.pdf
PPTX
Módulo 5 Arquitetura de Computadores
PDF
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
PDF
PPTX
Isc aula 7
PPTX
Geração de código linguagem c
PPT
Int. sistemas de informação iii
PDF
Curso C e C++ - Teoria PDF.pdf
PPTX
Programação de Microprocessadores
PDF
_Aula 1 - Introdução à Linguagem Java.pdf
PPTX
Curso de Java 1 - (Introdução Geral).pptx
Conceitos fundamentais de_programacao
Introdução à programação em Android e iOS - Conceitos fundamentais de program...
Introdução à Programacao em Processing
Introdução a conceitos e a Praticas de Programação
Linguagem c wellington telles - aula 02
Linguagem c
Introdução à Linguagem de Programação C
Construção de compiladores - introducao Compilador.pdf
Módulo 5 Arquitetura de Computadores
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
Isc aula 7
Geração de código linguagem c
Int. sistemas de informação iii
Curso C e C++ - Teoria PDF.pdf
Programação de Microprocessadores
_Aula 1 - Introdução à Linguagem Java.pdf
Curso de Java 1 - (Introdução Geral).pptx
Anúncio

Mais de Jorge Cardoso (20)

PDF
Criação de Ambientes de Realidade Virtual usando A-Frame - CubeCraft Toys -...
PDF
Criação de Ambientes de Realidade Virtual usando A-Frame
PDF
Journal of Science and Technology of the Arts
PPTX
Evaluation of Multi-Platform Mobile AR Frameworks for Roman Mosaic Augmentation
PPTX
ConímbrigAR A Prototype Augmented Mobile Application for Exploration of Roman...
PPTX
Digital tools for exploring roman mosaic
PPTX
Interaction techniques for locomotion in virtual reality
PPTX
Interacção em ambientes de realidade virtual
PDF
PhD defense presentation
PDF
Dynamic graphical user interface generation for web-based public display appl...
PDF
Evaluation of a programming toolkit for interactive public display applications
PDF
Interaction modalities, technologies and tools for interactive art
PDF
PuReWidgets toolkit
PPTX
PuReWidgets presentation at EICS 2012
PDF
PuReWidgets toolkit
PDF
Assessing Feedback for Indirect Shared Interaction
PDF
Oop java
PPTX
Computer vision techniques for interactive art
PPT
Introdução à Programação para iPhone (iOS)
PPT
Introdução à programação para Android
Criação de Ambientes de Realidade Virtual usando A-Frame - CubeCraft Toys -...
Criação de Ambientes de Realidade Virtual usando A-Frame
Journal of Science and Technology of the Arts
Evaluation of Multi-Platform Mobile AR Frameworks for Roman Mosaic Augmentation
ConímbrigAR A Prototype Augmented Mobile Application for Exploration of Roman...
Digital tools for exploring roman mosaic
Interaction techniques for locomotion in virtual reality
Interacção em ambientes de realidade virtual
PhD defense presentation
Dynamic graphical user interface generation for web-based public display appl...
Evaluation of a programming toolkit for interactive public display applications
Interaction modalities, technologies and tools for interactive art
PuReWidgets toolkit
PuReWidgets presentation at EICS 2012
PuReWidgets toolkit
Assessing Feedback for Indirect Shared Interaction
Oop java
Computer vision techniques for interactive art
Introdução à Programação para iPhone (iOS)
Introdução à programação para Android

Último (20)

PPTX
Filosofia Ocidental Antiga 2025 - versão atualizada
PPTX
MENDEL - Aula sobre Mendel - Genética EM
PPTX
Revolução Industrial - Aula Expositiva - 3U4.pptx
PDF
DAQUISIÇÃO E DESENVOLVIMENTO DA FALA 12 A 24 MESES
PPTX
Aula 13 - Tópico Frasal - Argumentação.pptx
PPT
História e Evolução dos Computadores domésticos
PDF
manual-orientacao-asb_5a8d6d8d87160aa636f63a5d0.pdf
PPTX
Trabalho Cidades sustentáveis ou Utopia.pptx
PDF
embriologia_animal_aula_share_2026_semestre
PPTX
NR11 - Treinamento Direcao Defensiva - 2023.pptx
PPTX
QuestõesENEMVESTIBULARPARAESTUDOSEAPRENDIZADO.pptx
PDF
A provisão de jojuador (ramadã) islamismo
PDF
A Revolução Francesa de 1789 slides história
PPTX
O Romantismo e a identidade brasileira..
PPTX
HISTÓRIA DO BRASIL - anos de Democracia.pptx
PDF
GESTÃO DA FASE PRÉ-ANALÍTICA- Recomendações da SBPC-ML (3).pdf
PPTX
A História da Europa na Baixa Idade Média.pptx
PPTX
ACIDOS NUCLEICOS - REPLICAÇÃO DO DNA - E.M.
PPTX
ELEMENTOS E FUNÇÕES DE LINGUAGEM (EMOTIVA, REFERENCIAL, CONATIVA, POÉTICA, FÁ...
PPT
sistema reprodutor para turmas do oitavo ano
Filosofia Ocidental Antiga 2025 - versão atualizada
MENDEL - Aula sobre Mendel - Genética EM
Revolução Industrial - Aula Expositiva - 3U4.pptx
DAQUISIÇÃO E DESENVOLVIMENTO DA FALA 12 A 24 MESES
Aula 13 - Tópico Frasal - Argumentação.pptx
História e Evolução dos Computadores domésticos
manual-orientacao-asb_5a8d6d8d87160aa636f63a5d0.pdf
Trabalho Cidades sustentáveis ou Utopia.pptx
embriologia_animal_aula_share_2026_semestre
NR11 - Treinamento Direcao Defensiva - 2023.pptx
QuestõesENEMVESTIBULARPARAESTUDOSEAPRENDIZADO.pptx
A provisão de jojuador (ramadã) islamismo
A Revolução Francesa de 1789 slides história
O Romantismo e a identidade brasileira..
HISTÓRIA DO BRASIL - anos de Democracia.pptx
GESTÃO DA FASE PRÉ-ANALÍTICA- Recomendações da SBPC-ML (3).pdf
A História da Europa na Baixa Idade Média.pptx
ACIDOS NUCLEICOS - REPLICAÇÃO DO DNA - E.M.
ELEMENTOS E FUNÇÕES DE LINGUAGEM (EMOTIVA, REFERENCIAL, CONATIVA, POÉTICA, FÁ...
sistema reprodutor para turmas do oitavo ano

Conceitos Fundamentais de Programacao

  • 1. Conceitos Fundamentais de Programação Jorge C. S. Cardoso, Luís Gustavo Martins jorgecardoso@ieee.org, lmartins@porto.ucp.pt Cursos de Verão na Católica 2010
  • 2. Apresentação Apresentação dos docentes Jorge Cardoso - http://jorgecardoso.eu Luís Gustavo Martins - http://web.me.com/lgustavomartins Apresentação dos alunos Nome, background, expectativas... Âmbito deste curso Curso de nível introdutório Não requer conhecimentos prévios de programação Organizado em três módulos: 1 - Introdução aos princípios de programação 2 - Introdução aos princípios de Programação Orientada a Objectos (OOP) 3 - Programação para Android e iPhone
  • 3. Apresentação Planos Futuros de Formação Avançada em: Programação iOS (iPhone, iPad, iPod Touch, ...) Programação Android Programação C++ e openFramworks Programação Java e Processing ... Formação Certificada em Som e Imagem da Escola das Artes da Universidade Católica http://www.artes.ucp.pt/criatividadedigital/
  • 4. Introdução aos princípios de programação Conteúdo Introdução à Programação Conceitos e Definições Instalação de IDEs Linguagens de Programação Java e Objective C Estrutura do código fonte Hello World em Java e Objective C Programação em Java e Objective C Variáveis Operadores Condições Ciclos Arrays Apontadores Funções
  • 5. O Que é Programar? Especificar um conjunto de instruções para serem executadas, seguindo uma determinada ordem, por uma máquina ou pessoa Exemplo Ligar o computador Esperar que o SO arranque Aceder ao Go do Finder Escolher a opção Connect to Server Esperar pela janela de login Inserir login e password Escolher o share igual ao login
  • 6. Linguagens de Programação Um programa é uma sequência de números Interpretados como instruções pelo processador (CPU) Os primeiros “programadores” de computador escreviam programas em números muito sujeito a erros... muito trabalhoso... Criou-se uma linguagem mais fácil de decorar e utilizar, baseada em mnemónicas Assembly Language .model small .stack .data message db &quot;Hello world, I'm learning Assembly !!!&quot;, &quot;$&quot; .code main proc mov ax,seg message mov ds,ax mov ah,09 lea dx,message int 21h mov ax,4c00h int 21h main endp end main
  • 7. Linguagens de Programação O programa pode ser descrito usando vários tipos de linguagens: Natural (e.g., Inglês) &quot; tell Finder to open myDocument.doc &quot; Diagrama (e.g., fluxogramas) Programação  (e.g., Java, C, Obj-C, C++) void draw() { background(0); /* actualizar posição */ x = x + dirX; if ( x < minX || x > maxX ) {       dirX = -dirX;      x = x + dirX;      lX = x; }
  • 8. Linguagens de Programação As linguagens de programação foram evoluindo para sintaxes mais próximas da linguagem natural Linguagens de alto-nível source:  http://chachatelier.fr/programmation/fichiers/cpp-objc-en.pdf
  • 9. Linguagens de Programação Java Permite a criação de programas que podem ser executados em várias plataformas sem modificação A sua utilização tornou-se mais conhecida através das applets pequenos programas que podem ser executados num browser. Os programas escritos em Java são compilados num código máquina virtual que é depois (aquando da execução do programa) transformado em código máquina real. Usada como linguagem preferencial nas plataformas Android
  • 10. Linguagens de Programação Objective-C 2.0 Baseada na linguagem ANSI C, é uma linguagem de programação reflexiva orientada a objectos que implementa a transmissão de mensagens, ao estilo do Smalltalk. É utilizada principalmente no Apple Mac OS X e GNUstep, dois ambientes baseados no padrão OpenStep e é a principal linguagem utilizada em NeXTSTEP, OPENSTEP, Cocoa e dispositivos  Apple iOS (e.g. iPod Touch, iPhone e iPad) . Programas genéricos em Objective-C (que não façam uso destas bibliotecas) também podem ser  compilados  por qualquer sistema suportado pelo  gcc , que inclui um  compilador  Objective-C. Também conhecido como ObjC, Obj-C
  • 11. Linguagens de Programação:   Conceitos de Hardware CPU (Central Processing Unit) é a parte de um sistema de computador que executa as instruções de um programa de computador RAM (Random Access Memory) É um tipo de memória que permite a leitura e a escrita , utilizada como memória primária em sistemas electrónicos digitais. O termo acesso aleatório identifica a capacidade de acesso a qualquer posição em qualquer momento, por oposição ao acesso sequencial, imposto por alguns dispositivos de armazenamento, como fitas magnéticas Necessita de alimentação para preservar os dados
  • 12. Linguagens de Programação:   Conceitos de Hardware Memórias FLASH É uma memória de computador do tipo EEPROM (Electrically-Erasable Programmable Read-Only Memory) chip re-escrevível que, ao contrário de uma memória RAM convencional, preserva o seu conteúdo sem a necessidade de fonte de alimentação comumente usada em cartões de memória, flash drives USB (pen drives), MP3 Players, dispositivos como câmeras digitais, leitores MP3, smart phones (incluindp iPhone e equipamentos Android)
  • 13. Linguagens de Programação:  Código Fonte Texto que o programador escreve numa determinada linguagem de programação (e.g., ObjC, Java, ...) int addTwoNumbers( int num1, int num2 ) {     //This adds two numbers     return num1 + num2;     /* Some other comment     just to show how to do it     for multiple lines. */ }
  • 14. Linguagens de Programação:  Código Máquina Instruções executadas directamente pelo processador O código máquina resulta de um processo de tradução do código fonte numa linguagem entendida directamente pelo processador (sequência de números) .code main proc mov ax,seg message mov ds,ax mov ah,09 lea dx,message int 21h mov ax,4c00h int 21h main endp end main
  • 15. Linguagens de Programação:   Criação de um executável em ObjC Compilador Converte código fonte (em ObjC) em código máquina (específico para cada CPU - e.g. Intel Atom, Apple A4) Código máquina gerado pelo compilador também conhecido como &quot;código objecto&quot; Linker Combina os diferentes módulos de código máquina (i.e. previamente compilados) e gera o ficheiro final que irá ser executado pela CPU Permite o uso de bibliotecas disponibilizadas por terceiros (e.g. Cocoa, no iPhone)
  • 16. Linguagens de Programação:   Criação de executável em Java Compilador A linguagem Java é compilada em código máquina para um processador virtual (máquina virtual) O código máquina resultante é chamado &quot;bytecode&quot; Em Java não existe necessidade de &quot;linkagem&quot; Uma aplicação Java consiste num conjunto destes ficheiros (e não apenas um) A máquina virtual trata de carregar para a memória os ficheiros necessários à medida que o programa executa
  • 17. Linguagens de Programação: Máquina Virtual Java A máquina virtual Java é um processador que não existe fisicamente (apenas existe a sua especificação) Este processador virtual é implementado através de software em qualquer computador Para correr um programa Java temos de ter instalado este processador virtual (Java Virtual Machine - JVM) A vantagem é que o nosso programa corre em qualquer plataforma que tenha uma JVM instalada (só temos de compilar uma vez)
  • 18. Estrutura do Código Fonte Entry point: main Existe sempre um bloco principal que é o primeiro a ser executado quando se lança o programa: a função main Java  (myProgram.java) public static void main(String args[])  {      System.out.println(&quot;Hello world&quot;); //write your code here! } ObjC(myProgram.m) int main( int argc, const char *argv[] ) {     NSAutoreasePool * pool = [[NSAutoReleasePool alloc] init];     NSLog(@&quot;hello world&quot;);  //write your code here!!        [pool drain];       return 0; }
  • 19. Hello World em ObjC Abrir o XCode File -> New Project... Selecionar: Mac OS X no menu esquerdo Command Line Tool no menu superior direito Choose... Dar um nome ao projecto (e.g. HelloWorld) Seleccionar o ficheiro HelloWorld.m Implementa a função main Rever código em ObjC  Compilar e &quot;Linkar&quot; (i.e., Build) e executar   Seleccionar  Build and Run no menu superior do XCode  
  • 20. Hello World em ObjC 7. Verificar resultado na  Debugger Console do XCode
  • 21. Hello World em Java Abrir Eclipse File -> New -> Java Project Preencher o campo &quot;Project Name&quot; com HelloWorld e clicar &quot;Finish&quot; File -> New -> Class Preencher o campo &quot;Name&quot; com HelloWord e marcar a opção &quot;public static void main....&quot;   Substituir a linha: // TODO Auto-generated method stub com a instrução    System.out.println(&quot;Hello world&quot;); Executar o programa: Run -> Run Ver o resultado na &quot;Console&quot;
  • 22. Introdução à Programação  Objective C e Java Comentários: Servem para o programador se ajudar a si mesmo a lembrar porque é que fez as coisas de determinada forma São ignoradas pelo compilador // - Comentário de uma linha /* */ - Comentário de várias linhas ; - ponto e vírgula (semicolon); acaba quase todas as linhas de código , - vírgula (comma), separa parâmetros de funções Em Mac: { } – Chavetas (Curly braces): [Shift][Alt] + ( ou ) [ ] – Parentesis Rectos: [Alt] + ( ou ) int addTwoNumbers( int num1, int num2 ) {     //a comment: add the two numbers     int result = num1 + num2;      /* Some other comment     just to show how to do it     for multiple lines. */     return result; }
  • 23. Programação em Java e ObjC: Variáveis Variáveis são uma forma de armazenar valores durante a execução de um programa Uma variável é um nome que podemos utilizar para nos referirmos a um valor Podemos alterar o valor durante o programa Sempre que o nome é utilizado no programa é automaticamente substituído pelo valor correspondente int someNumber; int anotherNumber; int result; someNumber = 3; anotherNumber = 2; //result stores the value 3 * 2 = 6 result = someNumber * anotherNumber; 
  • 24. Programação em Java e ObjC: Variáveis Antes de podermos usar uma variável temos de a declarar .  A declaração implica indicar o tipo de dados que a variável vai guardar. Inteiros ( int, long )  Decimais ( float, double ) Lógicos ( boolean, BOOL ) Caracteres ( char ) <tipo> nomeDaVariavel; <tipo> nomeDaVariavel = <valorinicial>; http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html http://www.webtechexpress.com/lessons/lesson-5-objective-c-basic-data-types-and-literal-constants/  http://en.wikipedia.org/wiki/C_syntax#Primitive_data_types  int myNumber; long anotherNumber = 13; float aFloatNumber = 0.24; double aDoublePrecisionNumber = 1.23e2; //for ObjC BOOL isActive = true; //for JAVA boolean isActive = true; char aLetter = 'P';
  • 25. Para guardarmos um valor numa variável temos de atribuí-lo à variável. minhaVariavel = <valor>; Aquilo que atribuimos a uma variável não tem de ser um valor simples; pode ser o resultado de uma expressão. Uma expressão pode ser: – Literal : Um valor escrito directamente no código idade = 33; // 33 é um literal – Variável : O valor de uma variável idade = idadeJoao; // idadeJoao é outra variável – Função : O valor devolvido por uma função definida previamente idade = random(10); // random é uma função  – Expressões anteriores ligadas com operadores aritméticos : Definição recursiva!                        idade = idadeJoao + 10 * 3; Programação em Java e ObjC: Variáveis
  • 26. Algumas restrições no uso de nomes em variáveis: Nomes das variáveis devem começar com uma letra do alfabeto (dígitos não são permitidos) ou por um  underscore  (_) Nomes de variáveis podem conter letras e dígitos, mas espaços ou outros caracteres especiais não são permitidos. Os nomes de variáveis são  case sensitive (e.g.  myNumber é diferente de mynumber) Palavras reservadas do ObjC ou do Java não podem ser usadas como nomes de variáveis (e.g. i nt, float, for, while, do, break , ...) Os nomes das variáveis devem ser escolhidos de forma a tornar o seu significado o mais claro e legível possível. Para um guia de estilo em programação , ver http://geosoft.no/development/cppstyle.html (focado na linguagem C++, mas aplicável ao ObjC e Java) Programação em Java e ObjC: Variáveis
  • 27. Programação em Java e ObjC: Operadores Operadores aritméticos +  (adição) -  (subtracção) *  (multiplicação) /  (divisão, inteira ou fraccionária) %  (resto da divisão inteira - modulo) Os operadores numa expressão são aplicados da esquerda para a direita, mas os operadores * , / e % têm precedência sobre + e - Se quisermos alterar a precedência, temos de usar parêntesis:  (  ) 1 + 2 * 3 = 1 + 6 = 7 (1 + 2) * 3 = 3 * 3 = 9
  • 28. Programação em Java e ObjC: Exercício 1 Crie um programa em Java e ObjC que: Armazene em duas variáveis os valores 5 e 2 realize a divisão entre as variáveis (i.e. 5 / 2) guarde o resultado numa variável imprima o resultado da operação Decisões a tomar: Que tipo de variáveis definir? int, float, double , ...?? Que tipo a usar para o resultado da divisão? int, float, double, ...?? Existem diferenças no resultado? divisão inteira VS divisão vírgula flutuante...
  • 29. Programação em Java e ObjC: Exercício 1 ObjC #import <Foundation/Foundation.h> int main (int argc, const char * argv[])  {      NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];      int aNumber = 5;      int anotherNumber = 2;      float aFloat = 2.0;      float result;      result = aNumber / anotherNumber;      NSLog(@&quot;%d divided by %d is equal to %f&quot;, aNumber, anotherNumber, result);      //try other combinations of int, floats and check the division results...      [pool drain];      return 0; } Consultar a documentação do NSLog() no XCode Docs (ou na web)! http://developer.apple.com/iphone/library/documentation/cocoa/reference/foundation/Miscellaneous/Foundation_Functions/Reference/reference.html#//apple_ref/c/func/NSLog http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html
  • 30. Programação em Java e ObjC: Exercício 1 Java public class Exercicio {      public static void main(String[] args) { int aNumber = 5; int anotherNumber = 2; float aFloat = 2.0f; float result; result = aNumber / anotherNumber; System.out.println(String.format(&quot;%d divided by %d is equal to %f&quot;, aNumber, anotherNumber, result)); } } Consultar a documentação do System.out.println e String.format  http://download.oracle.com/javase/1.5.0/docs/api/java/io/PrintStream.html#println(java.lang.String) http://download.oracle.com/javase/1.5.0/docs/api/java/lang/String.html#format(java.lang.String, java.lang.Object...)
  • 31. Programação em Java e ObjC: Condições Em quase todos os programas é necessário executar algumas acções apenas se uma determinada condição for verdadeira...
  • 32. Programação em Java e ObjC: Condições if Na sua forma mais simples a estrutura if resume-se a executar um conjunto de acções se determinada condição for verdadeira.  As chavetas { } delimitam as acções executadas condicionalmente.  if ([condição])  {       [acções]  }
  • 33. Programação em Java e ObjC: Condições if A condição é uma expressão do tipo boolean , BOOL   Literal true ou false  Variável ( boolean, BOOL ) com o valor true ou false   Expressão com operadores condicionais //JAVA boolean isActive = true; //ObjC BOOL isActive = true; if(isActive) //eqv. a if (isActive == true) {      //do something...      isActive = false; }
  • 34. Programação em Java e ObjC: Condições  if As condições usadas nos testes podem usar os operadores condicionais:  igual a: == (atenção!)  maior do que: >   menor do que: <   maior ou igual a: >=   menor ou igual a: <=   diferente: !=   O resultado de uma operação condicional é um valor true ou false Em ObjC ao valor false corresponde o inteiro 0, e ao true corresponde qualquer valor diferente de 0 (normalmente 1)      int aNumber = 10; int anotherNumber = 6; //replace with boolean if in JAVA BOOL correct = false;  if(9 == aNumber)      correct = true; if (anotherNumber > aNumber)      aNumber = anotherNumber;     
  • 35. Programação em Java e ObjC: Condições  if Algumas variantes da estrutura if : If... Else...  If... Else if...  If... Else if... Else... Switch
  • 36. Programação em Java e ObjC: Condições  if... else... O  if também nos permite executar acções se a condição for falsa if (<condição>) { <acções A> //executado se a condição for true... } else {      <acções B> //executado se a condição for false... }
  • 37. Programação em Java e ObjC: Condições  if... else... if É possível combinar if s sequencialmente if (<condição A>) {      <acções A> } else if (<condição B>){      <acções B> } else {      <acções C> }
  • 38. Programação em Java e ObjC: Condições  switch É possível escolher de forma mais prática o caminho a executar se a escolha for baseada num valor numérico switch (<expressão>) {     case 1:          <Acções A>         break;     case 2:         <Acções B>         break;     case <X>:         <Acções X>         break;      default:          <Acções> }
  • 39. Programação em Java e ObjC: Operadores Lógicos É possível testar condições complexas através dos operadores lógicos: operadores que combinam comparações simples: AND : As duas comparações têm de ser verdadeiras ao mesmo tempo OR : Pelo menos uma das comparações tem de ser verdadeiro NOT : Inverte (i.e. nega) o valor da comparação
  • 40. Programação em Java e ObjC: Operadores Lógicos Keywords AND : && if (x > 10 && x < 20) { NSLog(@“Entre 10 e 20”); } OR : || if (x < 10 || x > 20) { NSLog(@“Fora do intervalo [10; 20]”); } NOT : ! if (!(x < 10)) { NSLog(@“X não é menor do que 10”); }
  • 41. Programação em Java e ObjC: Exercício 2 Implemente em Java e ObjC um programa que: Defina 3 variáveis para armazenar três inteiros à escolha ( num1 , num2 e num3 ) Teste se num1 é igual, maior ou menor que num2, e imprima uma mensagem do tipo &quot;7 é maior do que 3&quot;. No caso de num1 ser menor que num2 , verifique se num3 está dentro do intervalo [num1, num2] , e em caso afirmativo imprima uma mensagem do tipo &quot;7 está entre 2 e 15&quot;. Divida num1 por num2 , imprimindo o resultado, tendo o cuidado de verificar se num2 é diferente de zero! Divisões por zero em Java e ObjC provocam o &quot;crash&quot; da aplicação!
  • 42. Programação em Java e ObjC: Exercício 2 ObjC int num1 = 5; int num2 = 12; int num3 = 7; if(num1 == num2){      NSLog(@&quot;%d is equal to %d&quot;, num1, num2); } else if(num1 > num2){      NSLog(@&quot;%d is bigger than %d&quot;, num1, num2); } else {      NSLog(@&quot;%d is smaller than %d&quot;, num1, num2);      if (num3 > num1 && num3 < num2) { NSLog(@&quot;%d is between %d and %d&quot;, num3, num1, num2);      } } if(num2 != 0){      NSLog(@&quot;A divisão de %d por %d é %f&quot;, num1, num2, (float)num1/num2); }
  • 43. Programação em Java e ObjC: Exercício 2 Java int num1 = 5; int num2 = 12; int num3 = 7; if(num1 == num2) {      System.out.println(String.format(&quot;%d is equal to %d&quot;, num1, num2)); } else if(num1 > num2){      System.out.println(String.format(&quot;%d is bigger than %d&quot;, num1, num2)); } else {      System.out.println(String.format(&quot;%d is smaller than %d&quot;, num1, num2));        if (num3 > num1 && num3 < num2) {     System.out.println(String.format(&quot;%d is between %d and %d&quot;, num3, num1, num2));      } } if(num2 != 0){      System.out.println(String.format(&quot;A divisão de %d por %d é %f&quot;, num1, num2, (float)num1/num2)); }
  • 44. Programação em Java e ObjC: Exercício 3 Implemente em Java e ObjC um programa que: Defina 2 variáveis para armazenar dois inteiros à escolha ( num1 , num2 ), Defina uma variável para armazenar um caractere, correspondente às 4 operações aritméticas ( '+', '-', '*', '/' ) Dependendo do caractere armazenado na variável definida no ponto 2, realize a operação correspondente, usando num1 como o primeiro operador e num2 como o segundo, imprimindo o resultado da operação. No caso de o caractere não ser uma operação reconhecida, deverá imprimir uma mensagem de erro. Não permita divisões por zero!
  • 45. Programação em Java e ObjC: Exercício 3 ObjC int num1 = 5; int num2 = 2; char op = '/'; if(num2 == 0 && op == '/'){      NSLog(@&quot;second operator is zero valued --> impossible to perform division&quot;);      return -1; } switch (op) {      case '+': NSLog(@&quot;%d + %d = %d&quot;, num1, num2, num1+num2); break;      case '-': NSLog(@&quot;%d - %d = %d&quot;, num1, num2, num1-num2); break;      case '*':          NSLog(@&quot;%d * %d = %d&quot;, num1, num2, num1*num2); break;      case '/': NSLog(@&quot;%d / %d = %f&quot;, num1, num2, num1/(float)num2); break;      default: NSLog(@&quot;Operation not recognized...&quot;); break; }
  • 46. Programação em Java e ObjC: Exercício 3 Java int num1 = 5; int num2 = 0; char op = '/'; if(num2 == 0 && op == '/'){      System.out.println(String.format(&quot;second operator is zero valued --> impossible to perform division&quot;));      return; } switch (op) {      case '+':      System.out.println(String.format(&quot;%d + %d = %d&quot;, num1, num2, num1+num2)); break;      case '-':      System.out.println(String.format(&quot;%d - %d = %d&quot;, num1, num2, num1-num2)); break;      case '*':      System.out.println(String.format(&quot;%d * %d = %d&quot;, num1, num2, num1*num2)); break;      case '/':      System.out.println(String.format(&quot;%d / %d = %f&quot;, num1, num2, num1/(float)num2)); break;      default:      System.out.println(String.format(&quot;Operation not recognized...&quot;)); break; }
  • 47. Programação em Java e ObjC: Ciclos Os ciclos permitem-nos executar um conjunto de instruções repetidamente Existem duas classes de ciclos: Ciclos que executam um número pré-determinado de vezes : for Ciclos que executam enquanto uma condição é verdadeira : do  e while
  • 48. Programação em Java e ObjC: Ciclos for Executado um número pré-determinado de vezes for (<inicialização>; <condição>; <incremento>)  {      <acções> } Exemplo: for (int i = 0; i < 10; i++) {       NSLog(@&quot;Counting... %d&quot;, i); //ObjC } Variável de ciclo inicia-se em zero (e declara-se dentro do próprio ciclo) Condição simples com o limite de iterações Incremento da variável em uma unidade (através do operador incremento ++)
  • 49. Programação em Java e ObjC: Ciclos  while Executa um conjunto de instruções enquanto uma condição for verdadeira O teste é feito antes da execução while (<condição>)  {      <acções> } Exemplo: int i = 0; while (i <= 10) {      NSLog(@&quot;Counting... %d&quot;, i);//ObjC      i = i + 1; }
  • 50. Programação em Java e ObjC: Ciclos  do Executa um conjunto de instruções enquanto uma condição for verdadeira O teste é feito depois da execução do { <acções> } while (<condição>); Exemplo: int i = 0; do {      NSLog(@&quot;Counting... %d&quot;,i);      i = i + 1; } while (i <= 10);
  • 51. Programação em Java e ObjC: Exercício 4 Implemente em Java e ObjC um programa que calcule uma sequência de Fibonacci , segundo a seguinte relação recorrente: F(n) = F(n-1) + F(n-2), com F(0) = 0 e F(1) = 1 e.g.: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ... 4.1. Imprima os primeiros 100 números da sequência 4.2. Imprima todos os números da sequência inferiores a 10000  http://en.wikipedia.org/wiki/Fibonacci_number
  • 52. Programação em Java e ObjC: Exercício 4.2 Implemente em Java e ObjC um programa que  Calcule uma sequência de Fibonacci , segundo a seguinte relação recorrente: F(n) = F(n-1) + F(n-2), com F(0) = 0 e F(1) = 1 e.g.: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ... 4.1. Imprima os primeiros 100 números da sequência Reparou em algo estranho nos últimos números da sequência?!? (como podem surgir valores negativos de uma soma de valores positivos???) Numeric overflow! Em ObjC, numa implementação de 32 bits, o intervalo máximo de representação para um unsigned int é [0, 4294967295]; num sistema de 64 bits o intervalo aumenta para [0, 18446744073709551615]. Se os inteiros tiverem sinal ( int ) os intervalos passam a ser [-2147483648, +2147483647] e [−9223372036854775808, +9223372036854775807], para implementações 32-bit e 64-bit, respectivamente. Em ObjC, o número de bits usados para representações numéricas de inteiros (bem como valores de vírgula flutuante - float, double ) depende da plataforma (i.e. da CPU e do próprio compilador).  Ao escrever um programa em ObjC, a única garantia que se tem e que um int terá no mínimo 32 bits. De forma a evitar problemas futuros quando se compila o código noutras plataformas, dever-se-á sempre assumir por omissão um intervalo de representação para int de 32 bits.    
  • 53. Programação em Java e ObjC: Exercício 4.1 ObjC  (ver solução Java para uma implementação algorítmica mais eficiente)              unsigned long long int valN_2 = 0; //F(0) --> use long long for a 64 bit int!! unsigned long long int valN_1 = 1; //F(1) unsigned long long int valN; int numFibonacciNumbers = 100; NSLog(@&quot;Printing the first %d Fibonacci  numbers...&quot;, numFibonacciNumbers);          NSLog(@&quot;0 --> %d&quot;, valN_2); //F(0) NSLog(@&quot;1 --> %d&quot;, valN_1); //F(1)          for(int n=2; n<numFibonacciNumbers; n++) { valN = valN_1 + valN_2; //F(n) = F(n-1) + F(n-2) NSLog(@&quot;%d --> %qu&quot;, n, valN); //update stored values... valN_2 = valN_1;  valN_1 = valN; }
  • 54. Programação em Java e ObjC: Exercício 4.1 Java      int numFibonacciNumbers = 100; long valN = 0; long valN_1 = 1; for (int n = 0; n < numFibonacciNumbers; n++) {      System.out.println(String.format(&quot;%d --> %d&quot;, n, valN));      valN = valN + valN_1;      valN_1 = valN - valN_1; }
  • 55. Programação em Java e ObjC: Exercício 4.2 ObjC  (ver solução Java para uma implementação algorítmica mais eficiente)              unsigned long long int valN_2 = 0; //F(0) --> use long long for a 64 bit int!! unsigned long long int valN_1 = 1; //F(1) unsigned long long int valN; int maxFibonacciNumber = 10000; NSLog(@&quot;Printing the Fibonacci numbers < %d&quot;, maxFibonacciNumber); if(maxFibonacciNumber >= 0) NSLog(@&quot;>> %d&quot;, valN_2); //F(0) if (maxFibonacciNumber >= 1) NSLog(@&quot;>> %d&quot;, valN_1); //F(1) valN = valN_1 + valN_2; //F(2) = F(1) + F(0) while (valN <= maxFibonacciNumber) { NSLog(@&quot;>> %qu&quot;, valN); //update stored values... valN_2 = valN_1; valN_1 = valN; valN = valN_1 + valN_2; //F(n) = F(n-1) + F(n-2) }  
  • 56. Programação em Java e ObjC: Exercício 4.2 Java     int maxFibonacciNumber = 0; int valN = 0; int valN_1 = 1; while ( valN <= maxFibonacciNumber) {      System.out.println(String.format(&quot;>> %d&quot;, valN));      valN = valN + valN_1;      valN_1 = valN - valN_1; }
  • 57. Programação em Java e ObjC: Arrays Um array é um contentor de valores do mesmo tipo armazenada numa região contígua da memória RAM Um vector tem um nome e várias posições que podem ser acedidas através de um índice (entre parêntesis rectos [ ] ) : O índice tem de ser um valor inteiro      idade[0] = 23;          idade[1] = 47;          idade[2] = 11;          idade[3] = 92;          idade[4] = 76;          int age = idade[3]; //age = 92
  • 58. Tal como qualquer outra variável, é necessário indicar qual o tipo de valores que o array irá guardar.  É necessário também definir qual o tamanho do array, antes de o utilizar. Programação em Java e ObjC: Arrays - Declaração e Inicialização ObjC <tipo> meuArray[tamanho]; Exemplo: int idades[5]; Java <tipo> meuArray[]; meuArray = new <tipo>[tamanho]; Exemplo int idades[]; idades = new int[5];
  • 59. Declarar e inicializar num só passo   int idade[] = {23, 47, 11, 92, 76}; Programação em Java e ObjC: Arrays - Declaração e Inicialização
  • 60. Programação em Java e ObjC: Arrays   Indice é uma expressão do tipo inteiro Literal idade[1] Variável idade[i] Expressão complexa idade[2*i+n] Pode ser usado para percorrer um array através de um ciclo for, while , ...
  • 61. Programação em Java e ObjC: Arrays Percorrer os dados de um array Para leitura Para escrita O índice não deve ultrapassar o tamanho do array! int age = idade[5] // ERROR!!     int arraySize = 5; //escreve dados no array for (int i=0; i < arraySize; i++) {      //apenas um exemplo...          idade[i] = (i+1)*(i+1);  } //imprime idades inferiores a 20 for(int i=0; i < arraySize; i++) {      if (idade[i] < 20)          NSLog(@&quot;%d&quot;, idade[i]); }
  • 62. Programação em Java e ObjC: Exercício 5 Implemente um programa em ObjC e Java que: guarde num array de valores inteiros 5 idades (e.g.,  {23, 47, 11, 92, 76} ) dada uma determinada idade, calcule as respectivas diferenças com as idade armazenadas no array criado no ponto anterior as diferenças de idade deverão ser sempre positivas! guarde as diferenças de idades num vector de inteiros, e imprima-as.  
  • 63. Programação em Java e ObjC: Exercício 5 ObjC          int idade[] = {23, 47, 11, 92, 76}; int arraySize = 5; int dif[arraySize]; int age = 14; for(int i=0; i<arraySize; i++) { if(age > idade[i])      dif[i] = age - idade[i]; else      dif[i] = idade[i] - age; NSLog(@&quot;%d&quot;, dif[i]); }
  • 64. Programação em Java e ObjC: Exercício 5 Java      int idade[] = {23, 47, 11, 92, 76};      int arraySize = 5;      int dif[] = new int[arraySize];      int age = 14;      for(int i=0; i<arraySize; i++) {          if(age > idade[i]) {              dif[i] = age - idade[i]; } else {              dif[i] = idade[i] - age; } System.out.println(String.format(&quot;%d&quot;, dif[i]));      }
  • 65. Programação em ObjC: Apontadores Um apontador é uma referência para um qualquer elemento de dados (de um tipo particular - e.g. int, float, char , ...), armazenado num qualquer lugar (i.e. endereço) de memória. é uma variável que guarda o endereço de memória onde está armazenado um determinado valor, ou dado int aNumber = 23; int *aNumberPtr;      aNumberPtr = & aNumber; // get address NSLog(@&quot;Value of aNumber is: %d&quot;, aNumber); //23 NSLog(@&quot; Memory address of aNumber is: %qX&quot;, aNumberPtr);//B745CD81 NSLog(@&quot; Value pointed by aNumberPtr is: %d&quot;, * aNumberPtr); //23 // change value pointed by aNumberPtr (i.e. aNumber var) * aNumberPtr = 1234; NSLog(@&quot;Value pointed by aNumberPtr is now: %d&quot;, * aNumberPtr); //1234 NSLog(@&quot;Value of aNumber is now also: %d&quot;, aNumber); //1234          
  • 66. Programação em ObjC: Apontadores e Arrays Um apontador pode ser usado, de forma conveniente, para aceder a um array, ou até para &quot;simular&quot; um array No entanto, arrays e apontadores não são a mesma coisa! int idade[] = {23, 47, 11, 92, 76}; int * ptr; // pointer to int // o nome de um array é automaticamente e // convenientemente convertido num apontador! ptr = idade; // obtém o endereço do array idade NSLog(@&quot;%qX == %qX ?&quot;, ptr, idade); NSLog(@&quot;%d == %d ?&quot;, *ptr, idade[0]); //obtém o 1º valor do array NSLog(@&quot;%d == %d ?&quot;, *(ptr+3), idade[3]);//lê 4º valor do array NSLog(@&quot;%d == %d ?&quot;, *(ptr+2), *(idade+2));//lê 3º valor do array *(ptr+2) = 0; //altera valor do 3º elemento do array NSLog(@&quot;%d == %d ?&quot;, *(ptr+2), *(idade+2));//lê 3º valor do arr ay      
  • 67. Programação em ObjC: Apontadores e Arrays Array de char       char a[] = &quot;hello&quot;; char *p = &quot;world&quot;;
  • 68. Programação em Java e ObjC: Exercício 6 Implemente um programa em ObjC que: guarde num array de valores inteiros 5 idades (e.g.,  {23, 47, 11, 92, 76} ) dada uma determinada idade, calcule as respectivas diferenças com as idade armazenadas no array criado no ponto anterior as diferenças de idade deverão ser sempre positivas! guarde as diferenças de idades num vector de inteiros, e imprima-as.   Usando apontadores em todos os acessos aos arrays!
  • 69. Programação em Java e ObjC: Exercício 6 ObjC          int idade[] = {23, 47, 11, 92, 76}; int arraySize = 5; int dif[arraySize]; int age = 14; int *idadePtr = idade; int *difPtr = dif; for(int i=0; i<arraySize; i++) { if(age > *(idadePtr+i))      *(difPtr+i) = age - *(idadePtr+i); else      *(difPtr+i) = *(idadePtr+i) - age; NSLog(@&quot;%d&quot;, *(difPtr+i)); }
  • 70. Uma função* é uma porção de código que efectua uma tarefa específica .  A divisão de um programa em várias funções permite criar programas mais estruturados , fáceis de manter e permite também a reutilização de código Na sua forma mais simples, uma função é um bloco de código com um nome que podemos usar em qualquer parte do programa para &quot;chamar&quot; e executar esse bloco de código Programação em Java e ObjC: Funções * Existem muitas designações para o conceito de função : procedimento, rotina, subrotina, método , subprograma. Todos eles significam a mesma coisa, mas são usados em diferentes contextos.
  • 71. Programação em Java e ObjC: Funções Exemplo (Java):  public static void main(String args[])  {      System.out.println(&quot;Executa o programa&quot;);      fazTarefaEspecifica1(); //chamada a uma função!      fazTarefaEspecifica2(); //chamada a outra função! } void fazTarefaEspecifica_1() {      System.out.println(&quot;Esta função executa uma série de operações para completar a tarefa 1&quot;); } void fazTarefaEspecifica_2() {      System.out.println(&quot;Esta função executa uma série de operações para completar a tarefa 2&quot;); }
  • 72. Sintaxe para definir a função      void nomeFunção()           {             //código da função...         } void  é um tipo especial que significa &quot;vazio&quot;, &quot;sem tipo&quot; e neste caso indica que a função não retorna qualquer valor (ver próximos slides) Para invocar (i.e., executar o código dentro da função)          nomeFunção(); Programação em Java e ObjC: Funções
  • 73. Programação em Java e ObjC: Funções com Parâmetros Funções com parâmetros Podem operar sobre dados diferentes de cada vez que executam. Neste caso, o código que chama a função deve passar os valores sobre os quais a função irá executar Para isso temos de parametrizar a função (i.e., definir que dados o programa principal deve enviar para a função) Uso de funções com parâmetros (de entrada) Sintaxe para definir  funções com parâmetros      void nomeFunção(<tipo> nomeParam1, <tipo> nomeParam2, [...])       {          //código da função...      } Para invocar (i.e., executar o código dentro da função)          nomeFunção(valorParam1, valorParam2);
  • 74. Programação em Java e ObjC: Funções com Parâmetros Exemplo (Java) public static void main(String args[])  {      soma(1, 2); // escreve &quot;3&quot;      soma(3, 5); // escreve &quot;8&quot; } void soma(int num1, int num2)  {      int resultado;      resultado = num1 + num2;      System.out.println(resultado); }
  • 75. Programação em Java e ObjC: Funções com valor de retorno Funções com valor de retorno int soma(int num1, int num2) Em funções como a anterior, faz mais sentido que a função devolva o valor calculado ao código que chamou a função (em vez de o imprimir, como em exemplos anteriores...) Para tal a função deve indicar que retorna um valor e qual o seu tipo  (neste exemplo um int ) Na implementação da função é obrigatório finalizar com um comando return
  • 76. Programação em Java e ObjC: Funções com valor de retorno Exemplo (Java) public static void main(String args[]) {      int num1;      int num2;      int r;      num1 = 1;      num2 = 2;      r = soma(1, 2);       System.out.println(String.format(&quot;%d&quot;, r)); } int soma(int num1, int num2) {      int resultado;      resultado = num1 + num2;      return resultado;        }
  • 77. Sintaxe para definir  funções com valor de retorno <tipo> nomeFunção(<tipo> nomeParam1, <tipo> nomeParam2, [...])  {      //código da função...      return valorDeRetorno; } Para invocar (i.e., executar o código dentro da função) variavel = nomeFunção(valorParam1, valorParam2); // Não é necessário atribuir o resultado a uma variável, pode ser usado directamente numa expressão ou usado como parâmetro para outra função Programação em Java e ObjC: Funções com valor de retorno
  • 78. Programação em Java e ObjC: Exercício 7 Implemente um programa em Java/ObjC que: Permita calcular operações (+, -, /, *) sobre fracções (numerador/denominador) O programa deve ser estruturado em funções Uma função que recebe duas fracções (numerador1, denominador1, numerador2 e denominador2) e a operação a efectuar, e consoante a operação invoca outra função específica para a operação e retorna o resultado 
  • 79. Programação em Java e ObjC: Exercício 7 Java (1/3) public static void main(String[] args) {      int num1 = 1;      int denom1 = 2;      int num2 = 2;      int denom2 = 3;      char op = '*';      operacao(num1, denom1, num2, denom2, op); }
  • 80. Programação em Java e ObjC: Exercício 7 Java (2/3) static void operacao(int n1, int d1, int n2, int d2, char op) { int result[] = new int[2]; switch(op) { case '+': result = soma(n1, d1, n2, d2); break; case '-': result = subtraccao(n1, d1, n2, d2); break; case '*': result = multiplicacao(n1, d1, n2, d2); break; case '/': result = divisao(n1, d1, n2, d2); break; default: System.out.println(String.format(&quot;Operação não reconhecida&quot;)); } System.out.println(String.format(&quot;O resultado de %d/%d %c %d/%d é: %d/%d&quot;, n1, d1, op, n2, d2, result[0], result[1])); }
  • 81. Programação em Java e ObjC: Exercício 7 Java (3/3) static int[] soma(int n1, int d1, int n2, int d2) {                 // result[0] guarda o numerador;                 // result[1] guarda o denominador int result[] = new int[2];  int resultNum, resultDenom; resultNum = n1*d2 + d1*n2; resultDenom = d1 * d2; result[0] = resultNum; result[1] = resultDenom; return result; }
  • 82. Programação em Java e Obj-C: Visibilidade das variáveis As variáveis podem ser declaradas em vários sítios do programa fora de qualquer função (variável global) dentro de uma função (variável local à função) dentro de outros blocos de código: { } (ifs, ciclos, etc) O sítio onde são declaradas determina onde podem ser lidas/escritas Uma variável global pode ser usada em qualquer parte do programa Uma variável local apenas pode ser usada no bloco (função ou bloco de código) onde foi declarada, incluindo blocos internos a esse bloco
  • 83. Programação em Java e Obj-C: Visibilidade das variáveis Se tentarmos usar uma variável local fora do bloco onde foi declarada, o compilador assinala um erro No entanto, é necessário algum cuidado quando as variáveis globais e locais têm o mesmo nome Nessa situação é usada a variável com menor visibilidade (a que foi declarada dentro do bloco superior hierarquicamente mais próximo)
  • 84. Fim Cursos de Verão na Católica 2010 http://porto.ucp.pt/cvc/ Jorge C. S. Cardoso, Luís Gustavo Martins jorgecardoso@ieee.org, lmartins@porto.ucp.pt http://slideshare.net/jorgecardoso (tag: cvc2010)