Programação Orientada à Procedimentos II Programação Orientada à Procedimentos I Processamento Paralelo Lógica de Programação Introdução à Computação Informática Básica

 

 

Informática Básica
Introdução à Computação
Lógica de Programação
Programação Orientada à Procedimentos I
Programação Orientada à Procedimentos II

Processamento Paralelo

Aula 1

Aula 2

Aula 3

1 - Introdução à Programação

     Programas de computadores, também conhecidos como software, são sequências de instruções que o computador executa com a finalidade de realizar uma determinada tarefa requerida pelo usuário. Tais sequências de instruções são na verdade sequências de dígitos binários ( 0´s e 1´s ) que estao armazenados na memória do computador. Na década de 50 os programadores escreviam seus programas utilizando tal linguagem binária, mas com o avanço da complexidade e capacidade dos computadores foi necessária a criação de linguagens de programação, permitindo que a criação de programas se tornasse mais clara e facil. Dentre tais linguagens estão o Fortran, Cobol, Pascal e C/C++. Deste modo o progamador escreve seus programas em arquivos do tipo texto seguindo um conjunto de regras e sintaxe impostos pela linguagem utilizada. Com a utilização de um outro programa, o compilador, tais arquivos texto são entao convertidos para arquivos binários podendo ser executados pelo computador.

1.1 - Criando um arquivo texto (arquivo fonte)

     Para criar um arquivo texto, ou seja, um arquivo que contenha o fonte do programa escrito em alguma linguagem específica, como por exempo C, é necessária a utilização de um programa editor de textos ASCII como o programa EDIT fornecido com o sistema operacional MS-DOS. Outro modo de criar um arquivo texto é utilizando o próprio editor de textos interno do compilador, como é o caso do compilador Turbo C++ Lite, neste caso o arquivo pode ser criado da seguinte forma:

  • Selecione a opção "New" no menu "File".
  • Digite o seguinte código na janela:

#include <stdio.h>

void main (void)

{

          printf ("Hello World!");

}

  • Selecione a opção "Save As" para salvar o arquivo no disco.
  • Na nova caixa de diálogo digite o nome "primeiro.c" como sendo o nome do arquivo e pressione o botão ENTER

 

1.2 - Compilando um programa

     O processo de converção de um programa em formato texto (fonte) escrito em uma determinada linguagem (como C) para um formato binário executável pelo computador se chama compilação. Utilizando o compilador Turbo C++ Lite para compilar o programa digitado anteriormente tem-se a sequencia:

  • No menu "Compile" selecione o comando "Build All".
  • Se nao existirem erros na sintaxe do programa C digitado, o compilador criará um arquivo chamado "primeiro.exe" no mesmo diretório do arquivo "primeiro.c".
  • Se existirem erros no programa fonte em C, serão exibidas mensagens que indicarão qual o tipo e o local aproximado do erro dentro do código fonte.
  • Para executar o programa compilado basta selecionar o comando "Run" no mesmo menu, ou ainda pressionar as teclas CRTL + F9 simultâneamente.

     Durante o processo de compilação também são gerados arquivos com extensão OBJ. Tais arquivos são utilizados internamente pelo compilador e são compostos por código binário de cada parte do programa compilado. Todas as partes são então agrupadas para a criação do arquivo com extensão EXE já citado anteriormente.

 

1.3 - Compreendendo erros de sintaxe

     Toda linguagem de programação tem suas próprias regras de sintaxe que devem ser obedecidas durante a especificação dos comandos do programa fonte para que a compilação do código possa ser efetuada. Em caso da existência de algum erro mensagens de erro serão exibidas com uma breve descrição do tipo do erro e indicando o local aproximado dentro do código fonte. Tendo o seguinte código:

#include <stdio.h>

void main (void)

{

          printf ("Hello World!);

}

     Compilando este código serão exibidas as seguintes mensagens de erro:

  • Undeterminated string or character constant in function main
  • Function call missing ) in function main()
  • Statement missing ; in function main()

     Apesar de existir somente um erro na sintaxe (a falta das aspas finais logo após o ponto de exclamação) são exibidas três mensagens de erro. Isso se deve ao fato de um erro poder causar inconsistência no restante do código, gerando outros erros em cascata durante o processo de compilação.

     DICA: Para corrigir os erros retornados pelo processo de compilação sempre comece pelo erro localizado nas primeiras linhas de código deste modo erros decorrentes por inconsistência de código são eliminados.

     DICA: A linguagem C é sensível a letras maiúsculas e minúsculas. Deste modo deve ser dada atenção durante a digitação do programa, caso contrário vários tipos de erros podem ser gerados. Um tipo bastante comum de erro é digitar a letra inicial do nome de uma funçao em maiúsculo. Como a declaração correta da função "main" é toda minúscula Seria apresentado um erro de compilação semelhante ao seguinte, caso o nome da função fosse escrito com inicial maiúscula ("Main"):

Linked error: Undifined symbol _main in module TURBO_C\COS.ASM

 

1.4 - Estrutura Básica de um programa C

     De forma geral programas escritos em linguagem C são compostos basicamente por funções. Cada função, por si própria pode chamar outras funçoes para a execução como na função "main" implementada no exemplo anterior. Todos os programas C possuem declarada a função principal (main) que é onde o programa inicia sua execução após ter sido compilado e executado.

     A medida que mais tarefas se tornam necessárias na execução de um programa, mais comandos devem ser inseridos. Ainda utilizando o programa exemplo anterior, se fosse desejado que mais mensagens fosse apresentadas na tela durante a execução da funçao "main", mais comandos (chamadas à função "printf") podem ser inseridos entre o abrir e fechar de colchetes que delimitam o conteúdo da função "main", da seguinte forma:

#include <stdio.h>

void main (void)

{

      printf ("Hello World! ");

      printf ("Este e´ o primeiro programa");

}

 

     Compilando e executando o programa anterior será apresentada a seguinte saída de tela:

Hello World! Este e´ o primeiro programa

 

      No mesmo exemplo, tem-se a utilização de uma outra função "printf" que exibe uma mensagem na tela durante a execução do programa. Esta função nao está implementada no programa e por isso o comando "include" é utilizado logo no início do programa. Ele indica arquivos externos onde estão as implementações de funções utilizadas no programa principal, anexando estas implementações durante a fase de compilação. No exemplo é anexado o arquivo "stdio.h".

 

1.5 - Compreendendo erros lógicos

     Muitas vezes o código fonte é compilado sem que nenhum erro de sintaxe seja apresentado mas o programa compilado não funciona da forma como se desejaria. Neste caso podem existir erros de lógica na estrutura e organização do programa. Um exemplo de erro lógico seria o do programa onde deseja-se apresentar duas mensagens, uma em cada linha:

#include <stdio.h>

void main (void)

{

          printf ("Mensagem da linha um");

          printf ("Mensagem da linha dois");

}

     O programa compilará normalmente, sem erros, entretando tem-se a seguinte saída de tela:

Mensagem da linha umMensagem da linha dois

 

    DICA: Os caracteres "\n" inseridos ao final de cada frase instruem a função "printf" a pular para a próxima linha após a mensagem ter sido apresentada na tela.

     O processo de remover erros lógicos de um programa é chamado de depuração que pode consistir de simples verificação de cada linha de código manualmente, ao que se dá o nome de verificação de mesa.



1.6 - Arquivos de Cabeçalho

     Como já citado na sessão 1.4, na maioria dos programas C é necessária a inserção da diretiva de compilação #include no código do programa. Ela indica ao compilador para incluir um arquivo de cabeçalho na fase de compilação. Tal arquivo de cabeçalho nada mais é do que outro arquivo texto (ASCII) onde estão implementadas em C as funções mais comumente utilizadas, como, por exemplo, a função printf. Quando encontra tal diretiva o compilador concatena o conteúdo do arquivo de cabeçalho na sequência de código do programa principal, o que tem o mesmo efeito se todo o código do arquivo de cabeçalho fosse digitado no programa principal.

     DICA: Dependendo do compilador utilizado a localização dos arquivos de cabeçalho é configurada de acordo com variáveis de ambiente do sistema operacional. Caso, ao compilar um programa, seja exibida uma mensagem dizendo que não foi possível abrir algum arquivo de cabeçalho deve-se verificar se a variável de ambiente INCLUDE está configurada. Caso não esteja configurada isto pode ser feito com o comando SET do DOS, como mostrado no quadro a seguir:

     DICA: Durante a fase de compilação de um programa vários arquivos temporários são criados pelo compilador. Para melhor organizar o local onde os arquivos temporários são criados e melhorar o desempenho do compilador é recomendável a configuração da variável de ambiente TEMP, também mostrada no quadro a seguir. Desta forma o compilador é instruído a gravar os arquivos temporários no diretório configurado que preferencialmente deve ser um disco com maior espaço livre e melhor velocidade.

Variáveis de ambiente antes da configuração

C:\> SET <ENTER>

COMSPEC=C:\DOS\COMMAND.COM

PATH=C:\DOS;C:\WINDOWS;C:\BORLANDC\BIN

PROMPT=$P$G

Variáveis de ambiente depois da configuração

C:\> SET INCLUDE=C:\BORLANDC\INCLUDE

C:\> SET TEMP=C:\TEMP

C:\> SET <ENTER>

COMSPEC=C:\DOS\COMMAND.COM

PATH=C:\DOS;C:\WINDOWS;C:\BORLANDC\BIN

PROMPT=$P$G

INCLUDE=C:\BORLANDC\INCLUDE

TEMP=C:\TEMP

 

1.7 - Mensagens de Advertência do Compilador

     Muitas vezes, apesar de serem exibidas mensagens de erro, o compilador ainda consegue gerar um executável. Estas mensagens são mensagens de advertência e, do mesmo modo que mensagens de erro de sintaxe, devem ser corrigidas. Elas indicam a presença de erros que podem gerar resultados imprevisíveis no programa ou ainda provocar erros em cascata mais graves na sequência do código, tornando mais difícil a sua depuração.

     Embora tais mensagens de advertência sejam de grande importância elas podem ser desativadas caso seja necessário. Isto pode ser feito com uma diretiva de compilação chamada pragma. Por exemplo, se for desejado que a mensagem de advertência "Identifier is declared but never used" seja desativada basta inserir no início do código do programa a seguinte linha:

#pragma warn -use

 

1.8 - Organização do Código

     Toda vez que um novo programa for criado deve-se ter em mente que ele deve ser escrito de uma forma que facilite a sua leitura e compreensão por outra pessoa. Um bom programa é aquele que não só funciona e retorna os resultados desejados, como também é aquele que é fácil de se ler e compreender.

1.8.1 - Comentários

     A chave para se criar programas legíveis é a inclusão de comentários que explicam o sentido do processamento do programa e também inserir linhas em branco como separadores para blocos de processamento. Linhas de comentários são ignorados pelo compilador durante a fase de compilação e podem ser inseridos de duas formas:

  • Utilizando o par de símbolos "/*" e "*\" que delimitam o início e o fim do comentário, respecitivamente.
  • Utilizando os símbolos "//" no início de uma linha, o que indica que toda a linha é um comentário e deve ser ignorada pelo compilador.

     DICA: Uma utilização bastante útil de comentários é quando da necessidade de se "desativar" algumas partes do código. Desta forma estas partes podem ser englobadas pelos símbolos anteriores e serem ignoradas pelo processo de compilação, como mostrado no quadro a seguir, onde as duas linhas com funções printf foram transformadas em comentários:

#include <stdio.h>

void main(void)

{

   //printf("linha transformada em comentário");

/*

   printf("linha transformada em comentário");

*/

}

 

1.8.2 - Nomes de Funções x Portabilidade

     Algumas implementações de funções em C variam de um sistema operacional para outro, assim como seus nomes. É comum encontrar-se nomes de funções da forma "__chmode" para o sistema DOS e a mesma função com o nome "chmode" em sistemas UNIX. Desta forma as vezes torna-se necessária programação adicional para garantir portabilidade de código entre sistemas operacionais diferentes.

     Na maioria das vezes funções que têm seus nomes iniciados com os símbolos "__" ou são funções específicas de um determinado sistema operacional ou não são completamente implementadas e, assim sendo, deve-se evitar sua utilização procurando substituí-las por funções semelhantes e portáveis.

1.8.3 - Ponto-e-vírgula

     Como visto anteriormente, programas são uma sequência lógica de comandos ou funções com a finalidade de realizar uma tarefa. A maneira adotada pela linguagem C de separar cada comando (ou instruções) é delimitando o final de cada uma delas com o caractere de ponto-e-vírgula ";". Desta forma o compilador consegue identificar onde termina uma linha de programa e onde começa a seguinte. A utilização do ponto-e-vírgula é obrigatória pois podem ocorrer situações onde funções C podem ser tão grandes a ponto de utilizarem duas ou mais linhas. Nesta situação o compilador procurará o final da função através da localização do ponto-e-vírgula.




1.9 - Exercício


1) Elabore um programa em C, o qual solicita ao usuário um certo valor em centímetros. Converta esse valor para metros e mostre a resposta.