vamos programar?

89
12/11/15, 15:16 Vamos Programar? – Introdução à Programação #25 - Pplware Página 1 de 89 http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Vamos Programar? – Introdução à Programação #25 O mundo está constantemente a evoluir: desde o mais pequeno inseto à espécie Humana. Dentro das palavras que mais ouvimos atualmente, incluímos “evolução”, “mudança”, “futuro”. A tecnologia tem revolucionado o mundo das mais diversas formas: do mais simples aparelho para medir o tempo ao mais complexo acelerador de partículas. Se quer entrar no mundo da tecnologia e deixar a sua marca, pode começar aqui. Este é o último artigo da saga Introdução à Programação. Neste episódio marcamos as 25 semanas que se traduzem em 6 meses e mais 1 semana a escrever sobre C. Gostei muito de escrever esta saga. Não só ensinei como também aprendi bastante. Os comentários, na generalidade, foram bastante positivos, tendo aprendido com diversos deles. Não é o fim da saga “Vamos Programar?”, pois temos vindo a publicar o questionário abaixo de forma a conhecermos a sua opinião acerca do que gostava de ver no futuro da saga.7 Relativamente à saga “Introdução à Programação”, este é o seu fim. Mas, na próxima semana, poderá vir a ter notícias acerca de algo baseado nesta saga. Fique atento(a).

Upload: djfeisca9528

Post on 01-Feb-2016

53 views

Category:

Documents


5 download

DESCRIPTION

Este é um pequeno curso de introdução a linguagem c.

TRANSCRIPT

Page 1: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 1 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Vamos Programar? – Introdução à Programação #25

O mundo está constantemente a evoluir: desde o mais pequeno inseto à espécieHumana. Dentro das palavras que mais ouvimos atualmente, incluímos “evolução”,“mudança”, “futuro”.

A tecnologia tem revolucionado o mundo das mais diversas formas: do mais simplesaparelho para medir o tempo ao mais complexo acelerador de partículas. Se querentrar no mundo da tecnologia e deixar a sua marca, pode começar aqui.

Este é o último artigo da saga Introdução à Programação. Neste episódio marcamos as25 semanas que se traduzem em 6 meses e mais 1 semana a escrever sobre C. Gosteimuito de escrever esta saga. Não só ensinei como também aprendi bastante. Oscomentários, na generalidade, foram bastante positivos, tendo aprendido comdiversos deles.

Não é o fim da saga “Vamos Programar?”, pois temos vindo a publicar o questionárioabaixo de forma a conhecermos a sua opinião acerca do que gostava de ver no futuroda saga.7

Relativamente à saga “Introdução à Programação”, este é o seu fim. Mas, na próximasemana, poderá vir a ter notícias acerca de algo baseado nesta saga. Fique atento(a).

Page 2: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 2 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

O mundo está constantemente a evoluir: desde o mais pequeno inseto à espécieHumana. Evolução, mudança, futuro – são das palavras que mais são ouvidasatualmente.

A tecnologia tem revolucionado o mundo das mais diversas formas. Se quer entrar nomundo da tecnologia e deixar a sua marca, pode começar aqui.

Na semana passada, começámos a saga Introdução à Programação a falar sobreAlgoritmos, Fluxogramas e Pseudocódigo e hoje vamos continuar e falar sobre doismétodos de armazenamento de valores: constantes e variáveis.

Atualizámos o artigo da semana passada para conter mais informação. A partir deagora, colocaremos também uma versão em texto do vídeo que pode ou não contermais pormenores do que este.

Visualize este vídeo no YouTube.

Quando declaramos uma variável ou constante, estamos a reservar um endereço damemória RAM onde poderemos guardar um valor. Por exemplo, se declararmos umavariável chamada “EMPRESA” (sem aspas), um endereço da memória RAM éreservado.

O valor desse endereço passará a estar disponível através do nome da variável

Page 3: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 3 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

declarada – EMPRESA, neste caso. Depois disso, poderemos armazenar valores nesseendereço.

Constantes

Tal como o próprio nome indica, as constantes permite-nos armazenarvalores constantes ou seja, depois de declararmos uma constante, não podemosalterar o seu valor. Exemplo:

constante EMPRESA = "Pplware"; //Declaração da constante empresa e atribuição de valor. EMPRESA = "A Minha Empresa"; //Erro: o valor da constante já foi definido

Tudo o que está depois de “//” (sem aspas) chama-se comentários e não sãointerpretados sendo automaticamente ignorados. Como podem ver, a alteração dovalor de uma constante iria gerar erro.

O nome das constantes é, normalmente, escrito em letras maiúsculas. Isto é apenasuma convenção porém torna-se mais fácil para um terceiro compreender o códigoescrito.

Variáveis

Ao contrário das constantes, podemos alterar o valor das variáveis a qualquermomento da execução de um programa. Aqui está um exemplo:

temaAtual = "Constantes"; //Declaração da variável "temaAtual" e atribuição de um valortemaAtual = "Variáveis"; //Mudança de valor

Page 4: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 4 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Nesse excerto, nenhum erro seria gerado pois podemos mudar o valor as variáveisquando quisermos. Como podem ter reparado, a nomenclatura é diferente da dasconstantes.

Nas variáveis seguimos o padrão CamelCase, mais precisamente, olowerCamelCase onde iniciamos a primeira palavra com letra minúscula e todas asrestantes capitalizadas.

Regras de nomeação

Estas regras são muito importantes e são dirigidas tanto às constantes como àsvariáveis. Quando damos um nome a uma variável, temos que ter em atenção asseguintes regras:

Não pode começar com números;Não pode ser igual a uma palavra reservada;Não pode conter espaços;Não pode conter caracteres especiais (alguns são permitidos de acordo com alinguagem).

Agora deve estar a perguntar-se, o que é uma palavra reservada? Pois bem, aspalavras reservadas são aquelas que constam na “gramática” da linguagem deprogramação.

Por exemplo, no pseudocódigo que utilizámos, uma condição começava com “SE”.Assim, não podemos declarar uma variável ou constante com o nome “SE” pois éreservada à linguagem de programação.

Tipos de variáveis e constantes

As variáveis e constantes podem ser de diversos tipos. Hoje vamos introduzir apenasalguns tipos, os mais comuns, visto que estes variam de linguagem para linguagem.

Nas próximas semanas abordaremos os tipos existentes na linguagem que vamoscomeçar a utilizar (C) e novos conceitos relacionados com “tipagem”.

Page 5: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 5 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Como podem ver na imagem acima, os “principais” tipos de constantes e variáveisexistentes são:

int de “integer number” ou número inteiro: 5, -5, 22554, -515984512;float de “floating-point numer” ou número com ponto flutuante: 3.14059 (sim,este não é o pi), 1.58596548, -52.2358;boolean ou booleano: true, false;string ou conjunto de caracteres: “A minha frase”, “Este site chama-se Pplware”.

Como já referi, existem variações de linguagem para linguagem e quando começarmosa aprender C, iremos ver que existem variações relativas ao que apresentámos aqui.

Page 6: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 6 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

A linguagem que será utilizada será, em princípio, C pois é uma linguagem base emuitas das que nós utilizamos atualmente são baseadas nela. Isto não quer dizer que,no futuro, não falemos de outras linguagens pois temos algumas coisas em mente – surpresa!

Sendo assim, para a semana vamos abordar novos conceitos que têm estado ocultosaté agora visto estarmos a utilizar pseudocódigo. Estes conceitos irão abrangerdiversas coisas, incluindo o tema de hoje sendo que as próximas semanas irão contermuito conteúdo.

Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, podemsempre utilizar os comentários para colocar a questão. Caso o faça, pedimos queutilize a keyword [DUVIDA] no início do seu comentário.

Paradigmas de Programação

O mundo está constantemente a evoluir: desde o mais pequeno inseto à espécieHumana. Evolução, mudança, futuro – são das palavras que mais são ouvidasatualmente.

A tecnologia tem revolucionado o mundo das mais diversas formas. Se quer entrar nomundo da tecnologia e deixar a sua marca, pode começar aqui.

Page 7: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 7 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Antes de começar a aprender C, iremos abordar alguns temas importantes. Hoje vaiaprender o que realmente é uma linguagem de programação e conhecer osparadigmas de programação mais utilizados.

Visualize este vídeo no Youtube

Linguagem de programação

O conceito linguagem de programação ainda não foi abordado. Antes de continuar, éfundamental que compreenda o que realmente é uma linguagem de programação.

Uma linguagem de programação é uma forma padronizada para comunicarinstruções a um computador ou seja, através de diversas regras semânticas esintáticas, podemos instruir o computador a fazer algo.

Page 8: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 8 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Paradigmas de Programação

Todas as linguagens de programação têm várias características dentro delasos paradigmas de programação. Paradigmas são modelos ou padrões logo,paradigmas de programação são formas de estruturar o código.

Cada linguagem de programação pode adoptar um ou mais paradigmas deprogramação. As que adoptam mais do que um paradigma chamam-se multi-paradigma.

Paradigma imperativo

O paradigma imperativo concentra-se num estado (que são as variáveis) e ações(comandos) que modelam o estado.

Pode ser comparado ao modo modo imperativo da linguagem humana visto que écriado para ordenar a realização de ações.

Exemplos (de linguagens de programação imperativas) : C, Java, C#, Pascal.

Paradigma procedimental

O paradigma procedimental permite a reutilização de código sem o copiar através dautilização de funções e procedimentos (que falaremos mais à frente na saga). De certaforma, com este paradigma, podemos “reciclar” código. A maioria das linguagens deprogramação são procedimentais.

Paradigma estruturado

Page 9: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 9 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Uma linguagem de programação estruturada é aquela em que todos os programaspodem ser reduzidos a três estruturas: sequência, decisão e repetição (iteração).

Sequência

Nesta estrutura as tarefas são executadas de forma linear, ou seja, uma após a outra.Exemplo:

Acordar;

Vestir;

Tomar o pequeno-almoço;

Ir trabalhar;

Fluxograma correspondente:

Este é um exemplo de uma sequência. Em muitas linguagens de programação, oscomandos/ações terminam com ponto e vírgula pois estas permitem que os comandossejam colocados em linha da seguinte forma:

Page 10: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 10 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Acordar; Vestir; Tomar o pequeno-almoço; Ir trabalhar;

A utilização do ponto e vírgula é, normalmente, obrigatória quando existem váriasinstruções numa única linha. Linguagens de programação como Java, C# e C obrigamao uso do ponto e vírgula em todas as instruções independentemente se estão emlinha ou não.

Decisão

Neste tipo de estrutura, um determinado trecho de código é executado ou nãodependendo do resultado de um teste lógico. Abaixo encontra vários exemplospráticos.

Exemplo 1:

O exemplo abaixo descreve a condição/decisão “se Acordar, vou Trabalhar, casocontrário, não vou Trabalhar” através de pseudocódigo.

if "Acordar" then

"Trabalhar"

else

"Não trabalhar"

endif

Fluxograma correspondente:

O pseudocódigo acima já não está em português e já se assemelha ao queirá visualizar nas linguagens de programação. Sempre que aparecerem termos em

Page 11: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 11 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

inglês no código relacionado com a sintaxe, encontrará a sua tradução mais abaixo.Neste caso:

if → sethen → entãoelse → caso contrárioendif (end if) → fim do if

Agora, e novamente relacionado com a decisão, repare que o trecho de código“Trabalhar” só será executado se o indivíduo “Acordar”. Caso contrário, o trecho“Não trabalhar” será executado. Abaixo pode visualizar mais exemplos.

Exemplo 2:

Dói-me a cabeça. Se doer muito pouco, vou trabalhar. Se doer pouco, tomo umcomprimido e vou trabalhar. Se doer muito, vou ao médico e falto ao trabalho.

case "Dor de cabeça"

when "muito pouco" then "trabalhar"

when "pouco" then "tomar comprimido"; "trabalhar"

when "muito" then "ir ao médico"; "não trabalhar"

Este é mais um exemplo mas utilizando diferentes comandos. Este trecho poderia sertambém escrito através de comandos if/else da seguinte forma:

if "Dor de cabeça"

if "muito pouco" then

"trabalhar";

elseif "pouco" then

"tomar comprimido";

"trabalhar";

else if "muito" then

"ir ao médico";

"não trabalhar";

endif

endif

Em fluxograma:

Page 12: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 12 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Novos termos:

case → casowhen → quandoelse if → caso contrário se

Iteração

Neste tipo de estrutura, também conhecido como repetição, um trecho de código serárepetido um número finito de vezes dependendo do resultado de um teste lógico.

Exemplo 1:

Abaixo encontra a repetição “não saio de casa enquanto não estiver vestido” emformato de pseudocódigo para melhor análise:

do {

"não sair de casa";

} while ( "não estou vestido" )

Page 13: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 13 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Ou seja, pode ler da seguinte forma: fazer x enquanto y.

Novo termo:

do → fazer

Exemplo 2

Enquanto estiver a Dormir, não me vou Vestir.

while ( "Durmo" )

"Não me visto";

Ou seja, enquanto acontece algo, faço outra coisa.

Exemplo 3

Lavo os dentes 20 vezes.

for ( i = 0; i < 20; i++ )

"Lavar os dentes"

Ou seja, enquanto não acontece qualquer coisa, faço qualquer coisa. Em fluxograma:

Page 14: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 14 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Novo termo:

for → para/enquanto

Exemplo 4

Para cada dente, lavo-o muito bem.

for each "dente" in "boca"

"Lavar muito bem"

Ou seja, para cada item do conjunto, fazer qualquer coisa. Novos termos:

each → cadain → em

Paradigma Declarativo

O Paradigma Declarativo contrasta com o Imperativo pois é capaz de expressar alógica sem descrever como o fluxo de comandos funciona, ou seja, apenas diz aocomputador o que fazer e não como fazer.

Um excelente exemplo de uma linguagem que utiliza este paradigma é Prolog, muitoutilizado na área de inteligência artificial.

Paradigma Funcional

O Paradigma Funcional engloba todas as linguagens de programação que utilizamfunções matemáticas. Estas linguagens de programação são muito utilizadas nocampo da matemática.

Exemplos: Matlab, Wolfram Language/Mathmatica/M, B.

Paradigma Orientado a Objetos

A Programação Orientada a Objetos permite a criação de objetos com baseem classes. Estes objetos são instâncias dessas classes e possuem todos os atributose funções presentes nas classes em questão.

Este paradigma é muito extenso e tem muita informação que mais à frente irá serabordada. Atualmente, existem muitas linguagens que utilizam este paradigma.

Page 15: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 15 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Exemplos: Java, C++, C#, PHP.

Os paradigmas de programação não se limitam aos 6 (seis) apresentados pois existeminúmeros outros. Estes são os mais utilizados. Existem ainda paradigmas que sãobaseados noutros, contrastando com outros, etc.

Agradeço à Ana Narciso pela disponibilização de alguns exemplos utilizados na secção“Paradigmas de Programação”.

Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, podesempre utilizar os comentários para colocar a questão. Caso o faça, pedimos queutilize a keyword [DUVIDA] no início do seu comentário.

Uma breve história sobre C

O mundo está constantemente a evoluir: desde o mais pequeno inseto à espécieHumana. Evolução, mudança, futuro – são das palavras que mais são ouvidasatualmente.

A tecnologia tem revolucionado o mundo das mais diversas formas. Se quer entrar nomundo da tecnologia e deixar a sua marca, pode começar aqui.

Hoje trazemos aos nossos leitores, a si, uma pequena grande história sobre alinguagem de programação C que começará a ser utilizada em breve.

Page 16: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 16 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Visualize este vídeo no Youtube

Antes de continuar, deve conhecer a história da linguagem de programação quecomeçará a ser utilizada em breve (dentro de uma ou duas semanas). Apesar de,inicialmente, apenas abordarmos C, poderemos falar de outras também.

C – Uma pequena grande história

Os anos de 1969 a 1973 foram de extremo entusiasmo dentro da AT&T Bell Labsporque foi quando a linguagem de programação C começou a ser desenvolvida.

O principal desenvolvedor desta linguagem foi Dennis Ritchie que descreveu o ano de1972 como o mais produtivo e criativo. Este foi o ano em que mais avanços foramcriados na linguagem.

A linguagem desenvolvida por Ritchie chama-se C porque esta linguagem baseou-seimenso numa outra linguagem de programação chamada B. Muitas das característicasde C foram baseadas em B.

Numa fase inicial, esta linguagem de programação, C, tinha como principal finalidade odesenvolvimento do Unix, que já havia sido escrito em Assembly – uma outralinguagem de programação.

Page 17: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 17 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

A versão mais recente de C é C11 e foi lançada a dezembro de 2011. Esta linguagem foiuma das influências de muitas das linguagens de programação que atualmente sãomuito utilizadas.

Dentro de muitas, C influenciou AWK, BitC, C++, C#, C Shell, D, Euphoria, Go, Java,JavaScript, Limbo, Logic Basic, Objective-C, Perl e PHP. Isto não significa que estaslinguagens não tenham sido influenciadas por outras.

Características da linguagem

Todas as linguagens de programação contam com diversas características. Comoabordámos anteriormente, os paradigmas de programação são muito importantes einfluenciam a forma como devemos escrever.

Sendo assim, C é uma linguagem de programação, em relação aos paradigmas,estruturada, imperativa e procedimental. Outras características desta linguagemsão o facto de ser compilada, padronizada pela ISO e de propósito geral.

Uma linguagem de programação compilada é aquela que passa pelo processode compilação ou seja, o seu código fonte é diretamente transformado na linguagemda máquina por via de um compilador.

Porque iremos utilizar C?

Na comunidade de programadores/desenvolvedores existem sempre muitas opiniões:todas diferentes e distintas. Porém, não quer dizer que sejam inválidas.

Nós iremos começar por abordar C porque é uma linguagem “mãe”, que influencioumuitas outras. Aprendendo a linguagem C, fica preparado para se iniciar com muitasoutras linguagens de programação pois tem uma sintaxe muito utilizada e, além disso,sabe a lógica.

Page 18: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 18 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Estes primeiros artigos não têm permitido muita interatividade entre si, leitor, e nósmas, brevemente, isso irá mudar. Quando começarmos a colocar código-fonte C,iremos colocar também exercícios para que desafie a sua mente.

Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, podesempre utilizar os comentários para colocar a questão. Caso o faça, pedimos queutilize a keyword [DUVIDA] no início do seu comentários.

Instalação de um IDE

O mundo está constantemente a evoluir: desde o mais pequeno inseto à espécieHumana. Evolução, mudança, futuro – são das palavras que mais são ouvidasatualmente.

A tecnologia tem revolucionado o mundo das mais diversas formas. Se quer entrar nomundo da tecnologia e deixar a sua marca, pode começar aqui.

Na semana passada, a história da linguagem de programação C foi abordada. Napróxima semana, iremos já começar a fazer exercícios e criar os nossos própriosalgoritmos. Mas, antes de começarmos a fazê-lo, vamos preparar o ambiente detrabalho.

Esta semana não há vídeo mas na próxima semana já existirá.

Primeiramente, o que é um IDE? Um IDE é um Ambiente de Desenvolvimento

Page 19: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 19 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Integrado e deriva do inglês Integrated Development Environment. É um programa decomputador que reúne diversas ferramentas para apoiar no desenvolvimento desoftware.

Existem diversos IDE disponíveis logo, as ferramentas que cada um disponibiliza nãosão sempre as mesmas. Aqui está uma pequena lista com os três elementosque costumam vir com um IDE:

Editor – a ferramenta primária que nos permite escrever o código-fonte naslinguagens que o IDE suporta. Com um editor podemos ver a syntax do código-fonte colorida.Compilador -a ferramenta que transforma o código-fonte na linguagem damáquina através do processo de compilação.Depurador – esta ferramenta ajuda no processo de encontrar bugs (defeitos) nocódigo-fonte.

Sendo assim, hoje vou recomendar-lhe um IDE, que será utilizado ao longo da nossasaga. Portanto, todas as instruções que lhe serão dadas ao longo do resto da saga,serão direcionadas a este IDE.

Se utilizar outro IDE, não há qualquer problema, visto que não deverão existirdiferenças no código-fonte. Não recomendo a utilização do Visual Studio daMicrosoft por agora visto que o compilador por este IDE utilizado poderá precisar deeventuais configurações.

Page 20: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 20 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Assim, para dar os primeiros passos em C, recomendo a utilização do NetBeansporque é simples, tem uma interface agradável e está disponível para as mais diversasplataformas.

Existem alguns passos que devem ser seguidos para instalar este IDE. Em primeirolugar, temos que instalar o JDK (Java Development Kit) que pode ser descarregadoaqui. A instalação do JDK não tem segredos e é fácil e rápida.

Depois, é hora de instalar o Netbeans. Descarregue-o aqui e certifique-se de que aversão que descarrega é a C/C++. Ao contrário da maioria dos IDE, este não traz ocompilador pré-configurado.

Existem vários compiladores suportados pelo Netbeans. Pode ver aqui como instalaro gcc nas diversas plataformas existentes. O GCC é o GNU Compiler Collection eestá nativamente disponível na maioria dos SO Linux.

Na página indicada acima existem instruções para Windows, Mac OS X, Solaris OS eLinux. Se tiver qualquer dúvida em relação a qual ou como instalar o compilador, nãohesite em perguntar.

Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, podesempre utilizar os comentários para colocar a questão. Caso o faça, pedimos queutilize a keyword [DUVIDA] no início do seu comentários.

“Hello World!”

Page 21: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 21 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

O mundo está constantemente a evoluir: desde o mais pequeno inseto à espécieHumana. Evolução, mudança, futuro – são das palavras que mais são ouvidasatualmente.

A tecnologia tem revolucionado o mundo das mais diversas formas. Se quer entrar nomundo da tecnologia e deixar a sua marca, pode começar aqui.

Na semana passada, falámos sobre a instalação de um IDE, sendo que o IDE que foirecomendado foi o Netbeans. A partir de agora, algumas das partes que serão aquivisualizadas terão o Netbeans na sua base, como, por exemplo, a forma de executarum programa.

A utilização de um IDE poderá esconder diversos conceitos aos mais iniciantes porém,nós optámos por seguir esse caminho visto que existem muitos sistemas operativos eteríamos que dar instruções para vários SO ao mesmo tempo.

Visualize este vídeo no YouTube

Como seria o mundo da programação sem o famoso “Hello World”? É uma tradição oprimeiro programa criado por alguém imprimir a mensagem “Hello World” no ecrã.

Antes de escrever qualquer coisa em C, precisa criar um projeto. Para isso, abra oNetbeans e clique File → New Project. No ecrã que se abriu escolha C/C++Application.

De seguida clique em Next. Na nova janela, escolha o nome do projeto – que eu

Page 22: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 22 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

coloquei “HelloWorld” – e onde vai guardar os ficheiros do projeto.

As restantes definições podem ficar como estão. Agora, deve ver uma disposição deficheiros parecida à seguinte:

De momento, deve focar-se na pasta Source Files que é a que contém o código-fonteda aplicação. Abra o ficheiro main.c que foi criado automaticamente e apague o seuconteúdo. Depois, copie e cole o seguinte trecho de código:

12345

#include <stdio.h> int main() { printf("Hello World!\n");

Page 23: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 23 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

67

return 0;}

Este trecho de código irá imprimir, numa janela de linha de comandos, a mensagem“Hello World!”. Vamos então executar este trecho de código. Para isso, tem que clicarno seguinte botão que está localizado na barra superior:

Depois de aguardarmos uns momentos, iremos visualizar a mensagem “Hello World!”numa “caixa” semelhante à seguinte (localizada na parte inferior do Netbeans):

“#include”

A primeira linha do trecho acima não é C mas sim uma indicação para o compilador.Vamos começar do início. C é uma linguagem de alta velocidade, por isso é que éusada em locais que necessitam disso como, por exemplo, o kernel – núcleo – do Linuxe de diversos sistemas operativos como o Windows.

Devido à alta velocidade que pode ser proporcionada por esta linguagem, C não estápreparado, por omissão, para todos os tipos de tarefas. Assim, precisamos de incluí-las para ter disponíveis mais funções.

Para as incluir, utilizamos o comando “#include” que diz ao compilador que precisa deincluir ficheiros ponto H (.h) que são ficheiros do tipo HEADER.

Nesta caso adicionámos o ficheiro “stdio.h” que quer dizer standard input/output, ou

Page 24: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 24 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

seja, sistema padrão de entrada e saída.

Função “main”

Todos os programas C têm que ter, obrigatoriamente, uma função “main” que seráautomaticamente executada. Esta função retorna um dado do tipo “int” (númerointeiro).

De momento não há mais nada a acrescentar sobre funções porém, mais à frente,iremos voltar a falar sobre este tema e o porquê de ser muito importante.

“printf”

Este é um comando/função que está contido no ficheiro stdio.h e, caso não incluamoso ficheiro, será gerado erro. Esta função quer dizer print formatted ou seja “escrita dedados formatados”.

Esta função aceita vários parâmetros ou seja, permite-nos enviar várias coisas que irãoser processadas por ela. De momento, apenas iremos falar do primeiro argumento.

O primeiro argumento é uma string ou seja “conjunto de caracteres”. Este conjunto decaracteres deve ser colocado dentro de aspas.

Neste caso escrevemos “Hello World!\n!” o que quer dizer que será imprimido “HelloWorld!” na janela. E o que faz “\n”? Simples, é um caracter especial que imprime umanova linha. Chama-se new line.

A “\” serve para inserir caracteres especiais. Então… como se insere esta mesmabarra? Basta colocar “\\”. Existem alguns outros caracteres especiais que tambémdevem ser inseridos utilizando esta barra:

Tab → \tCarriage Return (coloca o cursor no início da linha) → \rAlguns sons → \a e \7Por cento → %%

“return”

Como referi acima, a função main irá, neste caso, retornar um número inteiro. É aquique o comando return, que quer dizer retorno, entra. Este retorna o número 0 que é obinário para falso.

Page 25: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 25 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

De momento, ainda não temos muito a acrescentar sobre este comando mas mais àfrente iremos falar de novo sobre ele quando abordarmos funções e procedimentos.

Exercícios

1. Imprima o seu nome no ecrã.2. Imprima a sua idade no ecrã.3. Imprima o seu nome, idade, profissão e morada no ecrã em linhas separadas.

Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, podesempre utilizar os comentários para colocar a questão. Caso o faça, pedimos queutilize a keyword [DUVIDA] no início do seu comentários.

Tipos int, float, double e char.

O mundo está constantemente a evoluir: desde o mais pequeno inseto à espécieHumana. Evolução, mudança, futuro – são das palavras que mais são ouvidasatualmente.

A tecnologia tem revolucionado o mundo das mais diversas formas. Se quer entrar nomundo da tecnologia e deixar a sua marca, pode começar aqui.

Visualize este vídeo no YouTube

Page 26: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 26 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Tipo int

O tipo de dados int é, como já deve saber, referente a números inteiros. Int querdizer integer number, ou seja, números inteiros. C, como é uma linguagem quetrabalha muito com o hardware do computador, permite-nos definir o tamanho decada variável deste (e de outros) tipos.

Primeiramente, como se declara uma variável int em C? É muito simples. No seguinteexemplo pode visualizar como declarar uma variável e, posteriormente, imprimi-la:

123456789

#include <stdio.h> int main() { int a = 20; printf("O número que guardei é %d.", a); //Imprime: O número que guardei é 20. return 0;}

Antes de continuar, deve ter reparado que foi utilizado um %d dentro do primeiroparâmetro. Este caractere é substituído pelo valor da variável a quando é imprimido noecrã.

Função printf e números inteiros:

Utiliza-se %d quando se quer imprimir o valor de uma variável dentro de uma frase. Avariável deve ser colocada nos parâmetros seguintes, por ordem de ocorrência.Exemplo:

123456789101112131415

#include <stdio.h> int main() { int a = 20; int b = 100; printf("O primeiro número é: %d.\n", a); //Imprime: O primeiro número é: 20. printf("O segundo número é: %d.\n", b); //Imprime: O segundo número é: 100. printf("O primeiro e segundo números são %d e %d.\n", a, b); //Imprime: O primeiro e segundo números são 20 e 100. return 0;}

Page 27: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 27 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Este tipo de variáveis ocupa, normalmente, entre 2 a 4 bytes na memória de umcomputador mas, e se quiser utilizar uma variável para um número pequeno? Nãopoderei gastar menos recursos? E se acontecer o contrário e precisar de um númeromaior?

Nestas situações, pode utilizar long e short para controlar os gastos de recursos.Estes modificadores permitem-nos criar variáveis que ocupem um maior ou menornúmero de bytes, respetivamente.

Um número inteiro de…

1 byte armazena de -128 a +1272 bytes armazena de -32 768 a +32 7674 bytes armazena de -2 147 483 648 a +2 147 483 6478 bytes armazena de -9 223 372 036 854 775 808 a +9 223 372 036 854 775807

A utilização destes modificadores é feita da seguinte forma:

1 short int nomeDaVariavel = 20; //Ou "long"

O número de bytes atribuída utilizando um destes modificadores pode depender docomputador onde o código está a ser executado. Para descobrirmos qual o tamanhode bytes que utiliza o seu sistema, basta utilizar a função sizeof da seguinte forma:

123456789

#include <stdio.h> int main(){ printf("int : %d bytes\n", sizeof(int) ); printf("short int: %d bytes\n", sizeof(short) ); printf("long int: %d bytes\n", sizeof(long) ); return 0;}

No computador que estou a utilizar, por exemplo, short refere-se a 2 bytes, long a 8bytes e o tamanho padrão de int é 4 bytes.

Como sabe, os números inteiros podem assumir forma positiva e negativa. Por vezes,na programação, os números negativos podem atrapalhar (ou então ajudar),dependendo do caso.

Page 28: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 28 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Para termos controlo sobre a positividade ou negatividade de um número, podemosatribuir os modificadores signed e unsigned.

Para que uma variável possa conter tanto números positivos como negativos, devemosutilizar o modificador signed. Caso queira que o número seja apenas positivo, incluindo0, utilize unsigned

Tipo float e double

Além dos números inteiros, existem outros tipos de dados que nos permitemarmazenar números que, ao invés de serem inteiros, são decimais.

Existem dois tipos de dados que nos permitem armazenar valores do tipo decimal/real.Estes tipos são float e double. Devem ser utilizados da seguinte forma:

12

float pi = 3.14; double pi = 3.14159265359;

Como pode ter reparado, em C (e na maioria das linguagens de programação), não seutiliza a vírgula, mas sim um ponto para separar a parte inteira da decimal.

A diferença entre float e double é que o segundo ocupa mais memória que o primeirologo, consegue armazenar números de maior dimensão.

Normalmente, o tipo float ocupa 4 bytes de memória RAM enquanto o segundo tipo,double, ocupa 8 bytes de memória. Mais uma vez, relembro que estes valores podemalterar de máquina para máquina.

Para quem precise de fazer cálculos mais precisos, o tipo de dados double é o maisaconselhado pois é o que permite uma maior extensão do valor.

Função printf e números decimais:

Utiliza-se %f quando se quer imprimir o valor de uma variável dos tipos float ou doubledentro de uma frase. A variável deve ser colocada nos parâmetros seguintes, porordem de ocorrência. Exemplo:

123456

#include <stdio.h> int main(){ float piMinor = 3.14; double piMajor = 3.14159265359;

Page 29: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 29 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

7891011

printf("Pi pode ser %f mas, de forma mais exata, é %f.", piMinor, piMajor); //Imprime: Pi pode ser 3.140000 mas, de forma mais exata, é 3.141593. return 0;}

Pode visualizar que, quando se utiliza %f, é utilizado um número específico de casasdecimais. Caso o número de casas decimais seja mais pequeno do que o da variáveloriginal, o número é arredondado.

Pode definir o número de casas decimais que quer que sejam apresentadas daseguinte forma: %.{Número de Casas Decimais}f. Veja o seguinte exemplo, baseado noanterior:

1234567891011

#include <stdio.h> int main(){ float piMinor = 3.14; double piMajor = 3.14159265359; printf("Pi pode ser %.2f mas, de forma mais exata, é %.11f.", piMinor, piMajor); //Imprime: Pi pode ser 3.14 mas, de forma mais exata, é 3.14159265359. return 0;}

Notação Científica

Certamente conhece notação científica, ou seja, números no formato NUM1 X10^NUM2 (NUM vezes dez elevado a NUM2). Podemos utilizar notação científica nasvariáveis do tipo float e double. Veja o seguinte exemplo:

123456789101112

#include <stdio.h> int main(){ float num = 24E-5; //24 x 10 elevado a -5 printf("%f\n", num); //Imprime: 0.000240 num = 2.45E5; //2.45 x 10^5 printf("%.0f", num); //Imprime: 245000 return 0;}

Tipo char

Page 30: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 30 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Há algumas semanas atrás, falámos do tipo string: um tipo de dados que nos permitearmazenar sequências de caracteres, ou seja, de forma geral, frases.

Por agora, ainda não abordaremos este tipo, mas sim char. Este é um tipo de dadosque nos permite armazenar um único caractere. É declarado da seguinte forma:

Como pode visualizar, a variável “letra” agora contém o caractere “P”. Pode, ao invésde utilizar este tipo de notação, utilizar números hexadecimais, octais e decimais.Clique aqui para descarregar uma tabela ASCII em pdf com os códigos que podeutilizar em C.

Função printf e caracteres:

Utiliza-se %c quando se quer imprimir o valor de uma variável dos tipos char dentro deuma frase. A variável deve ser colocada nos parâmetros seguintes, por ordem deocorrência. Exemplo:

123456789

#include <stdio.h> int main(){ char letra = 'P'; printf("O nome Pplware começa por %c.", letra); return 0;}

Exercícios

Imprima o nome “Pplware” recorrendo a variáveis do tipo “char”.Imprima a sua idade numa frase do tipo “A minha idade é X.” recorrendo àsfuncionalidades da função printf.Imprima o número 125.2485215487514 com apenas duas casas decimais.Descubra o tamanho dos tipos signed, unsigned, int, short e long que sãoutilizados no seu computador.Descubra o tamanho do tipo char recorrendo à função sizeof.

Na próxima semana, as coisas vão começar a tornar-se mais interessantes.Começaremos a pedir dados ao utilizador e a criar condições.

Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, podesempre utilizar os comentários para colocar a questão. Caso o faça, pedimos que

Page 31: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 31 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

utilize a keyword [DUVIDA] no início do seu comentários.

Operadores e loops “if else”

O mundo está constantemente a evoluir: desde o mais pequeno inseto à espécieHumana. Evolução, mudança, futuro – são das palavras que mais são ouvidasatualmente.

A tecnologia tem revolucionado o mundo das mais diversas formas. Se quer entrar nomundo da tecnologia e deixar a sua marca, pode começar aqui.

Visualize este vídeo no YouTube

Operadores

Operadores são símbolos para efetuar determinadas ações. Na programação existemdiversos tipos de operadores. Operadores estes que também existem noutras áreas doconhecimento como matemática, por exemplo.

Page 32: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 32 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Serão abordados 3 tipos de operadores: aritméticos, de atribuição e relacionais. Oprimeiro grupo de operadores serve, obviamente, para efetuar operaçõesmatemáticas. São utilizados os seguintes símbolos:

Operadores AritméticosNome Símbolo ExemploSoma + 5 + 4 = 9Subtração – 154 – 10 = 144Multiplicação * 5,55 * 10 = 55,5Divisão / 40 / 2 = 20Resto de uma divisão % 1500 % 11 = 4

Os operadores de atribuição, tal como o próprio nome indica, servem para atribuir auma variável, determinado valor. Existem vários operadores de atribuição e, muitosdeles, funcionam como abreviatura para operações aritméticas.

Relembro que os operadores que aqui estão representados existem em muitas outraslinguagens e que existem alguns outros dependendo da linguagem de programação.

Operadores de AtribuiçãoSímbolo Exemplo*= var = 20 → 20+= var += 5 (igual a var = var + 5) → 25-= var -= 10 → 15*= var *= 4 → 60/= var /= 5 → 12%= var %= 5 → 2

* Os exemplos aqui apresentados estão todos encadeados. O valor de var no segundoexemplo é atribuído no primeiro exemplo e assim consequentemente. Os valores anegritos precedidos por uma seta (→) correspondem ao valor com que a variável ficou.

Os operadores que agora vamos abordar, serão extremamente úteis para a matériaseguinte (Loops) pois permitem-nos efetuar comparações entre variáveis numéricas.Ora veja:

Operadores RelacionaisNome Símbolo Exemplo

Igualdade == x == y → retorna TRUE se x for igual a y e FALSE se tiveremvalores diferentes

Page 33: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 33 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Diferente != x != y → retorna TRUE se x for diferente de y ou FALSE se x forigual a y

Maior > x > 40Maior ouIgual >= y >= 25

Menor < y < 20Menor ouIgual <= x <= y

Loops “if else”

Os loops “if else” permitem executar determinados trechos de código dependendo doresultado de um teste lógico/condicional. A palavra if quer dizer “se” e else quer dizer,neste caso, “ou”. A sintaxe deste loop é a seguinte:

12345

if (condição) { //Se a condição retornar TRUE então este código é executado.} else { //Caso contrário, isto é executado.}

Comentários

No código acima pode verificar que utilizámos duas barras (//) e depois escrevemosalgo. Isto chamam-se comentários e são simplesmente ignorados pelo compilador.

Existem dois tipos de comentários: comentários de uma linha e comentários de váriaslinhas. Veja o seguinte exemplo:

12345678910

#include <stdio.h> int main(){ int n = 1; //Até ao final da linha é um comentário. /* TUDO ISTO é um comentário */}

Imagine que tem uma variável que contém um número qualquer e quer que o seucódigo imprima se a variável é maior ou igual a 50 ou menor que 50. Como vaiproceder?

Page 34: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 34 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Para criar este algoritmos precisamos de inicializar uma variável, efetuar um testecondicional (utilizando um operador relacional) e depois executar o código emquestão. Veja:

1234567891011121314

#include <stdio.h> int main(){ int n = 25; if (n >= 50) { printf("O valor %d é maior ou igual a 50.", n); } else { printf("O valor %d é menor que 50.", n); } return 0;}

Este trecho de código imprime uma mensagem a dizer que 25 é menor que 50. Comopode ver, isto apenas nos diz se a variável é menor que 50 ou então maior ou igual.

Mas, e seu quiser que as seguintes condições sejam testadas:

Se for maior que 50 imprime X.Se for igual a 50 imprime Y.Se for menor que 50 imprime Z.

Podíamos efetuar este teste condicional da seguinte forma:

7891011121314151617

if (n > 50) { printf("O valor %d é maior que 50.\n", n);} if (n < 50) { printf("O valor %d é menor que 50.\n", n);} if (n == 50) { printf("A variável é igual a 50.\n");}

Isto tornaria o código um pouco repetitivo. Podemos utilizar o comando else if quequer dizer “ou se” da seguinte forma:

7 if (n == 50) {

Page 35: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 35 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

8910111213

printf("A variável é igual a 50.\n");} else if (n < 50) { printf("O valor %d é menor que 50.\n", n);} else { printf("O valor %d é maior que 50.\n", n);}

Como gerar um número aleatório

Nos exercícios seguintes, irá precisar de gerar um número aleatório. Para o fazer, iránecessitar de incluir mais um ficheiro .h que se chama time.h.

Pode utilizar a função para gerar números aleatórios da seguinte forma:

12345678910111213

#include <stdio.h>#include <time.h>#include <stdlib.h> int main(){ //Inicializar a seed para o número aleatório srand (time(NULL)); //Atribuir o número aleatório (entre 1 e 10) a uma variável int n = (rand() % 10) + 1; return 0;}

Mais tarde falaremos melhor sobre esta função. Deverá incluir a biblioteca “stdlib” queé uma biblioteca de propósito geral que contém um leque de funções muito utilizadas,incluindo a rand e a srand.

Exercícios

1 – Crie três variáveis. Duas com números à sua escolha e uma terceira com a somadas outras duas. De seguida, imprima o valor das duas.

2 – Crie uma variável do tipo número inteiro que contenha um valor entre 1 e 100. Deseguida, duplique o seu valor.

Depois, verifique se o seu valor é igual a 100 e, caso seja, imprima uma mensagem decongratulação.

Caso o valor seja mais pequeno que 100, imprima o valor e que este é menor que 100.Faça o mesmo caso o número seja maior que 100 alterando a mensagem paracorresponder.

Page 36: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 36 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

3 – Crie um programa que resolva uma equação de 2º grau completa de 3 númerosaleatórios lembrando que a fórmula para resolver equações de 2º grau completas é aseguinte:

Na próxima semana iremos falar de como interagir com o utilizador. Será, talvez, umdos pontos mais emocionantes até hoje.

Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, podesempre utilizar os comentários para colocar a questão. Caso o faça, pedimos queutilize a keyword [DUVIDA] no início do seu comentários.

Receber números e letras do utilizador

O mundo está constantemente a evoluir: desde o mais pequeno inseto à espécieHumana. Evolução, mudança, futuro – são das palavras que mais são ouvidasatualmente.

A tecnologia tem revolucionado o mundo das mais diversas formas. Se quer entrar nomundo da tecnologia e deixar a sua marca, pode começar aqui.

Page 37: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 37 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Visualize este vídeo no YouTube

Interação com o utilizador

Numa aplicação, a interação com os utilizadores é algo extremamente fundamental. Se não houver interação com o utilizador, a aplicação é, na maioria das vezes, algoinútil.

Na sequência disto, irá aprender a receber dados do utilizador utilizando duasfunções: scanf e getchar. Todas diferentes mas, ao mesmo tempo, todas úteis.

scanf

A função “scanf” permite-nos obter diversos tipos de dados do utilizador: númerosinteiros, decimais e também caracteres. Exemplo:

12345678910111213

#include <stdio.h> int main(){ int idade; printf("Digite a sua idade: "); scanf("%d", &idade); printf("A sua idade é %d", idade); return 0;}

Como pode ver na oitava linha, o primeiro argumento da função “scanf” contém o tipode variável que vai ser inserido (tal como na função “printf”).

Os argumentos seguintes serão o nome das variáveis, precedidos por um “&”, a que osvalores vão ser atribuídos. Pode ler a linha 8 da seguinte forma: “atribuir um númerointeiro a idade”.

Quando se executa o código acima, irá aparecer a mensagem “Digite a sua idade: ” e ocursor irá posicionar-se logo após essa frase aguardando que um valor seja inserido.Depois de inserir o valor e pressionar ENTER, será imprimida uma mensagem com aidade que inseriu.

Relembrando, pode utilizar as seguintes expressões para definir o tipo de dados a serintroduzido:

Page 38: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 38 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

%d → Números inteiros (int)%f → Números decimais (float e double)%c → Caracteres (char)

Pedir mais do que um item

Podemos pedir mais do que um valor/caractere da seguinte forma:

12345678910111213

#include <stdio.h> int main(){ int num1, num2; printf("Digite dois números: "); scanf("%d %d", &num1, &num2); printf("Os números que digitou são %d e %d.", num1, num2); return 0;}

Ou seja, depois de aparecer a mensagem “Digite dois números:”, terá que inserir doisnúmeros e pode identificar a sua separação com um espaço, enter ou tab.

Como pode ver, é muito simples utilizar a função scanf. Apesar de apenas termosutilizado números inteiros, pode utilizar números decimais ou caracteres com estafunção.

getchar

Existe outra forma, mais simples, de pedir caracteres ao utilizador: a função “getchar”.Compare os seguintes dois exemplos (primeiro com scanf e segundo com getchar):

123456789101112

#include <stdio.h> int main(){ char letra; printf("Insira a primeira letra do seu nome: "); scanf("%c", &letra); printf("A primeira letra do seu nome é %c.", letra); return 0;}

Page 39: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 39 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

123456789101112

#include <stdio.h> int main(){ char letra; printf("Insira a primeira letra do seu nome: "); letra = getchar(); printf("A primeira letra do seu nome é %c.", letra); return 0;}

Como pode verificar, a utilização da função “getchar” é bastante simples e permite-nos receber, mais facilmente, caracteres do utilizador.

Buffer e a sua limpeza

12345678910111213141516

#include <stdio.h> int main(){ char letra1, letra2; printf("Insira a primeira letra do seu nome: "); scanf("%c",&letra1); printf("E agora a última: "); scanf("%c",&letra2); printf("O seu nome começa com \"%c\" e termina com \"%c\".", letra1, letra2); return 0;}

Olhando para o código acima, irá pensar que coloco duas letras como “H” e “E” e que,no final é imprimido «O seu nome começa com “H” e termina com “E”.» mas não. Nãoé isso que acontece. Experimente correr o código.

Como deve ter verificado, logo após digitar a primeira letra, o programa terminandodeixando o espaço para a segunda letra em branco.

O que aconteceu aqui? Quando nós clicamos no ENTER para submeter a primeiraletra, além dessa letra, o ENTER (“\n”) é submetido para a memória e quando apareceum novo pedido para inserir um caractere, o “\n” é automaticamente assumido comoesse novo caractere.

Page 40: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 40 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Para que isto não aconteça, basta limpar o buffer antes de utilizar novamente afunção. No Windows utilizamos a função “fflush(stdin)” e no Linux “__fpurge(stdin)” deforma a limpar o buffer do stdin (teclado).

Então, ficaria assim:

12345678910111213141516171819

#include <stdio.h> int main(){ char letra1, letra2; printf("Insira a primeira letra do seu nome: "); scanf("%c",&letra1); fflush(stdin); __fpurge(stdin); printf("E agora a última: "); scanf("%c",&letra2); printf("O seu nome começa com \"%c\" e termina com \"%c\".", letra1, letra2); return 0;}

Exercícios

1 – Crie um programa que gere um número aleatório entre 1 e 10; de seguida peça-lheum número e, se acertar no número gerado recebe uma mensagem a dizer queganhou. Caso contrário, recebe uma mensagem a dizer que perdeu.

2 – Crie um programa, baseando-se no da aula anterior, que peça os três números deuma equação de 2º grau e a resolva. Caso esta seja impossível, o utilizador deverá seralertado.

3 – Crie um programa que, primeiro, peça dois números do tipo float e, de seguida,imprima as seguintes instruções:

Que operação deseja efetuar:

A - Soma

B - Subtração

C - Divisão

D - Multiplicação

De seguida deverá pedir a opção ao utilizador e mostrar o resultado consoante a

Page 41: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 41 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

escolha. O resultado deverá ter 3 casas decimais.

Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, podesempre utilizar os comentários para colocar a questão. Caso o faça, pedimos queutilize a keyword [DUVIDA] no início do seu comentários.

Operadores de incremento/decremento/lógicos e Loops while

O mundo está constantemente a evoluir: desde o mais pequeno inseto à espécieHumana. Evolução, mudança, futuro – são das palavras que mais são ouvidasatualmente.

A tecnologia tem revolucionado o mundo das mais diversas formas. Se quer entrar nomundo da tecnologia e deixar a sua marca, pode começar aqui.

Infelizmente, esta semana não temos um vídeo por motivos “temporais” porém,prometemos que na próxima semana voltará a haver vídeo.

Operadores Lógicos

Os operadores lógicos são, normalmente, utilizados em testes lógicos quando

Page 42: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 42 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

queremos incluir mais do que uma condição para que algo aconteça. Existem trêsoperadores lógicos que vamos abordar agora: “&&”, “||” e “!”.

Operador “&&”

Na programação, o operador “&&” funciona como um “e” na nossa língua: paraadicionar algo, neste caso, uma condição. Veja alguns exemplos:

12345678910111213

#include <stdio.h> int main(){ int num1; num1 = 4; if (num1 > 0 && num1 <= 10) { printf("O número %d está entre 1 e 10.", num1); } return 0;}

O que está expresso na condição acima é: se “num1” for maior que 0 e menor ou iguala 10 então executa o código que está ali dentro.

Este comando pode ser utilizado mais do que uma vez dentro de um teste condicionalpois podemos colocar duas ou mais condições utilizando este operador. Bastaadicionar “&&”.

Operador “||”

O operador “||” refere-se a “ou”, ou seja, utilizando este operador podemos executaruma condição do seguinte tipo: executa isto se x acontecer ou se y acontecer.Exemplo:

123456789101112

#include <stdio.h> int main(){ int num1; num1 = 3; if (num1 == 3 || num1 == 5) { printf("O número é 3 ou 5.\n"); } return 0;

Page 43: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 43 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

13 }

Como pode visualizar, o teste condicional acima verifica se a variável “num1” é 3 oucinco e só depois executa o código condicionado ou não.

Operador “!”

Podemos traduzir o operador “!” para “o contrário de”. Quando utilizado numacondição, por exemplo, este nega tudo o que lá está. Exemplo:

12345678910111213

#include <stdio.h> int main(){ int num1; num1 = 0; if (!num1) { printf("O valor de num1 corresponde a falso.\n"); } return 0;}

Relembrando que 0 é considerado falso e qualquer número maior é consideradoverdadeiro, o código que está dentro do teste condicional acima só é executado senum1 não for verdadeiro.

Operadores de Incremento e Decremento

Os operadores de incremento e decremento são dois operadores que vão serextremamente úteis na vida de qualquer programador.

Imagine que necessita de contar um número infinito de números independentementese é no sentido crescente ou decrescente. Vai fazê-lo um a um? Não, não énecessário.

123456789

#include <stdio.h> int main(){ int num; num = 1; printf("O número é %d\n", num);

Page 44: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 44 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

1011121314151617

num = num + 1; printf("O número é %d\n", num); num = num + 1; printf("O número é %d\n", num); return 0;}

O código acima imprime a frase “O número é” e o número que está atribuído a “num”nesse momento. Começando em 1 e chegando a 3 no final do algoritmo.

Existe outra forma de adicionar e remover uma unidade a uma variável: “++” e “–“.Veja como ficaria o código anterior utilizando essa sintaxe:

1234567891011121314151617

#include <stdio.h> int main(){ int num; num = 1; printf("O número é %d\n", num); num++; printf("O número é %d\n", num); num++; printf("O número é %d\n", num); return 0;}

Isso irá imprimir o mesmo que o código mostrado anteriormente. Para remover umaunidade basta fazer do seguinte modo:

1234567891011121314

#include <stdio.h> int main(){ int num; num = 1; printf("O número é %d\n", num); num--; printf("O número é %d\n", num); return 0;}

Page 45: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 45 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Estes operadores podem ser utilizados antes ou depois de uma variável: “num++” ou“++num”. Quando estes operadores são utilizados isoladamente, nenhuma diferençaexiste porém, quando estamos a efetuar uma atribuição, existe uma diferença. Analiseo seguinte exemplo:

1234567891011121314

#include <stdio.h> int main(){ int a, b, c; a = 0; b = a++; c = ++a; printf("A: %d, B: %d, C: %d", a, b, c); return 0;}

Primeiramente, declaramos três variáveis: “a”, “b” e “c”. De seguida, atribuímos o valor0 à variável “a”. Quando atribuímos “a++” à variável “b”, o que vai acontecer?

A variável “b” vai assumir o valor 0 e um valor é incrementado a “a” ficando esta com ovalor 1, ou seja, “b = a++” é um atalho para o seguinte:

De seguida, quando atribuímos “++a” à variável “c”, estamos a incrementar primeiro avariável “a” e só depois é que o valor de esta é atribuído a “c”, ou seja, é um atalhopara o seguinte:

Como pode visualizar, estes operadores podem ser muito úteis em diversas situações.Mesmo que agora não esteja a visualizar estas situações, não se preocupe: irá vermuitas!

Controlo de fluxo com while

Já foi abordado o controlo de fluxo utilizando if else. Agora é a vez de um novo “tipo”de controlo de fluxo, o while ou, em português, “enquanto”. A sintaxe do while é aseguinte:

123

while(condição) { //Algo acontece}

Page 46: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 46 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Veja então o seguinte exemplo da utilização deste tipo de controlo de fluxo queimprime os números de zero a dez:

1234567891011121314

#include <stdio.h> int main(){ int num; num = 0; while(num <= 10) { printf("%d\n", num); num++; } return 0;}

Sem utilizar este controlo de fluxo, teríamos que escrever muito mais código de formaa conseguir imprimir os números de um a dez através de uma variável.

Exercícios

1 – Imprima os números pares de 0 a 100 utilizando um loop while.

2 – Imprima todos os números entre -100 e 100 que sejam divisíveis por 5 e 3.

3 – Gere um número inteiro aleatório entre 1 e 10. De seguida, peça ao utilizador queinsira um número entre o intervalo anteriormente indicado.

Caso o número que o utilizador insira esteja fora do intervalo, deverá alertar outilizador para esse problema. Caso o número esteja no intervalo e seja igual aogerado, deverá mostrar uma mensagem de parabéns.

Caso não seja igual ao número gerado, deverá dizer ao utilizador a seguintemensagem dependendo da amplitude (diferença entre o número inserido e o númeroindicado):

Extremamente Perto. (Amplitude 1)Perto. (Amplitude 2/3)Podia estar mais perto. (Amplitude 4/5)Hmmm… Um pouco longe. (Amplitude 6/7)Muito longe. (Amplitude 8/9)

Page 47: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 47 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

De seguida, o programa deverá continuar a pedir um número ao utilizador e verificartodas estas condições até o utilizador acertar no número.

Observação: para obter um valor absoluto utilize a função “abs” do ficheiro “stdlib.h”.

Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, podesempre utilizar os comentários para colocar a questão. Caso o faça, pedimos queutilize a keyword [DUVIDA] no início do seu comentários.

Interrupção do fluxo e teste lógico switch

O mundo está constantemente a evoluir: desde o mais pequeno inseto à espécieHumana. Evolução, mudança, futuro – são das palavras que mais são ouvidasatualmente.

A tecnologia tem revolucionado o mundo das mais diversas formas. Se quer entrar nomundo da tecnologia e deixar a sua marca, pode começar aqui.

Visualize este vídeo no YouTube

Interrupção do Fluxo

Os fluxos são algo (quase) indispensável em programas minimamente complexos que,por vezes, precisamos ter um maior controle sobre os mesmos. Já conhecemos

Page 48: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 48 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

o loop while que nos permite repetir um determinado trecho de código enquanto umacondição for verdadeira.

Mas e se necessitarmos de interromper a continuidade de um fluxo por algum motivo?Se por exemplo, efetuarmos um teste lógico if para saber se é necessário efetuar algomais dentro de um loop while. Se sim, realiza, mas caso contrário, deverá passar paraa próxima iteração (repetição).

break

O primeiro comando que nos permite ter um maior controle sobre os fluxos derepetição é o comando break permite que terminemos o loop atual sem quaisquerproblemas.

Exemplo

Precisamos de encontrar o primeiro número divisível por 17, 18 e 20 entre 0 e1000000. Para o fazermos, bastaria utilizar o seguinte código:

12345678910111213141516171819202122

#include <stdio.h> int main(){ int count, num; count = 1; num = 0; while(count <= 1000000) { if(num== 0) { if((count%17==0) && (count%18==0) && (count%20==0)) { num=count; } } count++; } printf("O número divisível por 17, 18 e 20 entre 1 e 1000000 é: %d", num); return 0;}

Este trecho de código, depois de encontrar o número, que é 3060, continuaria aefetuar testes lógicos até o contador chegar a 1000000. Mas, se já encontrou onúmero, qual a necessidade de gastar tempo e poder de processamento? Bastariaadicionar um break para colmatar esta situação da seguinte forma:

Page 49: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 49 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

1234567891011121314151617181920212223

#include <stdio.h> int main(){ int count, num; count = 1; num = 0; while(count <= 1000000) { if(num== 0) { if((count%17==0) && (count%18==0) && (count%20==0)) { num=count; break; } } count++; } printf("O número divisível por 17, 18 e 20 entre 1 e 1000000 é: %d", num); return 0;}

continue

O comando continue é o segundo comando deste género que interrompe a iteraçãoatual passando logo para a seguinte iteração.

Exemplo

Precisamos de somar todos os números entre 0 e 1000 que não são múltiplos de 2nem de 3. Para isso utilizamos o seguinte código:

1234567891011121314151617

#include <stdio.h> int main(){ int count, sum; count = 1; sum = 0; while(count <= 1000) { if(count%2 == 0 || count%3 == 0) { count++; continue; }

Page 50: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 50 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

18192021222324

sum += count; //sum = sum + count count++; } printf("Soma %d", sum); return 0;}

O que este código faz é percorrer os números de 1 a 1000 e, se for divisível por 2 oupor 3, passa para a próxima iteração (adicionando um valor ao número atual). Caso acondição não se verifique, o número é acrescentado à soma, adicionado um número acount passando assim para a próxima iteração.

Teste lógico switch

O teste condicional switch é extremamente útil quando precisamos de, por exemplo,efetuar um comando dependendo da opção, entre 0 e 10, que o utilizador escolheu.

Claro que poderíamos utilizar os if porém o código ficaria deveras extenso e um poucocomplicado de ler. Veja o seguinte código com um switch:

1234567891011121314151617181920212223242526272829

#include <stdio.h> int main(){ int option; printf("Insira a opção:\n"); scanf("%d", &option); switch(option) { case 1: printf("Escolheu a opção 1"); break; case 2: printf("Escolheu a opção 2"); break; case 3: printf("Escolheu a opção 3"); break; case 4: printf("Escolheu a opção 4"); break; case 5: printf("Escolheu a opção 5"); break; default: printf("Opção inexistente."); break; }

Page 51: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 51 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

303132

return 0;}

Como pode visualizar, o código executado para cada opção pode ser diferente. Caso oinserido não corresponda a nenhuma das opções, o que está em default é executado.Veja o código anterior com if else:

12345678910111213141516171819202122232425

#include <stdio.h> int main(){ int option; printf("Insira a opção:\n"); scanf("%d", &option); if (option == 1) { printf("Escolheu a opção 1"); } else if (option == 2) { printf("Escolheu a opção 2"); } else if (option == 3) { printf("Escolheu a opção 3"); } else if (option == 4) { printf("Escolheu a opção 4"); } else if (option == 5) { printf("Escolheu a opção 5"); } else { printf("Opção inexistente."); } return 0;}

Comparando as duas, é possível verificar que utilizando o switch o código fica maislegível e fácil de ser editado.

Deve ter reparado ainda que no final de cada instrução do switch utilizámos um break.Isto acontece porque, caso não o utilizemos, o programa continuaria a correr oscomandos seguintes que existem no switch.

Exercícios

1 – Crie uma calculadora que possibilite fazer adições, subtrações, divisões emultiplicações a mais do que dois números. Utilize um switch e um loop while.

2 – Crie um programa que imprima os três primeiros números divisíveis por 5 e,simultâneamente por 10, entre 100 e 1000 minimizando o processamento recorrendo à

Page 52: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 52 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

interrupção do fluxo.

Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, podesempre utilizar os comentários para colocar a questão. Caso o faça, pedimos queutilize a keyword [DUVIDA] no início do seu comentários.

Testes Lógicos de Repetição do while e for

O mundo está constantemente a evoluir: desde o mais pequeno inseto à espécieHumana. Dentro das palavras que mais ouvimos atualmente, incluímos “evolução”,“mudança”, “futuro”.

A tecnologia tem revolucionado o mundo das mais diversas formas: do mais simplesaparelho para medir o tempo ao mais complexo acelerador de partículas. Se querentrar no mundo da tecnologia e deixar a sua marca, pode começar aqui.

Visualize este vídeo no YouTube

Teste Lógico do while

Os testes lógicos de repetição são, como já deve saber, extremamente úteis eminúmeras situações pois permitem-nos reutilizar código. Recentemente abordámos oteste lógico de repetição while e hoje iremos abordar um outro semelhante: o do while.

Page 53: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 53 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

A sua sintaxe é a seguinte:

1234

do{ //código a ser repetido} while (condição);

Ao contrário do que acontece com o teste lógico while, no do while, o código éexecutado primeiro e só de seguida é que se confirma a veracidade da condição. Se acondição for verdadeira, então o código é executado mais uma vez, caso não o seja, jánão será executado.

Este facto faz com que o que código contido dentro do teste lógico sejaexecutado pelo menos uma vez. Veja então o seguinte exemplo de uma simplescalculadora com o código documentado.

12345678910111213141516171819202122232425262728293031323334

#include <stdio.h> int main(){ /* * Variável que irá determinar se executamos * o código da calculadora de novo ou não. */ int calcular; do { char operacao; float num1, num2; //Limpeza do buffer fflush(stdin); __fpurge(stdin); printf("Escolha a operação [+ - * / ]: "); scanf("%c",&operacao); printf("Insira o primeiro número: "); scanf("%f",&num1); printf("Insira o segundo número: "); scanf("%f",&num2); switch( operacao ) { case '+': printf("%.2f + %.2f = %.2f\n", num1, num2, num1 + num2); break;

Page 54: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 54 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

353637383940414243444546474849505152535455565758596061626364656667

case '-': printf("%.2f - %.2f = %.2f\n", num1, num2, num1 - num2); break; case '*': printf("%.2f * %.2f = %.2f\n", num1, num2, num1 * num2); break; case '/': printf("%.2f / %.2f = %.2f\n", num1, num2, num1 / num2); break; default: printf("Você digitou uma operação invalida.\n"); break; } printf("Insira 0 para sair ou 1 \n"); scanf("%d", &calcular); } while (calcular); /* * Se "calcular" for diferente de 0 (falso), o código * da calculadora será executado novamente. * * Para terminar o código basta então digitar 0 quando * for pedido. */ return 0; }

Teste Lógico for

Outro teste lógico de repetição que é muito importante é o for e é muito útil quando,por exemplo, precisamos de inicializar uma variável a que deve ser incrementado umnúmero. Veja a sintaxe:

1234

for(inicio_do_loop ; condição ; termino_de_cada_iteração){ //código a ser executado}

Vamos agora ver um pequeno exemplo comparando a sintaxe com um teste lógicowhile. O código seguinte utiliza o último loop mencionado para imprimir os números de0 a 100:

1 #include <stdio.h>

Page 55: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 55 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

234567891011121314

int main(){ int num; num = 0; while (num <= 100) { printf("%d\n", num); num++; } return 0;}

Abaixo pode encontrar o seu equivalente com o teste de repetição for:

123456789101112

#include <stdio.h> int main(){ int num; for(num = 0; num <=100; num++) { printf("%d\n", num); } return 0;}

Apesar de parecer apenas uma pequena redução de duas linhas, com códigos maiscomplexos poderão ser poupadas mais linhas e este loop também melhora alegibilidade do código.

Ressalto também que os interruptores de fluxo break e continue funcionam com esteteste lógico de repetição.

Exercícios

1 – Crie um pequeno menu de opções com, no mínimo, cinco opções à sua escolhasendo uma delas para terminar o programa e as restantes para efetuar qualquer coisaque deseje. O menu deverá continuar a aparecer até o utilizador pedir para fechar.

2 – Recorrendo ao teste lógico for, imprima todos os números divisíveis por 4, 10 e 25entre 1 e 1000.

Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, pode

Page 56: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 56 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

sempre utilizar os comentários para colocar a questão. Caso o faça, pedimos queutilize a keyword [DUVIDA] no início do seu comentários.

Funções e Procedimentos

O mundo está constantemente a evoluir: desde o mais pequeno inseto à espécieHumana. Dentro das palavras que mais ouvimos atualmente, incluímos “evolução”,“mudança”, “futuro”.

A tecnologia tem revolucionado o mundo das mais diversas formas: do mais simplesaparelho para medir o tempo ao mais complexo acelerador de partículas. Se querentrar no mundo da tecnologia e deixar a sua marca, pode começar aqui.

Visualize este vídeo no YouTube

Pedimos desculpa pela gafe no vídeo onde é referido que 6 + 4 é igual a 11.

Page 57: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 57 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Funções

Uma função é um bloco de código que, tal como o próprio nome indica, tem umafunção própria, ou seja, que serve para aquela finalidade. As funções permitem-nos,por exemplo, reutilizar código.

Ao invés de colocarmos um determinado trecho de código diversas vezes, bastacriarmos uma função com esse código e, de cada vez que for necessário, precisamosapenas de invocar a função.

Durante os seus anos de programador, irá criar milhares de funções para as maisdiversas funções. Então, recomendamos que vá guardando as funções que utilizaporque, futuramente, poderá necessitar delas.

Existe uma função que tem vindo a ser sempre utilizada: a função main. É a funçãoprincipal do programa, aquela que é executada automaticamente quando um programaé executado. A sintaxe das funções é a seguinte:

123

tipo_dado_retorno nome_da_funcao(parametros) { //Codigo da Funcao}

Vejamos então o exemplo de uma função simples que nos permite mostrar amensagem “Olá Mundo!”:

12345678910

#include <stdio.h> int main() { sayHello(); return 0;} void sayHello() { printf("Olá Mundo!\n");}

A função chama-se “sayHello” e não retorna nenhuns dados (“void”). O que estádentro das chavetas (“{}”) é o código que é executado quando a função é chamada.

Argumentos e Parâmetros

No exemplo acima é possível visualizar que tanto na invocação da função, como na suaescrita foi colocado um par de parênteses sem nada. Isto acontece porque não

Page 58: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 58 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

existem parâmetros.

Vamos criar uma função que efetua uma soma: como enviamos os valores para afunção? Definindo o nome e o tipo de parâmetros a serem recebidos. Veja o seguinteexemplo.

123

void soma(int n1, int n2) { int soma = n1 + n2;}

A função acima, denominada “soma”, tem dois parâmetros, o “n1” e o “n2”, ambos dotipo inteiro. Os valores que a eles irão ser atribuídos chamam-se argumentos.

Para utilizar a função, basta então proceder do seguinte modo:

Substituindo os números 4 e 6 por quaisquer números que desejar e a função iráarmazenar, na variável “soma” que apenas está disponível dentro da função, o valor dasoma entre os dois números.

Retorno

Na função anterior somámos dois números mas nada mais aconteceu. E se quisermos,por exemplo, que a função retorne o valor da soma?

Para isso teremos que substituir o “void” pelo tipo de dados que, neste caso é “int” eutilizar o comando “return”. Ficaria algo semelhante ao seguinte:

1234

int soma(int n1, int n2) { int soma = n1 + n2; return soma;}

Ou seja, enviamos dois números para a função; esta cria a variável “soma” com a somados dois números e de seguida retorna esta variável que é do tipo “int”. Podemossimplificar esta função ficando apenas com o seguinte:

123

int soma(int n1, int n2) { return n1 + n2;}

Podemos, por exemplo, utilizar esta função no seguinte contexto:

Page 59: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 59 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

123456789101112131415161718

#include <stdio.h> int main() { int a, b; printf("Insira o primeiro número: "); scanf("%d", &a); printf("Insira o segundo número: "); scanf("%d", &b); printf("A soma é %d", soma(a,b)); return 0;} int soma(int n1, int n2) { return n1 + n2;}

Procedimentos

Procedimentos são também blocos de código que contêm uma função específica. Adiferença entre funções e procedimentos é que os segundos não retornam quaisquervalores.

Exercícios

Nesta semana trazemos uma dose maior de exercícios em relação às semanasanteriores. Os exercícios das semanas anteriores podem ser reaproveitados!

1 – Crie uma função denominada “receberNumero” que recolha um número do tipo“float” e o retorne e outra chamada “receberInt” para receber um número inteiro.

2 – Crie funções que peçam, calculem e mostrem os valores das seguintesfórmulas/operações:

Perímetro

QuadradoRetânguloTriânguloCírculo

Área

Quadrado

Page 60: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 60 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

RetânguloTriânguloLosangoCírculoTrapézioElipse

Volume

CuboParalelepípedoCilindroEsferaPirâmide Quadrangular/RetângularCone

E também para resolver equações de segundo grau completas e imprimindo os seusresultados, relembrando que a fórmula é a seguinte e que, quando o resultado do queestá dentro da raiz é negativo não se deve prosseguir (números imaginários não).

3 – Crie três funções para dizer os valores das áreas, perímetros e volumes finais.Deve ser chamada no final de cada uma das funções anteriores (excepto a da fórmularesolvente/equação de segundo grau).

4 – Articule tudo o que fez anteriormente através de menus.

Deixamos aqui a resolução deste exercício mas, primeiro tente, só depois de muitastentativas é que deve ver a resolução.

Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, podesempre utilizar os comentários para colocar a questão. Caso o faça, pedimos queutilize a keyword [DUVIDA] no início do seu comentários.

Arrays Unidimensionais e Multidimensionais

O mundo está constantemente a evoluir: desde o mais pequeno inseto à espécieHumana. Dentro das palavras que mais ouvimos atualmente, incluímos “evolução”,

Page 61: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 61 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

“mudança”, “futuro”.

A tecnologia tem revolucionado o mundo das mais diversas formas: do mais simplesaparelho para medir o tempo ao mais complexo acelerador de partículas. Se querentrar no mundo da tecnologia e deixar a sua marca, pode começar aqui.

Infelizmente, o artigo desta semana não é acompanhado por vídeo porém esperemosque apreciem o restante conteúdo.

Arrays

Até agora apenas falámos de variáveis escalares, ou seja, variáveis com valoresindividuais. Vamos então falar de uma nova estrutura de dados: as arrays.

Arrays, também conhecidas por “tabelas” ou “vetores”, são estruturas de dados que,ao contrário de variáveis escalares, nos permitem armazenar mais do que um valor.

Estas são como matrizes (ou tabelas) de dados em que cada dado está localizadonuma determinada posição que pode ser acedida através de “coordenadas”. Existemdois tipos: as unidimensionais e as multidimensionais.

Arrays Unidimensionais

Arrays unidimensionais podem ser comparadas a tabelas com uma única coluna e

Page 62: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 62 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

várias linhas. São o tipo mais simples de arrays.

Sintaxe

Onde:

tipo → O tipo de dados que a array vai conter;nome → O nome da array, tal como se faz com uma variável;tamanho → O número máximo de elementos que a array irá conter.

Exemplo

123456

int idades[10]; //Array de 10 elementos idades[0] = 14; //Atribuição Corretaidades[4] = 12; //Atribuição Corretaidades[7] = 15; //Atribuição Corretaidades[10] = 20; //Atribuição Incorreta (tamanho máximo da array ultrapassado)

No exemplo anterior, a última declaração está errada porque o índice máximo da arrayfoi ultrapassado, ou seja, a array apenas pode conter 10 elementos mas, como acontagem inicia sempre no zero, “idades[10]” refere-se ao décimo primeiro elemento.

Podemos também, à semelhança do que acontece com as variáveis, atribuir valores àsarrays no momento em que as declaramos da seguinte forma:

1 int idades[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

Arrays Multidimensionais

Arrays multidimensionais são todas aquelas que contenham mais do que umadimensão, ou seja, se comparamos a uma tabela, têm mais do que uma coluna.

Sintaxe

1 tipo nome[linhas][colunas];

Exemplo

123

/* * Declaração de uma array 6x5 */

Page 63: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 63 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

4567891011

float notas[6][5]; notas[0][0] = 18.7; //1ª Linha, 1ª Colunanotas[0][1] = 15.4; //1ª Linha, 2ª Colunanotas[3][2] = 19.6; //4ª Linha, 3ª Colunanotas[5][4] = 17.5; //6ª Linha, 5ª Colunanotas[6][0] = 20.0; //Excedeu o máximo de linhas (6)notas[5][5] = 17.4; //Excedeu o máximo de colunas (5)

No exemplo anterior é possível visualizar a criação de uma tabela array 6 linhas por 5colunas. Traduzindo esta array para uma tabela, ficaríamos com o seguinte:

Que, inserindo os dados anteriormente utilizados no exemplo, ficaria preenchida daseguinte forma:

18.7 15.4 19.6 17.5

A sintaxe que aplicámos anteriormente para atribuir valores a arrays quando asinicializamos também pode ser utilizada neste contexto. Veja o seguinte exemplo:

123

int idades[2][4] = { {1, 2, 3, 4}, {0, 1, 2, 3}};

Exercícios

1 – Crie um programa que peça cinco números inteiros ao utilizador, os armazenenuma matriz e, posteriormente, imprima os números armazenados na matriz tal comoo índice (posição) em que se encontram.

2 – Crie um pequeno programa onde o utilizador tenha que inserir os valores (float)que obteve no final do ano letivo em sete disciplinas e, posteriormente, mostre a suamédia. Utilize apenas uma array para armazenar todos os valores.

3 – Crie mais um programa para obter as notas de cinco testes em 3 disciplinas (matriz3×5) e percorra cada linha de forma a dizer a nota mais alta de cada uma das trêsdisciplinas.

Page 64: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 64 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, podesempre utilizar os comentários para colocar a questão. Caso o faça, pedimos queutilize a keyword [DUVIDA] no início do seu comentários.

Constantes

O mundo está constantemente a evoluir: desde o mais pequeno inseto à espécieHumana. Dentro das palavras que mais ouvimos atualmente, incluímos “evolução”,“mudança”, “futuro”.

A tecnologia tem revolucionado o mundo das mais diversas formas: do mais simplesaparelho para medir o tempo ao mais complexo acelerador de partículas. Se querentrar no mundo da tecnologia e deixar a sua marca, pode começar aqui.

Visualize este vídeo no YouTube

Constantes

Em C, tal como em outras linguagens de programação, existem as constantes.Constantes são, à semelhança das variáveis, algo em que pudemos armazenar dadosmas que, ao contrário das variáveis, não podemos alterar os dados que lá estãogravados.

Existem diversas formas de declarar constantes em C. Iremos abordar duas que são asmais utilizadas: as constantes declaradas e as constantes definidas.

Page 65: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 65 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Constantes Definidas (#define)

Chamam-se Constantes Definidas àquelas que são declaradas no cabeçalho de umficheiro. Estas são interpretadas pelo pré-processador que procederá à substituiçãoda constante em todo o código pelo respetivo valor.

Sintaxe

1 #define identificador valor

Onde:

identificador → o nome da constante que, convencionalmente, é escrito comletras maiúsculas;valor → o valor da constante.

Exemplo

1234567891011121314

#include <stdio.h> #define PI 3.14159 int main (){ double r = 5.0; double circle; circle = 2 * PI * r; printf("%f\n", circle); return 0; }

O que acontece aqui é que, quando o pré-compilador lê a definição da constante “PI”,substitui todos os “PI” no código pelo valor que lhe está atribuído, literalmente.

Constantes Declaradas (const)

As Constantes Declaradas, ao contrário das Constantes Definidas são, tal como opróprio nome indica, declaradas no código, em linguagem C.

A declaração destas constantes é extremamente semelhante à declaração dasvariáveis. Apenas temos que escrever const antes do tipo de dados.

Page 66: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 66 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Sintaxe

1 const tipo nome = valor;

Onde:

tipo → o tipo de dados que a constante vai conter;nome → o nome da constante;valor → o conteúdo da constante.

Exemplo

12345678910111213

#include <stdio.h>#include <math.h> int main() { const double goldenRatio = (1 + sqrt(5)) / 2; goldenRatio = 9; //Erro. A constante não pode ser alterada. double zero = (goldenRatio * goldenRatio) - goldenRatio - 1; printf("%f", zero); return 0;}

Existem vantagens ao utilizar esta forma de declarar constantes. Através dasconstantes declaradas podemos ter constantes locais ou globais porém as definidassão sempre globais.

Uma constante local é uma constante que está restrita a uma determinada função, porexemplo. Se declararmos uma constante dentro de uma função, esta só estarádisponível para o código que está dentro dessa mesma função.

Exercícios

1 → Crie um pequeno programa em que o utilizador insira um montante sem IVA e queo programa lhe devolva o valor com IVA. Deve utilizar uma constante.

2 → Crie um pequeno programa onde efetua dez operações (à sua escolha) querelacione os números que desejar e uma constante. Esta constante deve ser numérica.

Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, pode

Page 67: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 67 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

sempre utilizar os comentários para colocar a questão. Caso o faça, pedimos queutilize a keyword [DUVIDA] no início do seu comentários.

Apontadores: uma pequena introdução

O mundo está constantemente a evoluir: desde o mais pequeno inseto à espécieHumana. Dentro das palavras que mais ouvimos atualmente, incluímos “evolução”,“mudança”, “futuro”.

A tecnologia tem revolucionado o mundo das mais diversas formas: do mais simplesaparelho para medir o tempo ao mais complexo acelerador de partículas. Se querentrar no mundo da tecnologia e deixar a sua marca, pode começar aqui.

Infelizmente, e mais uma vez, esta semana não iremos ter vídeo porém garantimos quena próxima semana haverá. Antes de continuar, recomendamos uma breve leituradeste artigo no Pplware Kids onde explicamos a diferença entre bits e bytes.

Apontadores

Para os computadores tudo se resume a bits, ou seja, a zeros e a uns. Então, para oscomputadores, as diferenças que nós conhecemos entre os diversos tipos de variáveis(char, int, double/float, etc) são praticamente inexistentes.

Uma forma bastante utilizada para administrar o número enorme de 0’s e 1’s é através

Page 68: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 68 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

do endereçamento. Cada bocado da memória, cada variável, cada constante(Constante Declarada) tem o seu endereço único.

Quando uma variável é declarada é reservado, automaticamente, um espaço namemória que irá conter os valores desta mesma variável. Dentro do nosso computadorexistem micro-dispositivos cuja função está diretamente ligada com o endereçamento.

Os apontadores, também conhecidos por ponteiros ou pointers, são tipos de dadosque serve para armazenar um endereço da memória. Apesar dos endereços dememória serem representados por números inteiros, não os confunda com o tipo dedados int.

Endereço de uma variável

Para nos referirmos ao endereço de uma variável, devemos utilizar o operador & (ecomercial) antes do nome da variável. No exemplo seguinte, imprimo o endereço dememória onde está alocado o valor da variável “num” e “letra”:

1234567891011

#include <stdio.h> int main() { int num = 4; char letra = 'c'; printf("%p e %p", &num, &letra); return 0;}

Como pode ver, neste caso foi utilizado %p visto que se refere a endereços depointers. Eu recebi os valores 0028FF1C e 0028FF1B, mas a si é provável que a funçãoretorne outros valores. Estes valores são o endereço da memória onde estão alocadasas variáveis acima mencionadas. Cada byte da memória RAM tem o seu endereço.

Daí que, em funções como, por exemplo, a scanf, utilizemos este operador antes donome da variável para nos referirmos ao endereço de memória da variável e assimarmazenar o valor nesse local.

Esta semana não iremos recomendar exercícios pois o conteúdo de hoje não ésuficiente para novos exercícios. Porém, continue a praticar! Na próxima semanairemos continuar o tema dos apontadores.

Page 69: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 69 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, podesempre utilizar os comentários para colocar a questão. Caso o faça, pedimos queutilize a keyword [DUVIDA] no início do seu comentários.

Apontadores: endereçamento

O mundo está constantemente a evoluir: desde o mais pequeno inseto à espécieHumana. Dentro das palavras que mais ouvimos atualmente, incluímos “evolução”,“mudança”, “futuro”.

A tecnologia tem revolucionado o mundo das mais diversas formas: do mais simplesaparelho para medir o tempo ao mais complexo acelerador de partículas. Se querentrar no mundo da tecnologia e deixar a sua marca, pode começar aqui.

Visualize este vídeo no YouTube

Apontadores

Na semana passada, começámos a abordar o tema “Apontadores”. Esta semana,iremos continuar a abordar esse mesmo tema que é muito útil.

Page 70: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 70 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Tamanho e endereço de variáveis

Primeiramente, devo recordar que todos os tipos de dados ocupam um espaçodiferente na memória RAM. Para saber quantas bytes ocupam um determinado tipo,deve-se recorrer à função sizeof cujo único argumento é a variável em questão.

Ou seja, para se saber quantas bytes ocupa o tipo int, devemos passar comoargumento à função sizeof uma variável desse tipo.

No seguinte exemplo é imprimido o tamanho de espaço que ocupam quatro tipos dedados e ainda o endereço da memória a que corresponde cada variável.

12345678910111213141516171819

#include <stdio.h>#include <stdlib.h> int main(){ char caractere; int inteiro; float Float; double Double; printf("Tipo\tNum de Bytes\tEndereço\n"); printf("-------------------------------------\n"); printf("Char\t%d byte \t\t%p\n", sizeof(caractere), &caractere); printf("Inteiro\t%d bytes \t%p\n", sizeof(inteiro), &inteiro); printf("Float\t%d bytes \t%p\n", sizeof(Float), &Float); printf("Double\t%d bytes \t%p\n", sizeof(Double), &Double); return 0;}

O resultado da execução do código acima deverá ser algo semelhante ao seguinte:

123456

Tipo Num de Bytes Endereço-------------------------------------Char 1 byte 0028FF1FInteiro 4 bytes 0028FF18Float 4 bytes 0028FF14Double 8 bytes 0028FF08

Como pode verificar, todos os tipos de dados exceto char ocupam mais do que umbyte na memória RAM. Então, o endereço que é imprimido corresponde apenas aoprimeiro byte ocupado pela variável.

Hexadecimal para Decimal

Page 71: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 71 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Antes de continuarmos, será útil abordar como se convertem números hexadecimaispara decimais. Primeiramente, como já deve ter reparado, os números hexadecimaiscontam com letras, além de números.

Isto acontece porque a numeração hexadecimal tem como base 16 números enquantoque a decimal tem como base 10 números. Veja então o número que corresponde acada letra da numeração hexadecimal na tabela seguinte:

Hexadecimal Decimal Hexadecimal Decimal0 0 8 81 1 9 92 2 A 103 3 B 114 4 C 125 5 D 136 6 E 147 7 F 15

Iremos converter o número hexadecimal 0028FF1F para decimal. Em primeiro lugar,iremos tirar os primeiros dois zeros que são, neste caso, desprezíveis.

De seguida precisamos conhecer o significado de cada dígito hexadecimal em númerodecimal que está presente nesse número. Em decimal, os números 2, 8, F e 1 são,respetivamente, 2, 8, 15 e 1.

Para efetuar a conversão, temos que multiplicar cada um desses números por umapotência de base 16 cujo expoente é igual à posição de cada um dos números (dadireita para a esquerda). Então, temos:

123

(2*16^5)+(8*16^4)+(15*16^3)+(15*16^2)+(1*16^1)+(15*16^0) == 2097152+524288+61440+3840+16+15 = = 2686751

Voltando aos endereços das variáveis e convertendo-os para números decimais,obtemos os seguintes valores:

12345

Tipo Num de Bytes Endereço-------------------------------------Char 1 byte 2686751Inteiro 4 bytes 2686744Float 4 bytes 2686740

Page 72: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 72 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

6 Double 8 bytes 2686728

Podemos concluir dos dados acima que a variável que declarámos do tipo char, nomeu computador, ocupa a posição 2686751 enquanto que as outras ocupam mais doque uma.

Relembrando que as bytes alocadas para variáveis que ocupam mais do que umaencontram-se localizadas lado a lado, de seguida e que o endereço que obtemoscorresponde ao da primeira byte, a variável do tipo inteiro que declarámos ocupa asbytes cujos endereços (em número decimal) são 2686744, 2686745, 2686746 e2686747.

Estas informação serão muito úteis para os próximos artigos. Fique atento.

Esta semana não iremos recomendar exercícios pois o conteúdo de hoje não ésuficiente para novos exercícios. Porém, continue a praticar! Na próxima semanairemos continuar o tema dos apontadores.

Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, podesempre utilizar os comentários para colocar a questão. Caso o faça, pedimos queutilize a keyword [DUVIDA] no início do seu comentários.

Declaração e inicialização de Apontadores

O mundo está constantemente a evoluir: desde o mais pequeno inseto à espécieHumana. Dentro das palavras que mais ouvimos atualmente, incluímos “evolução”,“mudança”, “futuro”.

A tecnologia tem revolucionado o mundo das mais diversas formas: do mais simplesaparelho para medir o tempo ao mais complexo acelerador de partículas. Se querentrar no mundo da tecnologia e deixar a sua marca, pode começar aqui.

Page 73: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 73 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Nesta semana, infelizmente, não haverá vídeo porém tentaremos fazer na próximasemana. Hoje iremos continuar o tema dos apontadores. Os apontadores, como já foireferido anteriormente, são um tipo de variáveis que armazenam endereços.

Declaração de apontadores

A declaração deste tipo de variáveis é bastante simples: para declarar um apontadorbasta colocar um * (asterisco) antes do nome da variável.

Sintaxe

Veja então a sintaxe da declaração de ponteiros.

Tal como nas restantes variáveis, temos que colocar o tipo de dados na declaração davariável devido ao facto do espaço ocupado por cada tipo de dados ser diferente.

Quando não é dado um valor a um apontador, geralmente este assume o valor daconstante NULL, ou seja, não aponta para endereço nenhum.

A constante NULL está contida na biblioteca stdlib, ou seja, standard library e o seuvalor é, na maioria das vezes, 0.

Inicialização de apontadores

Para inicializar um apontador, devemos igualar o seu valor ao endereço de uma outra

Page 74: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 74 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

variável do mesmo tipo.

Exemplo 1

Para exemplificarmos a relação entre uma variável comum e um ponteiro, iremosdeclarar o seguinte código:

123456789101112

#include <stdio.h>#include <stdlib.h> int main(){ int numero = 5; int *ponteiro = &numero; printf("%d e %d", numero, *ponteiro); return 0;}

Dentro da função principal, declaramos duas variáveis: a primeira, chamada numero, éuma variável do tipo de números inteiros e conta com o número 5.

De seguida, declaramos um ponteiro cujo nome é, exatamente, ponteiro e esteponteiro aponta para o endereço da variável numero. Podemos então dizer que“ponteiro aponta para numero” ou “ponteiro é o endereço de numero”.

Depois imprimimos o valor de numero e do endereço que para o qual aponta ponteiro.Isto irá imprimir “5 e 5”, pois é o mesmo dizer numero e *ponteiro visto que o ponteiroponteiro aponta para a variável numero.

Exemplo 2

O segundo exemplo é minimamente bizarro: efetuar a soma de duas variáveisutilizando apenas apontadores que apontem para estas mesmas variáveis. Ora veja:

Se está a ter problemas com a codificação dos caracteres no Windows, inclua abiblioteca “Windows” e altere a página de codificação da linha de comandoscomo está na linha 7.

12345

#include <stdio.h>#include <stdlib.h>#include <windows.h> int main()

Page 75: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 75 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

6789101112131415161718192021

{ SetConsoleOutputCP(65001); int a, b, c; int *p, *q; a = 5; b = 4; p = &a; q = &b; c = *p + *q; printf("A soma de %d e %d é %d.", a, b, c); return 0;}

No exemplo anterior pode visualizar que são declaradas cinco variáveis: a a, b e c quesão do tipo número inteiro e, de seguida, dois apontadores, p e q. Posteriormente éatribuído o valor 5 à variável a e o valor 4 à variável b.

Agora, para efetuar a soma utilizando os operadores, igualamos o apontador p aoendereço da variável a e o apontador q ao endereço da b. Finalmente, a soma (queestará contida na variável c) é igual à soma do conteúdo dos endereços que para osquais os apontadores p e q estão a apontar.

Exemplo 3

O exemplo anterior aparenta ser inútil, pois poderíamos fazer o mesmo com menoslinhas de código. Mas, e se precisar de, por algum motivo, criar uma função que troqueo valor de duas variáveis? Poderíamos, inicialmente, pensar no seguinte:

1234567891011

int trocaDeValores( int x, int y){ /* Esta função está errada */ int temp; temp = x; x = y; y = temp; return 0;}

Mas a função apresentada não vai realmente alterar os valores das variáveis, poisapenas recebe os seus valores e “coloca-os” numas míseras variáveis locais. A funçãocorreta teria que ser a seguinte:

Page 76: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 76 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

12345678910

int trocaDeValores( int *p, int *q){ int temp; temp = *p; *p = *q; *q = temp; return 0;}

Com esta função sim, poderíamos trocar os valores de duas variáveis, pois ao termosacesso aos seus endereços podemos facilmente efetuar as mudanças.

Exercícios

1 – Analise o seguinte trecho de código e descubra o porquê deste estar errado.

123456789

int trocaDeValores( int *i, int *j) { int *temp; *temp = *i; *i = *j; *j = *temp; return 0;}

2 – Crie uma função que receba três variáveis do tipo inteiro: minutosTotais e doisapontadores (um para a variável horas e outro para a variável dos minutos).

Dentro dessa função, os minutosTotais devem ser convertidos em horas e minutos eguardados nas respetivas variáveis cujos endereços foram passados para dentro dafunção.

Na função main, crie as variáveis que achar necessárias e peça o número de minutosque deseja converter em horas e minutos ao utilizador. De seguida utilize a funçãoanteriormente criada e imprima o resultado dado por esta.

Não se esqueça que a função horasParaMinutos não deve retornar o número de horase minutos, mas sim colocar esses valores nos endereços passados para a função.

Esta semana não iremos recomendar exercícios pois o conteúdo de hoje não ésuficiente para novos exercícios. Porém, continue a praticar! Na próxima semana

Page 77: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 77 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

iremos continuar o tema dos apontadores.

Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, podesempre utilizar os comentários para colocar a questão. Caso o faça, pedimos queutilize a keyword [DUVIDA] no início do seu comentários.

Apontadores: incremento, decremento e comparação

O mundo está constantemente a evoluir: desde o mais pequeno inseto à espécieHumana. Dentro das palavras que mais ouvimos atualmente, incluímos “evolução”,“mudança”, “futuro”.

A tecnologia tem revolucionado o mundo das mais diversas formas: do mais simplesaparelho para medir o tempo ao mais complexo acelerador de partículas. Se querentrar no mundo da tecnologia e deixar a sua marca, pode começar aqui.

Visualize este vídeo no YouTube

Operações com Operadores

Uma das principais vantagens da utilização de apontadores é a fácil modificação deoutras variáveis e que o C trabalha de forma mais rápida quando são utilizados

Page 78: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 78 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

ponteiros.

Tal como acontece com as outras variáveis, podemos incrementar e decrementarapontadores, ou seja, incrementar ou decrementar ou endereço (valor) que contém oapontador.

Imagine que temos um array do tipo double com dois elementos. Sabemos tambémque cada variável deste tipo ocupa, geralmente, 8 bytes na memória RAM. De seguida,cria um apontador cujo endereço aponta para esse array. O que vai acontecer é queesse endereço apontará para o primeiro byte do array e não para todos eles.

1234

double numeros[2]; /* Declaração do array com dois elementos. */double *apontador; apontador = numeros;

Hipoteticamente falando, esse apontador armazena o endereço 4550. Então, sabendoque o array ocupa 16 bytes (visto que tem capacidade para dois elementos do tipodouble), podemos dizer que este array ocupa todos os bytes entre 4550 e 4565(inclusive).

Se procedermos a uma incrementação (apontador++), este apontador deixará deapontar para o endereço 4550, apontando agora para o 4558. Porquê? Porque apróxima variável do array localiza-se nessa posição e não na posição 4551 devido aotamanho ocupado por esse tipo de dados. O mesmo ocorre quando decrementamosum valor.

Imaginando os endereços de variáveis como números decimais (não se esqueça deque são representados em hexadecimal), as duas linhas seguintes seriamequivalentes:

12

apontador++;apontador + sizeof(double);

Exemplo Para exemplificarmos o uso de operações e apontadores, vamos fazer umaProgressão Aritmética, onde há um termo inicial e uma razão. Cada termo é igual aotermo anterior somado com a razão.

n[y] = n[y-1] + r

Page 79: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 79 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Poderíamos fazer este pequeno programa da seguinte forma (o código abaixo estáexplicado):

Esta semana não iremos recomendar exercícios pois o conteúdo de hoje não ésuficiente para novos exercícios. Porém, continue a praticar! Na próxima semanairemos continuar o tema dos apontadores.

123456789101112131415161718192021222324252627282930313233343536373839404142434445

#include <stdio.h>#include <stdlib.h> int main(){ int pa[10], razao; int *pointer; /* * Aqui pedímos o termo inicial, ou seja, o primeiro * número da PA (Progressão Aritmética). * * De seguida o apontador é definido para apontar para * o array pa. */ printf("Insira o termo inicial: "); scanf("%d", &amp;pa[0]); pointer = pa; printf("Insira razão: "); scanf("%d", &amp;razao); while(pointer != &amp;pa[9]) { /* * Cada valor da PA é definido somando o valor corrente do apontador com a razão. * De seguida, o apontador é incrementado de forma a apontar para o próximo * elemento do array. (Isto acontece enquanto o apontador for diferente do * endereço do último elemento da PA.) */ *(pointer + 1) = *pointer + razao; pointer++; } printf("PA"); for(pointer = pa ; pointer &lt;= &amp;pa[9] ; pointer++) { /* * Aqui todos os elementos do array são percoridos * e imprime-se assim a Progressão Aritmética criada. */ printf(" -&gt; %d", *pointer); } return 0;}</stdlib.h></stdio.h>

Page 80: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 80 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, podesempre utilizar os comentários para colocar a questão. Caso o faça, pedimos queutilize a keyword [DUVIDA] no início do seu comentários.

Strings: declaração e inicialização

O mundo está constantemente a evoluir: desde o mais pequeno inseto à espécieHumana. Dentro das palavras que mais ouvimos atualmente, incluímos “evolução”,“mudança”, “futuro”.

A tecnologia tem revolucionado o mundo das mais diversas formas: do mais simplesaparelho para medir o tempo ao mais complexo acelerador de partículas. Se querentrar no mundo da tecnologia e deixar a sua marca, pode começar aqui.

Strings

Strings, como já mencionado anteriormente, são sequências de caracteres e, em C,são arrays de caracteres com um delimitador que indica o final da string, o delimitador\0. Daí termos abordado primeiro os arrays.

O \0 é ASCII para 0 e é utilizado para finalizar “strings>.

123

"Pplware" -> String"P" -> String'P' -> Caracter

Page 81: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 81 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Como mostrado acima, os caracteres, já abordados, são colocados dentro de plicasenquanto que todas as strings são colocadas dentro de aspas. Um único caracterinserido dentro de aspas é considerado uma string.

Sintaxe Em C podemos declarar strings de diversas formas. Podemos declarar umarray do tipo char com um número de caracteres definidos:

1 char nome[8] = "Pplware";

Nesse string podemos colocar a palavra “Pplware” que tem 7 caracteres, mas qual é arazão que nos leva a colocar 8 quando declaramos a variável? Não se esqueça docaracter \0 que conta como 1 caracter.

Podemos ainda declarar e inicializar strings das seguintes formas:

123

char nome[8] = {'P', 'p', 'l', 'w', 'a', 'r', 'e', '\0'}; /* Forma mais trabalhosa */char nome[] = "Pplware"; /* Não há necessidade de colocar o seu tamanho. */char *nome = "Pplware";

Este “tipo” de dados pode, à semelhança de todos os outros, ser integrado com afunção printf utilizando “%s”, uma abreviatura para string.

Exemplo No exemplo seguinte declaramos uma string que depois é imprimidarecorrendo à função printf.

12345678910

#include <stdio.h>#include <stdlib.h> int main(){ char *nome = "Vamos Programar? - Introdução à Programação"; printf("%s\n", nome); return 0;}

Exercícios

1 – Crie uma variável que armazene o seu nome e, de seguida, o imprima.

2 – Peça o primeiro e último nomes do utilizador através da função scanf (scanf(“%s”,

Page 82: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 82 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

nome_da_var)) e depois imprima-o no seguinte formato: “Bem-vindo, Sr(a) NOME +ULTIMO_NOME”.

Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, podesempre utilizar os comentários para colocar a questão. Caso o faça, pedimos queutilize a keyword [DUVIDA] no início do seu comentários.

Ler e imprimir strings.

O mundo está constantemente a evoluir: desde o mais pequeno inseto à espécieHumana. Dentro das palavras que mais ouvimos atualmente, incluímos “evolução”,“mudança”, “futuro”.

A tecnologia tem revolucionado o mundo das mais diversas formas: do mais simplesaparelho para medir o tempo ao mais complexo acelerador de partículas. Se querentrar no mundo da tecnologia e deixar a sua marca, pode começar aqui.

Depois de vos explicarmos o que são e como se utilizam strings na Linguagem C, éimportante saber como as podemos ler e imprimir no ecrã. Antes de continuarmos, éimportante referir que o “seletor” utilizado para strings é \%s.

Imprimir strings

Page 83: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 83 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

A impressão de strings no ecrã pode ser feita de diversas formas. Iremos abordar duasdelas: a função printf, já conhecida por todos vós, e a função puts.

Função printf

Esta função já é conhecida por todos vós e permite a impressão de diversos tipos dedados de forma bastante simples.

Sintaxe

Para a utilizar com strings basta escrever da seguinte forma:

1 printf("Esta é uma string: %s", nomeDaString);

Ou seja, é bastante útil quando necessitamos de imprimir uma string variávelintercalada com algum outro texto.

Função puts

Por outro lado, temos a função puts que quer dizer put string. Esta função é bastanteútil quando precisamos imprimir apenas uma sequência de caracteres variável.

Sintaxe

Ora veja a sintaxe:

Leitura de Strings

Finalmente, abordaremos como se leem strings escritas pelo utilizador.

Função scanf

A utilização da função scanf para obter sequências textuais é semelhante à forma queutilizamos para ler números, tanto inteiros, como decimais. Porém, existe umapequena diferença.

Sintaxe

Veja a sintaxe e tente descobrir a diferença que existe (além do uso de \%s):

1 scanf("%s", nomeDaString);

Page 84: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 84 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Como pode verificar, ao contrário do que acontecia com os restantes tipos devariáveis, neste não colocamos o operador & antes do nome da variável. Porquê?Porque as variáveis que contêm strings são arrays, logo o seu nome aponta para aprimeira posição da memória ocupada por todo o array. Daí não ser necessário o usodo operador &.

Exemplo

No seguinte exemplo pode ver como utilizamos esta função para obter diversos dadosdo utilizador que depois são imprimidos recorrendo à função printf anteriormenteabordada.

12345678910111213141516171819202122232425262728293031323334

#include <stdio.h>#include <stdlib.h> int main(){ char nome[21], apelido[21], morada[51], codigoPostal[11]; printf("Por favor insira os seus dados conforme pedido:\n\n"); printf("Primeiro nome: "); scanf("%s", nome); printf("Último nome: "); scanf("%s", apelido); printf("Morada: "); scanf("%s", morada); /* Limpeza do buffer no Windows. Usar "_fpurge(stdin)" em sistemas Unix */ fflush(stdin); printf("Código Postal: "); scanf("%s", codigoPostal); printf("\nO seu Cartão de Identificação:\n"); printf("Nome: %s, %s\n", apelido, nome); printf("Morada: %s\n", morada); printf("Código Postal: %s\n", codigoPostal); return 0; }

Função gets

Page 85: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 85 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Outra função que nos permite ler strings é a função gets, cujo nome advém de getstring, ou seja, obter string. A utilização desta função é algo bastante simples.

Sintaxe

Ora veja a sintaxe:

Onde “nomeDaString” se refere ao apontador que aponta para a primeira posição doarray que contém a sequência de caracteres.

Exemplo

Aqui pode ver como fica o programa do exemplo anterior utilizando esta função.

1234567891011121314151617181920212223242526272829

#include <stdio.h>#include <stdlib.h> int main(){ char nome[21], apelido[21], morada[51], codigoPostal[11]; printf("Por favor insira os seus dados conforme pedido:\n\n"); printf("Primeiro nome: "); gets(nome); printf("Último nome: "); gets(apelido); printf("Morada: "); gets(morada); printf("Código Postal: "); gets(codigoPostal); printf("\nO seu Cartão de Identificação:\n"); printf("Nome: %s, %s\n", apelido, nome); printf("Morada: %s\n", morada); printf("Código Postal: %s\n", codigoPostal); return 0;}

Exercícios

Esta semana temos poucos exercícios para vós. Aqui vai:

1 – Criar um pequeno programa que peça o primeiro nome ao utilizador e que o

Page 86: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 86 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

imprima de trás para a frente.

2 – Criar uma aplicação que peça os utilizador o seu nome, o seu apelido, a sua datade nascimento, morada, código postal, número de telemóvel, telefone e que imprimauma espécie de BI.

Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, podesempre utilizar os comentários para colocar a questão. Caso o faça, pedimos queutilize a keyword [DUVIDA] no início do seu comentários.

Um pouco mais sobre a função scanf e algumas dicas

O mundo está constantemente a evoluir: desde o mais pequeno inseto à espécieHumana. Dentro das palavras que mais ouvimos atualmente, incluímos “evolução”,“mudança”, “futuro”.

A tecnologia tem revolucionado o mundo das mais diversas formas: do mais simplesaparelho para medir o tempo ao mais complexo acelerador de partículas. Se querentrar no mundo da tecnologia e deixar a sua marca, pode começar aqui.

O artigo de hoje irá incidir sobre algumas sugestões a referir dadas por leitores noartigo da semana passada, mas também iremos começar a abordar outro tópico.

Page 87: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 87 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Limpeza do buffer

No artigo número nove da presente saga introduzimos as seguintes funções:

Ambas as funções permitem-nos limpar o buffer de entrada, porém não são muitoseguras. Em programação profissional de C (e outras linguagens), estas funções nãosão utilizadas por motivos de segurança.

Claro que existem “soluções” alternativas. O leitor José Carlos Ferreira, no artigo dasemana anterior, sugeriu-nos o seguinte:

1 #define CLEAR_INPUT while (!getchar ())

O que nos permite utilizar o trecho de código:

Recorrendo apenas ao nome “CLEAR_INPUT”.

Alternativa a gets e a scanf

Devido à falta de uma solução efetiva ao problema existente com a função scanf e àexistência de alguns contra-tempos com a função gets foi sugerido, pelos leitores Zé elmx a utilização da função fgets.

Sintaxe

Esta função tem algumas diferenças relativamente às funções mencionadas no título.Ora veja a sintaxe:

1 fgets(char *str, int n, FILE *stream);

Onde:

str – O apontador para um array de caracteres onde a \textit{string} seráarmazenada.n – O número máximo de caracteres a serem lidos (incluindo o delimitador final).Geralmente é igual ao tamanho do array.stream – O apontador para o ficheiro ou objeto donde serão lidos os caracteres.

Exemplo

Vejamos então um exemplo baseado no boletim de informação criado no artigo

Page 88: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 88 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

anterior.

1234567891011121314151617181920212223242526272829

#include <stdio.h>#include <stdlib.h> int main(){ char nome[21], apelido[21], morada[51], codigoPostal[11]; printf("Por favor insira os seus dados conforme pedido:\n\n"); printf("Primeiro nome: "); fgets(nome, 21, stdin); printf("Último nome: "); fgets(apelido, 21, stdin); printf("Morada: "); fgets(morada, 51, stdin); printf("Código Postal: "); fgets(codigoPostal, 11, stdin); printf("\nO seu Cartão de Identificação:\n"); printf("Nome: %s, %s\n", apelido, nome); printf("Morada: %s\n", morada); printf("Código Postal: %s\n", codigoPostal); return 0;}</stdlib.h></stdio.h>

Remoção das Mudanças de Linha

Mas, se corrermos o código acima, iremos receber algo parecido com o seguinte:

1234567

O seu Cartão de Identificação:Nome: Apelido, Nome Morada: Morada Código Postal: CP

Como pode verificar, isto mostra que os arrays ficaram, também com os delimitadoresda mudança de linha (“\n”). Para removermos estes delimitadores podemos recorrer àfunção “strtok”.

Sintaxe

Page 89: Vamos Programar?

12/11/15, 15:16Vamos Programar? – Introdução à Programação #25 - Pplware

Página 89 de 89http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/

Ora veja a sintaxe desta função.

1 strtok(char *str, const char *delim);

Onde:

str – O apontador para um array de caracteres onde a \textit{string} estáarmazenada.delim – O delimitador em questão ou uma constante que o contenha.

Exemplo

Então, para que o exemplo acima imprima corretamente o Bilhete de Informação,devem ser adicionadas as seguintes linhas antes de ser imprimida qualquerinformação:

1234

strtok(nome, "\n");strtok(apelido, "\n");strtok(morada, "\n");strtok(codigoPostal, "\n");

Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, podesempre utilizar os comentários para colocar a questão. Caso o faça, pedimos queutilize a keyword [DUVIDA] no início do seu comentários.