Guia Completo de Informática para Preparatórios
Guia Completo de Informática para Preparatórios
TSI
MPSIPCSIPTSI
MP TPC PC
PTPSI
© Dunod, 2017
11 rue Paul Bert, 92240 Malakoff
[Link]
978-2-10-075854-8
Prefácio
Esta obra destina-se aos alunos das classes preparatórias científicas para as grandes escolas.
lières MPSI, PCSI, PTSI, TSI, BCPST, TPC, MP, PC, PSI e PT). Também poderá interessar
os estudantes que se preparam para o CAPES de Matemática Opção Informática.
O livro é dividido em dez capítulos, cobrindo a totalidade dos programas de Informática
duas anos de aulas preparatórias, os seis primeiros capítulos contendo o programa de primeiro ano
ano e os quatro últimos o de segundo ano. Esta obra é redigida utilizando a linguagem
Python (e os módulosnumpyescipy), ferramentas necessárias e suficientes para a preparação para
concurso. Os capítulos e exercícios são numerados a partir do zero para respeitar as convenções
de Python.
Cada capítulo começa com uma parte chamada O essencial do curso. Nela são apresentados os pontos
os mais importantes do curso à maneira de fichas. A primeira coisa a fazer é conhecer isso
parte.
Encontramos então uma parte chamada As métodos a dominar. Ela apresenta os métodos
em relação ao capítulo do curso, ilustrado com um ou mais exemplos, e saber colocar em
pratique.
A maioria dos capítulos inclui questionários de múltipla escolha ou questionários.
verdadeiro/falso. Estes permitirão identificar rapidamente possíveis lacunas.
Uma ampla escolha de exercícios, de níveis variados, é então apresentada. Uma correção é proposta.
para cada um deles.
Os capítulos oferecem em seguida Trabalhos Práticos, cuja dificuldade é progressiva. Eles
portent sobre temas muito variados, abrangendo problemas decorrentes da informática, mas também
matemática, física, química, ciências da engenharia e biologia.
Progredir em informática requer prática, e o leitor é convidado a realizar esses trabalhos
na máquina, testar códigos, decifrar as mensagens de erro que a máquina poderia enviar
para progredir em sua maestria sintática da linguagem, realizar testes buscando mais
as limitações de seus programas que uma validação superficial antes de consultar o gabarito. Algumas
as correções destes Trabalhos Práticos estão incluídas nesta obra, e outras podem ser encontradas
na página dedicada a isso no site da Dunod.
Nós usamos alguns pictogramas ao longo desta obra:
0 Arquitetura do computador
17
2 Representação dos números.................................................61
3 Algoritmo ...........................................................85
4 Cálculo numérico (uma dimensão)............................... 117
5 Cálculo numérico (duas dimensões) ............................ 189
6 Bases de dados..................................................... 241
7 Pilhas e recursividade ................................................... 273
8Tris ....................................................................... 357
9 Gráficos ................................................................. 385
Bibliografia
Índice......................................................................429
CAPÍTULO
Arquitetura do computador
0
O essencial do curso
■0 Geral
Estamos hoje cercados por computadores de todos os tamanhos e potências. O pre-
o que vem à mente é o computador de mesa, é essencialmente sobre isso que nós
falaremos aqui. No entanto, podemos citar os exemplos representados abaixo que constituem uma
ínfima parte dos computadores presentes em nosso ambiente.
A escala de tamanho dos computadores varia desde o simples chip de tamanho de alguns milímetros
(ou até menos) para os supercomputadores de cálculo da NASA, por exemplo.
Definição
Unordinateur é uma máquina que processa dados numéricos a partir de instruções
organizados em programas.
Definição
O programa é a sequência de instruções (operações lógicas e aritméticas) compreendida
síveis pelo computador.
Pode-se escrever programas em uma multiplicidade de linguagens (C, Fortran, Python, Scilab,
Ocaml…), mas a linguagem realmente executada pelo processador do computador é uma linguagem que
não é constituído apenas por palavras binárias: a linguagem de máquina. Essa linguagem é constituída por uma sequência de
Capítulo 0 Arquitetura do computador
palavras que especificam as operações a serem realizadas nos bits da memória do computador. A linguagem
padronizado de nível mais baixo1é a linguagem assembly. Ela é compreensível à leitura por
um humano. Ele especifica, por exemplo, qual valor numérico o computador deve colocar em uma célula
memória especificada.
■1 Armazenamento da informação
Definição
A informação em um computador é armazenada e trafega na forma de bits (dígitos binários).
Um bit pode ter apenas 2 valores: 0 ou 1.
Unmultiplet (byte em inglês) é uma célula de memória elementar e é constituído de plu-
sieurs bits (sauf exception 8 bits).
Unoctete um multiplo (byte) de 8 bits. Os bytes que não têm 8 bits são raros, na
Na linguagem comum, "byte" e "octeto" são considerados sinônimos.
Essas unidades são anotadas como b (bit), B (byte) e o (octeto). Para medir a capacidade de armazenamento de um
disco rígido, usa-se como unidade o kilobyte (ko), o megabyte (Mo), o gigabyte (Go) ou até
teraocteto (To). Ao notar que103= 1000≈ 1024 = 210, alguns (mas não todos) usam
às vezes uma definição alternativa de ko na qual 1ko = 1024o em vez de 1ko = 1000o (ver o
quadro) .
Essas duas convenções podem gerar confusões. Assim, se você comprar um disco rígido de
60To, o fabricante utiliza o padrão. Mas se o seu sistema operacional usar a variante
binarie, seu disco rígido aparecerá no seu computador como 'apenas' 54.6To.
Para eliminar qualquer ambiguidade, a Comissão Eletrotécnica Internacional [IEC] propõe de novo-
novos nomes para a variante binária: quilocteto (kio), mebiocteto (Mio), gibiocteto (Gio) e tebiocteto
(Tio). Esses nomes são recomendados por diferentes organismos, mas ainda não foram incorporados em
a linguagem corrente.
Definição
A informação é caracterizada por:
• sonadresse: valor numérico que designa a localização da informação;
• sacapacidade(tamanho da memória): expressa em bytes e suas potências;
• temps de acesso: duração entre uma solicitação (leitura / escrita) e sua realização
efetivo
• sontemps de cycle: duração entre 2 pedidos;
• seu débito: número de informações (leitura / escrita) por unidade de tempo.
A memória é organizada em uma matriz de bytes, cada um identificado por um endereço. Acessa-se por
o intermediário de barramento (conjunto de ligações físicas) do qual o barramento de endereço e o barramento de dados.
Um barramento de controle permite definir a ação a ser realizada (leitura / escrita).
Definição
Existem 2 tipos principais de memórias:
• a memória viva, volátil ou RAM (Memória de Acesso Aleatório), cujas duas tecnologias
predominante
◦ estática: SRAM, realizada com base em flip-flops;
◦ dinâmica: DRAM, realizada com base em capacitores. É aquela que encontramos
em nossos PCs.
• a memória morta, não volátil ou ROM (Memória Somente de Leitura), que se desdobra em
diferentes formas que, aliás, não são todas somente leitura:
◦ PROM, memória programável ;
◦ EPROM, memória programável apagável (Erasable)
◦ EEPROM, memória eletricamente apagável (Elétrica), da qual uma categoria conhecida
é a memória Flash que é prática de usar, mas bastante lenta. Usamos em
as BIOS, as placas eletrônicas e os cartões de memória (SD, USB, CompactFlash)
e também os discos rígidos SSD (Solid-State Drive).
◦ as memórias de massa magnéticas (disco rígido clássico);
A memória morte serve principalmente para armazenar dados que não devem de maneira nenhuma ser apagados
(número de série, endereço MAC de uma placa de rede, etc.) assim como os dados que não devem ser
apagadas sem um pedido expresso (disco rígido, cartão de memória, etc.).
Capítulo 0 Arquitetura do computador
Definição
O computador é equipado com portas de entrada e saída de comunicação. Elas permitem, através de...
protocolos de comunicação para realizar as trocas entre o computador e seu ambiente
ment extérieur (utilisateur, périphériques, internet, etc.)
Definição
A placa-mãe acolhe todos os componentes básicos de um computador:
Definição
A placa-mãe estabelece a ligação entre estes diferentes componentes através da interface de bus.
comunicação. Geralmente, distingue-se os barramentos de instruções e os barramentos de dados.
Definição
O chipset é o órgão que permite regular as trocas entre os diferentes componentes.
Ele realiza uma contagem rápida com a ponte norte entre o processador e a
memória RAM principalmente, e uma cadência mais lenta com os outros componentes como
o disco rígido.
Isso explica por que o computador fica muito mais lento quando toda a memória
A RAM está sendo usada e ele deve usar o disco rígido para realizar o armazenamento de dados
temporários.
10Capítulo 0 Arquitetura do computador
Definição
O processador, também chamado de microprocessador ou CPU (Unidade Central de Processamento), é o or-
ganho principal do computador, ele deve:
(0)buscar as instruções na memória ;
(1) decodificar as instruções;
(2) executar as instruções.
Definição
A arquitetura Harvard é uma das arquiteturas históricas de processadores. Seu princípio é
que os dados e o programa estão armazenados em duas memórias diferentes, cada uma delas
seu próprio ônibus (ou seja, o ônibus de dados e o ônibus de instruções).
Esta arquitetura inspirou o design de muitos microcontroladores embarcados (notam-
ment des processadores ARM); mas também alguns processadores de computadores de mesa, e.g.,
A arquitetura Skylake da Intel é uma variante de Harvard: os dados e o programa são
na mesma unidade de memória, mas têm caches separadas, cada uma com seu próprio barramento.
Definição
Os recursos do processador são:
• um contador ordinal (PC: Contador de Programa), ele contém o endereço da instrução;
• um registro de instrução, ele contém o código da instrução;
• registros diferentes:
◦ os registros gerais (GPR: Registro de Uso Geral);
◦ os registros específicos (SFR: Registro de Função Específica);
◦ os registros de memória (RAM);
• um acumulador (ou registro de trabalho) que contém os resultados em andamento;
• uma ou várias unidades aritméticas e lógicas (ALU Aritmética e Lógica
Unidade) constituídas de portas lógicas permitindo realizar operações booleanas.
• um sequenciador (scheduler) que coordena as trocas entre os registradores, produz e
interprete os sinais de controle;
• um relógio que cadencia as operações de alta frequência;
• um ou vários caches contendo dados recentemente utilizados para acesso
mais rapidamente. São áreas de memória de alguns kilobytes acessíveis muito
rapidamente. O CPU verifica primeiro se a informação está presente no cache antes
de redemander.
O essencial do curso 11
Um processador pode ser composto por um ou vários núcleos, ou seja, vários pro-
cessores em um mesmo chip. As arquiteturas clássicas atuais contam com 4 núcleos
(QuadCore), também encontramos muitos DualCore que contêm 2
corações.
Em computadores muito potentes dedicados a cálculos avançados (simulação de fluxos
de fluidos, cálculos para o lançamento de foguetes, etc.) pode-se alcançar um número de
corações muito grandes, que não param de aumentar com as evoluções da informática.
Exemplo de aplicação
Arquitetura de um processador Intel® NúcleoTM 2
®
Este exemplo é retirado da documentação da Intel [INT16] detalha a estrutura simplificada de um
coração de microprocessador. Os processadores atuais usam 2, 4 ou até 8 núcleos como este.
O funcionamento é o seguinte:
• Cada instrução é lida e pré-decodificada (determinação do comprimento da instrução
por exemplo) pelo primeiro bloco (Busca de Instrução e Pré-Decodificação) que utiliza se necessário
dados contidos na memória cache compartilhada (L2) com os outros núcleos, então
colocado na fila de instruções (Fila de Instruções).
• Execução do código:
◦ deslocamento e renomeação das microoperações no corpo de execução (Rena-
me/Alloc) ;
◦ réordonnancement das micro operações (Retirement Unit) a fim de executar em pre-
meira as operações que estão prontas para serem feitas;
◦ cadenciamento dessas microoperações (Agendadores).
• As diferentes unidades aritméticas e lógicas (ALU) executam as operações que lhes
são dedicados (adição, multiplicação, etc.), em seguida, os resultados são armazenados na memória
cache (L1)
Busca de Instrução
e PréDecodificar
Fila de Instrução
µCódigo
Decodificar
ROM
Cache L2 Compartilhada
Renomear/Alocar Até 10,7 GB/s
FSB
Unidade de Aposentadoria
(Buffer de Reordenação)
Escalonadores
ALU ALU ALU
Ramo FAdicionar FMul
MMX/SSE Carregar Loja
MMX/SSE MMX/SSE
FPmove
Cache D de L1 e TLB D
12Capítulo 0 Arquitetura do computador
■3 Lógica de estrutura
Definição
O carregador de inicialização é o firmware que é iniciado automaticamente na inicialização.
do computador. Ele executa as seguintes tarefas:
• inicialização dos componentes da placa-mãe, do chipset e de alguns periféricos;
• identificação dos dispositivos internos e externos conectados;
• inicialização do sistema operacional.
Este firmware é armazenado em uma memória flash para não ser facilmente alterado.
Os carregadores de inicialização mais conhecidos são o BIOS (Basic Input Output System)
e mais recentemente o UEFI (Interface de Firmware Extensível Unificada) mais facilmente
modificável, especialmente para atualizações. Este último também oferece uma interface
gráfico de alta definição mais agradável.
Definição
O sistema operacional ou OS (Operating System) gerencia as aplicações e softwares de
o computador. Ele faz especialmente a ligação entre estes e o hardware (processador, memórias,
etc.).
Definição
O sistema de arquivos define a maneira como são armazenados, organizados e hierarquizados.
os dados em memória. Encontramos especialmente um sistema de pastas e subpastas que
constituem uma árvore na organização dos arquivos.
Definição
Os dados do usuário (arquivos) são organizados pelo sistema de arquivos na forma de uma
arborescência partindo de um diretório raizC:, D:no Windows,/ sob linux por exemplo)
nos quais se encontram subpastas que por sua vez contêm outras subpastas.
Definição
O caminho de acesso (path em inglês) de um arquivo representa o percurso na árvore de
a memória para localizar o arquivo (sequência de pastas a abrir), por exemplo:C:\WinPython-
64bits-[Link]\[Link] iniciar meu editor de código python.
Para que um arquivo possa ser executado sem especificar seu caminho de acesso, ele deve
fazer parte do variablepathque contém todos os diretórios especificados onde o
o sistema operacional deve procurar o arquivo.
O sistema operacional Windows exibe a árvore completa da pasta em
qual trabalhamos (em modo gráfico ou no terminal). No Linux
ou MacOS, no terminal, o comandopwd(Caminho do Diretório de Trabalho) permite de
l'obtenir.
Uma vez na pasta desejada, podemos obter a lista dos arquivos e pastas presentes.
comandodirsob Windows elssous Linux et MacOS.
O sistema de arquivos também gerencia os direitos de acesso. De fato, por razões de
segurança (do computador ou da informação) um usuário padrão pode não ter acesso
a um arquivo apenas para leitura para evitar que seja modificado.
■4 Acaso
Na informática, o acaso é às vezes útil (veja especialmente os TP 5.2 e 9.0). Para gerar
nomes "aleatórios", existem principalmente duas soluções:
(0)Os PRNG (Gerador de Números PseudoAleatórios) são programas de computador que determinam
ministérios que geram sequências de números "aparentemente" aleatórias.
(1)Os TRNG (Gerador de Números Aleatórios Verdadeiros) são dispositivos físicos (hardware) que
geram aleatoriedade, seja medindo um fenômeno físico caótico como uma lâmpada de lava
ou o ruído de um sensor, seja usando um fenômeno quântico considerado aleatório [IDQ10].
Os processadores Intel atuais contêm um TRNG [INT12]. A tese [San09] referencia de
numerosos TRNG.
Se os TRNG garantem um 'verdadeiro' acaso, são mais lentos e não geram leis uniformes.
o que leva a utilizar soluções mistas: um TRNG é desviado e serve para inicializar um PRNG.
Fonte phy- Gerador
Débiaiseur
sique de acaso pseudoaleatório
14Capítulo 0 Arquitetura do computador
(e) A distribuição dos arquivos na memória do disco rígido segue a estrutura das pastas?
□Sim
□Não
(f) Entre as afirmações seguintes, quais são verdadeiras?
As informações armazenadas em uma mesma pasta ocupam espaços de memória vizinhos.
Os dados contidos em um arquivo de texto de tamanho ordinário são armazenados em caixas
memória vizinhas.
Quando se move um arquivo de uma pasta para outra, modifica-se a área de memória que contém
as informações do arquivo.
Qual é o papel da placa-mãe?
Ela permite armazenar dados no computador.
Ela permite conectar os diferentes órgãos do computador entre si.
Ela alimenta os dispositivos com energia elétrica.
Ela regula os cálculos do microprocessador.
16Capítulo 0 Arquitetura do computador
(e) A distribuição dos arquivos na memória do disco rígido segue a árvore de pastas?
□Sim
□✓
Não
(f) Entre as afirmações a seguir, quais são verdadeiras?
As informações armazenadas em uma mesma pasta ocupam espaços de memória vizinhos.
□✓dados contidos em um arquivo de texto de tamanho comum são armazenados em caixas
Os
memória vizinhas.
□Quando se move um arquivo de uma pasta para outra, modifica-se a área de memória que contém
as informações do arquivo.
(g) Qual é o papel da placa-mãe?
Ela permite armazenar dados no computador.
✓ permite conectar os diferentes órgãos do computador entre si.
□
Ela
Ela alimenta os dispositivos com energia elétrica.
Ela coordena os cálculos do microprocessador.
CAPÍTULO
Programação
1
O essencial do curso
Neste livro, usamos a linguagem Python.
■0 Expressões
Definição
Uma expressão é uma fórmula que retorna um resultado.
As operações usuais (soma, subtração, multiplicação, divisão, potência, anotadas+, -, *, / et**) assim como os
funções (por exemploabs) podem ser usados em expressões. Exemplos :
(5 * 9) / 5 + 3**2
18,0
>>>abs(abs(-10)**3 + (-3)**7)
1187
Dado um realb >0, para todo realahá dois númerosq∈ Zetr∈ [0, btais como
a= bq+ r. Em Python, o quocienteqé calculado com a operação// e o restorcom%.
■1Tipos de base
Os tipos básicos manipulados em Python são:
• intos inteiros relativos
• flutuaros números decimais também chamados de números flutuantes;
• complexoos complexos, representados por um par deflutuar;
• boolos booleanosVerdadeiroeFalso;
• Nenhum tipoo tipo deNone.
O cálculo está correto, exceto para os tiposflutuaretcomplexoPara esses dois tipos, os
cálculos podem levar a erros de arredondamento.
As operações de comparação==, !=, <, <=, >, >= retornam um booleano. As operações usuais
sobre os booleanos (e, ouenão) estão disponíveis em Python.
O valorNenhumé retornada por funções que não têm resultado. Por padrão, não é exibido
no console. Por exemplo, a expressãoimprimir(2)afiche2então devolveNone.
■2 Instruções
Definição
Uma instrução é uma ordem dada ao computador, uma instrução não atribui valor.
A afetacão ou atribuição é uma instrução que associa um valor a uma variável. As variáveis
as afetadas podem então ser usadas em expressões. Exemplo:
>>>x = 3
>>(x + 1) / 2
2.0
O que está à esquerda e o que está à direita do= não têm o mesmo papel.
Além disso,= e== não devem ser confundidos.
se x > 0:
print(1)
Este código exibe1simxé estritamente positivo, e não faz nada além disso.
O corpo dose(aquiprint(1)) está indentado, ele só é executado se a condição dose(aquix>0) é
avaliada emVerdadeiro. Também é possível adicionar umsenão. O corpo dosenãonão será executado a menos que
a condição doseé avaliada emFalso. O corpo doseou dosenãopode conter várias linhas.
Exemplo:
se x > 0:
imprimir(1)
senão:
x = 0
imprimir(2)
Definição
Os loops permitem repetir uma sequência de instruções. Existem dois tipos:
laçosenquantoe os laçospara.
y = 123
n = 0
enquanto whiley != 0:
imprimir(y)
y = y // 10
Neste código, exibimosydepois dividimos pelo10desde que não tenhamos obtido zero. O código vai
exibir123então12então1.
O essencial do curso 19
forkinrange(5):
imprimir(k)
■3 Sequência
Uma sequência é uma sequência finita de valores. Existem vários tipos de sequências em Python, incluindo
aqui estão alguns exemplos:
• as cadeias de caracteres :azertyouazertyouazertyouazerty;
• as tuplas :(1, 7, 58);
• as listas :[1, 7, 58].
Uma cadeia de caracteres contém apenas caracteres. Uma tupla ou uma lista pode conter alguns.
dados de qualquer tipo (ou até dados de tipos diferentes). As operações seguintes
são comuns a todas as sequênciasset t :
• leitura do elemento númerok, s[k](o primeiro elemento tem o número 0) ;
• extração da subsequência do elemento númeroeuincluído no elemento númerojexclu
s[i:j];
• concatenação de duas sequências,s + t;
• concatenação dencópias de uma mesma sequência,s * noun * s.
Ao ler um elemento, é possível usar números negativos,-1para
o último elemento,-2para o penúltimo...
Ao extrair uma subsequência, é possível adicionar um passo.k, s[i:j:k].
Omitireusignifica começar a subsequência no início, omitirjsignifica acabar com a
sous-sequência no final.
Ao contrário das cadeias de caracteres e das tuplas, as listas são modificáveis e dispõem de opé-
racias adicionais:
• modificação do elemento númerokda lista :x;
• adição de um elementoxem fi de lista :[Link](x);
• supressão de um elemento ou de toda uma subsequência:del s[k]oudel s[i:j:k];
• supressão do último elemento (ou do númerok) retornando seu valor s: .pop()ou
[Link](k).
Definição
Os módulos (ou bibliotecas ou ainda bibliotecas) agrupam funções e constantes.
utilizáveis desde que o módulo tenha sido importado no código a ser executado, assim como os tipos
de dados particulares.
importar monmodule_1
importar monmodule_2 como modu
from monmodule_3 import*
from monmodule_4 import fonction_4_1, fonction_4_2
monmodule_1.fonction_1_1(variable_1)
modu.funcao_2_1(variavel_1, variavel_2)
monmodulo_3.constante_3_1
função_4_1(variável_1)
importar matemática
Se quisermos evitar esse tipo de problemas, podemos importar o módulonumpyem inteiro por exemplo
(do numpy importar *) e apenas as funções úteis da outra biblioteca.
defma_fonction(arg1, arg2):
s = arg1 + arg2
p = arg1 * arg2
retornar % s