Buscar

Prova de Introdução a Ciência da Computação

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 20 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 20 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 20 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Prova 1
Introdução a Ciência da Computação
Gabriel Fernandez Ferrari Melo
SUMÁRIO
1 Questão 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1 Solução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 Questão 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1 Solução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3 Questão 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.1 item a) Resenha sobre linguagens de marcação . . . . . . . . . . . . . . . 7
3.2 item b) Resenha sobre linguagens de médio nível . . . . . . . . . . . . . . 9
3.3 item c) Resenha sobre linguagem de pesquisa declarativa . . . . . . . . . . 11
4 Questão 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.1 Solução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.1.1 O que são compiladores . . . . . . . . . . . . . . . . . . . . . . . 13
4.1.2 O que são linguagens compiladas e linguagens interpretativas e suas
diferenças? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.1.3 O que é a Máquina de Turing ? . . . . . . . . . . . . . . . . . . . 13
5 Questão 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
5.1 Solução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
5.1.1 Uma introdução a história do Shell . . . . . . . . . . . . . . . . . 15
5.1.2 Um pouco da Sintaxe . . . . . . . . . . . . . . . . . . . . . . . . . 16
5.1.3 Aplicabilidades e usos . . . . . . . . . . . . . . . . . . . . . . . . 18
5.1.4 Implementação de um Script de automação . . . . . . . . . . . . . 19
Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1 QUESTÃO 1
Faça um resumo, de no máximo 2 páginas, sobre o que é um Sistema Operacional,
escrevendo sobre os principais exemplos da atualidade. Referência utilizada na solução
(2003, TANEMBAUM).
1.1 SOLUÇÃO
Antes de falarmos sobre o que é um Sistema Operacional (SO) precisamos nos
remeter a alguns conceitos importantes alicerces para o entendimento desse tema. Dentre
esses, é substancial apresentarmos uma breve introdução aos computadores.
Um computador moderno consiste em um conjunto de componentes eletrônicos
sendo alguns destes: processadores, alguma memória principal, discos, teclado, mouse,
monitor e outros dispositivos de entrada e saída. Em suma, este se trata de um sistema
complexo com diversos componentes físicos que aqui chamamos de Hardware. No entanto,
toda essa complexidade possui uma finalidade bem definida: a resolução de problemas
através de instruções, bem definidas e não ambíguas, essas instruções são denominadas
por: algorítimos.
Partindo disso, temos então que o computador forma um sistema complexo, em que
há diversos componentes que interagem entre sí para o correto funcionamento do hardware.
Todavia, isso gera um problema em relação a finalidade do computador: resolver algorítimos
que seria a necessidade de entender e manipular continuamente todos os componentes e
assim nenhum código jamais seria escrito conforme coloca (2003, TANEMBAUM).
Por isso, os computadores são equipados com um determinador software o qual é
chamado de Sistema Operacional. Esse software difere dos demais por alguns aspectos,
primeiramente é a primeira aplicação que realiza uma conexão entre o tipo de informação
tratada pelo homem e pela máquina, por isso esse software se enquadra na categoria de
um software de sistema. Além disso, há dois pontos fundamentais presentes em um SO,
pontos esses relacionados as funções desempenhadas por ele sendo estas: O SO como
máquina virtual e como gerenciador de recursos.
Acerca da primeira função, destacamos que ela fornece ao usuário um ambiente
mais fácil de programar. De fato, a perspectiva de uma máquina virtual ou mesmo de
uma máquina estendida que possibilite facilita o acesso aos recursos computacionais e ao
ambiente de programação, visto que não é necessária a direta programação em linguagem
de máquina, sendo assim possível o uso de linguagens de programação de mais alto nível.
Por outro lado, temos a perspectiva do sistema operacional quanto gerenciador de
recursos. Nessa ótica, o SO desempenha um papel que busca solucionar a complexidade do
sistema, como já mencionado o grande número de componentes no computador tornaria
sua utilização trabalhosa ao passo de que o usuário teria necessidade de gerir todos os
componentes de forma simultânea. Dessa forma, o SO desempenha a função, não só de
gerir, mas otimizar os recursos dos subsistemas presentes no computador.
De posse disso, podemos definir um sistema operacional como um software que
fornece aos programas do usuário um modelo de computador otimizado, de forma mais
simples e limpa além de lidar com o gerenciamento dos recursos computacionais tanto
hardware, quanto software.
Nesse contexto, torna-se ainda importante falar acerca de alguns importantes
sistemas operacionais: mac OSx, Windowss e Linux.
O primeiro desses sistemas é distribuído pela Apple desde 2001 empresa fundada
por Steve Wozniak e Steve Jobs, em 1974. É o segundo sistema mais utilizado em laptops
e é escrito, principalmente, nas linguagens C++, Objective C, Swift e C, e possui as
seguintes versões: Mac OS X v10.0, MAC OS X v10.1, MAC OS X v10.2, MAC OS X
v10.3, MAC OX X v10.4, MAC OS X v10.5, MAC OS X v10.6, MAC OS v10.7, MAC OS
X v10.8.
O segundo sistema foi desenvolvido pela empresa Microsoft fundada por Bill Gates
e Paul Allen. Esse sistema operacional logo se tornou o mais popular entre os usuários, suas
últimas versões são o Windows vista, 7, 8, 8.1 e 10. O sistema é escrito, principalmente
em C e Assembly. Um dos pontos importantes a citar acerca desse sistema é o esquema
das licenças o qua permite que os usuários instalem qualquer programa, sendo inicialmente
aberto, no entanto, o código-fonte do mesmo não é disponibilizado e há um custo para a
licença efetiva do mesmo.
Por fim, o Linux. Mais precisamente o Linux não é o sistema operacional, mas, sim
o Kernel do sistema, dessa forma é mais preciso se referir aos sistemas como distribuições
Linux, no entanto, por convenção emprega-se o termo Linux para referir-se a essas
distribuições. Criado por Linus Torvalds, o Linux segue a filosofia do código aberto já
antes difundida por personalidades importantes em concordância com o manifesto do
software livre em especial pelo projeto GNU (GNU is not Unix) escrito por Richard
Stallman em 1985.
Ademais, dado ao fato do Kernel ser livre, o Linux possui uma infinidade de
distribuições, até algumas nacionais, mas já obsoletas como a: Kurumin. No entanto,
algumas ganham destaques sendo estas: Debian (com foco em estabilidade), Ubuntu (com
foco no usuário final), Fedora, mint, KDE, Kali Linux, Parrot OS.
2 QUESTÃO 2
Faça um resumo, de no máximo 2 páginas sobre linguagem de baixo nível como,
por exemplo, a linguagem Assembly.
2.1 SOLUÇÃO
Uma linguagem de programação pode ser caracterizada seguinte alguns aspectos
importantes, sendo estes em relação a sua geração, paradigma ou nível. Aqui iremos nos
ater a classificação mediante ao nível da linguagem o qual pode ser de três tipos diferentes:
• Baixo nível;
• Médio nível;
• Alto nível.
Quando nos referirmos ao nível da linguagem estamos buscando sua proximidade
ou com a linguagem humana, ou a linguagem de máquina. Isto é, quão próximo é a sintaxe
utilizada na escrita do programa em relação ao computador ou não. Nesse sentido, as
linguagens de Médio e Alto nível são linguagens que possuem uma certa proximidade com
a linguagem humana, no entanto, as de médio nível ainda possuem certas sintaxes de
difícil compreensão, enquanto as linguagens de alto tendem a se aproximar de forma mais
considerável, permitindo assim aos usuários uma maior portabilidade e o uso em várias
plataformas.
Já as linguagens de baixo nível, são exatamente o oposto extremo da linguagem
de Alto nível, distantes donosso entendimento sintático, mas, por outro lado, próximos
à linguagem de máquina que é a linguagem de mais baixo nível. Em especial, essas
linguagens é a única entendida pelo processador e é constituída inteiramente de números,
de modo que se torna extremamente trabalhosa não só para o entendimento, mas também
para o desenvolvimento de softwares.
Não obstante, é importante falar, ainda acerca das vantagens que as linguagens
de baixo nível possuem, visto que, mesmo que se distanciem da sintaxe humana ainda
são úteis e vantajosas em determinados cenários. Em primeiro ponto, destaca-se que as
mesmas são executadas com maior velocidade de processamento, além de ocupar menos
espaços na memória do computador.
Dentre essas linguagens, se tem o destaque ao Assembly. A qual possui uma notação
um tanto quanto mais legível em relação à linguagem de máquina, mas ainda, de baixo
nível. A mesma utiliza abreviações de palavras denominadas mnemônicas que indicam as
operações que serão realizadas pelo processador. Ademais, deve-se destacar que mesmo de
baixo nível, a linguagem necessita de um compilador para ser entendida pela máquina. E
um ponto importante, são as aplicações dessa linguagem as quais versam sobre:
• Desenvolvimento de compiladores,
• Desenvolvimento de sistemas operacionais em tempo real,
• Desenvolvimento de drivers para dispositivos eletrônicos.
3 QUESTÃO 3
3.1 ITEM A) RESENHA SOBRE LINGUAGENS DE MAR-
CAÇÃO
As Linguagens de Marcação são um tipo específico de linguagem computacional,
em que o foco deixa de ser as estruturas de repetição, controle, operadores lógicos e afins e
passam a ser as chamadas marcações. Essas utilizam as chamadas marcações ou também
<tags> que são os elementos que estruturam o determinado arquivo de interesse, esse não
é um programa.
Um dos pontos importantes acerca das linguagens de marcação é a universalidade.
Esse caráter possibilita a maior integração dos documentos escritos em diferentes plata-
formas, de modo que, não seja necessário que esses sejam interpretados e formatado de
maneira independente. Nesse sentido, essas linguagens ganharam grande notoriedade no
ambiente Web, por conseguinte, houve um grande impulso para o desenvolvimento de
ainda mais linguagens de marcação, dentre essas se destaca o HTML e o CSS.
Não só isso, mas fora o ambiente Web, as linguagens de Marcação também possuem
expressiva significância, em especial através do LaTeX. Linguagem utilizada para produção
de textos acadêmicos, com enfoque na universalidade dos arquivos de modo que os mesmos
possam ser compartilhados e compilados por diferentes usuários em diferentes computadores
sem a perda da formatação do texto. Acerca dessa linguagem, destacamos o exemplo
abaixo:
\begin{itemize}
\item item 1,
\item item 2.
\end{itemize}
onde a marcação utilizada gera uma lista de itens enumerável. A quantidade de marcações
disponível para o LaTeX é suficientemente grande, e nosso objetivo aqui não é explanar
a linguagem em sua totalidade, porém reconhecendo sua versatilidade e com intuito de
apresentarmos melhor acerca de algumas de suas marcas vamos ao segundo exemplo que é
um tanto quanto mais robusto em comparação com o primeiro:
\begin{theorem}{(Teorema do Ponto fixo de Banach)}
Seja $C$ um espaço métrico completo.
Suponha que a aplicação $\Phi:C \to C$ contínua é uma contração, isto é,
existe uma constante $0\leq K <1$, tal que
\begin{eqnarray}
d(\Phi(g_1), \Phi(g_2)) &\leq& kd(g_1,g_2) \nonumber
\end{eqnarray}
para todos os $g_1,g_2 \in C$.
Então, existe um e somente um $g \in C$ tal que $g=\Phi(g)$.
\label{th-3.1-2}
\end{theorem}
cujo saída é exatamente:
Teorema 3.1. (Teorema do Ponto fixo de Banach) Seja C um espaço métrico completo.
Suponha que a aplicação Φ : C → C contínua é uma contração, isto é, existe uma constante
0 ≤ K < 1, tal que
d(Φ(g1), Φ(g2)) ≤ kd(g1, g2)
para todos os g1, g2 ∈ C. Então, existe um e somente um g ∈ C tal que g = Φ(g).
Nesse exemplo, utilizamos diversas marcas, sendo estas: eqnarray, theorem, label,
$$. As quais designiam um ambiente matemático (escrita de expressões matemáticas) com
vetores, um ambiente de teoremas, criado pelo autor e pode ser modificado conforme a
necessidade do usuário para, por exemplo: observação, exemplo, atividade dentre outros e
a marca label que designa um rótulo, o qual pode ser utilizado para referenciar o bloco
teorema conforme necessidade, por exemplo, ele pode ser acessado clicando aqui: 3.1.
Além do LaTeX, a linguagem de marcação HTML também merece um destaque
considerado, de fato muitas vezes essa é linguagem é a porta de entrada para usuários
nas linguagens de marcação. O HTML é responsável por gerar páginas Web, por meio de
marcas que ficam entre os símbolos: <>, não obstante, como exemplo para essa acesse o
link: <https://drive.google.com/drive/folders/1ns7rDnpHk8EmF_N42B8p5-Fxbh7S7aen?
usp=sharing>, o código encontra-se na pasta quest3-a. Foi preferível omitir o código ao
longo do texto em decorrência do tamanho que o mesmo ocuparia.
https://drive.google.com/drive/folders/1ns7rDnpHk8EmF_N42B8p5-Fxbh7S7aen?usp=sharing
https://drive.google.com/drive/folders/1ns7rDnpHk8EmF_N42B8p5-Fxbh7S7aen?usp=sharing
3.2 ITEM B) RESENHA SOBRE LINGUAGENS DE MÉDIO
NÍVEL
Uma linguagem de médio nível apresenta um nível intermediário entre o baixo e
alto nível, sua sintaxe já aproximá-se da linguagem humana, porém a certas partes em
que é nítido um distanciamento da mesma. Além disso, também nota-se em linguagens de
médio nível uma necessidade em explicitar certas informações do código, por exemplo, a
declaração do tipo de variáveis.
Em relação às linguagens de médio nível, podemos citar a linguagem C e o FOR-
TRAN, ambas linguagens de programação que apresentam características próximas a nossa
linguagem. Para uma melhor visualização disso, vejamos o pequeno exemplo a seguir:
program HELLO
print *, 'Hello World'
end program HELLO
o programa acima é escrito em FORTRAN, mais precisamente FORTRAN 95. A sintaxe
print já é próxima a nossa, porém em todo programa escrito em FORTRAN deve-se
ter explicitado quando o programa termina, isto é, é necessário passar essa instrução ao
programa. Em suma, essa é uma característica já presente em linguagens de mais baixo
nível, em que se torna necessário mais informações para o programa.
Com intuito de melhor verificar isso, consideremos o programa abaixo, o qual foi
feito linguagem C
#include <stdio.h>
#include <stdlib.h>
void main(){
int opss = 10;
float a,b,c;
printf("Bem vindo ao menu\n\n");
printf("0, ver operações entre dois números não nulos: \n");
printf("1, ver a média entre três números \n");
printf("2, ver o sucessor e antecessor de um número digitado\n");
printf("Outro número fecha o código\n");
printf("Insira sua opção de escolha: ")
scanf("%d", &opss);
while (opss < 3){
if( opss == 0 ){ // questão1
printf("Insira um número")
scanf("%d", &a)
printf("Insira um número")
scanf("%d", &b)
printf("\n A soma é : %0.1f", a + b);
printf("\n A subtração é: %0.1f", a - b);
printf("\n A multiplicação é: %0.1f", a * b);
printf("\n A divisão é %0.1f \n", a / b );
printf("\n Você deseja acessar outra questão? \n ");
scanf("%d", &opss);
}
if ( opss== 1){ // questão2
prinf("Insira um número")
scanf("%d", &a)
prinf("Insira um número")
scanf("%d", &b)
prinf("Insira um número")
scanf("%d", &c)
printf("\n A média é: %0.1f \n", (a + b + c) / 3);
printf("\n Você deseja acessar outra questão? \n ");
scanf("%d", &opss);
}
if ( opss == 2 ) { // questão 3
printf("\n Insira um número qualquer: ");
scanf("%f",&a);
printf("\n O número inserido foi: %0.1f,",a")
printf("\n Seu sucessor é: %0.1f"
printf("\n Seu antecessor é: %0.1f \n", a, a + 1, a - 1);
printf("\n Você deseja acessar outra questão? \n ");
scanf("%d", &opss);
}
}
}
O programa em contém estrutura de repetição (while) e estrutura condição (if). A ideia
é que o usuário possa escolher entre três opções de questões e fornecer argumentos de
entrada e o programa dá uma saída correspondente de acordo com a opção selecionada.
Oselementos if, printf, já aproximam-se de uma linguagem de alto nível, enquanto que a
declaração de variáveis feita em int opss, float a,b,c bem como a necessidade de criar a
função no ínicio void main(){} tem-se já elementos de menor nível.
3.3 ITEMC) RESENHA SOBRE LINGUAGEMDE PESQUISA
DECLARATIVA
As linguagens de pesquisa declarativa seguem o paradigma de programação decla-
rativo. Esse paradigma de programação é baseado na ideia de que o algorítimo construído
não conterá a informação de como fazer toda as instruções lógicas como é comumente feito
na programação imperativa, o enfoque do algorítimo nesse paradigma será em declarar o
que deseja ser feito.
Não obstante, as linguagens declarativas possuem íntima relação com as que
seguem o paradigma de programação funcional. Não só isso, mas diversas linguagens de
programação funcional tais como: Erlang, Haskell e Lisp admitem a abordagem declarativa.
Visto que, mesmo uma linguagem não sendo puramente declarativa ela ainda assim admite
o uso desse paradigma.
Em síntese a grande vantagem de uso desse paradigma é a não preocupação com a
estrutura lógica de como construir o algorítimo, no entanto, essa é direcionada para como
se deve construir a declaração de modo a obter a finalidade desejada. Um forte exemplo
dessa linguagem é a linguagem SQL, veremos um algorítimo simples que ilustra bem essa
ideia, para tanto vamos considerar a seguinte tabela:
alunos Curso Período EDP Topologia Análise Espaços Métricos
Luke Skywalker Math.Bach. 6º 9 7 8 9
Ramanujan Math.Lic. 7º 3 6 8 4
Frodo Math.Bach. 8º 10 9 4 3
Anakin Math.Lic. 9º 9 9.6 9.4 10
Pikachu Math.Bach. 6º 2.3 7.8 8.8 9
Dirac Math.Lic. 6º 3 4.5 8.1 4.8
Feynman Math.lic. 6º 6.5 9 4.2 3.2
Elon Math.Lic. 7º 9 5.6 6.4 10
Tabela 3.1 – Disciplinas.
pode-se então buscar cada uma das colunas com SQL da seguinte forma:
Disciplinas.alunos
e então é exibido a coluna das notas da disciplina EDP. Vamos melhorar a busca
com outra declaração:
SELECT alunos, EDP, Topologia
FROM Disciplinas
WHERE Curso=’Math.Lic’ and EDP < 7 or Topologia < 7
e faz-se a consulta na tabela Disciplinas, em que buscas os alunos do curso de
licenciatura em matemática (Math.Lic.) que tenha tirado nota menor que 7 em EDP ou
em Topologia.
4 QUESTÃO 4
Responda, em no máximo 10 linhas, cada um dos itens abaixo:
4.1 SOLUÇÃO
4.1.1 O que são compiladores
Compiladores são programas com enfoque em traduzir algum programa que é escrito
em uma linguagem de alto nível para um programa que seja equivalente em código para
um processador. Em suma, linguagens de alto nível possuem um certo distanciamento da
linguagem de máquina e são mais próximas da linguagem humana desse modo, o compilador
irá fazer uma ponte, uma conexão entre essa linguagem de modo que o programa seja
possível de ser processado, por exemplo, o compilador gfortran da linguagem Fortran.
4.1.2 O que são linguagens compiladas e linguagens interpreta-
tivas e suas diferenças?
Linguagens compiladas requerem o uso de compilador. Isto é, para que o programa
escrito seja executável é necessário que se use o compilador, de modo a gerar um arquivo
executável que contem um equivalente ao código escrito e esse executável sim é utilizado
pelo computador, a exemplo: a linguagem C e Fortran. Já linguagens interpretativas não
requerem o uso de um compilador, mas sim de um interpretador, esse que irá ler o código
linha a linha verificando possíveis erros e adaptando as partes lidas para linguagem de
máquina sem que haja a criação de um arquivo executável a exemplo se tem a linguagem
C.
4.1.3 O que é a Máquina de Turing ?
A máquina de Turing é um dispositivo teórico que também é conhecido como
máquina universal. Esse modelo teórico é, na verdade, uma abstração de um computador
restrito aos aspectos lógicos do funcionamento do mesmo, de modo que numa máquina de
Turing seja possível modelar qualquer computador digital. A máquina universal consiste
numa infinita, de memória unidimensional dividida em células. Há também uma "head", o
elemento inicial da fita, a leitura é feita da esquerda para a direita. Além disso, é possível
identificar em que ponto a computação está através de uma configuração, essa que por sua
vez é dada por três informações: Estado atual, conteúdo da fita e localização da head. Não
obstante, pode-se ter, ainda, quatro desfechos numa máquina de Turing: palavra aceite,
palavra rejeitada, abortar e infinito (loop infinito).
5 QUESTÃO 5
Existem milhares de outras linguagens de programação não listadas aqui nessa
atividade avaliativa ou utilizada durante a disciplina. Escolha uma e faça um resumo de
no máximo 5 páginas, sobre sua história, suas particulares, construções de algorítimo e
áreas de aplicação
5.1 SOLUÇÃO
A linguagem escolhida foi a linguagem Shell.
5.1.1 Uma introdução a história do Shell
Os sistemas operacionais derivados do Unix, em especial as distribuições Linux
possuem um terminal que permite acesso a diversas funcionalidades e gerenciamento
de processos do computador, acesso esse feito por um terminal shell. O qual permite,
independente da distribuição a utilização de comandos comum as diferentes versões. Nesse
sentido, surge a linguagem de programação Shell Script que são arquivos de texto que
contém um ou mais comandos do shell.
Desenvolvida em 1975 por por S.R Bourne, a primeira linguagem shell ficou
conhecida como Bourne Shell (sh) e até hoje é utilizado devido a sua rapidez bem como
leveza e simplicidade de uso. Naturalmente, variações desse shell foram desenvolvidas por
outros programadores a exemplo temos o Korn Shell (ksh) desenvolvido por David Korn
que buscava melhorar o Bourne Shell incorporando todos seus comandos e trazendo outras
novidades.
Além disso, se tem o C Shell (csh). Outra evolução do Bourne Shell, desenvolvida
por Bill Joy, esse shell trouxe consigo aspectos importantes para a linguagem, visto que,
trazia elementos da linguagem C para o shell, possibilitando uma sintaxe similar e hoje
encontra-se na versão do Turbo C Shell que já contém mais melhorias em relação ao
anterior. Outro Shell que deve ser mencionado é o Bash (Bourne Again Shell). O Bash
é amplamente utilizado e contém melhorias do Bourne Shell, um dos motivos por sua
utilização ser uma das mais expressivas se dá por conta da popularização das distribuições
linux.
5.1.2 Um pouco da Sintaxe
Com intuito de apresentarmos melhor a linguagem Shell vamos ver alguns recursos
disponibilizados por ela para uma apresentação da sintaxe da mesma. Para tanto, faremos
uma abordagem através de pequenos scripts que serão detalhados ao longo do texto de
modo que os principais conceitos que queiramos mostrar sejam destacados. De início,
mostraremos como exibir uma mensagem na tela do usuário como segue abaixo:
#!/bin/bash
# Primeiro script
echo "Olá Mundo"
a primeira linha contém o que chamamos de shebang, a expressão com #! determina
o tipo de shell que iremos executar, no caso o bash. A segunda linha é um comentário em
shell que é marcado pelo símbolo: #, já a terceira e última linha imprime na tela a mensa-
gem entre aspas através do comando echo, uma observação importante é a possibilidade
do uso de aspas duplas ou simples. Vamos, agora a um exemplo de implementação de um
laço de repetição conforme apresentado abaixo:
#!/bin/bash
# Segundo Script
for ((a=0 ; a <= 10; a++)); do
echo "O número é: $a"
done
o script acima realiza um laço através da variável de iteração $a (as variáveis em
shell script são marcadas por $ e lê-se dollar "nome da variável"). O laço utilizado recebe
três parâmetros, os quais são separados pelo símbolo: ”; ”, o primeiro é valor inicial da
variável a, o segundo é o critério de parada, e o terceiro a forma como ocorrerá a iteração
e ela deve ser informada. Um ponto importante é que o laço for está dentro de uma
estrutura do/done, a indentação é irrelevante, mas útil para melhor organização.
Agora, veremos o uso das estruturas de controle, bem como alguns operadores
relacionais, assim segue o seguinte script:
#!/bin/bash
if [$1 -gt $2 ]; then
echo " $1 > $2 "
elif [ $1 -lt $1 ]; then
echo " $2 > $1 "
elif [ $1 -eq $2 ]; then
echo " $2 = $1 "
fi
esse script apresenta alguns pontos interessantes, primeiramente notemos o uso do
if que é encerrado com a expressão fi (if ao contrário), note que as condições de verificações
da estrutura estão em colchetes e entre o colchete e cada variável há um espaço, esse que é
obrigatório, caso contrário o código imprime um erro, por exemplo:
#!/bin/bash
if [$1 -lt $2 ]; then
echo "$1 < $2"
fi
teríamos um erro pois não há espaçamento entre [ e $1. Os operadores relacionais
são -gt, -lt, -eq que são abreviações para greater than, less than e equal, respectivamente.
As variáveis $1 e $2 são interessantes, pois na verdade são parâmetros que são fornecidos
pelo usuário através do prompt de comando: o Shell, a imagem abaixo mostra o emprego
dos parâmetros:
Figura 5.1 – Exemplo da utilização do script acima.
em que os parâmetros são apresentados na tabela seguinte.
$1 5 6 6 6 1 10
$2 6 1 7 8 1 10
Tabela 5.1 – tabelas com os parâmetros utilizados no script acima.
Por fim, vamos ver um último script, em que faremos a declaração de uma função
em shell juntamente com algumas operações matemáticas. O código segue abaixo:
#!/bin/bash
OPERACOES(){
if [ $1 -eq 1 ]; then
for ((b=0; b <= 10; b++)); do
echo "Soma de $2 com $b: $(($2+b))"
done
elif [ $1 -eq 2 ]; then
for ((b=0; b <= 10; b++)); do
echo "Multiplicação de $2 com $b: $(($2*b))"
done
fi
}
for ((a=1;a < 3; a++)); do
OPERACOES $a $1
done
o último script é simples e busca imprimir a soma de um número dado com os números
no intervalo [0, 10] bem como sua multiplicação. Implementamos isso através da função
OPERACAO, cuja sintaxe é da forma NOME_DA_FUNÇÃO(){}. Um ponto importante
aqui é dizer que as funções em shell não recebem parâmetro de entrada de forma explícita,
no entanto, podemos usar o aprendido nos códigos acima para passar parâmetros a
mesma. Utilizamos, para isso, o laço for em que o fizemos o mesmo variar de 1 até 3,
o intervalo é [1, 3) de modo que as condições sejam verificadas pela função e se tenha a
soma e multiplicação pelo parâmetro $1 definido pelo usuário. Note que, $2 na função é o
parâmetro utilizado no laço for, e não necessariamente há uma necessidade de se inserir
um segundo argumento no shell.
5.1.3 Aplicabilidades e usos
Um dos pontos importantes a mencionar sobre a linguagem Shell é acerca da sua
utilização. A linguagem é comumente utilizada em terminais das distribuições Linux e
por possuir uma forte interação com o sistema, muitas vezes, é utilizada para o desenvol-
vimento de scripts de automação de tarefas. Nesse sentindo, vale destacar a facilidade
em manipulações de arquivos de texto que a linguagem oferece por meio das expressões
regulares (REGEX) o código abaixo mostra a simplicidade dessas ações:
date | cut -d " " -f4 >> arquivo.txt
o código acima é executado diretamente no Shell, o comando date imprime a
data no formato dia da semana, mês, dia do mês, hora, número do mês e ano todos
separados por espaço, posteriormente o pipe "delimita a execução de outro comando que
passa o anterior como argumento para o posterior, o cut que recebe date como entrada é
executado com o argumento -d, esse seleciona os caracteres de interesse e exclui os demais
o paramêtro é o tipo de separador utilizado entre os caracteres, em nosso exemplo: o
espaço, o parâmetro -f4 busca o argumento que aparece na posição 4, mais precisamente
após 3 vezes de aparição do delimitador utilizado, o símbolo >> faz um redirecionamento
de saída, de modo que a saída seja direcionada ao arquivo.txt, que pode não existir, nesse
caso o shell cria o arquivo e armazena nele a saída.
5.1.4 Implementação de um Script de automação
De posse do apresentado acerca da linguagem Shell Script, iremos prosseguir com a
construção de um Script de automação totalmente feito em Shell Script. Esse script combina
Shell e Python, além de utilizar alguns arquivos em Fortran para a execução e tratamento
de dados, foi utilizado a biblioteca matplotlib para a construção dos gráficos. Dada a
extensão do script, foi preferível deixá-lo em arquivo, o qual pode ser acessado no seguinte
link: <https://drive.google.com/drive/folders/1ns7rDnpHk8EmF_N42B8p5-Fxbh7S7aen?
usp=sharing>, nele também encontra-se o script em python já em colab e um video de
execução do script para entendimento do que se propõe automatizar.
https://drive.google.com/drive/folders/1ns7rDnpHk8EmF_N42B8p5-Fxbh7S7aen?usp=sharing
https://drive.google.com/drive/folders/1ns7rDnpHk8EmF_N42B8p5-Fxbh7S7aen?usp=sharing
REFERÊNCIAS
TANENBAUM, A. S. , Sistemas Operacionais Modernos. Segunda Edição, Prentice Hall,
2003.
	Questão 1
	Solução
	Questão 2
	Solução
	Questão 3
	item a) Resenha sobre linguagens de marcação
	item b) Resenha sobre linguagens de médio nível
	item c) Resenha sobre linguagem de pesquisa declarativa
	Questão 4
	Solução
	O que são compiladores
	O que são linguagens compiladas e linguagens interpretativas e suas diferenças?
	O que é a Máquina de Turing ?
	Questão 5
	Solução
	Uma introdução a história do Shell
	Um pouco da Sintaxe
	Aplicabilidades e usos
	Implementação de um Script de automação
	Referências

Outros materiais