🎧 New: AI-Generated Podcasts Turn your study notes into engaging audio conversations. Learn more

Linguagem de Programação I.pdf

Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

Full Transcript

Governo do Estado do Pará Secretaria de Ciência, Tecnologia e Educação Superior, Profissional e Tecnológica Escolas de Ensino Técnico do Estado do Pará Escola Agroindustrial Juscelino Kubitschek de Oliveira Linguagem de Programação I...

Governo do Estado do Pará Secretaria de Ciência, Tecnologia e Educação Superior, Profissional e Tecnológica Escolas de Ensino Técnico do Estado do Pará Escola Agroindustrial Juscelino Kubitschek de Oliveira Linguagem de Programação I Prof. José Ramon Monteiro, M. Sc. 1 O C++ foi inicialmente desenvolvido por Bjarne Stroustrup durante a década de 1980 com o objetivo de melhorar a linguagem de programação C, mantendo a compatibilidade com esta linguagem. Stroustrup percebeu que a linguagem Simula possuía características bastante úteis para o desenvolvimento de software, mas era muito lenta para uso prático. Por outro lado o BCPL era rápido, mas possuía baixo nível, dificultando sua utilização em desenvolvimento de aplicações. Durante seu período na Bell Labs, ele enfrentou o problema de analisar o kernel UNIX com respeito à História da computação distribuída. A partir de sua experiência de doutorado, começou a acrescentar elementos do Simula no C. Linguagem C++ C foi escolhido pois possuía uma proposta de uso genérico, era rápido e também portável para diversas plataformas. Novas características foram adicionadas, como funções virtuais, sobrecarga de operadores e funções, referências, constantes, controle de memória pelo usuário, melhorias na checagem de tipo e estilo de comentário de uma linha (//). A primeira versão comercial da linguagem C++ foi lançada em outubro de 1985. 2 O principal desenvolvedor da linguagem C++, Bjarne Stroustrup, descreve no livro “In The Design and Evolution of C++” quais seus principais objetivos ao desenvolver e expandir esta linguagem: Características Em proposta geral, C++ deve ser tão eficiente e portável quanto C, sendo desenvolvida para ser uma linguagem com tipos de dados estáticos. da Linguagem C++ é desenvolvido para ser o quanto mais compatível com C possível, C++ fornecendo transições simples para código C. C++ é desenvolvido para suportar múltiplos paradigmas de programação, principalmente a programação estruturada e a programação orientada a objetos, possibilitando múltiplas maneiras de resolver um mesmo problema. C++ é desenvolvido para fornecer ao programador múltiplas escolhas, mesmo que seja possível ao programador escolher a opção errada. 3 Podemos dividir as linguagens de programação conforme o “dialeto” utilizado por elas. Quanto mais próximo da linguagem humana for a maneira com que passamos instruções para a máquina, mais alto será seu nível: por exemplo, Fortran e Basic são consideradas linguagens de alto nível pois seus comandos parecem-se com frases humanas (em inglês, claro): “Se x = y então faça x = x+1 e imprima y”. De maneira análoga, quanto mais próximo da linguagem da máquina for a linguagem de programação, mais baixo será seu nível: por exemplo, o Assembly é Tipos de considerada uma linguagem de nível baixo, pois seus comandos são escritos em hexadecimal. Ambos os tipos possuem vantagens e Linguagem de desvantagens, mas de maneira geral podemos dizer que a vantagem das Programação linguagens de nível alto é a simplicidade de programação, enquanto que a vantagem das linguagens de nível baixo é a alta velocidade que seus programas podem ter. C++ pode ser considerada como uma linguagem de nível intermediário, pois utiliza um dialeto de nível alto mas possibilita ao programador facilidades para se trabalhar em nível baixo, como manipulação de bits, bytes e endereços de memória de maneira direta, sem recorrer a abstrações apresentadas por outras linguagens de alto nível. 4 Vantagens ❑Possibilidade em programação de alto e baixo nível. ❑Alta flexibilidade, portabilidade e consistência. Principais ❑Compatibilidade com C, resultando em vasta base de códigos. ❑Adequado para grandes projetos. Vantagens e ❑Ampla disponibilidade e suporte, devido principalmente à grande Desvantagens base de do C++ ❑desenvolvedores. ❑Não está sob o domínio de uma empresa (em contraste do Java - Sun ou Visual Basic – Microsoft). ❑Padronização pela ISO. ❑Grandes possibilidades para a metaprogramação e programação genérica 5 Desvantagens ❑Compatibilidade com o C herdou os problemas de entendimento de sintaxe do mesmo. Principais ❑Os compiladores atuais nem sempre produzem o código mais otimizado, tanto em velocidade quando tamanho do código. Vantagens e ❑Grande período para o aprendizado. Desvantagens ❑A biblioteca padrão ainda não cobre áreas importantes da do C++ programação, como threads, conexões TCP/IP e manipulação de sistemas de arquivos, o que implica na necessidade de criação de bibliotecas próprias para tal, que pecam em portabilidade. ❑Devido à grande flexibilidade no desenvolvimento, é recomendado o uso de padrões de programação mais amplamente que em outras linguagens. 6 Um paradigma de programação é um conjunto de ideias que fornecem ao programador uma visão sobre a estruturação e execução de um programa. Paradigmas de Assim como ao resolver um problema podemos adotar uma entre variadas Programação: metodologias para resolvê-lo, ao criar um programa podemos adotar um determinado paradigma de programação para desenvolvê-lo. Certas Programação linguagens de programação são escritas especificamente para trabalhar com um tipo de paradigma: este é o caso de Smalltalk e Java que suportam Estruturada e a programação orientada a objetos. Outras linguagens suportam vários Orientada a paradigmas, ou seja, o programador pode escolher qual paradigma se adapta melhor ao problema que ele precisa resolver e trabalhar com ele, e Objetos até mesmo alternar entre paradigmas (desde que ele saiba o que está fazendo). 7 A linguagem C++ é uma das linguagens que suportam vários paradigmas. Inicialmente, sendo uma “evolução” de C, ela suporta inteiramente o paradigma da programação estruturada. Além disso, ela suporta outros paradigmas como a programação procedural, a programação genérica, Paradigmas de abstração de dados e a programação orientada a objetos. Dentre estes paradigmas, o mais utilizado atualmente é a Programação Orientada a Programação: Objetos (POO). Apesar de ter sido criada nos anos 60, este paradigma só Programação começou a ganhar aceitação maior após os anos 90,com a explosão das linguagens C++, Java e Visual Basic. A ideia básica por trás da POO é criar Estruturada e um conjunto de “objetos” (unidades de software) para modelar um sistema. Estes objetos são independentes entre si, possuindo Orientada a responsabilidades e funções distintas no programa como um todo, mas que Objetos se comunicam entre si através do envio e recebimento de mensagens. A OOP é especialmente útil para grandes programas que se beneficiam mais com a modularidade oferecida por este paradigma: dividindo o programa em vários módulos independentes, aumenta-se a flexibilidade e a facilidade para manutenção do programa como um todo. 8 Toda linguagem de programação possui um tradutor de código. Este tradutor pode ser um compilador ou um interpretador, dependendo da linguagem. Interpretadores são programas que leem o código-fonte e executam ele diretamente, sem a criação de um arquivo executável. Chamamos de compilador o programa que traduz um arquivo escrito em código de linguagem de programação (arquivo-fonte) para a linguagem do microprocessador, criando um arquivo capaz de executar as instruções pedidas (arquivo executável). O primeiro passo de um compilador é analisar o código presente no Compiladores arquivo-fonte, verificando se existem erros de sintaxe. Caso algum erro de sintaxe seja encontrado, a compilação é interrompida para que o programador possa corrigir estes erros. Caso o código não possua erros o próximo passo do compilador é criar um arquivo de código-objeto, que possui as instruções do programa já traduzidas para a linguagem da máquina e informações sobre alocação de memória, símbolos do programa (variáveis e funções) e informações de debug. A partir deste arquivo de código-objeto, o compilador finalmente cria um arquivo executável com o programa compilado, que funciona independente do compilador e realiza as instruções criadas pelo programador. 9 Estrutura Básica de um Programa em C++ 10 As duas primeiras linhas são o cabeçalho do programa. Todo programa deve ter um cabeçalho desse tipo para definir quais as bibliotecas ele utilizará. “Bibliotecas” são arquivos que normalmente são instalados juntos com o compilador e que possuem os comandos e funções pertencentes à Estrutura Básica linguagem. de um O cabeçalho #include serve para indicar ao compilador todas as Programa em bibliotecas que este programa utilizará. Na maioria dos programas que escreveremos durante esta apostila, só utilizaremos o #include , C++ que serve para incluir a biblioteca iostream em nossos programas. Esta biblioteca contém as principais funções, comandos e classes de entrada e saída de C++, necessárias para realizar programas que, por exemplo, recebam dados via teclado e enviem dados via monitor. 11 A segunda linha do cabeçalho, using namespace std; , é um aviso ao compilador que estaremos utilizando os comandos e funções padrão de C++. Ele é necessário porque em C++ podemos criar várias bibliotecas para serem utilizáveis em vários programas. Cada uma dessas bibliotecas contém comandos, classes e funções próprias, e para evitar confusões e problemas com os nomes destes comandos, utilizamos o cabeçalho “using Estrutura Básica namespace...;” para definir qual o campo de nomes que estamos utilizando. Num programa normal, que não utiliza outras bibliotecas além de um da padrão de C++, utilizamos o namespace std como nosso campo de Programa em nomes de comandos e funções. Assim, sempre que utilizamos um comando próprio de C++, o compilador reconhecerá automaticamente este comando C++ como sendo pertencente à biblioteca padrão de C++. Tudo que acontece durante a execução do programa está contido dentro de uma função principal, chamada main. Declaramos a função main com: int main ( ) 12 Todos os comandos executados pelo programa estão contidos entre as chaves “{ }” da função main. Estudaremos as funções à fundo e veremos que um programa pode ter mais de uma função, mas é indispensável que todos os programas possuam a função main. Cada programa terá seus próprios comandos, logicamente. Entretanto, o Estrutura Básica encerramento de um programa geralmente é feito da mesma maneira para de um todos eles. As duas últimas linhas antes do fecha-chaves são dois comandos normalmente utilizados ao fim de um programa. Programa em A linha “system(“PAUSE > null”)” é uma chamada de função própria de C++. C++ A função system( ) recebe argumentos como o PAUSE que são comandos para o sistema operacional. Ela recebe o comando “PAUSE > null” para pausar a execução do programa até que o usuário aperte uma tecla qualquer. Utilizamos este recurso para que a tela do programa não seja terminada automaticamente pelo sistema, impedindo que vejamos os resultados do programa. 13 Finalmente, o comando “return 0” é a “resposta” da função main para o sistema. Quase toda função retorna um valor para o sistema ou programa que a chamou, por exemplo, uma função pode retornar o resultado de uma operação matemática executada por ela. No caso da função main, ela Estrutura Básica retorna um valor para o sistema operacional que executou o programa. de um Esse valor é interpretado pelo sistema como uma mensagem indicando se o programa foi executado corretamente ou não. Um valor de retorno 0 Programa em indica que o programa foi executado sem problemas; qualquer outro valor de retorno indica problemas. Quando o programa é executado até o fim, C++ ele retorna 0 ao sistema operacional, indicando que ele foi executado e terminado corretamente. Quando o programa encontra algum erro ou é terminado antes da hora, ele retorna um valor qualquer ao sistema, indicando erro durante a execução. 14 Finalmente, o comando “return 0” é a “resposta” da função main para o sistema. Quase toda função retorna um valor para o sistema ou programa que a chamou, por exemplo, uma função pode retornar o resultado de uma operação matemática executada por ela. No caso da função main, ela Estrutura Básica retorna um valor para o sistema operacional que executou o programa. de um Esse valor é interpretado pelo sistema como uma mensagem indicando se o programa foi executado corretamente ou não. Um valor de retorno 0 Programa em indica que o programa foi executado sem problemas; qualquer outro valor de retorno indica problemas. Quando o programa é executado até o fim, C++ ele retorna 0 ao sistema operacional, indicando que ele foi executado e terminado corretamente. Quando o programa encontra algum erro ou é terminado antes da hora, ele retorna um valor qualquer ao sistema, indicando erro durante a execução. 15 Existem algumas regras para a escolha dos nomes (ou identificadores) de variáveis em C++: ❑Nomes de variáveis só podem conter letras do alfabeto, números e o caractere underscore “_”. ❑Não podem começar com um número. Nomes e ❑Nomes que comecem com um ou dois caracteres underscore (“_” e “__”) são reservados para a implementação interna do programa e seu uso é Identificadores extremamente desaconselhado. O compilador não acusa erro quando criamos variáveis desse jeito, mas o programa criado se comportará de Usados na forma inesperada. Linguagem C++ ❑Não é possível utilizar palavras reservadas da linguagem C++ (para mais detalhes, veja o item 2.2). Também não é possível criar uma variável que tenha o mesmo nome de um função, mesmo que essa função tenha sido criada pelo programador ou seja uma função de biblioteca. ❑C++ diferencia letras maiúsculas e minúsculas em nomes de variáveis. Ou seja, count, Count e COUNT são três nomes de variáveis distintos. ❑C++ não estabelece limites para o número de caracteres em um nome de variável, e todos os caracteres são significantes. 16 Na linguagem C++ existem palavras que são de uso reservado, ou seja, que possuem funções específicas na linguagem de programação e não podem ser utilizadas para outro fim, como por exemplo, ser usada como nome de variável. Por exemplo, a palavra reservada “for” serve para chamar um laço de repetição, e não pode ser utilizada como nome de uma variável. A lista abaixo relaciona as palavras reservadas da linguagem C++: Palavras asm char auto class bool const break const_cast case continue catch default Reservadas na delete do double dynamic_cast else enum Linguagem C++ explicit friend export goto extern if false inline float int for long mutable namespace new operator private protected public register reinterpret_cast return short signed sizeof static static_cast struct switch template this throw true try typedef typeid typename union unsigned using virtual void volatile wchar_t while 17 É importante notar que a linguagem C++ diferencia letras maiúsculas e Palavras minúsculas, ou seja, char é uma palavra reservada de C++ mas CHAR ou ChAr não é (entretanto, normalmente desaconselha-se o uso dessa Reservadas na diferenciação por atrapalhar a legibilidade do código). Reforçando o que já Linguagem C++ foi mencionado, as palavras reservadas só irão executar os comandos que lhes foram designados. 18 Quando um programa é escrito em qualquer linguagem de programação é necessário a definição de algumas variáveis. Variáveis são instâncias em que serão armazenados valores utilizados durante a execução de programas. Estas variáveis podem ser modificadas para suportar diferentes tipos de dados. Os principais tipos de dados utilizados em C++ podem ser divididos em variáveis inteiras e reais. Variáveis inteiras servem para armazenar números inteiros, sem partes fracionárias. O principal tipo de variável inteira em C++ é o int. Além dele, Tipos de Dados existem os tipos char, short e long, cada um deles caracterizado por um tamanho em bits diferente. Estes tipos podem ser modificados pelo prefixo “unsigned”, que determina que a variável em questão só terá valores positivos, liberando o bit de sinal e aumentando a capacidade de armazenamento da variável (por default, todas as variáveis inteiras e reais declaradas em C++ são “signed”, ou seja, possuem um bit de sinal e podem ser tanto positivas como negativas). A tabela abaixo mostra os principais tipos de inteiros, seus tamanhos em bits e seu intervalo de armazenamento. 19 Tipos de Variáveis Inteiras em C++ Tipo Tamanho (em bits) Intervalo char 8 -128 a 127 unsigned char 8 0 a 255 Tipos de Dados int 16 -32768 a 32767 unsigned int 16 0 a 65535 short 16 -32768 a 32767 unsigned short 16 0 a 65535 long 32 -2147483648 a 2147483647 unsigned long 32 0 a 4294967295 20 Variáveis reais servem para armazenar números que possuem partes fracionárias. Existem duas maneiras de representar números fracionários em C++. A primeira, a mais simples, é utilizar o ponto para separar as partes inteiras e fracionárias. Por exemplo: 0.00098 1.2145 3.1461 8.0 Tipos de Dados (Mesmo no caso de um número com parte fracionária igual a zero, a utilização do ponto assegura que este número seja considerado um número de ponto flutuante por C++). A segunda maneira é utilizar a notação científica E. Por exemplo : 3.45E7 significa “3.45 multiplicado por 10 elevado à sétima potência (10.000.000)”. Essa notação é bastante útil para representar números realmente grandes ou realmente pequenos. A notação E assegura que o número seja armazenado em formato de ponto flutuante. 21 Alguns exemplos: 2.52E8 = 2.52 x 100.000.000 = 252.000.000 -3.2E3 = -3.2 x 1000 = -3200 23E-4 = 23 x 0.0001 = 0.0023 Assim como os inteiros, os números reais em C++ podem ser representados por 3 tipos de variáveis com diferentes intervalos. São elas: float, double e Tipos de Dados long double. Float é o tipo de variável real natural, aquela com a qual o sistema trabalha com maior naturalidade. Double e long double são úteis quando queremos trabalhar com intervalos de números reais realmente grandes. Utilizamos números reais geralmente para expressar precisão através do número de casas decimais, então podemos dizer que uma variável float é menos precisa que uma variável double, assim como uma variável double é menos precisa que long double. A tabela a seguir mostra os tipos de variáveis reais, seu tamanho em bits e o intervalo de armazenagem. 22 Tipos de Variáveis Reais em C++ Tipo Tamanho (em bits) Intervalo Tipos de Dados Float 32 3,4E-38 a 3,4E+38 Double 64 1,7E-308 a 1,7E+308 long double 80 3,4E-4932 a 1,1E+4932 23 As variáveis devem ser declaradas, ou seja, devem ser definidos nome, tipo e algumas vezes seu valor inicial. As variáveis são classificadas em variáveis locais e globais. Variáveis globais são aquelas declaradas fora do escopo das funções. Variáveis locais são aquelas declaradas no início de um bloco e seus escopos estão restritos aos blocos em que foram declaradas. A declaração Definição de de variáveis locais deve obrigatoriamente ser a primeira parte de um bloco, ou seja, deve vir logo após um caractere de “abre chaves”, '{'; e não deve ser Variáveis intercalada com instruções ou comandos. Para declarar uma variável somente é obrigatório declarar seu tipo e nome: ; Por exemplo: int exemplo; 24 Além disso, caso seja necessário, podemos declarar um valor a esta variável no momento de sua declaração, e também adicionar um prefixo a ela, da seguinte forma: Definição de = ; Variáveis Por exemplo: unsigned int exemplo = 12; 25 O conceito de constantes em linguagens de programação é atribuir um certo valor constante a um nome, e quando este nome for referenciado dentro do código do programa, será utilizado nas operações o valor atribuído a este nome. Ou seja, se for definida a constante PI com o valor “3,1415926536”, quando for encontrado no código o nome PI, será utilizado em seu lugar o valor “3,1415926536”. Definição de Em C++ , utilizamos o prefixo const associado a um tipo, um nome e um Constantes valor paradefinir uma constante. Assim: const = ; Por exemplo: const int eterna = 256; 26 No exemplo acima, definimos uma constante inteira de nome “eterna” que possui o valor numérico 256. É importante notar que devemos declarar a constante e lhe atribuir um valor na mesma linha de comando. Não podemos criar uma constante e lhe atribuir um valor posteriormente, ou seja, as seguintes linhas de comando são inválidas: Definição de const int eterna; eterna = 256; Constantes A partir da primeira linha, “eterna” passa a ser uma constante e seu valor não pode ser mais mudado durante a execução do programa. Como seu valor não foi declarado, esta constante pode ter qualquer valor que esteja na memória do computador naquele momento da declaração da variável. 27 Outro tipo de valor suportado pela Linguagem C++ é o tipo string. Uma string é um conjunto de caracteres entre aspas. Por exemplo, “você é um vencedor” é uma string, composta pelas várias letras que formam a frase. Não confunda strings com caractere. Uma constante caractere simples fica entre dois apóstrofos, por exemplo ‘a’. Entretanto “a” é uma string que contém somente uma letra. Valores Strings Códigos de Barra Invertida A linguagem C++ fornece constantes caractere mais barra invertida especiais, úteis para caracteres que não são facilmente inseridos através do teclado ou de strings (como por exemplo, o retorno de carro). Estes códigos são mostrados na tabela a seguir: 28 Códigos de barra invertida em C++ Código Significado Código Significado \b Retrocesso \f Alimentação de formulário \n Nova linha \r Retorno de carro \t Tabulação horizontal \” Aspas \’ Apóstrofo \0 Nulo \\ Barra invertida \v Tabulação vertical Valores Strings \a Sinal sonoro \N Constante octal \xN Constante hexadecimal Usa-se um código de barra invertida exatamente da mesma maneira como usa qualquer outro caractere. Por exemplo: ch = ‘\t’; printf(“Este é um teste\n”); Esse fragmento de código primeiro atribui uma tabulação a ch e, então, imprime “este é um teste” na tela, seguido de uma nova linha. 29 Um operador é um símbolo que diz ao compilador para realizar manipulações matemáticas e lógicas específicas. A linguagem C++ possui três classes gerais de operadores: aritméticos, relacionais e lógicos. ❑Operador de atribuição simples O operador “=” atribui um valor ou resultado de uma expressão contida a sua direita para a variável especificada a sua esquerda. Exemplos: Operadores a = 10; b = c * valor + getval(x); a = b = c = 1; O último exemplo é interessante por mostrar que é possível associar vários operadores de atribuição em sequência, fazendo com que todas as variáveis envolvidas tenham o mesmo valor especificado. 30 ❑Operadores Aritméticos São aqueles que operam sobre números e expressões, resultando valores numéricos. São eles: Operador Ação + Soma - subtração Operadores * multiplicação / divisão % módulo da divisão (resto da divisão inteira) - sinal negativo (operador unário) 31 ❑Operadores Relacionais Operam sobre expressões, resultando valores lógicos de TRUE (verdadeiro) ou FALSE (falso). são eles: Operador Ação > Maior >= Maior ou Igual Operadores < Menor E-D Maior 7 == E-D Igualdade 7 != E-D Diferença Expressões 8 && E-D Operador AND (e) 9 || E-D Operador OR (ou) 10 = D-E Atribuição 10 *= D-E Multiplicação e Atribuição 10 /= D-E Divisão e Atribuição 10 %= D-E Módulo e Atribuição 10 += D-E Soma e Atribuição 10 -= D-E Subtração e Atribuição 40 A linguagem C++ possui uma ótima biblioteca de classes relacionadas ao controle de entrada e saídas de dados. Desde o início da apostila temos feito uso de algumas facilidades fornecidas por esta biblioteca, especificamente, os comandos cout e cin. Como você deve ter percebido, a classe cout serve para exibir valores – seja Comandos de o valor de uma variável ou uma frase – enquanto que cin serve para Entrada e Saída armazenar valores recebidos através do teclado em variáveis. Na de Dados – cin e linguagem C as funções printf e scanf executavam estas mesmas funções. Na verdade, printf e scanf também estão presentes em cout C++ (assim como todas as funções padrões de C), e podemos utilizá- las caso desejemos. Porém, os comandos – ou, utilizando um termo mais tecnicamente apropriado, classes – cin e cout facilitam muito a vida do programador, por serem mais “inteligentes” que printf e scanf. 41 Utilização de cout Como já dissemos, cout exibe valores na tela. A sintaxe utilizada é: Comandos de cout

Use Quizgecko on...
Browser
Browser