estrutura de dados - aula de revisão de c na prática
TRANSCRIPT
![Page 1: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/1.jpg)
# Estrutura de Dados #
Aula - Revisão de C/C++ na PráticaProf. Leinylson Fontinele Pereira
![Page 2: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/2.jpg)
Na aula anterior...
Ponteiros
Funções
11:28 Estrutura de Dados: Aula - Revisão de C/C++ na Prática
![Page 3: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/3.jpg)
Introdução
11:28 3 Estrutura de Dados: Aula - Revisão de C/C++ na Prática
![Page 4: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/4.jpg)
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
![Page 5: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/5.jpg)
11:28 5 Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Linguagens de programação
![Page 6: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/6.jpg)
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.
![Page 7: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/7.jpg)
Ambiente de Desenvolvimento – Opção 01
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
![Page 8: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/8.jpg)
Ambiente de Desenvolvimento – Opção 02
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
![Page 9: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/9.jpg)
Programa nº I
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
![Page 10: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/10.jpg)
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Programa nº II
![Page 11: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/11.jpg)
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
![Page 12: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/12.jpg)
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
![Page 13: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/13.jpg)
Linguagem C: Tipos de dados
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
![Page 14: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/14.jpg)
Exibindo uma saída
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
![Page 15: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/15.jpg)
O comando return
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
![Page 16: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/16.jpg)
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.
![Page 17: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/17.jpg)
Vetores: exemplo
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
![Page 18: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/18.jpg)
Entendendo Vetores
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
![Page 19: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/19.jpg)
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
![Page 20: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/20.jpg)
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?
![Page 21: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/21.jpg)
Vetores: exercício
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
![Page 22: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/22.jpg)
Matriz: exercício
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
00000
00000
00000
00000
00000
![Page 23: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/23.jpg)
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.
![Page 24: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/24.jpg)
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
![Page 25: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/25.jpg)
Struct
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
![Page 26: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/26.jpg)
Struct
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
![Page 27: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/27.jpg)
Struct
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
![Page 28: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/28.jpg)
Struct: acessando os campos
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
![Page 29: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/29.jpg)
Funções
11:28 30Estruturaaaaaaa
![Page 30: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/30.jpg)
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;
}
![Page 31: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/31.jpg)
Ponteiros
11:28 32Estruturaaaaaaa
![Page 32: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/32.jpg)
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
![Page 33: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/33.jpg)
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
![Page 34: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/34.jpg)
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;
![Page 35: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/35.jpg)
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
![Page 36: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/36.jpg)
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
![Page 37: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/37.jpg)
Ponteiros: Exemplo
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
![Page 38: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/38.jpg)
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
![Page 39: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/39.jpg)
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;
}
![Page 40: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/40.jpg)
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
![Page 41: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/41.jpg)
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;
![Page 42: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/42.jpg)
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;
}
![Page 43: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/43.jpg)
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;}
![Page 44: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/44.jpg)
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];
![Page 45: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/45.jpg)
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
![Page 46: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/46.jpg)
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 !!!
![Page 47: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/47.jpg)
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;
}
![Page 48: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/48.jpg)
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
![Page 49: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/49.jpg)
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”
![Page 50: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/50.jpg)
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))
![Page 51: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/51.jpg)
A Diretiva #undef
11:28Estrutura de Dados: Aula 02 - Estrutura de dados e TAD
Sintaxe: #undef nomeDaMacro
Exemplo: #undef max
![Page 52: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/52.jpg)
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
![Page 53: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/53.jpg)
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;
}
![Page 54: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/54.jpg)
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);
![Page 55: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/55.jpg)
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);// ...
}
![Page 56: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/56.jpg)
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
![Page 57: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/57.jpg)
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
Desafio!
![Page 58: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/58.jpg)
Desafio I
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
a = 1
b = 10
![Page 59: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/59.jpg)
Desafio II
11:28
Estrutura de Dados: Aula - Revisão de C/C++ na Prática
a = 10
b = 1
![Page 60: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/60.jpg)
A linguagem C++
11:28 61 Estrutura de Dados: Aula - Revisão de C/C++ na Prática
![Page 61: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/61.jpg)
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
![Page 62: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/62.jpg)
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
![Page 63: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/63.jpg)
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
![Page 64: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/64.jpg)
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
![Page 65: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/65.jpg)
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
![Page 66: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/66.jpg)
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
![Page 67: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/67.jpg)
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
![Page 68: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/68.jpg)
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
![Page 69: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/69.jpg)
Concluindo...
11:28 70 Estrutura de Dados: Aula - Revisão de C/C++ na Prática
![Page 70: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/70.jpg)
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
![Page 71: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/71.jpg)
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
![Page 72: Estrutura de Dados - Aula de revisão de c na prática](https://reader035.vdocuments.pub/reader035/viewer/2022062412/58d0df371a28ab47238b6f3d/html5/thumbnails/72.jpg)
Na próxima aula veremos...
Listas Estáticas
11:28 Estrutura de Dados: Aula - Revisão de C/C++ na Prática