O que é um programa de computador Os computadores das variadas arquiteturas têm funcionamento semelhante. A figura 1 apresenta a arquitetura simplificada de um computador. Figura 1 – Arquitetura simplificada de um computador. A parte física do computador é chamada de hardware, que é formado basicamente por uma Unidade Central de Processamento (UCP), pela memória e pelos dispositivos de entrada e saída. O barramento faz a ligação desses componentes. A UCP (ou processador) contém um conjunto relativamente pequeno de instruções que é capaz de executar. Cada processador contém um conjunto diferente de instruções, apesar de similares entre si. As instruções que o processador executa são buscadas na memória. Essas instruções podem ser desde operações matemáticas a interações com os dispositivos de entrada e saída. Chamamos de programa de computador um conjunto de instruções que será executado pelo processador em uma determinada sequência e que faz com que o computador execute alguma tarefa. Como podemos perceber o programa nada mais é que um tipo de algoritmo. Sua particularidade é que suas operações são específicas para o computador e restritas ao conjunto de instruções que o processador pode executar. Podemos considerar esse conjunto de instruções como a primeira linguagem de programação do computador, também chamada de linguagem de máquina. As linguagens de programação mais semelhantes à linguagem de máquina são conhecidas como linguagens de baixo nível. As linguagens de programação mais parecidas com a linguagem natural são conhecidas como linguagem de programação de alto nível. A linguagem de programação que um computador é capaz de “compreender” é composta apenas de números. Para que um programa escrito em linguagem de alto nível possa ser executado por um computador, é necessário que o seu código seja traduzido para o código de máquina. Essa tradução é feita por um compilador ou por um interpretador. 1 O compilador traduz o código-fonte, escrito em linguagem de alto nível, para um código em linguagem de máquina conhecido como código-objeto. Esse código objeto fica armazenado em um arquivo em disco e só é carregado em memória no momento de execução. Figura 2 – Compilação de um programa. O interpretador traduz o código-fonte para código-objeto em tempo de execução, instrução a instrução (não gera arquivo em disco). Figura 3 – Interpretação de um programa. Características das linguagens de programação de alto nível: 1. Rigidez Sintática: O compilador é um tradutor relativamente limitado, que só consegue fazer as traduções sobre um idioma bastante limitado, com construções muito bem definidas. Apesar de encontrarmos palavras pertencentes à linguagem natural, elas não serão usadas com a mesma liberdade. 2. Rigidez Semântica: O computador definitivamente não pode lidar com ambigüidades. Por isso, não adianta o programador ter um intenção se não conseguir exprimi-la de forma exata. Podemos dizer que o computador é um ótimo cumpridor de ordens, porém não tem idéia de quais ordens está cumprindo, nem o contexto em que essas ações estão inseridas. 2 Estrutura Básica de um Programa em C++ #include <iostream> using namespace std; int main() { //comandos do programa system("PAUSE > null"); return 0; } Entenda a estrutura básica Linha do programa #include <iostream> using namespace std; Observação Linha de cabeçalho. O cabeçalho define quais as bibliotecas ele utilizará. “Bibliotecas” são arquivos que normalmente são instalados juntos com o compilador e que possuem os comandos e funções pertencentes à linguagem. O cabeçalho #include<> indica ao compilador todas as bibliotecas que o programa utilizará. Esta biblioteca contém as principais funções, comandos e classes de entrada e saída de C++, necessárias para programas que, por exemplo, recebam dados via teclado e enviem dados via monitor. Linha de cabeçalho. É um aviso ao compilador do uso dos comandos e funções padrão de C++. Ele é necessário porque em C++ podemos criar várias bibliotecas para serem utilizáveis em vários programas. Cada uma dessas bibliotecas contém comandos, classes e funções próprias, e para evitar confusões e problemas com os nomes destes comandos, utilizamos o cabeçalho “using namespace ...;” para definir qual o campo de nomes que estamos utilizando. Num programa normal, que não utiliza outras bibliotecas além da padrão de C++, utilizamos o namespace std como nosso campo de nomes de comandos e funções. Assim, sempre que utilizamos um comando próprio de C++, o compilador reconhecerá automaticamente este comando como sendo pertencente à biblioteca padrão de C++. 3 Linha do programa int main() { //comandos do programa system("PAUSE > null"); return 0; } Observação Declaração da função principal. Tudo o que acontece durante a execução do programa está contido dentro de uma função principal, chamada main. Todos os comandos executados pelo programa estão contidos entre as chaves “{ }” da função main. Aqui a chave aberta indica o início dos comandos do programa. Cada programa terá seus próprios comandos, logicamente. Entretanto, o encerramento de um programa geralmente é feito da mesma maneira para todos eles. As duas últimas linhas antes do fecha-chaves são dois comandos normalmente utilizados ao fim de um programa. É uma chamada de função própria de C++. A função system( ) recebe argumentos como o PAUSE que na verdade são comandos para o sistema operacional. Neste caso, ela recebe o comando “PAUSE > null” para interromper a execução do programa até que o usuário aperte uma tecla qualquer. Utilizamos este recurso para que a tela do programa não seja terminada automaticamente pelo sistema, impedindo que vejamos os resultados do programa. É a “resposta” da função main para o sistema. Quase toda função retorna um valor para o sistema ou programa que a chamou (pode ser o resultado de uma operação matemática). No caso da função main, ela retorna um valor para o sistema operacional que executou o programa. Esse valor é interpretado pelo sistema como uma mensagem indicando se o programa foi executado corretamente ou não. Um valor de retorno 0 indica que o programa foi executado sem problemas; qualquer outro valor de retorno indica problemas. Quando o programa é executado até o fim, ele retorna 0 ao sistema operacional, indicando que ele foi executado e terminado corretamente. Quando o programa encontra algum erro ou é terminado antes da hora, ele retorna um valor qualquer ao sistema, indicando erro durante a execução. Chave fechada. Fim dos comandos do programa. 4 O primeiro programa em C. // Meu primeiro programa em C++ #include <iostream> using namespace std; int main() { cout << "OLA!"; system("PAUSE>null"); return 0; } Linha do programa // Meu primeiro programa em C++ #include <iostream> Observação Esta linha é um comentário. Todas as linhas que começam com “ // ” são consideradas comentários e não alteram o comportamento do programa (isto é, não são executadas). Linhas de cabeçalho. using namespace std; int main() Declaração da função principal. { cout << "OLA!"; return 0; Chave aberta. Exibe valores na tela. Esse programa exibirá na tela a mensagem OLA! Interrompe a execução do programa até o usuário aperte uma tecla qualquer. Resposta ao sistema. } Fecha chave. system("PAUSE>null"); 5 Outros exemplos Exemplo 1: //Programa soma #include <iostream> using namespace std; int main() { int num1, num2, num3, soma, resp; num1 = 10; num2 = 20; num3 = 30; soma = num1 + num2 + num3; cout << "\n O valor da soma e: " << soma << "\n"; system("PAUSE>null"); return 0; } Exemplo 2: //Programa soma de 2 números #include <iostream> using namespace std; int main() { int num1, num2, soma; cout << "\n Digite o primeiro numero "; cin >> num1; cout << "\n Digite o segundo numero "; cin >> num2; soma = num1 + num2; cout << "\n O valor da soma e: " << soma << "\n"; system("PAUSE>null"); return 0; } 6 Exemplo 3: //Programa lê e mostra nome #include <iostream> using namespace std; int main() { char nome[10]; cout << "Escreva o seu nome "; cin >> nome; cout << "Voce se chama..." << nome; system("PAUSE>null"); return 0; } Referências Algoritmos e Programação: Teoria e Prática. Segunda Edição. Marco Medina e Cristina Fertig. São Paulo. Editora Novatec, 2006. http://apostilacpp.awardspace.com/index.php?pagina=modulo02 acessado em 15/04/2010. 7