Buscar

ATPS Paradigmas de Linguagem de Programaçã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 26 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 26 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 26 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

�PAGE \* MERGEFORMAT�26�
FAV – Faculdade Anhanguera de Valinhos
Nome R.A. 
Atividades Práticas Supervisionadas
Paradigmas de Linguagem de Programação
Valinhos
2015
Nome R.A. 
Atividades Práticas Supervisionadas
Paradigmas de Linguagem de Programação
Atividade Pratica Supervisionada apresentada como exigência para conclusão da matéria de Paradigmas de Linguagem de Programação do grau de Bacharelado em Ciência da Computação da FAV - Faculdade Anhanguera de Valinhos.
Orientador: professor
Valinhos
2015
RESUMO
Inicialmente, os computadores eram programados através de código binário, que representava as sequências de controle que a CPU deveria executar. Tal processo era difícil e propício a erros; os programas estavam em código de máquina, que é um paradigma de programação de muito baixo nível. Para facilitar a programação foram desenvolvidas linguagens de montagem, elas substituíam as funções do código de máquina. A linguagem de montagem foi e ainda é usada para sistemas críticos, e frequentemente usada em sistemas embarcados.
Nessa ATPS como é pedido para simularmos uma contratação de programadores para um determinado projeto, aprenderemos um pouco sobre como os programadores devem conhecer sobre critérios e avalições, para julgar sua aplicabilidade em um determinado projeto. Nesses critérios vamos falar sobre a Simplicidade global, Ortogonalidade, Instruções de Controle, Tipos de dados e estruturas, Sintaxe e semântica. Um exercício também será exemplificado sobre algumas linguagens que foram colocadas como teste para serem resolvidas pelo profissional em avaliação.
Palavras-chave: paradigmas, programação, critérios de avaliação, cobol, fortran, atps, propósitos, desenvolvimento, profissional, sintaxe, semântica, lisp, smalltalk, evolução, simplicidade global, ortogonalidade, tipos de dados, estrutura de controle. 
ABSTRACT
Initially, computers were programmed by binary code, representing the control sequences that CPU should run. This process was difficult and prone to errors; were programs in machine code, which is a very low level programming paradigm. To facilitate mounting programming languages ​​have been developed, they replaced the functions of the machine code. The assembly language was and is still used for critical systems, and often used in embedded systems.
ATPS like this are asked to simulate a hiring programmers for a particular project, we will learn a bit about how programmers should know about criteria and owner? To judge its suitability for a particular project. These criteria will talk about the global Simplicity, Orthogonality, control instructions, data types and structures, Syntax and Semantics. An exercise will also be exemplified on some languages ​​that have been placed as a test to be dealt with by professional evaluation.
Keywords: paradigms, programming, evaluation criteria, cobol, fortran, ATPs, purposes, development, professional, syntax, semantics, lisp, smalltalk, evolution, overall simplicity, orthogonality, data types, control structure
SUMÁRIO
71	Introdução	�
82	Relatório 1 - Critérios de avaliação das linguagens de programação.	�
123	Relatório 2 – Estudo comparativo de linguagens de programação	�
133.1	Analise do código da Figura 1:	�
143.2	Programa "Ola, Mundo!" em diversas linguagens	�
154	Relatório 3 – Tipos de dados	�
154.1	Tipo de dados primitivos.	�
174.2	Tipos String de caracteres	�
184.3	Tipos ordinais definidos pelo usuário	�
204.4	Analise do algoritmo	�
215	Relatório 4 – Expressões aritméticas e lógicas	�
215.1	Expressões aritméticas:	�
225.2	Expressões Logicas:	�
235.3	Analise do algoritmo	�
246	Conclusão	�
257	Referências	�
�
13Figura 1 - Código Fonte	�
14Figura 2 - Ola mundo em diversas linguagens	�
16Figura 3 - Ponto Flutuante	�
20Figura 4 - Algoritmo para calcular media final	�
23Figura 5 - Programa que calcula a área de um círculo	�
23Figura 6 - Programa que efetua subtrações de acordo com condições estabelecidas.	�
�
Introdução 
Tecnicamente, programação é a atividade de criar soluções computacionais (normalmente algorítmicas) para problemas cotidianos. Geralmente, envolve a concepção de uma solução e sua subsequente implementação através de uma linguagem de programação. Um paradigma de programação fornece e determina a visão que o programador possui sobre a estruturação e execução do programa. Por exemplo, em programação orientada a objetos, os programadores podem abstrair um programa como uma coleção de objetos que interagem entre si, enquanto em programação funcional os programadores abstraem o programa como uma sequência de funções executadas de modo empilhado.
	Os paradigmas de programação são muitas vezes diferenciados pelas técnicas de programação que proíbem ou permitem. Por exemplo, a programação estruturada não permite o uso de goto. Esse é um dos motivos pelo qual novos paradigmas são considerados mais rígidos que estilos tradicionais.
Inicialmente, os computadores eram programados através de código binário, que representava as sequências de controle que a CPU deveria executar. Tal processo era difícil e propício a erros; os programas estavam em código de máquina, que é um paradigma de programação de muito baixo nível. Para facilitar a programação foram desenvolvidas linguagens de montagem, elas substituíam as funções do código de máquina por mnemônicas, endereços de memória absolutos referenciados por identificadores. A linguagem de montagem foi e ainda é usada para sistemas críticos, e frequentemente usada em sistemas embarcados.
O próximo avanço foi o desenvolvimento das linguagens procedimentais. As primeiras a serem descritas como de alto nível, essas linguagens da terceira geração usam um vocabulário relativo ao problema sendo resolvido. 
Posteriormente, linguagens orientadas a objeto foram criadas. Nelas, os dados e as rotinas para manipulá-los são mantidos numa unidade chamada objeto. O utilizador só pode acessar os dados através das sub-rotinas disponíveis, chamadas métodos, o que permite alterar o funcionamento interno do objeto sem afetar o código que o consome. A necessidade de cada objeto de ter métodos associados tornaria os programas muito maiores. O conceito de polimorfismo foi desenvolvido como tentativa de solucionar tal dilema. Tendo em vista que a orientação a objeto é um paradigma e não uma linguagem, é possível criar até mesmo uma linguagem de montagem orientada a objeto.
Independente do ramo das linguagens imperativas, baseadas nas linguagens procedurais, paradigmas de programação declarativa também foram desenvolvidos. Nessas linguagens se descreve o problema ao computador, não como resolvê-lo. O programa é estruturado como uma coleção de propriedades para encontrar o resultado esperado, e não um procedimento a se seguir. Dado um banco de dados ou um conjunto de regras, o computador tenta encontrar a solução ao casar todas as propriedades desejadas. Um exemplo é o SQL, assim como a família das linguagens funcionais e lógicas.
Programas escritos em programação funcional usam funções, blocos de código construídos para agir como funções matemáticas. Desencoraja-se a mudança do valor das variáveis através de atribuição, fazendo grande uso de recursividade para isso.
Na programação lógica, fatos sobre o domínio do problema são expressados como fórmulas lógicas, e os programas são executados ao se aplicar regras de inferência nas fórmulas até que uma resposta é encontrada, ou a coleção de fórmulas é provada inconsistente.
Relatório 1 - Critérios de avaliação das linguagens de programação.
A avaliação de uma linguagem de programação serve, dentre outras coisas, para julgar sua aplicabilidade em um determinado projeto. Por esse motivo, um bom programador deve ser capaz de avaliar criteriosamentee a base para isso deve ser uma série de fatores objetivos, o que permitirá a comparação entre diversas linguagens.
Temos com critério importante a legibilidade de uma linguagem de programação, quanto mais legível, significa que será mais fácil de ler e entender um código feito por outro programador. A legibilidade esta dividida em alguns tópicos que apresentados a seguir.
Simplicidade global: Linguagens com um pequeno número de componentes básicos são mais fáceis de aprender, multiplicidade de recursos significa que existe mais de uma maneira para realizar uma operação. Um exemplo em C para incrementar uma variável inteira simples:
		cont = cont +1
		cont += 1
		cont++
		++cont
Na sobrecarga de operadores temos um símbolo com mais de um significado, simplificadamente, consiste na redefinição de itens já existentes. Em outras palavras, ela permite que sejam definidas duas ou mais funções com o mesmo nome, desde que suas listas de argumentos sejam suficientemente diferentes para as chamadas a serem resolvidas.
 Nesta situação, quando diversas declarações de funções diferentes, são especificadas por um único nome no mesmo escopo, diz-se que as funções que compartilham o mesmo nome estão sobrecarregadas. Quando esse nome é utilizado, a função correta é selecionada pela comparação dos tipos dos argumentos reais com os tipos dos argumentos formais. 
Ortogonalidade: Significa que um conjunto relativamente pequeno de construções primitivas podem ser combinados em número relativamente pequeno de maneiras para construir as estruturas de controle e de dados da linguagem.Toda combinação possível é legal e significativa, um conjunto relativamente pequeno de construções primitivas pode ser combinado em um número relativamente pequeno de maneiras. um bom exemplo seria: Dada uma linguagem que possua 4 tipos de dados primitivos (int,float, double e char) e 2 tipos de operadores de tipo (array e ponteiro). Esta linguagem é ortogonal se permitir que os dois operadores sejam aplicados a si mesmos e aos quatros tipos de dados, permitindo a definição de um grande número de estrutura de dados. Não permitir que ponteiros apontem p/ matrizes reduziria muitas possibilidades, quebrando a ortogonalidade da linguagem.
Falta de ortogonalidade acarreta exceções às regras das linguagens e possuir aumenta a simplicidade e facilidade de se aprender a linguagem. Linguagens funcionais possuem uma boa combinação de simplicidade e ortogonalidade
Instruções de Controle: Existência de estruturas de controle bem conhecidas como for, while, do while, if switch. Foi a revolução da programação estruturada, programas lidos em um sentido são mais fáceis de entender. Restrições no uso do goto facilitam a legibilidade, devem sempre preceder seus alvos, exceto quando usadas para formar laços, seus alvos nunca devem estar muito distantes o número deve ser limitado.
 	Tipos de dados e estruturas: Definida pela presença de facilidades adequadas para definir tipos de dados e estruturas de dados. Para demostrar um bom exemplo, suponha que em uma linguagem não exista um tipo de dado booleano e um tipo numérico seja usado para substituí-lo: 
timeOut = 1 (significado não claro) 
timeOut = true (significado claro)
A linguagem deve possuir tipos de dados representativos, uma linguagem que não possua tipo de dado booleano não pode fornecer facilidades para a definição de tipos de dados e estruturas de dados seria uma linguagem sem registros.
Sintaxe: É um conjunto de regras que define a forma de uma linguagem, estabelecendo como são compostas as suas estruturas básica (palavras).A sintaxe de uma linguagem de programação é formada por regras léxicas e sintáticas. As regras léxicas descrevem as combinações válidas de caracteres que formam as frases (palavras reservadas, identificadores, operadores, etc). As regras sintáticas descrevem como os frases podem ser combinados para formar uma instrução valida (comandos, expressões, subrotinas, etc). A sintaxe de uma linguagem usualmente é definida através de um conjunto de regras representadas através de uma gramática livre de contexto. A notação utilizada é conhecida como Backus-Naur Form (BNF).
Esta notação utiliza dois conjuntos de símbolos:
Terminais representam os símbolos da linguagem que está sendo definida, por exemplo: while, for, =, [.
Não–terminias são abstrações utilizadas para representar as construções da linguagem, e são apresentadas sempre entre <>, como por exemplo: 
<expressão>, <declaração>, etc.
São utilizados ainda dois meta-símbolos:
::= significa “é definido como."
| significa “ou."
A semântica descreve o significado de construções sintáticas válidas, diferentes formalismos foram desenvolvidos para atender a diferentes objetivos. Geralmente uma linguagem é descrita informalmente, utilizando-se linguagem natural (inglês, português, etc.). Semânticas formais são usadas principalmente para provar propriedades de linguagens construções semânticas e algoritmos.
Semântica Operacional - Tem como objetivo descrever como uma computação é processada. Geralmente faz uso de uma máquina abstrata e de regras que descrevem as mudanças de estado associadas a cada comando.
Semântica Denotacional - Descreve um programa através de objetos matemáticos como conjuntos, funções, valores e as relações entre estes. 
Semântica Axiomática – Baseada em métodos de dedução lógica, descreve uma linguagem através de axiomas. Usualmente é utilizada para provar propriedades de algoritmos.
Confiabilidade: é a maneira que um programa se comporta de acordo com suas especificações sob todas as condições, não deve ser confundida com o conceito de segurança. Se uma linguagem é confiável, quer dizer que se o programador depender dela para um determinado momento, ela corresponderá de com o que é previsto. 
Alguns recursos providos pelas linguagens oferecem um maior suporte à confiabilidade e devem ser corretamente avaliados quando se compara linguagens, pois podem significar uma maior eficiência na codificação e uma maior durabilidade das soluções criadas. Na verificação de tipos temos a checagem em busca de erros de tipo de dados em um programa, seja pelo compilador, seja em tempo de execução. É um fator importante para a confiabilidade e é bem mais barata se feita em tempo de compilação do que em tempo de execução. Além disso, quanto antes se identificar os problemas, mais barata é sua correção.
Em linguagens nas quais não há verificação de tipos, uma mesma variável pode receber dados de tipos diferentes, o que pode ocasionar comportamentos diversos e equivocados da aplicação durante a execução, cujo diagnóstico pode ser difícil de fazer. A verificação de tipos é uma forte aliada da confiabilidade em programas.
Uma linguagem que permite que se intercepte erro em tempo de execução e se dê o tratamento adequado a essas situações permite naturalmente a criação de programas mais confiáveis. Essa facilidade é chamada de tratamento de exceções. Se não for oferecida, obriga o programador a tentar antecipar possíveis erros para evitar que aconteçam, o que é praticamente impossível de se garantir 100%.Poder manipular exceções permite criar programas com um grau muito maior de confiabilidade.
Os conceitos legibilidade e capacidade de escrita afetam a confiabilidade de um programa escrito em determinada linguagem, pois linguagens menos legíveis e com escrita menos fácil podem significar programas escritos de maneira menos natural, o que aumenta o risco de não estarem corretos para todas as situações possíveis. Quanto mais fácil é escrever um programa, maior a chance de ele estar correto. A legibilidade tem ainda um segundo fator de importância, que vai além da fase de escrita. Quanto maior a legibilidade, mais fácil é a fase de manutenção no ciclo de vida. Programas difíceis de ler tem sua evolução prejudicada podendo, inclusive, resultar em falhas na codificação e perda de confiabilidade.
Relatório 2 – Estudo comparativo de linguagens deprogramação
No final dos anos 40 e início dos anos 50, a programação de computadores era muito difícil de ser realizada, tanto pela falta de linguagens, seja de montagem ou de alto nível, aspecto totalmente diferente nos dias atuais, quanto em relação ao hardware, pois os computadores eram muito lentos, pouco confiáveis, o custo era muito grande e havia pouca memória para o processamento de dados. Essas dificuldades faziam os programas serem muito suscetíveis à erros, pois eram escritos em linguagem de máquina. Para solucionar esse problema foi necessário criar linguagens de nível mais alto, para facilitar a programação. A primeira linguagem de programação com essa característica foi a Short code, desenvolvida em 1949 por John Mauchly.
Entretanto, a linguagem de programação Short Code tinha uma desvantagem: a linguagem não era transformada em código binário, a execução de programas era realizada através de um interpretador puro. O processo era 50 vezes mais lento que a execução de código binário. Para resolver esse problema, foram criados outros sistemas de interpretação, a linguagem de programação Speedcoding foi a primeira. Entre seus recursos, o fato de acrescentar os registradores de endereço de forma automática, fazia com que os programas fossem escritos em poucas horas, contrapondo o tempo de duas semanas caso escritos em código binário.
Os avanços na área foram muitos, e o maior deles na época foi o desenvolvimento da linguagem Fortran, com a finalidade de cálculos científicos. Desenvolvida em 1954 no computador IBM 704, é usada até hoje.
A linguagem de programação Fortran foi inicialmente procedural, mas as versões mais recentes suportam a programação orientada a objetos.
Analise do código da Figura 1:
Figura 1 - Código Fonte
Fonte: CRISTO, 2013
O código da figura foi escrito na linguagem de programação Fortran. Segue abaixo as linhas do código numeradas e a função de cada linha:
1. Character *15a, b, c
Declara as variáveis a, b e c do tipo caracter com limite máximo de 15 caracteres para cada variável.
2. Open (20, file=’arqui.out’)
Abre o arquivo arqui.out através do comando open. O número 20 é uma referência ao arquivo.
3. open(30,file='arqui.dat')
Abre o arquivo arqui.dat através do comando open. O número 30 é uma referência ao arquivo.
4. read (30,*) a
Armazena os dados do arquivo arqui.dat na variável a.
5. write(20,*) ' este é um '
Escreve o texto “este é um” na primeira linha do arquivo arqui.out.
6. write(20,*) ' arquivo de '
Escreve o texto “arquivo de” na segunda linha do arquivo arqui.out.
7. write(20,*) ' saída '
Escreve o texto “saída” na terceira linha do arquivo arqui.out.
8. read (30,*) b
Armazena os dados do arquivo arqui.dat na variável b.
9. rewind 30
Leva a memória para o primeiro espaço do arquivo arqui.dat.
10.
read (30,*) c
Armazena os dados do arquivo arqui.dat na variável c.
11.
write(20,*) a
Escreve os dados da variável a no arquivo arqui.out.
12.
write(20, *)b,c
Escreve os dados das variáveis b e c no arquivo arqui.out
13
Termina a execução do programa.
Durante a execução do programa o arquivo 'arqui.dat' contem informações para serem usadas na construção do arquivo 'arqui.out. Essa informações são armazenadas em variáveis e ao decorrer do programa que são inseridas string até que o arquivo de saída 'arqui.out' esteja de acordo com o que desejado pelo programa. No arquivo 'arqui.dat' são feitas somente requisições de leitura enquanto no 'arqui.out' são escritas informações.
A linguagem FORTRAN é usada para estudar logica de programação em aplicações cientificas, é uma linguagem criada para transcrição de formulas. Ela permite a criação de programas que primam pela velocidade de execução. Daí reside seu uso em aplicações científicas computacionalmente intensivas como meteorologia, oceanografia, física, astronomia, geofísica, engenharia, economia etc.
Programa "Ola, Mundo!" em diversas linguagens
Figura 2 - Ola mundo em diversas linguagens
Fonte: (Wikipédia), 2013
O programa 1 foi escrito em COBOL, é uma linguagem de programação orientada para o processamento de banco de dados comerciais. Normalmente usado em softwares de transações bancarias.
O programa 2 foi escrito em FORTRAN, em aplicações científicas computacionalmente intensivas como meteorologia, oceanografia, física, astronomia, geofísica, engenharia, economia etc.
O programa 4 foi escrito em Prolog, é uma linguagem de programação que se enquadra no paradigma de Programação em Lógica Matemática. É uma linguagem de uso geral que é especialmente associada com a inteligência artificial e linguística computacional.
O programa 5 foi escrito em Smalltalk, é uma linguagem orientada a objetos, dinamicamente tipada e reflexiva. Ela foi criada em parte para o uso educacional, sendo influenciada por Lisp e Logo, Sketchpad e Simula.
Relatório 3 – Tipos de dados
Tipo de dados primitivos.
Os programas de computador geram resultados a partir de manipulação de dados, dentre esses dados temos os dados primitivos. Esses dados são denominados primitivos por serem definidos como dados nativos ou básicos. São eles os dados de tipo numérico, booleanos e caracteres.
Tipos numéricos: Inteiro, Ponto-flutuante e Decimais.
Inteiro: 
Muitos computadores suportam diversos tamanhos de inteiros.
Linguagem de programação Ada: SHORT INTEGER, INTEGER, LONG INTEGER
Representado por uma cadeia de bits (bit de sinal na extrema esquerda) 
Notação complemento de 2 para números negativos.
Ponto flutuante:
Modelam os números reais (aproximação Π=3,14)
Os valores de ponto-flutuante são representados como frações e como expoentes (notação científica)
Figura 3 – Ponto Flutuante
Fonte: http://thiagorique.files.wordpress.com/2012/08/tipos-de-dados.ppt, 2015
São armazenados na forma normalizada.
A maioria das linguagens inclui dois tipos de ponto-flutuante: float e double.
Decimais:
São armazenados usando códigos binários para os dígitos decimais.
Representação BCD (Binary-Coded Decimal)
São necessários pelo menos 4 bits para codificar um dígito decimal.
123 (decimal) = 000100100011 (BCD)
Tipos booleanos:
Sua faixa de valores tem somente dois elementos.
Uma exceção popular é o C, no qual expressões numéricas podem ser usadas como condicionais.
Tipos caractere:
Os dados de caracteres são armazenados nos computadores como codificações numéricas;
A codificação mais comumente usada é a ASCII (American Standard Code for Information Interchange)
Codificação Unicode (Java)
(Fonte: http://thiagorique.files.wordpress.com/2012/08/tipos-de-dados.ppt)
Tipos String de caracteres
Como o próprio nome sugere é um conjunto de dados do tipo caractere disposto como uma palavra ou frase armazenada em uma variável.
Um tipo cadeia de caracteres (String) é aquele cujos valores consistem em sequências de caracteres. Os dados das cadeias normalmente são armazenados em vetores de caracteres únicos e referenciados como tal na linguagem (Pascal, C, C++, Ada). 
Ada:
STRING é um tipo formado por elementos CHARACTER.
Referência a subcadeias, concatenação, operadores relacionais e atribuição são operações oferecidas para os tipos STRING.
NAME1(2:4)
NAME1 := NAME1 & NAME2; 
C e C++:
Vetores char para armazenar cadeias de caracteres.
Biblioteca padrão (string.h)
As cadeias de caracteres são finalizadas com um caractere especial nulo (zero).
Ex: char *str = “apples”;
Funções de biblioteca: strcpy, strcat, strcmp, strlen.
Opções de tamanho da cadeia:
Cadeia de tamanho estático: FORTRAN 90, COBOL, Pascal e Ada.
Exemplo de instrução FORTRAN 90: CHARACTER(LEN=15) NAME1, NAME2
Cadeias de tamanho dinâmico limitado: C e C++
Cadeias de tamanho dinâmico: SNOBOL4, JavaScript e Perl.
(http://thiagorique.files.wordpress.com/2012/08/tipos-de-dados.ppt)
Tipos ordinais definidos pelo usuário
Tipos Enumeração:
São aqueles em que todos os valores possíveis são enumerados nadefinição. Exemplo Ada: type DIAS is (Seg, Ter, Qua, Qui, Sex,Sab, Dom)
Dependendo de questões de projeto, duas variáveis do tipo enumeração e/ou literais do mesmo tipo podem ser comparadas com os operadores relacionais.
Tipos matriz (array):
Uma matriz é um agregado homogêneo de elementos de dados
Cada elemento é identificado por sua posição em relação ao primeiro.
Os elementos são de algum tipo previamente definido.
Matrizes e índices:
Elementos são referenciados através do nome do agregado mais subscritos (ou índices).
Se todos os índices em uma referência forem constantes, o seletor será estático; caso contrário, será dinâmico.
Mapeamento finito nome_da_matriz(lista_de_valores_indice) → elemento.
Sintaxe de referência mais ou menos universal: ao nome da matriz segue-se a lista de índices entre parênteses ou colchetes.
Tipos registro:
Um registro é um agregado possivelmente heterogêneo de elementos de dados. Cada elemento possui um nome.
Os elementos (ou campos) do registro são referenciados utilizando-se seus identificadores.
As referências aos campos individuais são sintaticamente especificadas por diversos métodos diferentes.
Tipo ponteiros:
Um tipo ponteiro é aquele em que as variáveis têm uma faixa de valores que consiste em endereços de memória e um valor especial, o nulo
Os ponteiros, ao contrário das matrizes e dos registros, não são tipos estruturados (* no C e no C++, access na Ada e ^ no Pascal).
São usados para referenciar alguma outra variável.
(http://thiagorique.files.wordpress.com/2012/08/tipos-de-dados.ppt)
Analise do algoritmo
Figura 4 – Algoritmo para calcular media final
Fonte: Jeanne Dobgenski ATPS Paradigmas de Linguagem de Programação, 2015
De acordo com o programa da Figura 4 – Algoritmo para calcular media finalcaso o programador definisse as variáveis M_1B, M_2B e MF como valor inteiro do contrario de real, o valor final de MF seria de 5, pois definindo-se como inteiro o calculo ignoraria o que houvesse depois da virgula. No caso o calculo seria como no exemplo abaixo:
	Tipo inteiro:
(7 * 4) + (4 * 6)/ (4 + 6) =
(28 + 24)/10 =
52/10 = 5
	Tipo real:
(7 * 4) + (4 * 6)/ (4 + 6) =
(28 + 24)/10 =
 52/10 = 5.2
Os valores adotados como pesos das notas armazenados nas variáveis P_1B e P_2B, poderiam ser definidos como constantes sem que houvesse problemas para a execução do algoritmo.
 Para a definição dessas constantes poderíamos fazer da seguinte forma em c:
#include <stdio.h>
#define P_1B 4
#define P_2B 6
Em java podemos definir da seguinte forma:
public class CalcularMedia{
	static final float P_1B = 4;
	static final float P_2B = 6;
Caso os parênteses sejam alterados ou retirados mudara o valor final da expressão pois matematicamente são feitas primeiro as expressões de multiplicação, após isso são executadas as operações de divisão depois soma e subtração. No caso de qualquer linguagem a expressão deve ser montada da forma correta para obter o resultado esperado pois qualquer linguagem leva em concideração a ordem matemática para resolução de um calculo matemático.
Relatório 4 – Expressões aritméticas e lógicas
Expressões aritméticas: 
A precedência baseia-se nas regras da Matemática. As ordens de execução dos cálculos são: 
Exponenciação;
Multiplicação e divisão;
Adição e subtração.
A ordem de avaliação dos operadores deve ser colocada entre parênteses caso a expressão tenha muitos operandos diferentes para não distorcer o resultado final correto. (https://docs.google.com/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnxlbnNpbm9tYXVyaWNpb3xneDozYTNlNTM5NmUyY2NkYTYy)
Acumulador (somador): É uma variável que atua acumulando os valores a cada vez que o código é executado. Por exemplo, poderíamos implementar um somador num caixa de supermercado, acumulando na variável total todas as compras. Essa implementação é feita fazendo com que a variável total receba o seu próprio valor + o valor parcial de cada execução.
Ex.: total:=total+valor1.
Contador: Os contadores acumulam seu próprio valor, acrescentando 1 a cada execução do programa. No mesmo exemplo anterior, o total_de_itens receberia seu próprio valor + 1 a cada item que passasse pelo caixa.
Ex.: total_de_itens:=total_de_itens+1
(https://jovemprofissionalfeevale.wordpress.com/2013/08/13/programacao-acumuladoressomadores-e-contadores/)
Expressões Logicas:
Expressões condicionais: C, C++ e Java: expressão_1 expressão_2 : expressão_3 Ex: media = (cont == 0) ? 0 : soma/cont; Operador ternário.
Expressões relacional:
Operador relacional: compara os valores de seus dois operandos.
Expressõo relacional: dois operandos e um operador relacional.
O valor da expressão relacional é booleano (se oferecido pela linguagem).
Os operadores relacionais sempre têm precedência menor do que os aritméticos.
Expressões booleanas consistem em variáveis, constantes, expressões relacionais e operadores booleanos (AND, OR e NOT, por exemplo). Produzem valores booleanos. (https://docs.google.com/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnxlbnNpbm9tYXVyaWNpb3xneDozYTNlNTM5NmUyY2NkYTYy)
Analise do algoritmo
Figura 5 - Programa que calcula a área de um círculo
Fonte: Jeanne Dobgenski ATPS Paradigmas de Linguagem de Programação, 2015
Figura 6 - Programa que efetua subtrações de acordo com condições estabelecidas.
Fonte: Jeanne Dobgenski ATPS Paradigmas de Linguagem de Programação, 2015
Caso o conectivo logico “e” seja alterado para “ou” a saída booleana seria alterada, pois as expressões logicas têm resultados diferentes de saída booleana. Exemplo:
1 “e” 0 = 0 então a expressão daria o resultado false, pois somente se as duas entradas forem verdadeiras a saída será verdadeira.
1 “ou” 0 = 1 pois a expressão “ou” significa que qualquer uma das entradas forem verdaderias a saída também será verdadeira.
O símbolo “<>” do pseudo-código da Figura 6 - Programa que efetua subtrações de acordo com condições estabelecidas. é representado nas linguagens como “!=”, quando fazemos esse tipo de comparação entre duas expressões ou variáveis significa que esperamos uma resposta verdadeira (true) caso sejam diferentes e uma resposta falsa(false) se forem iguais.
Conclusão
Conclui-se que devido a existência de diversas linguagens de programação, o programador deve saber escolher a melhor linguagem para resolver o problema proposto. Existem varias considerações que devem ser levadas em conta, técnicas, estratégias e táticas. Pode-se dizer que a escolha da linguagem mais adequada esta ligada a três fatores, a complexidade do sistema em desenvolvimento, as características peculiares da aplicação e a facilidade que a linguagem pode oferecer durante o desenvolvimento.
Os critérios de avaliação devem ser bem conhecidos pelos programadores, a legibilidade do código é um forte aliado na hora de dar manutenção ao mesmo. Quanto simples são os comandos maior velocidade na hora de desenvolver e dar manutenção o programador irá ter. 
Outro ponto importante durante a avaliação da linguagem é a ortogonalidade, isso é, a simplicidade e facilidade que a linguagem proporciona na hora de aprender a linguagem. Linguagens funcionais possuem uma boa combinação de simplicidade e ortogonalidade.
Dependendo da aplicação a melhor linguagem indicada deve ter estruturas de controle e repetição que dê bastante flexibilidade na hora de fazer um laço de repetição. 
A linguagem deve possuir tipos de dados representativos, uma linguagem que não possua tipo de dado booleano não pode fornecer facilidades para a definição de uma saída verdadeira ou falsa.
Ao olhar para a sintaxe e semântica de uma linguagem, conjunto de regras que define a forma de uma linguagem deve ser de fácil entendimento, proporcionando um código mais enxuto. A semântica descreve o significado de construções sintáticas válidas, diferentes formalismos foram desenvolvidos para atender a diferentes objetivos.Geralmente uma linguagem é descrita informalmente, utilizando-se linguagem natural (inglês, português, etc.). 
Dentre as variáveis de diversas linguagens de programação podemos encontrar semelhanças entre tipos de dados, sendo representados como dados primitivos e dados compostos, ou seja a união de vários dados do tipo caracter armazenados em um vetor podemos formar uma string. 
Analisando alguns códigos que executam expressões matemáticas, as ordens dos operandos seguem o padrão matemático, ou seja, caso não colocarmos devidamente os parênteses em cada expressão para indicar a ordem de operação, estaremos alterando o resultado final da expressão, fazendo com que o programa execute na ordem matemática.
Referências
ATPS - Paradigmas. Disponível em: <https://docs.google.com/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnxlbnNpbm9tYXVyaWNpb3xneDoxYmNhMmEzYzkxMTFiOWIz> Acesso em: 29 set. 2015
Introcucao-aula2-lp. Disponível em: <http://www.ufpi.edu.br/subsiteFiles/gaa/arquivos/files/introducao-aula2-lp.pdf> Acesso em: 26 set. 2015
Paradigma de programação. Disponível em: <https://pt.wikipedia.org/wiki/Paradigma_de_programa%C3%A7%C3%A3o> Acesso em: 29 set. 2015
Paradigmas de linguagem de programação. Disponível em: <https://sites.google.com/site/ensinomauricio/disciplinas/graduacao/paradigmas-de-linguagens-de-programacao> Acesso em: 29 set. 2015
Programa “Olá, Mundo!” em diversas linguagens.. Disponível em: <Wikipédia> Acesso em: 29 set. 2015
Sintaxe. Disponível em: <http://www.inf.puc-rio.br/~inf1621/sintaxe.pdf> Acesso em: 26 set. 2015
SobrecaargaOP. Disponível em: <http://www.inf.pucrs.br/manssour/LinguagemC++/SobrecargaOp.pdf> Acesso em: 26 set. 2015
Tipos de dados primitivos. Disponível em: <http://thiagorique.files.wordpress.com/2012/08/tipos-de-dados.ppt > Acesso em: 26 nov. 2015
Expressões Aritmeticas. Disponivel em:
<https://docs.google.com/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnxlbnNpbm9tYXVyaWNpb3xneDozYTNlNTM5NmUyY2NkYTYy>
Contador e acumulador. Disponivel em: (https://jovemprofissionalfeevale.wordpress.com/2013/08/13/programacao-acumuladoressomadores-e-contadores/)
Expressões Logicas: Disponível em: <https://docs.google.com/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnxlbnNpbm9tYXVyaWNpb3xneDozYTNlNTM5NmUyY2NkYTYy>

Outros materiais

Perguntas Recentes