View
586
Download
1
Category
Preview:
Citation preview
# Estrutura de Dados #
Aula - Revisão de C/C++ na PráticaProf. Leinylson Fontinele Pereira
Na aula anterior...
Ponteiros
Funções
11:28 Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Introdução
11:28 3 Estrutura de Dados: Aula - Revisão de C/C++ na Prática
O que vamos aprender?
Preparação do ambiente de testes
Conceitos básicos de C
Sintaxe de alguns comandos# Structs, funções, ponteiros
11:28 Estrutura de Dados: Aula - Revisão de C/C++ na Prática
11:28 5 Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Linguagens de programação
11:28 6 Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Linguagem CDesenvolvida inicialmentepor Dennis M. Ritchie e KenThompson no laboratórioBell no ano de 1972.
Baseada na linguagem Bcriada por Thompson, estalinguagem evoluiu dalinguagem BCPL, dandoorigem as duas linguagensanteriores.
Ambiente de Desenvolvimento – Opção 01
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Ambiente de Desenvolvimento – Opção 02
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Programa nº I
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Programa nº II
A linguagem C
11:28
char tem 8 bits (não é 16 bits como em Java)
Não existe tipo booleano (usar int ou char):
0 falso
≠ 0 verdadeiro
Tipos inteiros podem ser: signed ou unsigned
Não tem tipo string: usa-se vetor de char
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Linguagem C: Tipos de dados
11:28
Tipos de dados primários - Tipos de dados derivados - Tipos definidos pelo usuário
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Linguagem C: Tipos de dados
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Exibindo uma saída
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
O comando return
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Vetores: conceito
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Um vetor (= array) é uma estrutura de dados que armazena uma sequência deobjetos, todos do mesmo tipo, em posições consecutivas da memória RAM (=random access memory) do computador.
Vetores: exemplo
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Entendendo Vetores
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Vetores: exercício
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Dado um vetor de inteiros, 𝑣[0. . 6] , crie umprograma para determinar se a sequência de númeroscorresponde a um palíndromo.
[1, 2, 3, 4, 3, 2, 1]: vetor palíndromo
[1, 2, 3, 4, 5, 6, 7]: não é vetor palíndromo
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Qual é o número mínimo de comparações necessárias para verificar se um vetor de
tamanho N é ou não palíndromo?
Vetores: exercício
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Matriz: exercício
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
00000
00000
00000
00000
00000
Struct: exercício
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Quais são as informações de um Aluno para a Faculdade?- Nome- Matrícula- Série- Turma- Curso
No exemplo acima temos a estrutura Aluno que contém as informações ou ascaracterísticas de um aluno. Muito semelhante a um registro de banco de dados.
Podemos dizer que em uma estrutura, estamos armazenando informações agrupadas logicamente.
Construindo uma Struct
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
struct aluno
{
char nome[255];
int matricula;
int serie;
int turma;
char curso[100];
};
Nome da estruturaPalavra
reservada que
identifica uma
estrutura
Membros da estrutura
Chaves definem o
início e o fim da
estrutura
Termina com ponto
e vírgula
Struct
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Struct
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Struct
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Struct: acessando os campos
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Funções
11:28 30Estruturaaaaaaa
Funções: Estrutura de uma função
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Retorno
da função
Nome da função
Parâmetros da
função
Corpo da função
Escopo de início e fim da função
double somar(double x, double y){
double resultado = x + y;return resultado;
}
Ponteiros
11:28 32Estruturaaaaaaa
Ponteiros : Operadores
11:28
Para operação com ponteiros, utilizamos dois operadores unários:
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Operador Descrição
* Utilizado para declarar um ponteiro e para retornar o valor
& Utilizado para retornar o endereço de memória da variável
Declarando uma variável do tipo ponteiro
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
int *ptr;
Tipo da variável
Nome da variável
Operador
unário
Declaração e atribuição de ponteiros
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Variável
ponteiro
Atribuindo o endereço
de memória
int *ptr;
int valor;
valor = 1500;
ptr = &valor;
Ponteiros : Operadores
11:28
Se x é uma variável, então &x é o seu endereço
int s = 999
int *p = &s
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Ponteiros : Operadores
11:28
Todo ponteiro pode ter o valor NULL.
NULL é uma constante, geralmente vale 0 (definida no arquivo interface stdlib)
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Ponteiros: Exemplo
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Vetores e Ponteiros
11:28Estrutura de Dados: Aula 02 - Estrutura de dados e TAD
Podemos usar ponteiros como se fossem matrizes:
int mat[] = { 1, 2 , 3 };
int *p = mat;
printf(“%d”, p[2]); // imprime 3
Exemplo
11:28Estrutura de Dados: Aula 02 - Estrutura de dados e TAD
#include <stdio.h>
int main() {
int mat[50][50];
int i, j;
// percorre a matriz com dois loops
for (i = 0; i < 50; i++) {
for (j = 0; j < 50; j++) {
mat[i][j] = 0;
}
}
return 0;
}
Exemplo
11:28Estrutura de Dados: Aula 02 - Estrutura de dados e TAD
#include <stdio.h>
int main() {
int mat[50][50];
int *p= (int *) mat, i;
// percorre a matriz com um único loop
for (i = 0; i < 2500; i++) {
*p = 0;
p++;
}
return 0;
}
É muito mais
rápido e diminui o
tamanho do código
Vetores e Ponteiros
11:28Estrutura de Dados: Aula 02 - Estrutura de dados e TAD
int vetor[10];
int *ponteiro, i;
ponteiro = &i;
// as operações a seguir são inválidas
// ERRADO: vetor não é variável
vetor = vetor + 2;
// ERRADO: vetor não é variável
*vetor = 0;
// ERRADO: vetor não é variável
vetor = ponteiro;
Strings e Ponteiros
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
#include <stdio.h>#include <string.h>
int main() {char nome[15];char *p = “Revisão de C/C++”;// p pode ser usado como uma stringstrcpy(nome, p);printf("%s %s\n", nome, p);return 0;
}
Exemplo
11:28Estrutura de Dados: Aula 02 - Estrutura de dados e TAD
#include <stdio.h>
int main() {char *s = "string";int a = 1, *p = &a;float f = 2.0;void *v;
v = p; // v aponta para um inteiroa = *((int *) v);v = s; // v aponta para uma strings = (char *) v;v = &f; // v aponta para um floatf = *((float *) v);
return 0;}
Matrizes de Ponteiros
11:28Estrutura de Dados: Aula 02 - Estrutura de dados e TAD
// vetor de ponteiros
int *vetor[10];
// vetor de strings
char *strings[] = {"EU", "TU", "ELE" };
// matriz de ponteiros
int *matriz[2][2];
Ponteiros para Ponteiros
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
#include <stdio.h>
int main() {
int a = 10, *p, **pp;
p = &a;
pp = &p;
printf("%d\n", **pp); // imprime 10
return 0;
}
Obs.: Para acessar o valor
de a através de pp usamos
o operador * duas vezes
Aviso sobre Ponteiros!
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
#include <iostream>
using namespace std;
int main(){
int *ptr_inteiro;
double valor;
valor = 345.76;
ptr_inteiro = &valor;
cout << *ptr_inteiro << endl;
}
ERRO !!!
Cuidados ao utilizar ponteiros
11:28Estrutura de Dados: Aula 02 - Estrutura de dados e TAD
// Errado - Não execute
int main () {
int a,*p;
a = 10;
*p = a; // Para onde p aponta???
return 0;
}
Diretivas de Compilação
11:28Estrutura de Dados: Aula 02 - Estrutura de dados e TAD
Todas as diretivas começam por # e podem ser utilizadas em qualquer parte docódigo
Principais diretivas definidas no C ANSI:
#if, #ifdef, #ifndef, #else, #elif, #endif,#include,
#define, #undef, #error
A Diretiva #include
11:28Estrutura de Dados: Aula 02 - Estrutura de dados e TAD
Sintaxe: #include <nomeDoArquivo>
• O arquivo se encontra no path do compilador
#include “nomeDoArquivo”
• O arquivo se encontra em outro local
Exemplos: #include <string.h>
#include “pessoa.h”
A Diretiva #define
11:28Estrutura de Dados: Aula 02 - Estrutura de dados e TAD
Sintaxe: #define nomeDaMacro corpoDaMacro
copoDaMacro é opcional
Exemplos: #define TAMANHO 10
#define _WIN32
#define max(a,b) ((a>b)?(a):(b))
A Diretiva #undef
11:28Estrutura de Dados: Aula 02 - Estrutura de dados e TAD
Sintaxe: #undef nomeDaMacro
Exemplo: #undef max
O comando return
11:28Estrutura de Dados: Aula 02 - Estrutura de dados e TAD
Sintaxe: return nomeDaVariável;
nomeDaVariável não é usado em funções que retornam void
O return encerra a execução da função
Pode ser comparado com obreak usado nos loops
Uma função pode ter mais de um return
Exemplo
11:28Estrutura de Dados: Aula 02 - Estrutura de dados e TAD
int dividir(int a, int b) {
if (!b) {
return 0; // evita a divisão por 0
}
return a / b;
}
Protótipos de funções
11:28Estrutura de Dados: Aula 02 - Estrutura de dados e TAD
Os compiladores de C são muito eficientes, mas isto traz alguns problemas
Funções só podem ser usadas se forem definidas anteriormente
A solução é utilizar protótipos de funções
Sintaxe: tipoDeRetorno nomeDaFunção(tipo1, ... , tipoN);
Protótipos de funções
11:28Estrutura de Dados: Aula 02 - Estrutura de dados e TAD
void b(int); // protótipo de b
void a(int i) {// ...b(i);// ...
}
void b(int j) {// ...a(j);// ...
}
Ponteiros para Funções
11:28Estrutura de Dados: Aula 02 - Estrutura de dados e TAD
Sintaxe: tipoDeRetorno (*nomeDoPonteiro) (tipoP1, ... , tipoPN)
Exemplo:
int (*p)(const char *);
p = puts; // inicializa
(*p) (“NASSAU”); // faz a chamada
Também podemos passar ponteiros para funções como parâmetro de outrasfunções
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Desafio!
Desafio I
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
a = 1
b = 10
Desafio II
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
a = 10
b = 1
A linguagem C++
11:28 61 Estrutura de Dados: Aula - Revisão de C/C++ na Prática
A linguagem C++
11:28
Total compatibilidade com C (qualquer programa em C é um programa C++)
C++ traz ainda: Classes e variáveis/funções membros (atributos/métodos);
Sobrecarga
Herança (permite herança múltipla)
Funções virtuais (sobrescrita de métodos)
Etc.
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
A linguagem C++
11:28
C++ não possui coletor de lixo como Java Porém as instruções de criação/destruição são mais simples do que malloc/free.
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Declaração de Classes
11:28
A declaração de uma classe diz o que as instâncias da classe podem fazer (contrato)
A definição/implementação de uma classe diz como as instâncias da classe farão oque encontra-se no contrato
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Sobrecarga
11:28
C++, assim como Java, permite sobrecarga Várias funções com mesmo nome
O mesmo nome é permitido, desde que os parâmetros sejam diferentes:
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Construtor
11:28
C++, assim como Java, permite sobrecarga Se nenhum construtor é dado, um construtor default (sem argumentos) é adicionado pelo C++
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Instâncias diretas ( . ) e ponteiros (->)
11:28
O ( . ) e ( -> ) são usados para acessar membros da classe
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Destrutores
11:28
Em C++, deve-se destruir as instâncias criadas, não há coletor de lixo
Destrutores devem liberar memória dinâmica alocada pela classe durante aconstrução da instância
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Resolução de escopo ( :: )
11:28
A implementação de um método é prefixada com o operador de resolução de escopo
Motivo: diferente de Java, o método não encontra-se obrigatoriamente dentro doescopo da classe
Pode-se usá-lo também para variáveis
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Concluindo...
11:28 70 Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Atividade 1
11:28
1) Implemente as seguintes funções: int mystrlen(char *c)
• retorna o tamanho da string c void mystrcpy(char *dest, char *orig)
• copia orig para dest void mystrcat(char *dest, char *orig)
• concatena orig em dest int mystrchar(char *str, char c)
• Retorna o índice onde c ocorre em str2) Declare um ponteiro para uma das funções que você fez no exercício anterior e chame-a utilizando o
mesmo3) Crie as seguintes macros:
min(a,b)• Retorna o mínimo entra a e b
isPar(a)• Retorna 1 se a for par e 0 caso contrário
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Material: https://sites.google.com/site/leinylsonnassau
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Material baseado nas aulas de:
Algoritmos e Estruturas de Dados I, Prof. Jesús P. Mena-Chalco
Na próxima aula veremos...
Listas Estáticas
11:28 Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Alguma Dúvida?
11:28
Até a próxima aula...
leinylson@gmail.com
Recommended