Buscar

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