Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Aprenda a Programar, Manuais, Projetos, Pesquisas de Programação em C

Uma Breve Introdução ilustrada com a linguagem C

Tipologia: Manuais, Projetos, Pesquisas

2019

Compartilhado em 21/08/2019

ronier-lima
ronier-lima 🇧🇷

4.5

(2)

1 documento

1 / 63

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f

Pré-visualização parcial do texto

Baixe Aprenda a Programar e outras Manuais, Projetos, Pesquisas em PDF para Programação em C, somente na Docsity!

Aprenda a Programar

Uma Breve Introdução

Henrique Dias

Autor: Henrique Dias, henriquedias.com Revisto por: Luís Soares, luissoares.com

Versão 2.1. Publicado a 29 de agosto de 2015 Com o apoio de: Pplware, pplware.com

Índice

Agradecimentos

Em primeiro lugar, quero agradecer aos meus pais por estarem sempre presentes e me terem apoiado imenso durante toda a minha vida.

Em segundo lugar, quero agradecer a toda a equipa do Pplware, pelo apoio dado. Agradeço também à comunidade do Pplware, que me ajudou, deu dicas, fez correções, sempre construtiva- mente.

Finalmente, mas não menos importante, quero agradecer ao Luís Soares, por se ter oferecido a rever este livro e me dado imensas dicas para o aprimorar.

Capítulo 0

Introdução

Este livro pretende dar-lhe a conhecer os fundamentos básicos e essenciais do mundo da pro- gramação. Não apenas ensinar-lhe a linguagem de programação x ou y , mas sim ensinar-lhe a programar.

Programar não é conhecer uma linguagem de programação. É conhecer os fundamentos, a lógica, que está na base de todas as linguagens de programação. Com isso, será capaz de utilizar qualquer linguagem de programação.

0.1 Qual o público-alvo deste livro

O público-alvo deste livro prende-se aos que querem iniciar a sua jornada no mundo da progra- mação: independentemente de estarem a estudar ou serem apenas curiosos por esta área. Neste livro é utilizada a linguagem de programação C de forma a mostrar os fundamentos básicos da programação. Fundamentos estes que são omnipresentes em todo o mundo da programação.

O capítulo 7, sobre apontadores, poderá, eventualmente, ser do interesse de alguém que já conhece algumas linguagens de programação, que já tem alguma habilidade, mas que está com dificuldade nessa parte.

0.2 Como está estruturado o livro

Este livro foi baseado nos artigos da saga Introdução à Programação do Pplware^1. Não é apenas a compilação de todos os artigos, mas também a sua evolução. Tudo foi remodelado, revisto e melhorado.

A estrutura deste livro foi feita de forma a que a aprendizagem seja gradual e lhe dê uma visão sobre aquilo que irá encontrar em (quase) todas as linguagens de programação existentes. Ora veja como está estruturado.

  • Capítulo 1: “Fundamentos” - No primeiro capítulo serão abordados fundamentos essen- ciais sobre o mundo da programação: o que é uma linguagem de programação, para que serve, como está estruturada, o que precisará utilizar, etc;
  • Capítulo 2: “Dados” - Tal como o nome sugere, o tema a abordar são os dados e várias coisas relacionadas com eles. São abordados os vários tipos de dados existentes, tal como a utilização de variáveis e constantes em C;
  • Capítulo 3: “Operadores” - No mundo da programação os dados devem ser modelados, moldados, alterados. É com os operadores abordados neste capítulo que tudo isso pode ser feito. Os operadores abordados existem na maioria das linguagens de programação;
  • Capítulo 4: “Controlo de Fluxo” - A ordem lógica das ações a tomar pode ser diferente em diversas situações. Neste capítulo aprenderá a alterar e a modificar a ordem das ações com base em condições;
  • Capítulo 5: “Funções e Procedimentos” - No quinto capítulo serão abordadas duas (^1) Consultar pplware.com

Capítulo 1

Fundamentos

O objetivo deste primeiro capítulo é mostrar-lhe os fundamentos essenciais sobre o mundo da programação. Começaremos por utilizar pseudocódigo (conceito explicado à frente), avançando gradualmente até chegar à linguagem pretendida: a Linguagem C.

1.1 Linguagens de programação

À semelhança de uma linguagem humana, uma linguagem de programação permite-nos comunicar, não com Humanos, mas com computadores ou qualquer outro sistema computorizado. Linguagens de programação são constituídas por uma “gramática” que contém todas as regras sintáticas uti- lizadas. Através da utilização dessas regras, podemos comunicar instruções a um computador, ou seja, instruir-lhe a fazer algo. É assim que os programas são criados.

Definição 1. Regras sintáticas consistem num conjunto de normas a seguir que indicam como se deve estruturar o código, ou seja, como se deve construir o código.

Existem inúmeras linguagens de programação: algumas de propósito geral, ou seja, sem ter uma finalidade específica. Por outro lado, existem outras criadas para um domínio específico. A linguagem de programação C é um exemplo de uma linguagem de programação de propósito geral. Por outro lado a Wolfram Language^1 , é uma linguagem de domínio específico, multi-paradigma (abordado mais à frente) e dedicada à Matemática.

1.2 Algoritmos

É importante compreender alguns conceitos básicos que serão fundamentais na sua jornada no mundo da programação. Assim, vai começar por entender o que são algoritmos visto que vai estar sempre em contacto com eles.

Definição 2. Algoritmos são quaisquer sequências de instruções finitas e bem definidas que podem ser executadas por computadores, autómatos ou até mesmo humanos.

Na Figura 1.1 pode visualizar todo o processo da confeção de um bolo onde o algoritmo é a re- ceita – uma sequência de instruções bem definida e finita – que é executada pelo(a) “cozinheiro(a)”.

Os algoritmos podem ser representados de diversas formas. Aqui são abordadas duas delas: os fluxogramas e o pseudocódigo. Estas representações dos algoritmos são essenciais antes destes serem escritos em código; ir-se-à poupar tempo visto que são reduzidos os possíveis erros durante o desenvolvimento.

Nem sempre são precisos os dois tipos de representação de algoritmos. Por vezes basta um. Isso é algo que depende do fluxo e métodos de trabalho de cada pessoa. Os fluxogramas e pseudocódigo são algo universal, que não se compromete com uma determinada linguagem de programação.

(^1) Consultar wolfram.com/language

1.2 Algoritmos 10

Figura 1.1: Confeção de um bolo

1.2.1 Fluxogramas

Vejamos então a primeira forma de representar algoritmos, os fluxogramas.

Definição 3. Um fluxograma é uma representação gráfica de um algoritmo que utiliza símbolos de forma a demonstrar os processos neste realizado.

Existem várias vantagens na criação de fluxogramas como, por exemplo, a sua facilidade de criar, a facilidade na partilha e ajuda a criar modelos mentais.

Um fluxograma pode fazer uso de muitos símbolos. No entanto, apenas iremos necessitar dos básicos para ter uma boa compreensão de como funcionam os fluxogramas. Pode visualizar estes símbolos na Figura 1.2.

Figura 1.2: Símbolos primários dos fluxogramas

Na Figura 1.3 pode visualizar um fluxograma, baseado no processo de confeção de um bolo.

1.2.2 Pseudocódigo

Uma forma mais aproximada do código final é a utilização de pseudocódigo. Sendo assim, sucede a criação dos fluxogramas.

Definição 4. Pseudocódigo é uma forma de representação de algoritmos que se assemelha a lingua- gens de programação mas que utiliza a língua nativa do utilizador de forma a ser facilmente entendida por quem não tem quaisquer conhecimentos da sintaxe de uma linguagem de programação.

Os programadores cuja língua nativa é português, costumam referir-se ao pseudocódigo como Portugol , também conhecido por “Português Estruturado”. O seguinte trecho de Portugol repre- senta o algoritmo anteriormente representado com um fluxograma, a confeção de uma receita:

1.3 Constantes e variáveis 12

A partir do momento declaramos uma variável ou constante, o endereço da memória RAM que foi reservado estará disponível através do seu nome. Sempre que for referenciado receita no código, o valor da variável será retornado.

1.3.1 Constantes

Comecemos por abordar as constantes.

Definição 7. Constantes permitem armazenar valores imutáveis, ou seja, que não podem ser alte- rados ao longo da execução de um programa.

Ora veja o seguinte exemplo:

1 constante caracter EMPRESA ← "Pplware" 2 EMPRESA ← "A Minha Empresa"

Na primeira linha, a constante EMPRESA, do tipo carácter, é declarada e é-lhe atribuído o valor Pplware. De seguida, na segunda linha, existe uma tentativa de alterar o seu valor da constante. Esta tentativa irá falhar, causando um erro visto que o valor de uma constante não pode ser alterado após a sua atribuição.

Nomenclatura Convencionalmente, o nome das constantes é escrito com letras maiúsculas para haver uma melhor distinção no código-fonte. Esta convenção não é obrigatória e não irá causar quaisquer erros durante a execução de um programa. Seguir esta convenção apenas torna mais clara a distinção entre variáveis e constantes dentro do código-fonte facilitando tanto a si, como programador, como a outros programadores que vejam o código do seu programa.

1.3.2 Variáveis

Por outro lado, existem as variáveis.

Definição 8. Variáveis , ao contrário das constantes, permitem o armazenamento de valores que podem ser alterados durante a execução de um programa. Geralmente são utilizadas para manter estados de algo e são fundamentais na programação.

Abaixo encontra um exemplo:

1 variavel caracter temaDaSecao ← "Constantes" 2 temaDaSecao ← "Variáveis"

Na primeira linha é declarada uma variável do tipo carácter, com nome temaDaSecao e valor Constantes. Seguidamente, o seu valor é alterado para Variáveis não causando nenhum erro, pois o valor das variáveis pode ser alterado ao longo da execução de um programa.

Regras de nomeação

Existem diversas regras que têm de ser seguidas no momento da declaração de uma variável para que não seja causado nenhum erro. O nome das variáveis e constantes:

  • Não pode começar com números (ex.: 9comida não é permitido, comida9 é válido);
  • Não pode ser igual a uma palavra reservada (ex.: if não é permitido, mas maria é permi- tido);
  • Não pode conter espaços (ex.: a minha var não é permitido, porém aMinhaVar é válido);
  • Não pode conter caracteres especiais (existem exceções em diversas linguagens).

Definição 9. Palavras reservadas são aquelas que constam na gramática da linguagem de pro- gramação. Tendo em conta que a palavra “se” é um comando do Portugol, não podemos declarar

1.4 Paradigmas de programação 13

nenhuma variável ou constante com esse nome. Se isso for feito, será gerado um erro.

As variáveis e constantes podem ser de diversos tipos. Os tipos de dados existentes variam de linguagem para linguagem. Mais à frente irão ser abordados os tipos de dados na linguagem C.

Nomenclatura As variáveis, ao contrário das constantes, não são totalmente escritas em letras maiúsculas. Convencionalmente, a variação lowerCamelCase (pertencente ao padrão CamelCase ) é seguida na maioria das linguagens de programação. Este padrão será utilizado visto que a maioria das linguagens de programação adotam-no, tal como a linguagem C.

1.4 Paradigmas de programação

Todas as linguagens de programação têm características que as distinguem de outras. O(s) para- digma(s) de programação que ela segue são fundamentais.

Definição 10. Paradigmas de programação são modelos ou padrões da forma de estruturar o nosso código. Existem muitos.

Nesta secção apenas são abordados 6 paradigmas de programação, os mais conhecidos e utili- zados. As que adotam mais do que um paradigma chamam-se multi-paradigma.

1.4.1 Paradigma imperativo

O primeiro paradigma abordado é o paradigma imperativo. Este concentra-se num estado (que são as variáveis) e em ações (comandos) que modelam (alteram) esse estado. Este paradigma pode ser comparado ao modo imperativo da linguagem humana visto que é criado para ordenar a realização de ações (como por exemplo, fazer algo, recortar, analisar, apagar...). Alguns exemplos de linguagens de programação imperativas são, por exemplo: C, Java, C#, Pascal.

1.4.2 Paradigma procedimental

Com o paradigma procedimental, trechos de código podem ser reutilizados sem a necessidade de o copiar para diversos locais através da utilização de funções e procedimentos (que serão abordados mais a frente). A maioria das linguagens de programação adotam este paradigma.

1.4.3 Paradigma estruturado

Nas linguagens de programação em que o paradigma estruturado é seguido, o código-fonte de uma aplicação pode ser reduzido em apenas três estruturas: sequência, decisão e iteração (repetição).

Sequência

Nesta primeira estrutura, as tarefas são executadas de forma linear, ou seja, uma após a outra. Abaixo encontra um pequeno exemplo.

1 Acordar; 2 Vestir; 3 Tomar o pequeno-almoco; 4 Ir trabalhar;

Este é um exemplo de uma sequência onde são realizadas as ações normais do dia-a-dia de um indivíduo que está empregado.

1.4 Paradigmas de programação 15

Retornando novamente ao trecho de código escrito acima, repare que Trabalhar só será executado se e apenas se o indivíduo Acordar. Caso contrário, o trecho Não trabalhar será executado.

Figura 1.5: Exemplo de uma decisão em fluxograma

Agora veja o seguinte exemplo em que a condição “Dói-me a cabeça. Se doer muito pouco, vou trabalhar. Se doer pouco, tomo um comprimido e vou trabalhar. Se doer muito, vou ao médico e falto ao trabalho” é executada.

1 case "Dor de cabeca" 2 when "muito pouco" then "trabalhar" 3 when "pouco" then "tomar comprimido"; "trabalhar" 4 when "muito" then "ir ao médico"; "não trabalhar"

Novos Termos:

  • case → caso
  • when → quando
  • else if → caso contrário se

Figura 1.6: O que farei se me doer a cabeça

1.4 Paradigmas de programação 16

Este é mais um exemplo mas utilizando diferentes comandos. Este trecho poderia ser também escrito através de primitivas if/else da seguinte forma (ver Figura 1.6): 1 if "Dor de cabeca" 2 if "muito pouco" then 3 "trabalhar"; 4 else if "pouco" then 5 "tomar comprimido"; 6 "trabalhar"; 7 else if "muito" then 8 "ir ao médico"; 9 "não trabalhar"; 10 endif 11 endif

Iteração

Neste tipo de estrutura, também conhecido como repetição, um trecho de código é repetido um número finito de vezes dependendo do resultado de um teste lógico. Abaixo encontra a repetição “não saio de casa enquanto não estiver vestido” em pseudocódigo: 1 do { 2 "não sair de casa"; 3 } while ( "não estou vestido" )

Novo termo:

  • do → fazer Ou seja, o código acima pode ser lido da seguinte forma: fazer “não sair de casa” enquanto “não estou vestido”. De forma generalizada, fazer x enquanto y. Agora veja o retrato da repetição “enquanto durmo, não me visto” em pseudocódigo: 1 while ( durmo ) 2 naoMeVisto();

Ou seja, enquanto acontece algo, faço outra coisa. Visualize agora o código correspondente à ação “lavar os dentes 20 vezes”. 1 for ( i = 0; i++; i < 20 ) 2 lavarOsDentes();

Ou seja, enquanto não acontece qualquer coisa, faço qualquer coisa. Mais um exemplo, mas referente à expressão “Para cada dente, lavo-o muito bem”. 1 for each dente in boca 2 lavarMuitoBem();

Novos Termos:

  • each → cada
  • in → em Ou seja, para cada item do conjunto, fazer qualquer coisa.

1.4.4 Paradigma declarativo

O Paradigma Declarativo contrasta com o Imperativo pois é capaz de expressar a lógica sem descrever como o fluxo de comandos funciona, ou seja, apenas diz ao computador o que fazer e não como fazer. Um excelente exemplo de uma linguagem que utiliza este paradigma é Prolog, muito utilizado na área de inteligência artificial.