Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: -...
Transcript of Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: -...
![Page 1: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/1.jpg)
1
Aula 09: - Ponteiros (parte 2)
MCTA028 – Programação Estruturada
Prof. Jesús P. Mena-Chalco
3Q-2017
![Page 2: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/2.jpg)
2
Sobre funções (“uma ideia”)
![Page 3: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/3.jpg)
3
Qual função é mais “eficiente”?
![Page 4: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/4.jpg)
4
1995 2015
![Page 5: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/5.jpg)
5
Qual função é mais “eficiente”?
Número de multiplicações?Proporcional a k
Número de multiplicações?Proporcional a log2(k)
![Page 6: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/6.jpg)
6
Exercício de Fibonacci
https://visualgo.net/en/recursion Número de chamados?Proporcional a 2^n
![Page 7: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/7.jpg)
7
![Page 8: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/8.jpg)
8
Qual função é mais “eficiente”?
http://bigocheatsheet.com/?utm_content=buffer0b573
![Page 9: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/9.jpg)
9
![Page 10: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/10.jpg)
10
![Page 11: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/11.jpg)
11
Melhores momentos da aula anterior
![Page 12: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/12.jpg)
12
INSTRUÇÕES
Armazena o código compilado (na linguagem máquina)
[~bytes]
PILHA (STACK)
Armazena as variáveis ao longo da execução do programa.
[~Mbytes]
Processo na memória
HEAP
Espaço de memória principal gerenciado pelo SO.
[~Toda a memória RAM]
Alocação estática Alocação dinâmica
int x;double M[10][20];char *c;
double M = malloc(...);
![Page 13: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/13.jpg)
13
INSTRUÇÕES PILHA (STACK)
Processo na memória
HEAP
Ponteiros?
Em Java e Python o uso é transparente. Não precisa se preocupar de alocar e
liberar memória
![Page 14: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/14.jpg)
14
Endereços
...
01010111
11000011
01100100
11100010
...
37FD00
37FD01
37FD02
37FD03
Geralmente o endereço do objeto é o endereço do 1ro byte.
![Page 15: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/15.jpg)
15
Endereços
Há vários tipos de ponteiros:P. para caracteresP. para inteirosP. para registrosP. para ponteiros para inteirosP. para função
int* p ;
int *p;
int * p;
← O “*” modifica a variável e não o int (mais aceito)
← Um tipo de dado novo int* (conceitualmente correto)
O compilador C aceita qualquer das formas.
![Page 16: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/16.jpg)
16
exemploPonteiro.c
Operadores unarios & → Referência: na frente de uma variável: Devolve o endereço de memória onde a variável está armazenada
* → Derreferência: na frente de variável ou expressão: Devolve o valor ou conteúdo do endereço de memória apontada pela variável ou expressão
![Page 18: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/18.jpg)
18
Vetores e endereços
![Page 19: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/19.jpg)
19
Vetores
Os elementos de um vetor são alocados consecutivamente na memória do computador.
Se cada elemento ocupa b bytes, a diferença entre os endereços de dois elementos consecutivos será de b.
(ex. inteiros ocupam 4 bytes, em uma plataforma de 64 bits)
![Page 20: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/20.jpg)
20
Vetores
Os elementos de um vetor são alocados consecutivamente na memória do computador.
Se cada elemento ocupa b bytes, a diferença entre os endereços de dois elementos consecutivos será de b.
O compilador C cria a ilusão de que b vale 1 qualquer que seja o tipo dos elementos do vetor.
![Page 21: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/21.jpg)
21
Alocação de memória
![Page 22: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/22.jpg)
22
Alocação de memória
IdeiaV+i*sizeof(int)
![Page 23: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/23.jpg)
23
Alocação memória
![Page 24: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/24.jpg)
24
Quando não for possívelSeparar memoria suficiente
Um ponteiro NULO é devolvido
![Page 25: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/25.jpg)
25
Quando não for possívelSeparar memoria suficiente
Um ponteiro nulo é devolvido
A diferença de ponteirosDevolve um long e é
Permitida se os dois forem doMesmo tipo
![Page 26: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/26.jpg)
26
Quando não for possívelSeparar memoria suficiente
Um ponteiro nulo é devolvido
A diferença de ponteirosDevolve um long e é
Permitida se os dois forem doMesmo tipo
10 20 100
![Page 27: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/27.jpg)
27
Os ponteiros facilitam a
alocação dinâmicade memória
![Page 28: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/28.jpg)
28
Matrizes
Material adaptado da aula de Matrizes de Ronaldo F. Hashimoto e Carlos H. Morimoto (IME/USP)
![Page 29: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/29.jpg)
29
Declara uma matriz Mde 100 linhas
com 200 colunas(20mil inteiros)
A memória do computador é linear!
![Page 30: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/30.jpg)
30
Estrutura da matriz na memória do computador
![Page 31: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/31.jpg)
31
Disposição dos 20mil elementos da matriz M na memória
Qual o endereço de M[0][78]?(tendo como base M[0][0])
![Page 32: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/32.jpg)
32
Disposição dos 20mil elementos da matriz M na memória
Qual o endereço de M[0][78]?(tendo como base M[0][0]) &M[0][0]+78
![Page 33: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/33.jpg)
33
Disposição dos 20mil elementos da matriz M na memória
Qual o endereço de M[78][21]?(tendo como base M[0][0])
![Page 34: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/34.jpg)
34
Disposição dos 20mil elementos da matriz M na memória
Qual o endereço de M[78][21]?(tendo como base M[0][0]) &M[0][0] + (78*200+21)
![Page 35: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/35.jpg)
35
Índices
Na linguagem C não existe verificação de índices fora da matriz/vetor.Quem deve controlar o uso correto dos índices é o programador.
O acesso utilizando um índice errado pode ocasionar o acesso de outra variável na memória.→ Se o acesso à memória é indevido você recebe a mensagem “segmentation fault”.
![Page 36: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/36.jpg)
36
Matrizes
![Page 37: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/37.jpg)
37
Matrizes
![Page 38: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/38.jpg)
38
![Page 39: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/39.jpg)
39
Teste de avaliação
![Page 40: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/40.jpg)
40
Questão 1 - a
Escreva o resultado da execução do seguinte programa
6 7 8 9 0 1 2 3 4 5
0 1 2 3 4 5 6 7 8 9
![Page 41: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/41.jpg)
41
Questão 1 - b
Escreva o resultado da execução do seguinte programa
0 1 2 3 4
0 1 2 3 4 ...
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
0 1 2 3 . . .
![Page 42: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/42.jpg)
42
Questão 1 - c
Macro!
0 1 2 3 4 ...
0 1 2 3 . . .
5
A
![Page 43: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/43.jpg)
43
Função com matriz como parâmetro
O nome de uma matriz dentro do parâmetro de uma função é utilizado como sendo um ponteiro para o primeiro elemento da matriz que está sendo usada na hora de utilizar a função.
→ Não é alocada memória (novamente) para um vetor passado por parâmetro para uma função.
![Page 44: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/44.jpg)
44
Questão 2
Escreva um programa que leia um número inteiro positivo n seguido de n números inteiros e imprima esses n números em ordem invertida.
Por exemplo, ao receber5 22 33 44 55 66
o seu programa deve imprimir 66 55 44 33 22
Seu programa não deve impor limitações sobre o valor de nSeu programa não deve usar colchetes.
![Page 45: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/45.jpg)
45
Questão 2
Os ponteiros facilitam a
alocação dinâmicade memória
![Page 46: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco](https://reader034.fdocument.pub/reader034/viewer/2022052019/6033486fcc0d10733454678e/html5/thumbnails/46.jpg)
46