SlideShare uma empresa Scribd logo
1 de 21
Estruturas em C/C++
        struct
 Prof. Márcio Roberto Rizzatto
 Laboratório de Programação II
 Ciência da Computação
 FAI


            Laboratório de Programação II
Revisão Rápida

                   Qual a diferença entre um
                   algoritmo e um programa?


© Prof. Márcio Roberto Rizzatto                    Laboratório de Programação II
Revisão Rápida
      Algoritmo
             Sequência de ações executáveis para a solução
             de um determinado tipo de problema
             Exemplo: “Receita de Bolo”
             Em geral, algoritmos trabalham sobre
            Estruturas de Dados
          Estruturas de Dados
            Conjunto de dados que representa uma situação
             real
              Abstração da realidade
              Estruturas de Dados e Algoritmos estão
             intimamente ligados
© Prof. Márcio Roberto Rizzatto                    Laboratório de Programação II
Revisão Rápida
      Tipos de dados
            Os dados podem estar representados
 (estruturados) de diferentes maneiras
            Normalmente, a escolha da representação é
 determinada pelas operações que serão
 utilizadas sobre eles
            Exemplo: números inteiros
                  Representação por palitinhos: II + IIII = IIIIII
                        Boa para pequenos números (operação simples)
                  Representação decimal: 1278 + 321 = 1599
                        Boa para números maiores (operação complexa)

© Prof. Márcio Roberto Rizzatto                                 Laboratório de Programação II
Revisão Rápida
      Programa
            Um programa é uma formulação concreta de um
             algoritmo abstrato, baseado em representações
             de dados específicas
            Os programas são feitos em alguma linguagem
             que pode ser entendida e seguida pelo
             computador
                  Linguagem de máquina
                  Linguagem de alto nível (uso de compilador)
                        Aqui vamos utilizar a Linguagem C/C++



© Prof. Márcio Roberto Rizzatto                                  Laboratório de Programação II
Revisão Rápida
      Linguagem C
            Criada no início da década de 70 para a
 programação do sistema operacional Unix
            Uma das linguagens mais utilizadas no mundo, e
             serviu como base para outras como C++, Java,
             C#, Perl, Python, etc.




© Prof. Márcio Roberto Rizzatto                    Laboratório de Programação II
Revisão Rápida - Exemplo
#include<stdio.h>                  int main() {
#define MAX 10                        int v[10], cont, aux, i, soma;
int LeInteiro() {                     float media;
   int num;                           cont = 0;
   printf(“Digite um numero: ");      aux = LeInteiro();
   scanf("%d", &num);                 while(aux >= 0) {
   printf("n");                        v[cont] = aux;
   return num;                          aux = LeInteiro();
}                                       cont++;
                                      }
                                      soma = 0;
                                      for(i=0;i<cont;i++)
                                        soma += v[i];
                                      media = soma / (float) cont;
                                      printf("resultado: %fn",media);
                                   }




 © Prof. Márcio Roberto Rizzatto                   Laboratório de Programação II
Revisão Rápida
      Tipos Abstratos de Dados (TAD)
            Agrupa a estrutura de dados juntamente com as
             operações que podem ser feitas sobre esses
             dados
            O TAD encapsula a estrutura de dados. Os
             usuários do TAD só tem acesso a algumas
             operações disponibilizadas sobre esses dados
            Usuário só “enxerga” a interface, não a
             implementação


© Prof. Márcio Roberto Rizzatto                    Laboratório de Programação II
Tipos Abstratos de Dados (TADs)
      Dessa forma, o usuário pode abstrair da
       implementação específica.

      Qualquer modificação nessa implementação
       fica restrita ao TAD

      A escolha de uma representação específica é
       fortemente influenciada pelas operações a
       serem executadas

© Prof. Márcio Roberto Rizzatto        Laboratório de Programação II
Exemplo: Lista de números inteiros
      Operações
           Faz Lista Vazia
           Insere número no começo da lista
           Remove de uma posição i

Implementação por Vetores:                  20 13 02 30   Programa usuário do TAD:

    void Insere(int x, Lista L) {                         int main() {
       for(i=0;...) {...}                                    Lista L;
       L[0] = x;                                             int x;
    }
                                                              x = 20;
Implementação por Listas Encadeadas                           FazListaVazia(L);
                                                              Insere(x,L);
                   20             13   02      30
                                                              ...
                                                          }
    void Insere(int x, Lista L) {
        p = CriaNovaCelula(x);
        L^.primeiro = p;
        ...
    }
© Prof. Márcio Roberto Rizzatto                                  Laboratório de Programação II
Implementação de TADs
   Em linguagens orientadas por objeto (C++, Java) a
    implementação é feita através de classes
   Em linguagens estruturadas (C, pascal) a
    implementação é feita pela definição de tipos
    juntamente com a implementação de funções
   Como vocês não viram o conceito de orientação por
    objetos*, vamos utilizar os conceitos de C/C++ com

    typedef e structs
       Orientação por objetos (classes, etc) vai ser vista
        mais adiante em Programação Orientada para
        Objetos (POO ou do inglês OOP) com C++. de Programação II
© Prof. Márcio Roberto Rizzatto                 Laboratório
Estruturas (Structs) em C / C++
     Uma estrutura é uma coleção de uma ou mais
      variáveis, possivelmente de tipos diferentes,
      colocadas juntas sob um único nome para
      manipulação conveniente
     Por exemplo, para representar um aluno são
      necessárias as informações nome, matrícula, conceito
     Ao invés de criar três variáveis, é possível criar uma
      única variável contendo três campos.
     Em C/C++, usa-se a construção struct para
      representar esse tipo de dado

© Prof. Márcio Roberto Rizzatto                 Laboratório de Programação II
Estruturas (Structs) em C / C++
    #include<iostream>
    #include<string>
    using namespace std;

    struct Aluno {
       string nome;
       int matricula;                             Pedro
                                     al:
       char conceito;                           200712 A
    };

    int main() {                                  Pedro
                                     aux:
       struct Aluno al, aux;                    200712 A

            al.nome = “Pedro”
            al.matricula = 200712;
            al.conceito = ‘A’;
            aux = al;
            cout << aux.nome
    }
© Prof. Márcio Roberto Rizzatto            Laboratório de Programação II
Declaração de Tipos
      Para simplificar, uma estrutura ou mesmo
       outros tipos de dados podem ser definidos
       como um novo tipo
      Uso da construção typedef
       typedef struct {                      int main() {
          string nome;                          TipoAluno al;
          int matricula;                        Vetor v;
          char conceito;
       } TipoAluno;                              ...
                                             }

       typedef int[10] Vetor;

© Prof. Márcio Roberto Rizzatto                        Laboratório de Programação II
TADs em C
      Para implementar um Tipo Abstrato de
       Dados em C, usa-se a definição de tipos
       juntamente com a implementação de funções
       que agem sobre aquele tipo

      Como boa regra de programação, evita-se
       acessar o dado diretamente, fazendo o
       acesso só através das funções
            Mas, diferentemente de C++ e Java, não há uma
             forma de proibir o acesso.
© Prof. Márcio Roberto Rizzatto               Laboratório de Programação II
TADs em C
      Uma boa técnica de programação é
       implementar os TADs em arquivos separados
       do programa principal
      Para isso geralmente separa-se a declaração
       e a implementação do TAD em dois arquivos:
            NomeDoTAD.h : com a declaração
            NomeDoTAD.cpp : com a implementação
      O programa ou outros TADs que utilizam o seu
       TAD devem dar um #include no arquivo .h
© Prof. Márcio Roberto Rizzatto               Laboratório de Programação II
Exemplo
      Implemente um TAD ContaBancaria, com os
       campos número e saldo onde os clientes
       podem fazer as seguintes operações:
            Iniciar uma conta com um número e saldo inicial
            Depositar um valor
            Sacar um valor
            Imprimir o saldo


      Faça um pequeno programa para testar o
       seu TAD
© Prof. Márcio Roberto Rizzatto                 Laboratório de Programação II
ContaBancaria.h
// definição do tipo
typedef struct {
   int numero;
   double saldo;
} ContaBancaria;

// cabeçalho das funções
void Inicializa (ContaBancaria&, int, double);
void Deposito   (ContaBancaria&, double);
void Saque      (ContaBancaria&, double);
void Imprime    (ContaBancaria);




© Prof. Márcio Roberto Rizzatto                     Laboratório de Programação II
ContaBancaria.cpp
#include<stdio.h>
#include"Contabancaria.h"

void Inicializa(ContaBancaria &conta, int numero, double saldo)
{
     conta.numero = numero;
     conta.saldo = saldo;
}

void Deposito (ContaBancaria &conta, double valor) {
     conta.saldo += valor;
}

void Saque (ContaBancaria &conta, double valor) {
     conta.saldo -= valor;
}

void Imprime (ContaBancaria conta) {
     printf("Numero: %dn", conta.numero);
     printf("Saldo: %fn", conta.saldo);
}
 © Prof. Márcio Roberto Rizzatto                   Laboratório de Programação II
Main.cpp
#include<stdio.h>
#include<stdlib.h>
#include "ContaBancaria.h"

int main (void)
{
    ContaBancaria conta1;
    Inicializa(conta1, 918556, 300.00);
    printf("nAntes da movimentacao:n ");
    Imprime(conta1);
    Deposito(conta1, 50.00);
    Saque(conta1, 70.00);
    printf("nDepois da movimentacao:n ");
    Imprime (conta1);

         system("PAUSE");
         return(0);
}
© Prof. Márcio Roberto Rizzatto               Laboratório de Programação II
Exercício
      Implemente um TAD Número Complexo
            cada número possui os campos real e imaginário
            Implemente as operações:
                  Atribui: atribui valores para os campos
                  Imprime: imprime o número da forma “R + Ci”
                  Copia: Copia o valor de um número para outro
                  Soma: Soma dois números complexos
                  EhReal: testa se um número é real


      Faça um pequeno programa para testar o
       seu TAD
© Prof. Márcio Roberto Rizzatto                          Laboratório de Programação II

Mais conteúdo relacionado

Mais procurados

Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao cprofwtelles
 
mod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacaomod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacaodiogoa21
 
mod5-estruturas-dadosdinamicas
mod5-estruturas-dadosdinamicasmod5-estruturas-dadosdinamicas
mod5-estruturas-dadosdinamicasdiogoa21
 
Aula 12 funcoes - Programação 1
Aula 12 funcoes - Programação 1Aula 12 funcoes - Programação 1
Aula 12 funcoes - Programação 1Isaac Barros
 
LAB 01 - Programação Estruturada 2
LAB 01 - Programação Estruturada 2LAB 01 - Programação Estruturada 2
LAB 01 - Programação Estruturada 2thomasdacosta
 
Maratona de Programação
Maratona de ProgramaçãoMaratona de Programação
Maratona de ProgramaçãoMarcos Castro
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem Capolllorj
 
Exercícios da Aula de LAB 01
Exercícios da Aula de LAB 01Exercícios da Aula de LAB 01
Exercícios da Aula de LAB 01thomasdacosta
 
Action script1 apresentação2
Action script1 apresentação2Action script1 apresentação2
Action script1 apresentação2Jorge Louro
 
Programação Estruturada 2 - Aula 03
Programação Estruturada 2 - Aula 03Programação Estruturada 2 - Aula 03
Programação Estruturada 2 - Aula 03thomasdacosta
 
Light Talk sobre JavaScript Funcional
Light Talk sobre JavaScript FuncionalLight Talk sobre JavaScript Funcional
Light Talk sobre JavaScript FuncionalEmanuel Gonçalves
 

Mais procurados (19)

Programação em C
Programação em CProgramação em C
Programação em C
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
mod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacaomod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacao
 
mod5-estruturas-dadosdinamicas
mod5-estruturas-dadosdinamicasmod5-estruturas-dadosdinamicas
mod5-estruturas-dadosdinamicas
 
Aula 4 | Funções
Aula 4 | Funções Aula 4 | Funções
Aula 4 | Funções
 
Aula 12 funcoes - Programação 1
Aula 12 funcoes - Programação 1Aula 12 funcoes - Programação 1
Aula 12 funcoes - Programação 1
 
Modulo02
Modulo02Modulo02
Modulo02
 
LAB 01 - Programação Estruturada 2
LAB 01 - Programação Estruturada 2LAB 01 - Programação Estruturada 2
LAB 01 - Programação Estruturada 2
 
Linguagem C - Controle de Programa
Linguagem C - Controle de ProgramaLinguagem C - Controle de Programa
Linguagem C - Controle de Programa
 
Maratona de Programação
Maratona de ProgramaçãoMaratona de Programação
Maratona de Programação
 
Introdução à Linguagem C
Introdução à Linguagem CIntrodução à Linguagem C
Introdução à Linguagem C
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem C
 
Exercícios da Aula de LAB 01
Exercícios da Aula de LAB 01Exercícios da Aula de LAB 01
Exercícios da Aula de LAB 01
 
599026
599026599026
599026
 
Action script1 apresentação2
Action script1 apresentação2Action script1 apresentação2
Action script1 apresentação2
 
Programação Estruturada 2 - Aula 03
Programação Estruturada 2 - Aula 03Programação Estruturada 2 - Aula 03
Programação Estruturada 2 - Aula 03
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
 
Light Talk sobre JavaScript Funcional
Light Talk sobre JavaScript FuncionalLight Talk sobre JavaScript Funcional
Light Talk sobre JavaScript Funcional
 

Destaque

Estruturas em C++ (struct)
Estruturas em C++ (struct)Estruturas em C++ (struct)
Estruturas em C++ (struct)Márcio Rizzatto
 
Estrutura de dados - Introdução a linguagem C
Estrutura de dados - Introdução a linguagem CEstrutura de dados - Introdução a linguagem C
Estrutura de dados - Introdução a linguagem CAdriano Teixeira de Souza
 
Princípios e Práticas de Programação com C++
Princípios e Práticas de Programação com C++Princípios e Práticas de Programação com C++
Princípios e Práticas de Programação com C++Grupo A
 
Estrutura de dados - Variáveis homogêneas e Heterogêneas
Estrutura de dados - Variáveis homogêneas e HeterogêneasEstrutura de dados - Variáveis homogêneas e Heterogêneas
Estrutura de dados - Variáveis homogêneas e HeterogêneasAdriano Teixeira de Souza
 
C++ apostila c++ nivel basico
C++   apostila c++ nivel basicoC++   apostila c++ nivel basico
C++ apostila c++ nivel basicorobinhoct
 
Solução dos exercícios do livro Algoritmos e Estruturas de Dados dos autores ...
Solução dos exercícios do livro Algoritmos e Estruturas de Dados dos autores ...Solução dos exercícios do livro Algoritmos e Estruturas de Dados dos autores ...
Solução dos exercícios do livro Algoritmos e Estruturas de Dados dos autores ...Flávio Freitas
 
Curso avançado de c++ em portugues
Curso avançado de c++ em portuguesCurso avançado de c++ em portugues
Curso avançado de c++ em portuguesLaura
 
Princípios da organização de código fonte C++
Princípios da organização de código fonte C++Princípios da organização de código fonte C++
Princípios da organização de código fonte C++Ivan Ricarte
 
Livro Linguagem C - Completo
Livro Linguagem C - CompletoLivro Linguagem C - Completo
Livro Linguagem C - CompletoMarcos Quinho
 
PROGRAMAS EN DEV C++
PROGRAMAS EN DEV C++PROGRAMAS EN DEV C++
PROGRAMAS EN DEV C++KarenAlmanza
 
Problemas resueltos de c++
Problemas  resueltos de c++Problemas  resueltos de c++
Problemas resueltos de c++johnny herrera
 
Fundamentos da programação de computadores 2ª edição
Fundamentos da programação de computadores   2ª ediçãoFundamentos da programação de computadores   2ª edição
Fundamentos da programação de computadores 2ª ediçãoLeandro Rocha de Oliveira
 
Manual c++
Manual c++Manual c++
Manual c++slent
 
Ejemplos Para Dev C++
Ejemplos Para Dev C++Ejemplos Para Dev C++
Ejemplos Para Dev C++cemayoral
 

Destaque (16)

Estruturas em C++ (struct)
Estruturas em C++ (struct)Estruturas em C++ (struct)
Estruturas em C++ (struct)
 
Estrutura de Dados - Registros
Estrutura de Dados - RegistrosEstrutura de Dados - Registros
Estrutura de Dados - Registros
 
Estrutura de dados - Introdução a linguagem C
Estrutura de dados - Introdução a linguagem CEstrutura de dados - Introdução a linguagem C
Estrutura de dados - Introdução a linguagem C
 
Princípios e Práticas de Programação com C++
Princípios e Práticas de Programação com C++Princípios e Práticas de Programação com C++
Princípios e Práticas de Programação com C++
 
Estrutura de dados - Variáveis homogêneas e Heterogêneas
Estrutura de dados - Variáveis homogêneas e HeterogêneasEstrutura de dados - Variáveis homogêneas e Heterogêneas
Estrutura de dados - Variáveis homogêneas e Heterogêneas
 
C++ apostila c++ nivel basico
C++   apostila c++ nivel basicoC++   apostila c++ nivel basico
C++ apostila c++ nivel basico
 
Solução dos exercícios do livro Algoritmos e Estruturas de Dados dos autores ...
Solução dos exercícios do livro Algoritmos e Estruturas de Dados dos autores ...Solução dos exercícios do livro Algoritmos e Estruturas de Dados dos autores ...
Solução dos exercícios do livro Algoritmos e Estruturas de Dados dos autores ...
 
Curso avançado de c++ em portugues
Curso avançado de c++ em portuguesCurso avançado de c++ em portugues
Curso avançado de c++ em portugues
 
Princípios da organização de código fonte C++
Princípios da organização de código fonte C++Princípios da organização de código fonte C++
Princípios da organização de código fonte C++
 
Apostila C++
Apostila C++ Apostila C++
Apostila C++
 
Livro Linguagem C - Completo
Livro Linguagem C - CompletoLivro Linguagem C - Completo
Livro Linguagem C - Completo
 
PROGRAMAS EN DEV C++
PROGRAMAS EN DEV C++PROGRAMAS EN DEV C++
PROGRAMAS EN DEV C++
 
Problemas resueltos de c++
Problemas  resueltos de c++Problemas  resueltos de c++
Problemas resueltos de c++
 
Fundamentos da programação de computadores 2ª edição
Fundamentos da programação de computadores   2ª ediçãoFundamentos da programação de computadores   2ª edição
Fundamentos da programação de computadores 2ª edição
 
Manual c++
Manual c++Manual c++
Manual c++
 
Ejemplos Para Dev C++
Ejemplos Para Dev C++Ejemplos Para Dev C++
Ejemplos Para Dev C++
 

Semelhante a Estruturas

Laboratório de Programação II: Tipo Abstrato de Dados (TAD)
Laboratório de Programação II: Tipo Abstrato de Dados (TAD)Laboratório de Programação II: Tipo Abstrato de Dados (TAD)
Laboratório de Programação II: Tipo Abstrato de Dados (TAD)Alex Camargo
 
Algoritomos aula 3 rafael
Algoritomos aula 3 rafaelAlgoritomos aula 3 rafael
Algoritomos aula 3 rafaelhugodrocha
 
Estrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e FunçõesEstrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e FunçõesLeinylson Fontinele
 
Programação Estruturada 2 - Curso Completo
Programação Estruturada 2 - Curso CompletoProgramação Estruturada 2 - Curso Completo
Programação Estruturada 2 - Curso Completothomasdacosta
 
Fundamentos do .NET Framework - Parte 2
Fundamentos do .NET Framework - Parte 2Fundamentos do .NET Framework - Parte 2
Fundamentos do .NET Framework - Parte 2Julian Correa
 
Introdução à linguagem C#
Introdução à linguagem C#Introdução à linguagem C#
Introdução à linguagem C#Antonio Trigo
 
Estrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptxEstrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptxMarceloRosenbrock1
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação CJose Augusto Cintra
 
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Leinylson Fontinele
 
Estrutura de Dados - Aula de revisão de c na prática
Estrutura de Dados - Aula de revisão de c na práticaEstrutura de Dados - Aula de revisão de c na prática
Estrutura de Dados - Aula de revisão de c na práticaLeinylson Fontinele
 
Apostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cApostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cMaicon Rodrigues
 
Java orientação a objetos (interfaces)
Java   orientação a objetos (interfaces)Java   orientação a objetos (interfaces)
Java orientação a objetos (interfaces)Armando Daniel
 

Semelhante a Estruturas (20)

aula01-TDA (1).ppt
aula01-TDA (1).pptaula01-TDA (1).ppt
aula01-TDA (1).ppt
 
Laboratório de Programação II: Tipo Abstrato de Dados (TAD)
Laboratório de Programação II: Tipo Abstrato de Dados (TAD)Laboratório de Programação II: Tipo Abstrato de Dados (TAD)
Laboratório de Programação II: Tipo Abstrato de Dados (TAD)
 
Linguagem c parte 2
Linguagem c parte 2Linguagem c parte 2
Linguagem c parte 2
 
C++200
C++200C++200
C++200
 
Algoritomos aula 3 rafael
Algoritomos aula 3 rafaelAlgoritomos aula 3 rafael
Algoritomos aula 3 rafael
 
Estrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e FunçõesEstrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e Funções
 
Series lab
Series labSeries lab
Series lab
 
Programação Estruturada 2 - Curso Completo
Programação Estruturada 2 - Curso CompletoProgramação Estruturada 2 - Curso Completo
Programação Estruturada 2 - Curso Completo
 
NHibernate
NHibernateNHibernate
NHibernate
 
Pged 03
Pged 03Pged 03
Pged 03
 
Fundamentos do .NET Framework - Parte 2
Fundamentos do .NET Framework - Parte 2Fundamentos do .NET Framework - Parte 2
Fundamentos do .NET Framework - Parte 2
 
Linguagem C clecioamerico
Linguagem C clecioamericoLinguagem C clecioamerico
Linguagem C clecioamerico
 
Introdução à linguagem C#
Introdução à linguagem C#Introdução à linguagem C#
Introdução à linguagem C#
 
Estrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptxEstrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptx
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação C
 
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
 
Estrutura de Dados - Aula de revisão de c na prática
Estrutura de Dados - Aula de revisão de c na práticaEstrutura de Dados - Aula de revisão de c na prática
Estrutura de Dados - Aula de revisão de c na prática
 
Apostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cApostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-c
 
Ed1
Ed1Ed1
Ed1
 
Java orientação a objetos (interfaces)
Java   orientação a objetos (interfaces)Java   orientação a objetos (interfaces)
Java orientação a objetos (interfaces)
 

Estruturas

  • 1. Estruturas em C/C++ struct Prof. Márcio Roberto Rizzatto Laboratório de Programação II Ciência da Computação FAI Laboratório de Programação II
  • 2. Revisão Rápida Qual a diferença entre um algoritmo e um programa? © Prof. Márcio Roberto Rizzatto Laboratório de Programação II
  • 3. Revisão Rápida  Algoritmo  Sequência de ações executáveis para a solução de um determinado tipo de problema  Exemplo: “Receita de Bolo”  Em geral, algoritmos trabalham sobre Estruturas de Dados  Estruturas de Dados  Conjunto de dados que representa uma situação real  Abstração da realidade  Estruturas de Dados e Algoritmos estão intimamente ligados © Prof. Márcio Roberto Rizzatto Laboratório de Programação II
  • 4. Revisão Rápida  Tipos de dados  Os dados podem estar representados (estruturados) de diferentes maneiras  Normalmente, a escolha da representação é determinada pelas operações que serão utilizadas sobre eles  Exemplo: números inteiros  Representação por palitinhos: II + IIII = IIIIII  Boa para pequenos números (operação simples)  Representação decimal: 1278 + 321 = 1599  Boa para números maiores (operação complexa) © Prof. Márcio Roberto Rizzatto Laboratório de Programação II
  • 5. Revisão Rápida  Programa  Um programa é uma formulação concreta de um algoritmo abstrato, baseado em representações de dados específicas  Os programas são feitos em alguma linguagem que pode ser entendida e seguida pelo computador  Linguagem de máquina  Linguagem de alto nível (uso de compilador)  Aqui vamos utilizar a Linguagem C/C++ © Prof. Márcio Roberto Rizzatto Laboratório de Programação II
  • 6. Revisão Rápida  Linguagem C  Criada no início da década de 70 para a programação do sistema operacional Unix  Uma das linguagens mais utilizadas no mundo, e serviu como base para outras como C++, Java, C#, Perl, Python, etc. © Prof. Márcio Roberto Rizzatto Laboratório de Programação II
  • 7. Revisão Rápida - Exemplo #include<stdio.h> int main() { #define MAX 10 int v[10], cont, aux, i, soma; int LeInteiro() { float media; int num; cont = 0; printf(“Digite um numero: "); aux = LeInteiro(); scanf("%d", &num); while(aux >= 0) { printf("n"); v[cont] = aux; return num; aux = LeInteiro(); } cont++; } soma = 0; for(i=0;i<cont;i++) soma += v[i]; media = soma / (float) cont; printf("resultado: %fn",media); } © Prof. Márcio Roberto Rizzatto Laboratório de Programação II
  • 8. Revisão Rápida  Tipos Abstratos de Dados (TAD)  Agrupa a estrutura de dados juntamente com as operações que podem ser feitas sobre esses dados  O TAD encapsula a estrutura de dados. Os usuários do TAD só tem acesso a algumas operações disponibilizadas sobre esses dados  Usuário só “enxerga” a interface, não a implementação © Prof. Márcio Roberto Rizzatto Laboratório de Programação II
  • 9. Tipos Abstratos de Dados (TADs)  Dessa forma, o usuário pode abstrair da implementação específica.  Qualquer modificação nessa implementação fica restrita ao TAD  A escolha de uma representação específica é fortemente influenciada pelas operações a serem executadas © Prof. Márcio Roberto Rizzatto Laboratório de Programação II
  • 10. Exemplo: Lista de números inteiros  Operações  Faz Lista Vazia  Insere número no começo da lista  Remove de uma posição i Implementação por Vetores: 20 13 02 30 Programa usuário do TAD: void Insere(int x, Lista L) { int main() { for(i=0;...) {...} Lista L; L[0] = x; int x; } x = 20; Implementação por Listas Encadeadas FazListaVazia(L); Insere(x,L); 20 13 02 30 ... } void Insere(int x, Lista L) { p = CriaNovaCelula(x); L^.primeiro = p; ... } © Prof. Márcio Roberto Rizzatto Laboratório de Programação II
  • 11. Implementação de TADs  Em linguagens orientadas por objeto (C++, Java) a implementação é feita através de classes  Em linguagens estruturadas (C, pascal) a implementação é feita pela definição de tipos juntamente com a implementação de funções  Como vocês não viram o conceito de orientação por objetos*, vamos utilizar os conceitos de C/C++ com typedef e structs  Orientação por objetos (classes, etc) vai ser vista mais adiante em Programação Orientada para Objetos (POO ou do inglês OOP) com C++. de Programação II © Prof. Márcio Roberto Rizzatto Laboratório
  • 12. Estruturas (Structs) em C / C++  Uma estrutura é uma coleção de uma ou mais variáveis, possivelmente de tipos diferentes, colocadas juntas sob um único nome para manipulação conveniente  Por exemplo, para representar um aluno são necessárias as informações nome, matrícula, conceito  Ao invés de criar três variáveis, é possível criar uma única variável contendo três campos.  Em C/C++, usa-se a construção struct para representar esse tipo de dado © Prof. Márcio Roberto Rizzatto Laboratório de Programação II
  • 13. Estruturas (Structs) em C / C++ #include<iostream> #include<string> using namespace std; struct Aluno { string nome; int matricula; Pedro al: char conceito; 200712 A }; int main() { Pedro aux: struct Aluno al, aux; 200712 A al.nome = “Pedro” al.matricula = 200712; al.conceito = ‘A’; aux = al; cout << aux.nome } © Prof. Márcio Roberto Rizzatto Laboratório de Programação II
  • 14. Declaração de Tipos  Para simplificar, uma estrutura ou mesmo outros tipos de dados podem ser definidos como um novo tipo  Uso da construção typedef typedef struct { int main() { string nome; TipoAluno al; int matricula; Vetor v; char conceito; } TipoAluno; ... } typedef int[10] Vetor; © Prof. Márcio Roberto Rizzatto Laboratório de Programação II
  • 15. TADs em C  Para implementar um Tipo Abstrato de Dados em C, usa-se a definição de tipos juntamente com a implementação de funções que agem sobre aquele tipo  Como boa regra de programação, evita-se acessar o dado diretamente, fazendo o acesso só através das funções  Mas, diferentemente de C++ e Java, não há uma forma de proibir o acesso. © Prof. Márcio Roberto Rizzatto Laboratório de Programação II
  • 16. TADs em C  Uma boa técnica de programação é implementar os TADs em arquivos separados do programa principal  Para isso geralmente separa-se a declaração e a implementação do TAD em dois arquivos:  NomeDoTAD.h : com a declaração  NomeDoTAD.cpp : com a implementação  O programa ou outros TADs que utilizam o seu TAD devem dar um #include no arquivo .h © Prof. Márcio Roberto Rizzatto Laboratório de Programação II
  • 17. Exemplo  Implemente um TAD ContaBancaria, com os campos número e saldo onde os clientes podem fazer as seguintes operações:  Iniciar uma conta com um número e saldo inicial  Depositar um valor  Sacar um valor  Imprimir o saldo  Faça um pequeno programa para testar o seu TAD © Prof. Márcio Roberto Rizzatto Laboratório de Programação II
  • 18. ContaBancaria.h // definição do tipo typedef struct { int numero; double saldo; } ContaBancaria; // cabeçalho das funções void Inicializa (ContaBancaria&, int, double); void Deposito (ContaBancaria&, double); void Saque (ContaBancaria&, double); void Imprime (ContaBancaria); © Prof. Márcio Roberto Rizzatto Laboratório de Programação II
  • 19. ContaBancaria.cpp #include<stdio.h> #include"Contabancaria.h" void Inicializa(ContaBancaria &conta, int numero, double saldo) { conta.numero = numero; conta.saldo = saldo; } void Deposito (ContaBancaria &conta, double valor) { conta.saldo += valor; } void Saque (ContaBancaria &conta, double valor) { conta.saldo -= valor; } void Imprime (ContaBancaria conta) { printf("Numero: %dn", conta.numero); printf("Saldo: %fn", conta.saldo); } © Prof. Márcio Roberto Rizzatto Laboratório de Programação II
  • 20. Main.cpp #include<stdio.h> #include<stdlib.h> #include "ContaBancaria.h" int main (void) { ContaBancaria conta1; Inicializa(conta1, 918556, 300.00); printf("nAntes da movimentacao:n "); Imprime(conta1); Deposito(conta1, 50.00); Saque(conta1, 70.00); printf("nDepois da movimentacao:n "); Imprime (conta1); system("PAUSE"); return(0); } © Prof. Márcio Roberto Rizzatto Laboratório de Programação II
  • 21. Exercício  Implemente um TAD Número Complexo  cada número possui os campos real e imaginário  Implemente as operações:  Atribui: atribui valores para os campos  Imprime: imprime o número da forma “R + Ci”  Copia: Copia o valor de um número para outro  Soma: Soma dois números complexos  EhReal: testa se um número é real  Faça um pequeno programa para testar o seu TAD © Prof. Márcio Roberto Rizzatto Laboratório de Programação II

Notas do Editor

  1. O que e como representar Cada representacao tem limitacoes