



























Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Um comparativo entre as linguagens de programação pascal, c# e lisp. Descreve suas origens, características, paradigmas e aplicabilidades em diferentes campos. Cada linguagem é analisada em detalhes, destacando suas vantagens e desvantagens.
Tipologia: Trabalhos
Compartilhado em 16/09/2022
1 / 35
Esta página não é visível na pré-visualização
Não perca as partes importantes!




























Comparativo entre linguagens de programação: Pascal, C# e Lisp Equipe 06: LUCAS JOSE LUCAS RODRIGUES MARCIO BRUNO MARCOS VINICIUS MARIA VITÓRIA SOBRAL - CE 2021
1. Histórico da linguagem Pascal cresceu a partir do ALGOL, uma linguagem de programação destinada à computação científica. Reunido em Zurique, um comitê internacional projetou o ALGOL como uma linguagem independente de plataforma. Isso lhes deu rédea livre nos recursos que podiam projetar no ALGOL, mas também tornou mais difícil escrever compiladores para ele. Aqueles foram os dias em que muitos computadores não tinham recursos de hardware que agora consideramos garantidos. Como muitas plataformas careciam de um compilador ALGOL, e o próprio ALGOL carecia de ponteiros e muitos tipos de dados básicos, como caracteres, a linguagem ALGOL nunca foi amplamente aceita. Cientistas e engenheiros migraram para FORTRAN, uma linguagem de programação que estava disponível em muitas plataformas. O ALGOL quase desapareceu, exceto como uma linguagem para descrever algoritmos. [1] Na década de 1960, vários cientistas da computação trabalharam na extensão do ALGOL. Um deles foi o Dr. Niklaus Wirth, do Instituto Federal Suíço de Tecnologia (ETH-Zurique), membro do grupo original que criou o ALGOL. Em 1971, ele publicou sua especificação para uma linguagem altamente estruturada que se assemelhava ao ALGOL em muitos aspectos. Ele o chamou de Pascal em homenagem ao filósofo e matemático francês do século 17 que construiu um computador digital mecânico funcional. [1] Pascal é muito orientado a dados, dando ao programador a capacidade de definir tipos de dados personalizados. Com essa liberdade, vem a verificação de tipo estrita, que evita que os tipos de dados sejam misturados. Pascal foi concebido como uma língua de ensino e foi amplamente adotado como tal. [2] 2. Paradigmas Pascal é uma linguagem onde utiliza-se os paradigmas de programação imperativa, mais especificamente procedural pois ela faz referências explícitas ao estado do ambiente de execução, e também é estruturada, seguindo a estrutura de controle por blocos.
5.1. Formas de vinculação de tipos utilizadas Pascal tem uma vinculação de tipos estática, ela ocorre antes do programa executar e nunca muda durante o tempo que o programa tem de vida. Um exemplo de uma vinculação estática é uma chamada direta de função C: a função referenciada pelo identificador não pode mudar durante a execução. 5.2. Quais uniões (caso tenha), operações para cadeias de caracteres e tipos ordinais definidos pelo usuário que a linguagem possui: Em Pascal, existem duas maneiras de criar uniões. Uma é a forma padrão por meio do chamado registro variante. O segundo método é um meio não padronizado de declarar uma variável como absoluta, o que significa que ela é colocada no mesmo local da memória que outra variável ou em um endereço absoluto. Embora todos os compiladores Pascal suportem registros de variantes, apenas alguns suportam variáveis absolutas. [4] Temos então, um código no formato não padronizado, usando absoluto: VAR A: Integer; B: Array [1..4] of Byte absolute A; C: Integer absolute 0; Existem várias operações com cadeias de caracteres em pascal. Essas funções são as seguintes [5]: A função str converte um número (geralmente inteiro) em uma string de caracteres. Por exemplo: a:=12345; str (a,s) ; {s vai ser '12345'} A função val converte uma string em um número apenas se a string não contém caracteres não numéricos, caso contrário, o número muda para zero.
s:='123'; val (s,n,er); {n vai ser 123 e er vai ser 0} s:='98a'; val (s,n,er); {n vai ser 0 porque a conversão parou quando 'a' foi encontrado. logo, er vai armazenar a posição de 'a' na string. a vai ser 3} A função delete exclui uma substring de uma string especificando a posição a partir da qual a exclusão da string começará e o número de caracteres em uma string precisa ser excluído. A substring excluída não pode ser recuperada, portanto, é perdida para sempre. s := 'Honest Abe Lincoln'; delete (s,8,4); writeln (s); { s vai ser 'Honest Lincoln' } A função copy retorna a substring da string principal que começa na posição x e possui y caracteres. Isso é útil quando você deseja excluir uma substring de uma string, mas também manter a substring excluída para uso posterior em strings. Por exemplo: s:='Honest Abe Lincoln'; x:=copy (s,8,3); {x vai ser 'Abe'} A função pos retorna a posição de uma substring em uma string principal. Se a substring não existir na string principal, o valor retornado será 0. Por exemplo: s:='note-book'; x:=pos('book',s); {x vai ser 6} Em pascal, os tipos ordinais nativos são inteiros, char e booleano. O usuário pode definir dois tipos : enumeração e subintervalo. Um tipo de enumeração é aquele em que o usuário enumera todos os valores possíveis, que são constantes simbólicas. Já o tipo de subfaixa é uma sequência contígua ordenada de um tipo ordinal. [6]
1. Introdução. C# é uma linguagem de programação multiparadigma, fortemente tipada, desenvolvida pela Microsoft como parte da plataforma integrada de desenvolvimento .NET, originalmente para Windows e atualmente para vários sistemas operacionais, como distribuições Linux e o macOS, e também dispositivos, mobile, aplicações iOT, game consoles entre outros. Sua sintaxe vem de linguagens como C e C++, mas também recebeu influência do Java, principalmente no que se refere a sintaxe de programação orientada a objetos, que era a linguagem dominante no mercado na época em que C# foi lançada, em meados do início dos anos 2000. C# tem diversas aplicações nos mais variados campos, é possível desenvolver desde aplicações para desktop que utilizam Windows, que é a principal aplicação da linguagem, sendo a linguagem principal da plataforma .NET Framework da Microsoft. Como também é notável sua participação marcante no desenvolvimento de jogos, sendo a linguagem principal da plataforma Unity e também na programação Web, através do ASP Net na programação para servidores ( back-end) como também para clientes ( front-end) com a recente tecnologia Blazor. 2. Breve histórico. O C# foi criado para ser multiplataforma, para desenvolvimento de softwares que fossem acessados por qualquer dispositivo e qualquer pessoa, objetivo almejado pela linguagem Java entre o fim dos anos 90 e início dos anos 2000. Antes do desenvolvimento do C#, a Microsoft havia realizado um acordo de licenciamento do Java, junto a Sun Microsystems, criadora da linguagem, criando assim o J++ uma implementação da Microsoft do Java adaptada as bibliotecas de código nativo do Windows, porém as restrições de execução do J++ apenas em ambiente Microsoft, desrespeitaram o acordo feito com Sun, gerando um processo milionário para a Microsoft e o fim do J++.
Assim, com a criação do .NET Framework que seria base para todas as soluções Microsoft, a Microsoft precisava de uma linguagem principal para essa plataforma, nascendo assim o C#, utilizando conceitos de linguagens mais antigas como C, C++ e Visual Basic e também absorvendo as principais inovações da linguagem dominante da época, o Java. A primeira versão da linguagem surgiu em julho de 2000 e recebe atualizações junto com as versões da plataforma .NET Framework, sendo a última versão, a 9.0, lançada em novembro de 2020 acompanhando a versão 5.0 do .NET Framework. O nome creditado como criador da linguagem é o engenheiro de software dinamarquês Anders Hejlsberg, também conhecido como criador do Delphi e do Turbo Pascal na empresa Borland. Originalmente C# chamava-se Cool quando foi dado o início de seu desenvolvimento pela equipe da Microsoft em 1999. Mas na sua apresentação oficial em 2000 a linguagem foi renomeada e passou a chamar-se C#. Em um primeiro momento, a cerquilha parecia fazer referência a um conjunto de quatro símbolos “+” encadeados entre si, como se o nome da linguagem fizesse referência a uma sucessão da linguagem C++. No entanto, a cerquilha faz referência ao sinal musical sustenido (em inglês: Sharp ), que aumenta em meio tom uma nota musical. A cerquilha foi escolhida como símbolo, por ser mais adaptável aos teclados, fontes, navegadores e outros padrões dos computadores, para representar o símbolo oficial do sustenido, utilizado em notas musicais, essas informações constam na especificação técnica oficial da linguagem, a ECMA-334 C# Language Specification. Hoje C#, continua sendo uma linguagem importante, junto a sua plataforma principal a .NET, para o desenvolvimento nos mais diversos ambientes, sejam os tradicionais Desktop e Mobile, até o desenvolvimento Web, de Jogos e até mesmo de sistemas operacionais.
3. Paradigmas abordados em C#. C# é uma linguagem de programação multiparadigma, sendo inicialmente uma linguagem com os paradigmas de programação estruturada, imperativa e orientada a objetos (baseados em classes), C# foi adquirindo outros paradigmas conforme seu
5. Compilada, interpretada ou híbrida? Há muitas visões diferentes para responder à pergunta sobre a forma que a linguagem C# é executada, se é de maneira compilada, interpretada ou híbrida. É comum pensar que a linguagem seria interpretada porque a sua execução não é diretamente de um código nativo, mas sim através de um compilador JIT (sigla em inglês para Just in Time) ou em tradução para o português um compilador sob demanda ou compilador dinâmico. Esse compilador, apesar de ser diferente dos compiladores clássicos, se difere dos interpretadores, porque gera um código binário executável e também o “JITTer” (Sigla para Just in Time Compiler ) é capaz de rodar apenas uma vez sobre o código, não importando quantas execuções serão feitas, enquanto um interpretador necessitaria interpretar todo o código a cada ciclo de execução. No processo completo de execução de um código em C#, primeiramente a linguagem é compilada pelo seu próprio compilador, gerando um código em uma linguagem intermediária comum às linguagens da plataforma .NET, a chamada Common Intermediate Language. A partir desse ponto, essa linguagem intermediária é executada em uma máquina virtual, a chamada Common Language Runtime , que converte o código intermediário para código de máquina, realizando assim uma segunda compilação sobre o código fonte original. A máquina virtual C# não é interpretada, já que seu papel é pegar o código intermediário (bytecode) produzido pelo compilador principal da linguagem e transformar para um executável em código de máquina. Ademais, apesar de ser usual utilizar a linguagem em sua máquina virtual, é possível compilá-la de forma nativa utilizando a ferramenta “Ngen” do .NET Framework, que gera um executável nativo sem passar pelo JITTer, há também o caso do compilador de código aberto “Mono” que implementa C# de forma nativa, especialmente para aplicações em dispositivos móveis Android e iOS. Apesar dos fatos supracitados, C# pode ser utilizada de forma interpretada, mas essa implementação é comum apenas em REPL interativos. Em resumo, C# é uma linguagem de implementação majoritariamente compilada, primeiramente para um código intermediário e depois para código nativo.
6. Sintaxe da linguagem. C# é uma linguagem que partilha tanto paradigmas como também sintaxes semelhantes a linguagens como C, C++ e principalmente Java, que era sua principal concorrente na época de sua invenção. A sintaxe da linguagem no início era considerada “verbosa” e foi sendo simplificada ao longo de suas atualizações. Alguns aspectos herdados de C e C++ são a utilização de ponto e vírgula para denotar o fim de uma declaração, as chaves para agrupar funções e classes, o uso do sinal de igual para atribuição de valores a uma variável e de dois sinais consecutivos para comparação e o uso de colchetes para declarar e obter valores em arrays. Programa simples em C# utilizando estruturas semelhantes a Java, C e C++. Sendo uma linguagem de paradigma orientado a objetos, a estrutura do código em C# é dividida entre classes, métodos, objetos, atributos, variáveis e seus valores. A classe deve ter o mesmo nome que o arquivo .cs (extensão dos arquivos da linguagem), o nome sempre começa com letra maiúscula e dentro delas estão contidos os métodos e atributos que um objeto pode ter.
Abaixo, segue tabela com o aliase do tipo, a classe na plataforma .NET, o tamanho e o intervalo dos tipos primitivos em C#: Nome ( aliase ou “apelido”). Classe .NET Tamanho Intervalo byte Byte 8 0 a 255 sbyte SByte 8 -128 a 127 int Int32 32 -2147483648 a 2147483647 uint Uint32 32 0 a 4294967295 short Int16 16 -32768 a 32767 ushort UInt16 16 0 a 65535 long Int64 64
08 a 9223372036854775 07 ulong UInt64 64 0 a 1844674407370955 1615 float Single 32 -3,4 x 10^28 a 3,4 x 10^ double Double 64 ±5,0 x 10^-324 a ±1,7 x 10^ char Char 16 bool Boolean 8 true ou false object Object string String decimal Decimal 128 (-7,9 x 10^28 a 7,9 x 10^28) / (10^(0 a 28))
Exemplos de expressões utilizando diversos operadores em C#. Em C# há três tipos de operadores: Operadores unários para operações de incremento ou decremento em variáveis, utilizando as notações de sufixo e de prefixo respectivamente. Operadores binários para dois operações entre dois operandos, utilizando notação de infixo. E também um operador chamado ternário, que também utiliza notação de infixo e possui três operandos. É comumente utilizado para substituir expressões if...else. Uso de operadores unários, binários e ternário em C#.
Abaixo, segue tabela com os principais operadores em C# e suas classificações: **Categoria Operadores Primários x.y, f(x), a[x], x++, x–, new, typeof, checked, unchecked, default(T), delegate, sizeof, -> Unários +x, -x, !x, ~x, ++x, –x, (T)x, await, &x, x Aritméticos x * y, x / y, x % y, x + y, x – y Shift (Troca) x << y, x >> y Relacional x < y, x > y, x <= y, x >= y, is, as Igualdade x == y, x != y E lógico x & y OU Exclusivo Lógico x ^ y OU Lógico x | y E Condicional x && y OU Condicional x || y Condicional ?: Atribuição x = y, x += y, x -= y, x = y, x /= y, x %= y, x &= y, x |= y, x ^= y, x <<= y, x >>= y Null-coalescing ?? Lambda =>
7. Uniões e operações para cadeias de caracteres ( strings). 7.1 Uniões Em C# uniões não são suportadas de maneira nativa, é possível apenas simular a estrutura de uma Union em C++ para um código em C#. Em C++, a estrutura de uma union é:
LastIndexOf Retorna a posição da String onde se encontra outra string passada como parâmetro, começando do final dela trim Remove os espaços em branco no início e no final do conteúdo da String remove Remove um determinado número de caracteres a partir de uma posição especificada. ToUpper Altera todos os caracteres de uma String para maiúsculas ToLower Altera todos os caracteres de uma String para minúsculas 8 Matrizes: heterogênea, homogênea, retangular e irregular Você pode armazenar diversas variáveis do mesmo tipo em uma estrutura de dados de matriz. Você pode declarar uma matriz especificando o tipo de seus elementos. Se você quiser que a matriz armazene elementos de qualquer tipo, você pode especificar object como seu tipo. No sistema de tipos unificado do C#, todos os tipos, predefinidos e definidos pelo usuário, tipos de referência e tipos de valor, herdam direta ou indiretamente de Object. As matrizes podem ter mais de uma dimensão. Por exemplo, a declaração a seguir cria uma matriz bidimensional de quatro linhas e duas colunas. int[,] array = new int[4, 2]; A declaração a seguir cria uma matriz de três dimensões, 4, 2 e 3. int[,,] array1 = new int[4, 2, 3]; Normalmente as matrizes são heterogêneas por padrão, somente as matrizes do tipo object podem ser homogêneas. Uma matriz irregular é uma matriz de matrizes. Não é garantido que cada matriz seja do mesmo tamanho. Você pode ter: int[][] jaggedArray = new int[5][]; jaggedArray[0] = { 1, 2, 3 }; // 3 elementos no array
jaggedArray[1] = new int[10]; // 10 elementos no array Uma matriz multidimensional (retangular), por outro lado, é mais um agrupamento coeso, como uma caixa, tabela, cubo, etc., onde não há comprimentos irregulares. Isso quer dizer: int i = array[1,10]; int j = array[2,10]; // 10 estará disponível em 2 se disponível em 1