SlideShare uma empresa Scribd logo
1 de 83
Baixar para ler offline
Conceitos Fundamentais de
      Programação
  Cursos de Verão na Católica 2011




    Jorge C. S. Cardoso, Luís Gustavo Martins
  jorgecardoso@ieee.org, lmartins@porto.ucp.pt
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
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?
● Indicar um conjunto de instruções para serem
  executadas, seguindo uma determinada ordem, por uma
  máquina
● Semelhante ao que fazemos quando queremos dar
  instruções a uma pessoa
    ○ Instruções para aceder a uma pasta de rede
        ■ Ligar o computador
        ■ Esperar que o S.O. arranque
        ■ Aceder ao Go do Finder
        ■ Escolher a opção Connect to Server
        ■ Escrever o nome do servidor
        ■ Clicar “Connect”
        ■ Esperar pela janela de login
        ■ Inserir login e password
Linguagens de Programação
                                          .model small
                                          .stack
● Um programa é uma sequência de          .data
                                          message db "Hello world, I'm learning Assembly
  números                                 !!!", "$"
   ○ Interpretados como instruções pelo
     processador (CPU)                    .code

                                          main proc
● Os primeiros “programadores” de         mov ax,seg message
  computador escreviam programas em       mov ds,ax
  números                                 mov ah,09
   ○ muito sujeito a erros...             lea dx,message
   ○ muito trabalhoso...                  int 21h

                                          mov ax,4c00h
● Criou-se uma linguagem mais fácil de    int 21h
  decorar e utilizar, baseada em          main endp
                                          end main
  mnemónicas
   ○ Assembly Language
Linguagens de Programação
● O programa pode ser descrito usando
  vários tipos de linguagens:
  ○ Natural (e.g., Inglês)
        ■ "tell Finder to open myDocument.doc"

  ○ 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               .code

                                            main proc
● Instruções executadas directamente pelo   mov ax,seg message
  processador                               mov ds,ax

                                            mov ah,09
● O código máquina resulta de um            lea dx,message
                                            int 21h
  processo de tradução do código fonte
                                            mov ax,4c00h
  numa linguagem entendida directamente     int 21h
  pelo processador (sequência de            main endp
                                            end main
  números)
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 "código
     objecto"

● 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
      "bytecode"

● Em Java não existe necessidade de "linkagem"
   ○ 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("Hello world"); //write your code here!
        }


        ObjC(myProgram.m)
        int main( int argc, const char *argv[] )
        {
           NSAutoreasePool * pool = [[NSAutoReleasePool alloc] init];
           NSLog(@"hello world"); //write your code here!!

            [pool drain];

            return 0;
        }
Hello World em ObjC
1. Abrir o XCode

2. File -> New Project...

3. Seleccionar:
     ○ Mac OS X no menu esquerdo
     ○ Command Line Tool no menu superior direito
     ○ Choose...

1. Dar um nome ao projecto (e.g. HelloWorld)

2. Seleccionar o ficheiro HelloWorld.m
     ○ Implementa a função main
     ○ Rever código em ObjC

3. Compilar e "Linkar" (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 "Project Name" com
  HelloWorld e clicar "Finish"

● File -> New -> Class

● Preencher o campo "Name" com HelloWord e
  marcar a opção "public static void main...."

● Substituir a linha:
     ○ // TODO Auto-generated method stub

● com a instrução
     ○ System.out.println("Hello world");

● Executar o programa: Run -> Run

● Ver o resultado na "Console"
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
    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                       Em Mac:
       for multiple lines. */                              ● { } – Chavetas (Curly braces): [Shift][Alt] + ( ou )
   ○ //- Comentário de uma linha                     ● [ ] – Parentesis Rectos: [Alt] + ( ou )
   ○ /* */ Comentário de várias linhas
       return-result;
   ○} ; - ponto e vírgula (semicolon); acaba quase todas as linhas de código
   ○ , - vírgula (comma), separa parâmetros de funções
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 utilizamos 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)                                 int myNumber;
                                                                          long anotherNumber = 13;
                   ■ Decimais (float, double)
                   ■ Lógicos (boolean, BOOL)                              float aFloatNumber = 0.24;
                                                                          double aDoublePrecisionNumber = 1.23e2;
                   ■ Caracteres (char)
                                                                          //for ObjC
  <tipo> nomeDaVariavel;                                                  BOOL isActive = true;
  <tipo> nomeDaVariavel = <valorinicial>;
                                                                          //for JAVA
                                                                          boolean isActive = true;

                                                                          char aLetter = 'P';




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
Programação em Java e ObjC:
                                        Variáveis

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:
   1. Nomes das variáveis devem começar com uma letra do alfabeto (dígitos não são
      permitidos) ou por um underscore (_)
   2. Nomes de variáveis podem conter letras e dígitos, mas espaços ou outros
      caracteres especiais não são permitidos.
   3. Os nomes de variáveis são case sensitive (e.g. myNumber é diferente de
      mynumber)
   4. Palavras reservadas do ObjC ou do Java não podem ser usadas como nomes
      de variáveis (e.g. int, float, for, while, do, break, ...)
   5. Os nomes das variáveis devem ser escolhidos de forma a tornar o seu
      significado o mais claro e legível possível.

   6. 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:
                         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:
   1. Armazene em duas variáveis os valores 5 e 2
   2. realize a divisão entre as variáveis (i.e. 5 / 2)
   3. guarde o resultado numa variável
   4. 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(@"%d divided by %d is equal to %f", 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("%d divided by %d is equal to %f",
             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:             int aNumber = 10;
                                        int anotherNumber = 6;
   ○ igual a: == (atenção!)
   ○ maior do que: >                    //replace with boolean if in JAVA
                                        BOOL correct = false;
   ○ menor do que: <
                                        if(9 == aNumber)
   ○ maior ou igual a: >=                  correct = true;
   ○ menor ou igual a: <=
                                        if (anotherNumber > aNumber)
   ○ diferente: !=                         aNumber = anotherNumber;



● 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)
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 ifs
   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:
  1. Defina 3 variáveis para armazenar três inteiros à escolha (num1,
     num2 e num3)
  2. Teste se num1 é igual, maior ou menor que num2, e imprima uma
     mensagem do tipo "7 é maior do que 3".
  3. 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 "7 está entre 2 e 15".
  4. 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:
           ■ Se operandos inteiros: provocam o "crash" da aplicação!
           ■ Se operandos com vírgula flutuante: resulta em Infinity
Programação em Java e ObjC:
                                 Exercício 2
● ObjC   int num1 = 5;
         int num2 = 12;
         int num3 = 7;
         if(num1 == num2){
            NSLog(@"%d is equal to %d", num1, num2);
         }
         else if(num1 > num2){
            NSLog(@"%d is bigger than %d", num1, num2);
         }
         else {
            NSLog(@"%d is smaller than %d", num1, num2);
            if (num3 > num1 && num3 < num2) {
         NSLog(@"%d is between %d and %d", num3, num1, num2);
            }
         }

         if(num2 != 0){
            NSLog(@"A divisão de %d por %d é %f", 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("%d is equal to %d", num1, num2));
} else if(num1 > num2){
   System.out.println(String.format("%d is bigger than %d", num1, num2));
} else {
   System.out.println(String.format("%d is smaller than %d", num1, num2));

    if (num3 > num1 && num3 < num2) {
    System.out.println(String.format("%d is between %d and %d", num3, num1, num2));
    }
}

if(num2 != 0){
   System.out.println(String.format("A divisão de %d por %d é %f", num1, num2, (float)num1/num2));
}
Programação em Java e ObjC:
                       Exercício 3
● Implemente em Java e ObjC um programa que:
  1. Defina 2 variáveis para armazenar dois inteiros à escolha (num1,
     num2),
  2. Defina uma variável para armazenar um caractere, correspondente
     às 4 operações aritméticas ('+', '-', '*', '/')
  3. 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.
  4. No caso de o caractere não ser uma operação reconhecida, deverá
     imprimir uma mensagem de erro.
  5. Não permita divisões por zero!
Programação em Java e ObjC:
● ObjC                                             Exercício 3
int num1 = 5;
int num2 = 2;
char op = '/';
if(num2 == 0 && op == '/'){
   NSLog(@"second operator is zero valued --> impossible to perform division");
   return -1;
}
switch (op) {
   case '+':
NSLog(@"%d + %d = %d", num1, num2, num1+num2);
break;
   case '-':
NSLog(@"%d - %d = %d", num1, num2, num1-num2);
break;
   case '*':
      NSLog(@"%d * %d = %d", num1, num2, num1*num2);
break;
   case '/':
NSLog(@"%d / %d = %f", num1, num2, num1/(float)num2);
break;
   default:
NSLog(@"Operation not recognized...");
break;
}
Programação em Java e ObjC:
 ● Java                                                  Exercício 3
int num1 = 5;
int num2 = 0;
char op = '/';
if(num2 == 0 && op == '/'){
   System.out.println(String.format("second operator is zero valued --> impossible to perform division"));
   return;
}
switch (op) {
   case '+':
    System.out.println(String.format("%d + %d = %d", num1, num2, num1+num2));
break;
   case '-':
    System.out.println(String.format("%d - %d = %d", num1, num2, num1-num2));
break;
   case '*':
    System.out.println(String.format("%d * %d = %d", num1, num2, num1*num2));
break;
   case '/':
    System.out.println(String.format("%d / %d = %f", num1, num2, num1/(float)num2));
break;
   default:
    System.out.println(String.format("Operation not recognized..."));
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(@"Counting... %d", 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(@"Counting... %d", 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(@"Counting... %d",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(@"Printing the first %d Fibonacci numbers...", numFibonacciNumbers);
     NSLog(@"0 --> %d", valN_2); //F(0)
NSLog(@"1 --> %d", 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(@"%d --> %qu", 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("%d --> %d", 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(@"Printing the Fibonacci numbers < %d", maxFibonacciNumber); if(maxFibonacciNumber >= 0) NSLog(@">> %d", valN_2); //F(0)
if (maxFibonacciNumber >= 1) NSLog(@">> %d", valN_1); //F(1) valN = valN_1 + valN_2; //F(2) = F(1) + F(0) while (valN <=
maxFibonacciNumber) { NSLog(@">> %qu", 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(">> %d", 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
Programação em Java e ObjC:
                   Arrays - Declaração e Inicialização
● 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.

   Java                                      ObjC

   <tipo> meuArray[];                        <tipo> meuArray[tamanho];

   meuArray = new <tipo>[tamanho];           Exemplo:

   Exemplo                                   int idades[5];

   int idades[];

   idades = new int[5];
Programação em Java e ObjC:
                    Arrays - Declaração e Inicialização
  ● Declarar e inicializar num só passo

int idade[] = {23, 47, 11, 92, 76};
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         int arraySize = 5;
       ○ Para leitura
                                           //escreve dados no array
       ○ Para escrita                      for (int i=0; i < arraySize; i++)
                                           {
                                              //apenas um exemplo...
       ○ O índice não deve ultrapassar o      idade[i] = (i+1)*(i+1);
         tamanho do array!                 }

int age = idade[5] // ERROR!!              //imprime idades inferiores a 20
                                           for(int i=0; i < arraySize; i++)
                                           {
                                              if (idade[i] < 20)
                                                 NSLog(@"%d", 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(@"%d", 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("%d", 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(@"Value of aNumber is: %d", aNumber); //23
NSLog(@"Memory address of aNumber is: %qX", aNumberPtr);//B745CD81
NSLog(@"Value pointed by aNumberPtr is: %d", *aNumberPtr); //23

//change value pointed by aNumberPtr (i.e. aNumber var)
*aNumberPtr = 1234;
NSLog(@"Value pointed by aNumberPtr is now: %d", *aNumberPtr); //1234NSLog(@"Value of aNumber is now also: %
d", 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 "simular" 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(@"%qX == %qX ?", ptr, idade);
NSLog(@"%d == %d ?", *ptr, idade[0]); //obtém o 1º valor do array

NSLog(@"%d == %d ?", *(ptr+3), idade[3]);//lê 4º valor do array
NSLog(@"%d == %d ?", *(ptr+2), *(idade+2));//lê 3º valor do array
*(ptr+2) = 0; //altera valor do 3º elemento do array

NSLog(@"%d == %d ?", *(ptr+2), *(idade+2));//lê 3º valor do array
Programação em ObjC:
                           Apontadores e Arrays
● Array de char

     char a[] = "hello";

     char *p = "world";
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(@"%d", *(difPtr+i));
    }
Programação em Java e ObjC:
                                    Funções
   ● 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 "chamar" e executar esse bloco de código


* 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("Executa o programa");

    fazTarefaEspecifica1(); //chamada a uma função!

    fazTarefaEspecifica2(); //chamada a outra função!

    fazTarefaEspecifica1(); //chama outra vez a função 1!
}

void fazTarefaEspecifica_1() {
  System.out.println("Esta função executa uma série de operações para completar a tarefa 1");
}

void fazTarefaEspecifica_2() {
  System.out.println("Esta função executa uma série de operações para completar a tarefa 2");
}
Programação em Java e ObjC:
                                    Funções
● Sintaxe para definir a função

●       void nomeFunção()
    {
        //código da função...
    }
         ○ void é um tipo especial que significa "vazio", "sem tipo" 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 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 "3"
  soma(3, 5); // escreve "8"
}

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(num1, num2);
  System.out.println(String.format("%d", r));
}

int soma(int num1, int num2) {
   int resultado;
   resultado = num1 + num2;
  return resultado;
     }
Programação em Java e ObjC:
              Funções com valor de retorno
  ● 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:
                       Exercício 7
● Implemente um programa em Java/ObjC que:

   ○ Permita calcular operações (+, -, /, *) sobre fracções
     (numerador/denominador)

   ○ A operação deve ser implementada numa fracção
       ■ Começar com a soma (+) apenas
       ■ A função deverá receber os 4 parâmetros que definem as
         duas fracções (num1, denom1, num2, denom2) e a
         operação
       ■ A função deve devolver o resultado como uma fracção
         também (num, denom)
Programação em Java e ObjC:
Java (1/3)
                          Exercício 7

        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:
Java (2/3)                                Exercício 7
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("Operação não reconhecida"));
}
System.out.println(String.format("O resultado de %d/%d %c %d/%d é: %d/%d", n1, d1, op, n2, d2, result[0], result
[1]));
}
Programação em Java e ObjC:
Java (3/3)                           Exercício 7
         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 2011
     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: cvc2011)

Mais conteúdo relacionado

Mais procurados

Aula1 e aula2 - Analise e Projeto de Sistemas
Aula1 e aula2 - Analise e Projeto de SistemasAula1 e aula2 - Analise e Projeto de Sistemas
Aula1 e aula2 - Analise e Projeto de Sistemas
Gustavo Gonzalez
 
Como fazer um trabalho em word
Como fazer um trabalho em wordComo fazer um trabalho em word
Como fazer um trabalho em word
AnaGomes40
 
Evolução do Computadores
Evolução do ComputadoresEvolução do Computadores
Evolução do Computadores
Sandra120593
 
Sistemas Operativos
Sistemas OperativosSistemas Operativos
Sistemas Operativos
Pmpc10
 
Android - Programação para dispositivos móveis (Aula 1)
Android - Programação para dispositivos móveis (Aula 1)Android - Programação para dispositivos móveis (Aula 1)
Android - Programação para dispositivos móveis (Aula 1)
Ricardo Longa
 
Arquitetura de informação
Arquitetura de informaçãoArquitetura de informação
Arquitetura de informação
renatamruiz
 
Arquitetura de Informação - Sistemas de Navegação
Arquitetura de Informação - Sistemas de NavegaçãoArquitetura de Informação - Sistemas de Navegação
Arquitetura de Informação - Sistemas de Navegação
pospipoca
 

Mais procurados (20)

Aula1 e aula2 - Analise e Projeto de Sistemas
Aula1 e aula2 - Analise e Projeto de SistemasAula1 e aula2 - Analise e Projeto de Sistemas
Aula1 e aula2 - Analise e Projeto de Sistemas
 
Sistemas Operacionais - Aula 4 - Revisão e Exercícios
Sistemas Operacionais - Aula 4 - Revisão e ExercíciosSistemas Operacionais - Aula 4 - Revisão e Exercícios
Sistemas Operacionais - Aula 4 - Revisão e Exercícios
 
Trabalho sobre o escritor José Saramago
Trabalho sobre o escritor José SaramagoTrabalho sobre o escritor José Saramago
Trabalho sobre o escritor José Saramago
 
A história do computador
A história do computadorA história do computador
A história do computador
 
Tipos de Sistemas Operacionais
Tipos de Sistemas OperacionaisTipos de Sistemas Operacionais
Tipos de Sistemas Operacionais
 
Modelo de von neumann
Modelo de von neumannModelo de von neumann
Modelo de von neumann
 
Como fazer um trabalho em word
Como fazer um trabalho em wordComo fazer um trabalho em word
Como fazer um trabalho em word
 
Evolução do Computadores
Evolução do ComputadoresEvolução do Computadores
Evolução do Computadores
 
José saramago
José saramagoJosé saramago
José saramago
 
Sobre as Aprendizagens Essenciais para Disciplina de TIC dos Cursos Profissio...
Sobre as Aprendizagens Essenciais para Disciplina de TIC dos Cursos Profissio...Sobre as Aprendizagens Essenciais para Disciplina de TIC dos Cursos Profissio...
Sobre as Aprendizagens Essenciais para Disciplina de TIC dos Cursos Profissio...
 
Inteligência Artificial
Inteligência ArtificialInteligência Artificial
Inteligência Artificial
 
História e evolução do computadores
História e evolução do computadoresHistória e evolução do computadores
História e evolução do computadores
 
Jose saramago
Jose saramagoJose saramago
Jose saramago
 
Dispositivos móveis
Dispositivos móveisDispositivos móveis
Dispositivos móveis
 
Geração dos Computadores
Geração dos ComputadoresGeração dos Computadores
Geração dos Computadores
 
Sistemas Operativos
Sistemas OperativosSistemas Operativos
Sistemas Operativos
 
Android - Programação para dispositivos móveis (Aula 1)
Android - Programação para dispositivos móveis (Aula 1)Android - Programação para dispositivos móveis (Aula 1)
Android - Programação para dispositivos móveis (Aula 1)
 
Arquitetura de informação
Arquitetura de informaçãoArquitetura de informação
Arquitetura de informação
 
Arquitetura de Informação - Sistemas de Navegação
Arquitetura de Informação - Sistemas de NavegaçãoArquitetura de Informação - Sistemas de Navegação
Arquitetura de Informação - Sistemas de Navegação
 
José Saramago - Vida e Obra
José Saramago - Vida e ObraJosé Saramago - Vida e Obra
José Saramago - Vida e Obra
 

Semelhante a Conceitos fundamentais de_programacao

Introdução à Programacao em Processing
Introdução à Programacao em Processing Introdução à Programacao em Processing
Introdução à Programacao em Processing
Jorge Cardoso
 
Programando Software Livre em C
Programando Software Livre em CProgramando Software Livre em C
Programando Software Livre em C
Diego Santos
 
Programação Multicore: Como sobreviver a esta revolução usando o Pinguim?
Programação Multicore: Como sobreviver a esta revolução usando o Pinguim?Programação Multicore: Como sobreviver a esta revolução usando o Pinguim?
Programação Multicore: Como sobreviver a esta revolução usando o Pinguim?
Paulo Vital
 
Aula 02 informática aplicada - sistemas operacionais
Aula 02  informática aplicada - sistemas operacionaisAula 02  informática aplicada - sistemas operacionais
Aula 02 informática aplicada - sistemas operacionais
Robson Ferreira
 
Geração de código linguagem c
Geração de código   linguagem cGeração de código   linguagem c
Geração de código linguagem c
Jefferson Bessa
 

Semelhante a Conceitos fundamentais de_programacao (20)

Conceitos Fundamentais de Programacao
Conceitos Fundamentais de ProgramacaoConceitos Fundamentais de Programacao
Conceitos Fundamentais de Programacao
 
Introdução à Programacao em Processing
Introdução à Programacao em Processing Introdução à Programacao em Processing
Introdução à Programacao em Processing
 
Introdução ao Java_14Agosto2012.pdf
Introdução ao Java_14Agosto2012.pdfIntrodução ao Java_14Agosto2012.pdf
Introdução ao Java_14Agosto2012.pdf
 
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdfparadigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
 
Mini Curso de C
Mini Curso de CMini Curso de C
Mini Curso de C
 
Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...
Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...
Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...
 
Curso C e C++ - Teoria PDF.pdf
Curso C e C++ - Teoria PDF.pdfCurso C e C++ - Teoria PDF.pdf
Curso C e C++ - Teoria PDF.pdf
 
Introdução ao java Alo Mundo
Introdução ao java Alo MundoIntrodução ao java Alo Mundo
Introdução ao java Alo Mundo
 
Programando Software Livre em C
Programando Software Livre em CProgramando Software Livre em C
Programando Software Livre em C
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
 
Programação Multicore: Como sobreviver a esta revolução usando o Pinguim?
Programação Multicore: Como sobreviver a esta revolução usando o Pinguim?Programação Multicore: Como sobreviver a esta revolução usando o Pinguim?
Programação Multicore: Como sobreviver a esta revolução usando o Pinguim?
 
Linguagem C Entendendo a Programação
Linguagem C Entendendo a ProgramaçãoLinguagem C Entendendo a Programação
Linguagem C Entendendo a Programação
 
Introdução à Linguagem C
Introdução à Linguagem CIntrodução à Linguagem C
Introdução à Linguagem C
 
Aula 02 informática aplicada - sistemas operacionais
Aula 02  informática aplicada - sistemas operacionaisAula 02  informática aplicada - sistemas operacionais
Aula 02 informática aplicada - sistemas operacionais
 
Programação de Microprocessadores
Programação de MicroprocessadoresProgramação de Microprocessadores
Programação de Microprocessadores
 
Linguagem c wellington telles - aula 02
Linguagem c   wellington telles - aula 02Linguagem c   wellington telles - aula 02
Linguagem c wellington telles - aula 02
 
Linguagem assembly
Linguagem assemblyLinguagem assembly
Linguagem assembly
 
Software
SoftwareSoftware
Software
 
Geração de código linguagem c
Geração de código   linguagem cGeração de código   linguagem c
Geração de código linguagem c
 
ptt
pttptt
ptt
 

Mais de Jorge Cardoso

Introdução à Programação para iPhone (iOS)
Introdução à Programação para iPhone (iOS)Introdução à Programação para iPhone (iOS)
Introdução à Programação para iPhone (iOS)
Jorge Cardoso
 
Introdução à programação para Android
Introdução à programação para AndroidIntrodução à programação para Android
Introdução à programação para Android
Jorge Cardoso
 

Mais de Jorge Cardoso (20)

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

Último

19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
marlene54545
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
TailsonSantos1
 
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
azulassessoria9
 
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
azulassessoria9
 
Slide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticaSlide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemática
sh5kpmr7w7
 

Último (20)

O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.
 
Camadas da terra -Litosfera conteúdo 6º ano
Camadas da terra -Litosfera  conteúdo 6º anoCamadas da terra -Litosfera  conteúdo 6º ano
Camadas da terra -Litosfera conteúdo 6º ano
 
M0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptxM0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptx
 
INTERTEXTUALIDADE atividade muito boa para
INTERTEXTUALIDADE   atividade muito boa paraINTERTEXTUALIDADE   atividade muito boa para
INTERTEXTUALIDADE atividade muito boa para
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
 
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
 
aprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubelaprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubel
 
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
 
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
 
Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024
 
LENDA DA MANDIOCA - leitura e interpretação
LENDA DA MANDIOCA - leitura e interpretaçãoLENDA DA MANDIOCA - leitura e interpretação
LENDA DA MANDIOCA - leitura e interpretação
 
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdf
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdfMESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdf
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdf
 
Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!
Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!
Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!
 
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.docGUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*
 
Educação Financeira - Cartão de crédito665933.pptx
Educação Financeira - Cartão de crédito665933.pptxEducação Financeira - Cartão de crédito665933.pptx
Educação Financeira - Cartão de crédito665933.pptx
 
Slide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticaSlide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemática
 
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
 

Conceitos fundamentais de_programacao

  • 1. Conceitos Fundamentais de Programação Cursos de Verão na Católica 2011 Jorge C. S. Cardoso, Luís Gustavo Martins jorgecardoso@ieee.org, lmartins@porto.ucp.pt
  • 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. 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
  • 4. O Que é Programar? ● Indicar um conjunto de instruções para serem executadas, seguindo uma determinada ordem, por uma máquina ● Semelhante ao que fazemos quando queremos dar instruções a uma pessoa ○ Instruções para aceder a uma pasta de rede ■ Ligar o computador ■ Esperar que o S.O. arranque ■ Aceder ao Go do Finder ■ Escolher a opção Connect to Server ■ Escrever o nome do servidor ■ Clicar “Connect” ■ Esperar pela janela de login ■ Inserir login e password
  • 5. Linguagens de Programação .model small .stack ● Um programa é uma sequência de .data message db "Hello world, I'm learning Assembly números !!!", "$" ○ Interpretados como instruções pelo processador (CPU) .code main proc ● Os primeiros “programadores” de mov ax,seg message computador escreviam programas em mov ds,ax números mov ah,09 ○ muito sujeito a erros... lea dx,message ○ muito trabalhoso... int 21h mov ax,4c00h ● Criou-se uma linguagem mais fácil de int 21h decorar e utilizar, baseada em main endp end main mnemónicas ○ Assembly Language
  • 6. Linguagens de Programação ● O programa pode ser descrito usando vários tipos de linguagens: ○ Natural (e.g., Inglês) ■ "tell Finder to open myDocument.doc" ○ 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; }
  • 7. 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
  • 8. 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
  • 9. 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
  • 10. 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
  • 11. 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)
  • 12. 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. */ }
  • 13. Linguagens de Programação: Código Máquina .code main proc ● Instruções executadas directamente pelo mov ax,seg message processador mov ds,ax mov ah,09 ● O código máquina resulta de um lea dx,message int 21h processo de tradução do código fonte mov ax,4c00h numa linguagem entendida directamente int 21h pelo processador (sequência de main endp end main números)
  • 14. 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 "código objecto" ● 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)
  • 15. 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 "bytecode" ● Em Java não existe necessidade de "linkagem" ○ 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
  • 16. 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)
  • 17. 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("Hello world"); //write your code here! } ObjC(myProgram.m) int main( int argc, const char *argv[] ) { NSAutoreasePool * pool = [[NSAutoReleasePool alloc] init]; NSLog(@"hello world"); //write your code here!! [pool drain]; return 0; }
  • 18. Hello World em ObjC 1. Abrir o XCode 2. File -> New Project... 3. Seleccionar: ○ Mac OS X no menu esquerdo ○ Command Line Tool no menu superior direito ○ Choose... 1. Dar um nome ao projecto (e.g. HelloWorld) 2. Seleccionar o ficheiro HelloWorld.m ○ Implementa a função main ○ Rever código em ObjC 3. Compilar e "Linkar" (i.e., Build) e executar ○ Seleccionar Build and Run no menu superior do XCode
  • 19. Hello World em ObjC 7. Verificar resultado na Debugger Console do XCode
  • 20. Hello World em Java ● Abrir Eclipse ● File -> New -> Java Project ● Preencher o campo "Project Name" com HelloWorld e clicar "Finish" ● File -> New -> Class ● Preencher o campo "Name" com HelloWord e marcar a opção "public static void main...." ● Substituir a linha: ○ // TODO Auto-generated method stub ● com a instrução ○ System.out.println("Hello world"); ● Executar o programa: Run -> Run ● Ver o resultado na "Console"
  • 21. 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 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 Em Mac: for multiple lines. */ ● { } – Chavetas (Curly braces): [Shift][Alt] + ( ou ) ○ //- Comentário de uma linha ● [ ] – Parentesis Rectos: [Alt] + ( ou ) ○ /* */ Comentário de várias linhas return-result; ○} ; - ponto e vírgula (semicolon); acaba quase todas as linhas de código ○ , - vírgula (comma), separa parâmetros de funções
  • 22. 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 utilizamos 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;
  • 23. 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) int myNumber; long anotherNumber = 13; ■ Decimais (float, double) ■ Lógicos (boolean, BOOL) float aFloatNumber = 0.24; double aDoublePrecisionNumber = 1.23e2; ■ Caracteres (char) //for ObjC <tipo> nomeDaVariavel; BOOL isActive = true; <tipo> nomeDaVariavel = <valorinicial>; //for JAVA boolean isActive = true; char aLetter = 'P'; 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
  • 24. Programação em Java e ObjC: Variáveis 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;
  • 25. Programação em Java e ObjC: Variáveis ● Algumas restrições no uso de nomes em variáveis: 1. Nomes das variáveis devem começar com uma letra do alfabeto (dígitos não são permitidos) ou por um underscore (_) 2. Nomes de variáveis podem conter letras e dígitos, mas espaços ou outros caracteres especiais não são permitidos. 3. Os nomes de variáveis são case sensitive (e.g. myNumber é diferente de mynumber) 4. Palavras reservadas do ObjC ou do Java não podem ser usadas como nomes de variáveis (e.g. int, float, for, while, do, break, ...) 5. Os nomes das variáveis devem ser escolhidos de forma a tornar o seu significado o mais claro e legível possível. 6. 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)
  • 26. 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
  • 27. Programação em Java e ObjC: Exercício 1 ● Crie um programa em Java e ObjC que: 1. Armazene em duas variáveis os valores 5 e 2 2. realize a divisão entre as variáveis (i.e. 5 / 2) 3. guarde o resultado numa variável 4. 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...
  • 28. 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(@"%d divided by %d is equal to %f", 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
  • 29. 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("%d divided by %d is equal to %f", 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...)
  • 30. 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...
  • 31. 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] }
  • 32. 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; }
  • 33. Programação em Java e ObjC: Condições if ● As condições usadas nos testes podem usar os operadores condicionais: int aNumber = 10; int anotherNumber = 6; ○ igual a: == (atenção!) ○ maior do que: > //replace with boolean if in JAVA BOOL correct = false; ○ menor do que: < if(9 == aNumber) ○ maior ou igual a: >= correct = true; ○ menor ou igual a: <= if (anotherNumber > aNumber) ○ diferente: != aNumber = anotherNumber; ● 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)
  • 34. Programação em Java e ObjC: Condições if Algumas variantes da estrutura if: ● If... Else... ● If... Else if... ● If... Else if... Else... ● Switch
  • 35. 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... }
  • 36. Programação em Java e ObjC: Condições if... else... if ● É possível combinar ifs sequencialmente if (<condição A>) { <acções A> } else if (<condição B>){ <acções B> } else { <acções C> }
  • 37. 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> }
  • 38. 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
  • 39. 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”); }
  • 40. Programação em Java e ObjC: Exercício 2 ● Implemente em Java e ObjC um programa que: 1. Defina 3 variáveis para armazenar três inteiros à escolha (num1, num2 e num3) 2. Teste se num1 é igual, maior ou menor que num2, e imprima uma mensagem do tipo "7 é maior do que 3". 3. 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 "7 está entre 2 e 15". 4. 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: ■ Se operandos inteiros: provocam o "crash" da aplicação! ■ Se operandos com vírgula flutuante: resulta em Infinity
  • 41. Programação em Java e ObjC: Exercício 2 ● ObjC int num1 = 5; int num2 = 12; int num3 = 7; if(num1 == num2){ NSLog(@"%d is equal to %d", num1, num2); } else if(num1 > num2){ NSLog(@"%d is bigger than %d", num1, num2); } else { NSLog(@"%d is smaller than %d", num1, num2); if (num3 > num1 && num3 < num2) { NSLog(@"%d is between %d and %d", num3, num1, num2); } } if(num2 != 0){ NSLog(@"A divisão de %d por %d é %f", num1, num2, (float)num1/num2); }
  • 42. 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("%d is equal to %d", num1, num2)); } else if(num1 > num2){ System.out.println(String.format("%d is bigger than %d", num1, num2)); } else { System.out.println(String.format("%d is smaller than %d", num1, num2)); if (num3 > num1 && num3 < num2) { System.out.println(String.format("%d is between %d and %d", num3, num1, num2)); } } if(num2 != 0){ System.out.println(String.format("A divisão de %d por %d é %f", num1, num2, (float)num1/num2)); }
  • 43. Programação em Java e ObjC: Exercício 3 ● Implemente em Java e ObjC um programa que: 1. Defina 2 variáveis para armazenar dois inteiros à escolha (num1, num2), 2. Defina uma variável para armazenar um caractere, correspondente às 4 operações aritméticas ('+', '-', '*', '/') 3. 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. 4. No caso de o caractere não ser uma operação reconhecida, deverá imprimir uma mensagem de erro. 5. Não permita divisões por zero!
  • 44. Programação em Java e ObjC: ● ObjC Exercício 3 int num1 = 5; int num2 = 2; char op = '/'; if(num2 == 0 && op == '/'){ NSLog(@"second operator is zero valued --> impossible to perform division"); return -1; } switch (op) { case '+': NSLog(@"%d + %d = %d", num1, num2, num1+num2); break; case '-': NSLog(@"%d - %d = %d", num1, num2, num1-num2); break; case '*': NSLog(@"%d * %d = %d", num1, num2, num1*num2); break; case '/': NSLog(@"%d / %d = %f", num1, num2, num1/(float)num2); break; default: NSLog(@"Operation not recognized..."); break; }
  • 45. Programação em Java e ObjC: ● Java Exercício 3 int num1 = 5; int num2 = 0; char op = '/'; if(num2 == 0 && op == '/'){ System.out.println(String.format("second operator is zero valued --> impossible to perform division")); return; } switch (op) { case '+': System.out.println(String.format("%d + %d = %d", num1, num2, num1+num2)); break; case '-': System.out.println(String.format("%d - %d = %d", num1, num2, num1-num2)); break; case '*': System.out.println(String.format("%d * %d = %d", num1, num2, num1*num2)); break; case '/': System.out.println(String.format("%d / %d = %f", num1, num2, num1/(float)num2)); break; default: System.out.println(String.format("Operation not recognized...")); break; }
  • 46. 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
  • 47. 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(@"Counting... %d", 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 ++)
  • 48. 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(@"Counting... %d", i);//ObjC i = i + 1; }
  • 49. 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(@"Counting... %d",i); i = i + 1; } while (i <= 10);
  • 50. 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
  • 51. 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.
  • 52. 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(@"Printing the first %d Fibonacci numbers...", numFibonacciNumbers); NSLog(@"0 --> %d", valN_2); //F(0) NSLog(@"1 --> %d", 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(@"%d --> %qu", n, valN); //update stored values... valN_2 = valN_1; valN_1 = valN; }
  • 53. 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("%d --> %d", n, valN)); valN = valN + valN_1; valN_1 = valN - valN_1; }
  • 54. 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(@"Printing the Fibonacci numbers < %d", maxFibonacciNumber); if(maxFibonacciNumber >= 0) NSLog(@">> %d", valN_2); //F(0) if (maxFibonacciNumber >= 1) NSLog(@">> %d", valN_1); //F(1) valN = valN_1 + valN_2; //F(2) = F(1) + F(0) while (valN <= maxFibonacciNumber) { NSLog(@">> %qu", valN); //update stored values... valN_2 = valN_1; valN_1 = valN; valN = valN_1 + valN_2; //F (n) = F(n-1) + F(n-2) }
  • 55. 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(">> %d", valN)); valN = valN + valN_1; valN_1 = valN - valN_1; }
  • 56. 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
  • 57. Programação em Java e ObjC: Arrays - Declaração e Inicialização ● 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. Java ObjC <tipo> meuArray[]; <tipo> meuArray[tamanho]; meuArray = new <tipo>[tamanho]; Exemplo: Exemplo int idades[5]; int idades[]; idades = new int[5];
  • 58. Programação em Java e ObjC: Arrays - Declaração e Inicialização ● Declarar e inicializar num só passo int idade[] = {23, 47, 11, 92, 76};
  • 59. 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, ...
  • 60. Programação em Java e ObjC: Arrays ● Percorrer os dados de um array int arraySize = 5; ○ Para leitura //escreve dados no array ○ Para escrita for (int i=0; i < arraySize; i++) { //apenas um exemplo... ○ O índice não deve ultrapassar o idade[i] = (i+1)*(i+1); tamanho do array! } int age = idade[5] // ERROR!! //imprime idades inferiores a 20 for(int i=0; i < arraySize; i++) { if (idade[i] < 20) NSLog(@"%d", idade[i]); }
  • 61. 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.
  • 62. 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(@"%d", dif[i]); }
  • 63. 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("%d", dif[i])); }
  • 64. 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(@"Value of aNumber is: %d", aNumber); //23 NSLog(@"Memory address of aNumber is: %qX", aNumberPtr);//B745CD81 NSLog(@"Value pointed by aNumberPtr is: %d", *aNumberPtr); //23 //change value pointed by aNumberPtr (i.e. aNumber var) *aNumberPtr = 1234; NSLog(@"Value pointed by aNumberPtr is now: %d", *aNumberPtr); //1234NSLog(@"Value of aNumber is now also: % d", aNumber); //1234
  • 65. Programação em ObjC: Apontadores e Arrays ● Um apontador pode ser usado, de forma conveniente, para aceder a um array, ou até para "simular" 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(@"%qX == %qX ?", ptr, idade); NSLog(@"%d == %d ?", *ptr, idade[0]); //obtém o 1º valor do array NSLog(@"%d == %d ?", *(ptr+3), idade[3]);//lê 4º valor do array NSLog(@"%d == %d ?", *(ptr+2), *(idade+2));//lê 3º valor do array *(ptr+2) = 0; //altera valor do 3º elemento do array NSLog(@"%d == %d ?", *(ptr+2), *(idade+2));//lê 3º valor do array
  • 66. Programação em ObjC: Apontadores e Arrays ● Array de char char a[] = "hello"; char *p = "world";
  • 67. 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!
  • 68. 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(@"%d", *(difPtr+i)); }
  • 69. Programação em Java e ObjC: Funções ● 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 "chamar" e executar esse bloco de código * 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.
  • 70. Programação em Java e ObjC: Funções Exemplo (Java): public static void main(String args[]) { System.out.println("Executa o programa"); fazTarefaEspecifica1(); //chamada a uma função! fazTarefaEspecifica2(); //chamada a outra função! fazTarefaEspecifica1(); //chama outra vez a função 1! } void fazTarefaEspecifica_1() { System.out.println("Esta função executa uma série de operações para completar a tarefa 1"); } void fazTarefaEspecifica_2() { System.out.println("Esta função executa uma série de operações para completar a tarefa 2"); }
  • 71. Programação em Java e ObjC: Funções ● Sintaxe para definir a função ● void nomeFunção() { //código da função... } ○ void é um tipo especial que significa "vazio", "sem tipo" 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();
  • 72. 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);
  • 73. Programação em Java e ObjC: Funções com Parâmetros Exemplo (Java) public static void main(String args[]) { soma(1, 2); // escreve "3" soma(3, 5); // escreve "8" } void soma(int num1, int num2) { int resultado; resultado = num1 + num2; System.out.println(resultado); }
  • 74. 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
  • 75. 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(num1, num2); System.out.println(String.format("%d", r)); } int soma(int num1, int num2) { int resultado; resultado = num1 + num2; return resultado; }
  • 76. Programação em Java e ObjC: Funções com valor de retorno ● 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
  • 77. 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) ○ A operação deve ser implementada numa fracção ■ Começar com a soma (+) apenas ■ A função deverá receber os 4 parâmetros que definem as duas fracções (num1, denom1, num2, denom2) e a operação ■ A função deve devolver o resultado como uma fracção também (num, denom)
  • 78. Programação em Java e ObjC: Java (1/3) Exercício 7 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); }
  • 79. Programação em Java e ObjC: Java (2/3) Exercício 7 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("Operação não reconhecida")); } System.out.println(String.format("O resultado de %d/%d %c %d/%d é: %d/%d", n1, d1, op, n2, d2, result[0], result [1])); }
  • 80. Programação em Java e ObjC: Java (3/3) Exercício 7 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; }
  • 81. 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
  • 82. 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)
  • 83. Fim Cursos de Verão na Católica 2011 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: cvc2011)