Baixe o app para aproveitar ainda mais
Prévia do material em texto
2ºAula Iniciando a programação – Estrutura do código Objetivos de aprendizagem Ao término desta aula, vocês serão capazes de: • criar um projeto no Codeblocks; • entender a estrutura do C/C++; • imprimir textos através de programação. Olá pessoal! Nesta aula daremos continuidade a aula 1, agora que já estamos com nossa IDE instalada, vamos entender a estrutura de um programa nas linguagens C/C++ e aprender a começar a desenvolver em c/c++ . Vamos lá! Boa aula! Bons estudos! 12Linguagem da Programação I Seções de estudo 1 - Conhecendo nossa IDE 1 - Conhecendo nossa IDE 2 - Estrutura de um Programa 3 - Bibliotecas 4 - Debug Após instalar nossa IDE, vamos abrir o codeblocks. Ao abrir, ele apresentará uma mensagem com os compiladores detectados, clique em ok para continuar. Na imagem abaixo teremos o ambiente do programa, no lado direito podemos visualizar a aba projects, onde ficaram nossos arquivos de programação. Na parte central é onde será aberto nossos arquivos para codificação, e na parte inferior será apresentado mensagens, como por exemplo, erros de códigos. Vejamos: Figura 10: Tela principal. Então, vamos criar nosso primeiro projeto. Mas por que criar projeto? Em muitos tutoriais e aulas por ai, vocês encontrarão explicações sem esse passo. No entanto, a criação do projeto irá nos auxiliar futuramente, pois oferecerá funções que sem ele não será possível executar. Para criar o projeto vamos em: file→new->Project. Após realizar este passo a ide apresentará uma tela perguntando o tipo de aplicação, vamos selecionar Console application, porque começaremos a desenvolver de forma simples com interação pelo prompt MS-DOS, terminal ou alguma derivação de terminal. Figura 11: Selecionar tipo de projeto. Na próxima tela vamos clicar em next, e depois selecionar qual linguagem utilizaremos. Primeiramente, vamos escolher o C. Figura 12: Escolhendo a linguagem. Na seguinte, vamos definir o nome do projeto e onde ele ficará salvo em seu disco. Figura 13: Defi nindo nome e local do projeto. Após essa edição o codeblocks apresentará uma tela com o compilador que está instalado. Podemos finalizar clicando em <Finish> Assim, seu projeto foi criado, e codblocks apresentará ele na aba do lado esquerdo da tela em Management na aba projects, aqui encontramos a estrutura de pasta do projeto, todos os arquivos de código fonte ficam localizados na aba Sources (Códigos). Quando criamos os projetos a ide já cria um arquivo inicial. Abaixo será apresentada uma estrutura de um código em C/C++. No entanto, antes de visualizar nosso projeto, vamos primeiramente entender a estrutura do código. 2 - Estrutura de um Programa Figura 14- Fonte: JAMSA (1999). 13 Um programa básico em C ou C++ possui os seguintes blocos: Um programa C ou C++ deve possuir uma certa estrutura para ser válido. Basicamente têm-se três blocos distintos nos programas. Inicialmente deve-se ter uma seção onde serão feitos os includes necessários para o programa (será visto com mais detalhes). Por enquanto, deve-se colocar a seguinte linha em todos os programas: #include <stdio.h> Fala-se ao compilador que ele deve incluir o arquivo- cabeçalho padrão da linguagem C stdio.h. Nesse arquivo existem declarações de funções úteis para entrada e saída de dados onde: std = standard, que significa padrão, em inglês; io = Input/Output, entrada e saída; Então: stdio = entrada e saída padronizadas. O segundo bloco é o bloco das funções definidas pelo usuário. Este bloco não é obrigatório e só existirá se o usuário definir uma função. O último bloco, chamado de bloco principal, é obrigatório em qualquer programa C. Nele está definida a função main, que será a função por onde o programa começará a ser executado (SONODA, 2006). 2.1 - Esqueleto A linguagem C/C++ é uma linguagem de alto nível que permite que um problema complexo seja facilmente decomposto em problemas mais simples, definindo assim os módulos usando termos próximos à linguagem natural (embora em inglês) (BJARNE, 2000). Cada módulo básico é chamado de função, e cada função precisa ter um nome (ou identificador) bem definido e diferente das demais. No caso, a função main é necessária em todos os programas, pois define o início da execução do programa (SONODA, 2006). Toda função recebe também parâmetros. Por exemplo, uma função seno deve receber como parâmetro um ângulo. A lista de parâmetros é declarada entre parênteses depois do nome, no caso da função main, ela recebe zero parâmetros. As chaves definem o início e fim de um bloco de instruções. Embora os comandos da linguagem C sejam bem poderosos, eles são limitados. Mas com a maturidade de uma linguagem, vários programadores desenvolveram funções auxiliares que facilitam a programação de todos, e podem ser utilizadas desde que você especifique onde encontrar as funções através das linhas de include. No caso, o pacote stdio.h contem as rotinas necessárias para ler caracteres do teclado e imprimir caracteres no monitor. O system (“pause”) serve para interromper a execução do programa (pause) para que você possa analisar a janela de saída, após o término da execução, e é definida no pacote stdlib.h. Esse comando não é necessário se você estiver usando Linux (SONODA, 2006). 2.2 - Função main Todo programa deve ter uma função chamada main. É por esta função que será iniciada a execução do programa. Deve-se especificar o tipo da saída da função, que pode ser int ou void. Caso seja colocado int, o valor retornado pela função main estará disponível para teste no sistema operacional. Sendo assim, quando a função main for definida como uma função int (ou seja, inteira), ela precisa devolver um valor inteiro. Daí a necessidade do comando return 0, apenas por consistência, já que o zero não é utilizado. Caso o retorno da função seja declarado como void, nada será retornado ao sistema operacional. Alguns compiladores podem exigir que o retorno da função main seja declarado como int . Veja o exemplo: O que main devolve De acordo com o padrão ANSI, a função main devolve um inteiro para o processo chamador (geralmente o sistema operacional). Devolver um valor em main é equivalente a chamar a função exit (capítulo 6) com o mesmo valor. Se main não devolve explicitamente um valor, o valor passado para o processo chamador é tecnicamente indefinido. Na prática, a maioria dos compiladores C devolvem 0 (zero) (SONODA, 2006). Também é possível declarar main como void se ela não devolve um valor. Alguns compiladores geram uma mensagem de advertência (warning) se a função não é declarada como void e também não devolve um valor. O C é “Case Sensitive” Há um ponto importante da linguagem C que deve ser ressaltado: o C é Case Sensitive, isto é, maiúsculas e minúsculas fazem diferença. Se declarar uma variável com o nome soma ela será diferente de Soma, SOMA, SoMa ou sOmA. Da mesma maneira, os comandos do C if e for , por exemplo, só podem ser escritos em minúsculas pois, senão, o compilador não irá interpretá-los como sendo comandos, mas sim como variáveis (PEREIRA, 2005). Veja o Exemplo: 14Linguagem da Programação I Resultado do Programa será: Olá! Eu estou vivo! A linha #include <stdio.h> diz ao compilador que ele deve incluir o arquivo cabeçalho stdio.h. Neste arquivo existem declarações de funções úteis para entrada e saída de dados (std = standard, padrão em inglês; io = Input/Output, entrada e saída → stdio = Entrada e saída padronizadas). Sempre que for utilizada uma destas funções deve-se incluir este comando. O C possui diversos arquivos-cabeçalho. A linha int main() indica que está sendo definida uma função de nome main (PEREIRA, 2005). Todos os programas em C ou C++ têm que ter uma função main, pois é esta função que será chamada quando o programa for executado. O conteúdo da função é delimitado por chaves { }. O código que estiver dentro das chaves será executado sequencialmente quando a funçãofor chamada. A palavra int indica que esta função retorna um inteiro. Este retorno será visto posteriormente, quando estudarmos um pouco mais detalhadamente as funções do C. A última linha do programa, return(0);, indica o número inteiro que está sendo retornado pela função, no caso o número 0. A única coisa que o programa realmente faz é chamar a função printf() , passando a string (uma string é uma sequência de caracteres, que será visto posteriormente) “Olá! Eu estou vivo!\n” como argumento. É por causa do uso da função printf() pelo programa que deve-se incluir o arquivo-cabeçalho stdio.h . A função printf() neste caso irá apenas colocar a string na tela do computador. O \n é uma constante chamada de constante barra invertida. No caso, o \n é a constante barra invertida de new line e ele é interpretado como um comando de mudança de linha, isto é, após imprimir Olá! Eu estou vivo! o cursor passará para a próxima linha. É importante observar também que os comandos do C terminam com; (ponto e vírgula) (PEREIRA, 2005). 3 - Bibliotecas Em C a biblioteca padrão é uma coleção de classes, funções e variáveis escritas na própria linguagem para facilitar o desenvolvimento de aplicações. Também incorpora a biblioteca padrão do C, e todas suas funcionalidades estão declaradas no espaço de nomes std. A biblioteca padrão do C/C++ fornece vários containers genéricos, funções que utilizam e manipulam tais containers, funções-objeto, cadeias de caracteres e streams genéricos, suporte para algumas facilidades da linguagem e funções de uso geral, como funções matemáticas (CARVALHO, 2008). Os containers genéricos são uma implementação de elementos conhecidos em estrutura de dados. Diferentes containers compartilham uma mesma interface, o acesso é o mesmo. A escolha do uso geralmente depende da eficiência em determinadas tarefas que o container deverá desempenhar, o que está relacionado com a implementação interna do projeto. Por exemplo, alguns containers são mais eficientes em busca e menos eficientes em inserções (CARVALHO, 2008). No C++ ela também incorpora a biblioteca padrão do C90. Desta forma, as biblioteca-padrão do C sofreram uma adequação para pertencerem também ao espaço de nomes std: retirou-se o sufixo .h dos nomes dos arquivos de cabeçalho, e adicionou-se o prefixo c para indicar que pertence à linguagem C. Os algoritmos, containers e iteradores dessa biblioteca são baseados na STL, e por esse motivo esses dois termos são muitas vezes confundidos. O iterador é um conceito importante da STL, e, portanto, da biblioteca padrão. Ele permite que os algoritmos usem os containers de forma genérica. Algumas bibliotecas <iostream> Este cabeçalho é responsável pela manipulação de fluxo de dados padrão do sistema (entrada padrão, saída padrão e saída de erros padrão) e representa uma evolução do cabeçalho <stdio.h> da linguagem C. São apresentados os objetos cin, cout, cerr e clog para o envio e recebimento de dados dos fluxos de entrada, saída, erro sem buffer e erro com buffer (NORTON,1994). Também são fornecidos métodos para a formatação do fluxo de dados, como width, que define uma largura para a saída, fill, que define um caractere específico para ser impresso caso o fluxo é menor que o mínimo esperado, e precision, que define a quantidade de dígitos significativos de números de ponto flutuante (PEREIRA, 2005). <locale> Este cabeçalho manipula diversas convenções culturais do utilizador, como a representação de números, moeda e datas, para efeitos de internacionalização. A biblioteca faz uso da faceta, uma interface para um serviço dum locale específico. Cada locale possui um conjunto de facetas. O construtor padrão da classe std::locale define uma cópia do locale da máquina executando o programa, com as convenções atuais do utilizador. <sstream> std::stringstream é um manipulador de fluxos de dados de cadeias de caracteres especializado para o tipo de dado nativo char. Ele permite ler e escrever em modo de texto. A biblioteca padrão também fornece classes para casos de uso de std::stringstream somente para leitura (std::istringstream) ou somente para escrita (std::ostringstream). <string> O container std::string é uma cadeia de caracteres especializada para o tipo de dado nativo char. Ele remove vários dos problemas introduzidos pela linguagem C ao confiar no programador no gerenciamento de cadeias de caractere, encapsulando internamente rotinas e considerações que o programador não precisa tomar conhecimento. Ele também permite conversão de e para cadeias de texto do C (const char*). Diferente de uma cadeia de caracteres em C, que é um ponteiro para uma região de memória contendo a cadeia, o conteúdo de std::string é armazenada por valor. Por esse motivo, a operação de cópia possui tempo . Para evitar cópias desnecessárias, a passagem de cadeias de texto como parâmetro de funções é geralmente feita por referência constante. Isso possui uma segunda vantagem, pois permite que a mesma função possa receber implicitamente uma cadeia de caracteres 15 do C, sem a necessidade de sobrecarga para o tipo de dado const char*. Além das citadas acima, existem várias outras que facilitam no desenvolvimento, como por exemplo, algumas próprias para efetuar cálculos matemáticos. Vale a pena acessar o site: <http://www.cplusplus.com/ reference/clibrary/>, nele são apresentados vários exemplos de códigos que exploram várias bibliotecas, ele é também é utilizado por vários programadores, exemplificam a utilização de vários recursos da linguagem C e C++. 4 - Retomando nosso projeto Agora que foi apresentada a estrutura do código, vamos avaliar o código inicial gerado pela IDE. No lado esquerdo encontramos a estrutura do nosso projeto, onde aparece a pasta source, na qual contém nossos códigos fontes. Na parte central da IDE podemos verificar nosso código. Figura 15: Código Inicial. Na linha 1 e 2 apresenta as declarações das bibliotecas. O quê? Bom, o c/c++ trabalha com o conceito de bibliotecas, essas bibliotecas são códigos criados pelo compilador que nos possibilita a utilizar alguns recursos dele. Uma biblioteca é declarada sempre desta maneira #include<NOMEDABIBLIOTECA>. Na linha 4 temos a declaração do início do nosso código como se fosse no portugol o ALGORITMO, em qualquer linguagem de programação é utilizado um método ou função de com o nome main, o compilador sempre enxergará como o início do nosso código. Na linha 5 é o início de um bloco através do abre chaves{ e na linha 8 um fecha chaves que representa o término de um bloco de código}, funciona da mesma forma que o início e fim no portugol, ou seja, é o início e fim do bloco. Em quase todas as linguagens de alto nível, vamos utilizar esta sintaxe para indicar início e fim. Na linha 6 temos uma tag (printf) da Linguagem C para imprimir mensagem, a utilização desta tag só é possível por causa da declaração da biblioteca stdio.h na linha 1. Fique atento: ao final de todo comando ou declarações sempre devemos inserir o; Para sinalizar ao compilador que aquela ação teve um fim, por exemplo: printf(); Para executar nosso código teremos duas opções, no topo da IDE existem três ícones. O primeiro compila o código (Verifica o funcionamento), o segundo executa (apresenta resultado) e o terceiro compila e executa. Agora vamos executar nosso código e ver o que acontece. Ao clicar build (ícone engrenagem) a seguinte mensagem deve ser informada, representando que está tudo ok, e sem nenhum erro. Figura 16: Resultado da compilação. Logo após clique no run (icone de play) o código deve apresentar uma janela com o resultado do código. Figura 17: Resultado do código. Se tudo ocorreu bem, agora podemos começar a entender o código fonte gerado, e começar a escrever o nosso. 4.1 - Começando a programar Lembre-se: O c/c++ são case sensitivo, ou seja, letras MAIÚSCULAS e minúsculas fazem diferença na hora de codificar.Vimos que o printf serve para imprimir na tela, o que não nos atentamos é que no código aparece um \n que não é impresso. Sim, o printf possui alguns caracteres que auxiliam na impressão nesse caso após imprimir o \n obriga o texto a pular uma linha. Para testarmos vamos duplicar está linha e ver o que acontece. Figura 18: Imprimindo em tela. O código aparece como resultado dois “Hello World” um embaixo do outro. Isso acontece porque foi inserido o \n no fim do texto dentro do printf. Devemos nos atentar ainda que todo texto que queira imprimir deve estar dentro de aspas duplas, caso contrário o compilador retornará um erro. Existem outras tags que facilitam a impressão ou apresentação de conteúdo na tela. Essas tags são as mesmas em todas as linguagens de alto nível. Tag Descrição \b Retrocesso ("backspace") \f Alimentação de formulário ("form feed") \n Nova linha ("new line") \r Retorno de carro ("carriage return") 16Linguagem da Programação I \t Tabulação horizontal ("tab") \" Aspas (double quote ") \' Apóstrofo (single quote ') \? Interrogação (question mark) \a Sinal sonoro ("alert - beep") Vale a pena tentar: escreva seu próprio printf e modificar nosso código com as tags apresentadas. 4.2 - Criando projeto na Linguagem C++ Agora vamos repetir o procedimento de criação do projeto, só que agora vamos optar pelo código C++. Sendo assim, vamos no menu File→ new Project, console Application e na tela de seleção da linguagem optaremos pela C++ assim como aparece na figura abaixo. Figura 19: Seleção da linguagem. Logo após escolheremos o nome do projeto e finalizamos da mesma forma que já foi descrito na criação do projeto anterior. Desta vez o código gerado será um pouco diferente do primeiro, pois apresentará o modo de escrita estipulado pelo C++. No entanto como o C++ é uma extensão do C ele aceita todos os tipos de sua antecessora. Portanto, a partir deste momento adotaremos a criação de nossos projetos selecionando esta opção, tendo assim um leque maior de opções de códigos. Abaixo podemos observar o código gerado por nossa IDE. Figura 20: Impressão com C++. Nosso código agora apresenta algumas novidades como a declaração do namespace na linha 3. Conforme já visto em nas bibliotecas, para usar os recursos de entrada e saída da biblioteca iostream em C++, é preciso incluir o comando using namespace std. Este comando serve para definir um “espaço de nomes”, ou namespace. Um namespace permite a definição de estruturas, estruturas, classes, funções, constantes, etc, que estarão vinculadas a ele. Isso evita duplicidade com, por exemplo, outras implementações com nomes semelhantes. Por definição, a linguagem C++ utiliza o namespace std para definir todas as funções da biblioteca padrão (PEREIRA, 2005). Se não utilizarmos o comando using namespace std., será necessário especificar explicitamente o namespace utilizado, como por exemplo: std::cout << “Exemplo de saída na tela” << std::endl; O que para uma linha não faria muita diferença, mas a partir do momento que nosso código vai crescendo a utilização dos termos do C++ sem o namespace vai deixando o código muito contaminado pela repetição do termo std::. Na linha 7 também podemos verificar um novo método de impressão cout, que é um método do c++ para impressão em tela, como já foi dito anteriormente, poderíamos utilizar o printf normalmente aqui. Não se preocupe, pois os métodos de impressão serão mais bem explicados, já que estudaremos eles nas próximas aulas. 4.3 - Debugando o código Debugar é um esforço para encontrar determinado ponto (às vezes vários pontos) “defeituoso” no código a ser corrigido. Ao sentar-se na frente do computador para codificar (seja lá o que for) o desenvolvedor estabelece, ou deveria estabelecer uma conversa com o computador e seu código fonte: dev: E aí computer, me mostre o VALOR da variável “resultado”. cpu: Ok, mas parece que não está retornando nada, veja o valor que ela contém... “”. O dev para e pensa um pouco: qual será o tipo do dado, pois o valor não está ajudando muito. dev: Computer, mostre-me agora TIPO de dado da variável “resultado”. cpu: string(0) O dev novamente reflexivo: “O valor é ‘’, o tipo é string. Acho que vou ‘parar’ em outro ponto…” Esse é o processo de depuração, ir parando em determinados pontos do código fonte e pedir para o computador mostrar o que vai em sua memória. Na verdade essa é a forma mais rudimentar de depuração, porém é bastante eficaz. No codeblocks podemos debugar nosso programa através da opção debug, no entanto precisamos avisar a IDE onde quero parar no código. Para realizar esse aviso é preciso criar um ponto de parada (breakpoint). Para criar um breakpoint é preciso clicar com o botão direito do mouse e clicar em add Breakpoint, logo após aparecerá um marcador vermelho na linha indicando o ponto de parada. Para debugar o código agora é só clicar em debug (botão de play vermelho no codeblocks). Figura 21: Opções de Debug. Executa o código e parará no ponto marcado, sendo possível assim visualizar o que está acontecendo no código até aquela linha. Mais adiante no curso, iremos utilizar esse recurso tão importante da nossa IDE. 17 Retomando a aula Parece que estamos indo bem. Então, para encerrar essa aula, vamos recordar: Percebemos que , foi possível aprender que o codeblocks é uma ferramenta que interpreta códigos c++ e utiliza o compilador gnu c++ para executar o código escrito. Podemos concluir que é uma ferramenta poderosa, que nos permite verificar erros de sintaxes e também em tempo de execução. Vimos que a estrutura dos códigos é simples, bem parecida com a portugol. Na próxima aula, veremos que o c++ pode manipular dados na memória através de variáveis. Stephen R Davis; Começando A Programar Em C++ Para Leigos; Alta Books; Edição: 1; 2012. MIZRAHI, Viviane Victorine Mizrahi; Treinamento em Linguagem C++ - Modulo 2; Pearson; Edição: 2; 2005. Introdução ao codeblocks. Disponível em: <https://www. ime.usp.br/~jose/codeblocks/codeblocksintro.html>. Acesso em: 22 de nov. 2107. Disponível em: <http://srvd.grupoa.com.br/uploads/ imagensExtra/legado/P/PINHEIRO_Francisco_de_A_C/ Elementos_Programacao_C/Liberado/Editores_ Programas.pdf>. Acesso em: 22 de nov. 2017. Disponível em: <http://www.codeblocks.org/docs/ manual_en.pdf>. Acesso em: 23 nov. 2107. Vale a pena Vale a pena ler Vale a pena acessar Instalação do codeblcks. Disponível em: <https://www. youtube.com/watch?v=kYc3vGKDtpk>. Acesso em: 20 de nov. 2017. Vale a pena assistir Minhas anotações
Compartilhar