Ivan L. M. Ricarte. Departamento de Engenharia de Computac~ao e Automac~ao Industrial. Faculdade de Engenharia Eletrica e de Computac~ao

Tamanho: px
Começar a partir da página:

Download "Ivan L. M. Ricarte. Departamento de Engenharia de Computac~ao e Automac~ao Industrial. Faculdade de Engenharia Eletrica e de Computac~ao"

Transcrição

1 Programac~ao C Ivan L. M. Ricarte Departamento de Engenharia de Computac~ao e Automac~ao Industrial Faculdade de Engenharia Eletrica e de Computac~ao Universidade Estadual de Campinas c1995,1996 DCA/FEEC/UNICAMP

2 Programac~ao C DCA/FEEC/UNICAMP 2

3 Indice 1 Introduc~ao A Historia de C : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Interac~ao entre Programador e Computador : : : : : : : : : : : : : : : : : : : : : : Princpios de Organizac~ao de Computadores : : : : : : : : : : : : : : : : : : : : : : Representac~ao Numerica : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Modos de Enderecamento : : : : : : : : : : : : : : : : : : : : : : : : : : : : Princpios de Sistemas Operacionais : : : : : : : : : : : : : : : : : : : : : : : : : : : Desenvolvimento desoftware : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Projeto : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Programac~ao Estruturada : : : : : : : : : : : : : : : : : : : : : : : : : : : : Codicac~ao : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Criando um Programa Executavel : : : : : : : : : : : : : : : : : : : : : : : : Atividades : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 19 2 Princpios de Programac~ao C Organizac~ao Basica de Programas C : : : : : : : : : : : : : : : : : : : : : : : : : : Tipos de Dados : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Declarac~oes de Variaveis : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Express~oes : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Express~oes Aritmeticas : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Express~oes Condicionais : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Operadores de Bits : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Controle do Fluxo de Execuc~ao : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Invocac~ao defunc~oes : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : AFunc~ao printf : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Atividades : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 41 i

4 INDICE Programac~ao C 3 Arranjos, Estruturas e Ponteiros Arranjos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Strings : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Estruturas : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Denic~ao de Estruturas : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Acesso a Elementos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Campos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Uni~oes : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Enumerac~oes : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Denic~ao de Nomes de Tipos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Ponteiros : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Aritmetica de Ponteiros : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Ponteiros e Arranjos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Ponteiro como Argumento defunc~oes : : : : : : : : : : : : : : : : : : : : : : Ponteiros e Estruturas : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Ponteiros para Func~oes : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Argumentos na LinhadeComando : : : : : : : : : : : : : : : : : : : : : : : : : : : Ger^encia da Memoria Livre : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : O Ponteiro Nulo : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Atividades : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 68 4 Biblioteca Padr~ao OPre-processador C : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : A diretiva #include : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : A diretiva #dene : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Compilac~ao Condicional : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Outros Recursos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Rotinas para Entrada esada de Dados : : : : : : : : : : : : : : : : : : : : : : : : : Interac~ao com Dispositivos Padr~ao : : : : : : : : : : : : : : : : : : : : : : : Interac~ao com Arquivos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Rotinas para Manipulac~ao de Strings : : : : : : : : : : : : : : : : : : : : : : : : : : Rotinas para Interac~ao com o Sistema Operacional : : : : : : : : : : : : : : : : : : : Exemplo de Aplicativo : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Atividades : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 99 DCA/FEEC/UNICAMP ii

5 Ricarte INDICE 5 Introduc~aoaC OQueEC++ : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Programac~ao OrientadaaObjetos : : : : : : : : : : : : : : : : : : : : : : : : : : : : Particularidades de C++ : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : EntradaeSada : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Denic~ao de Variaveis : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Alocac~ao Din^amica : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Argumentos de Func~oes : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Classes : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Construtores e Destrutores : : : : : : : : : : : : : : : : : : : : : : : : : : : : Objetos e Func~oes : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Sobrecarga de Operadores : : : : : : : : : : : : : : : : : : : : : : : : : : : : Heranca : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Heranca de Construtores e Destrutores : : : : : : : : : : : : : : : : : : : : : Outros Conceitos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Atividades : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 121 A Palavras reservadas em C e C B Preced^encia de Operadores 127 C Conjunto de caracteres do padr~ao ASCII 129 D Emacs 133 E Compilador C 141 iii c1996

6 INDICE Programac~ao C DCA/FEEC/UNICAMP iv

7 Lista de Figuras 1.1 Arquitetura von Neumann. : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Papel do Sistema Operacional. : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Processo de evoluc~ao do software. : : : : : : : : : : : : : : : : : : : : : : : : : : : : Estruturas elementares de dados. : : : : : : : : : : : : : : : : : : : : : : : : : : : : Mecanismos basicos da programac~ao estruturada. : : : : : : : : : : : : : : : : : : : Estrutura basica de um algoritmo. : : : : : : : : : : : : : : : : : : : : : : : : : : : : Algoritmo que faz nada. : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Sequ^encia em C. : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Selec~ao com if:::else em C. : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Switch:::case : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Switch:::case sem break. : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Repetic~ao em C : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Repetic~ao em C com for : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 37 v

8 LISTA DE FIGURAS Programac~ao C DCA/FEEC/UNICAMP vi

9 Captulo 1 Introduc~ao Resumo: O objetivo deste texto e apresentar a base de programac~ao em linguagem C necessaria para o desenvolvimento deaplicac~oes do usuario, que podem ser autocontidos, usar recursos do sistemaoperacional ou recursos de outros aplicativos. Neste captulo s~ao introduzidos os conceitos basicos que constituem a base para a codicac~ao em qualquer linguagem de programac~ao. Estes conceitos ser~ao posteriormente revistos sob a optica da linguagem de programac~ao C. 1.1 A Historia de C A linguagem de programac~ao C foi desenvolvida noincio dos anos 70 nos Laboratorios AT&T Bell, nos Estados Unidos. A motivac~ao para que o autor de C, Dennis Ritchie, criasse uma nova linguagem de programac~ao foi o desenvolvimento do sistemaoperacional Unix. C e uma ferramenta t~ao basica que praticamentetodas as ferramentas suportadas por Unix e o proprio sistemaoperacional foram desenvolvidas em C. C acompanhou o ritmo da distribuic~ao do sistema operacional Unix, que foi amplamente divulgado e livremente distribudo na decada de 70. Apesar de haver compiladores para linguagens mais \tradicionais" na distribuic~ao Unix, aos poucos C foi ganhando simpatizantes e adeptos. Atualmente, n~ao ha duvidas de que C e uma das linguagens de programac~ao de maior aceitac~ao para uma ampla classe de aplicac~oes. Um dos grandes atrativos da linguagem C e o balanco atingido entre caractersticas proximas 1

10 Introduc~ao Programac~ao C da arquitetura de computadores e caractersticas de linguagens de programac~ao com alto nvel de abstrac~ao. O ascendente mais remoto dec, Algol 60, desenvolvida por um comit^e internacional, foi uma linguagem que buscava umalto graudeabstrac~ao, com estruturas modulares e sintaxe regular. Por Algol ser \abstrata demais", variantes surgiram que buscavam aproximar aquela linguagem um pouco mais da maquina, tais como CPL (Combined Programming Language), desenvolvida na Inglaterra. Esta linguagem era ainda muito complexa, o que dicultava seu aprendizado e a implementac~ao de bons compiladores. BCPL (Basic CPL) buscava capturar apenas as caractersticas principais de CPL, e B (desenvolvida por Ken Thompson nos Laboratorios Bell, em 1970) levava este objetivo ainda mais adiante. Entretanto, estas linguagens caram t~ao \basicas" que tinham pouca aplicac~ao direta. Ritchie reincorporou algumas caractersticas de alto nvel a B,tais como suporte atipos de dados, para criar a linguagem C. A simplicidadedecn~ao restringe, no entanto,apotencialidadede suas aplicac~oes. Blocos desempenhando tarefas muito complexas podem ser criados a partir da combinac~ao de blocos elementares, eestemecanismode combinac~ao de partes pode seestender por diversos nveis. Esta habilidade de construir aplicac~oes complexas a partir de elementos simples e um dos principais atrativos da linguagem. Osucesso de Cfoit~ao grande que diversas implementac~oes de compiladores surgiram, sendo que nem todos apresentavam o memso comportamento empontos especcos, devido a caractersticas distintas arquiteturas de computadores ou a \extens~oes" que se incorporavam a linguagem. Para compatibilizar o desenvolvimento de programas em C, o Instituto Norte-Americano de Padr~oes (ANSI) criou em 1983 um comit^e com o objetivo de padronizar a linguagem. Oresultado deste trabalho foi publicado em 1990, e foi prontamente adotado como padr~ao internacional. Alem de padronizar aspectos basicos da linguagem, ANSI-C tambem deneum conjunto de rotinas de suporte que, apesar de n~ao ser parte integrante da linguagem, deve ser sempre fornecido pelo compilador. 1.2 Interac~ao entre Programador e Computador Um computador nada mais faz do que executar instruc~oes que lhe s~ao detalhadamente passadas. Ha muitas maneiras de um usuario de um computador requisitar a execuc~ao de uma tarefa. Por exemplo, tais interac~oes podem ocorrer atraves de um comando de umsistemaoperacional (como dir em MS-DOS ou ls em Unix para apresentar o conteudo de um diretorio) ou atraves de interac~ao com uma interface graca (por exemplo, carregar umcone deum arquivo para um smbolo de uma lata de lixo para remover o arquivo dosistema, como em um sistema NeXT). As formas de interac~ao descritas acima representam apenas distintas interfaces para a execuc~ao DCA/FEEC/UNICAMP 2

11 Ricarte Princpios de Organizac~ao de Computadores [1.3] de programas. Um programa nada mais e do que uma sequ^encia de instruc~oes para um computador, onde esta sequ^encia de instruc~oes foi denida por um programador. O programador determinaas instruc~oes que devem ser executadas em termos de uma linguagem de alto nvel. Em linguagens de alto nvel, as instruc~oes s~ao passadas para o computador usando termos que se aproximam da linguagem humana, de forma a facilitar a express~ao e compreens~ao das tarefas a executar. Ha diversas linguagens de alto nvel disponveis para diversas maquinas distintas. Em geral, cada linguagem teve uma motivac~ao para ser desenvolvida (por exemplo, BASIC para ensinar princpios de programac~ao e Pascal para o ensino de programac~ao estruturada, FORTRAN para programac~ao cientca, e lisp para processamento emintelig^encia Articial). A linguagem C e uma destas linguagens, que foi desenvolvida para facilitar o desenvolvimentode software de sistemas (por exemplos, sistemas operacionais). Ofato deuma linguagem ter sido desenvolvida com uma aplicac~ao em menten~ao signica que ela n~ao seja adequada para outras aplicac~oes. Este foiocasocomalinguagem C que, juntamente com sua sucessora C++, e atualmenteutilizada para um universo muito amplo de aplicac~oes. Uma das grandes vantagens da linguagem C e sua exibilidade: um programador C tem a sua disposic~ao comandos que permitem desenvolver programas com caractersticas de alto nvel e ao mesmo tempo trabalhar em um nvel muito proximo da arquitetura da maquina, de forma a explorar os recursos disponveis de forma mais eciente. Por este motivo, o numero de aplicac~oes desenvolvidas em C e C++ (assim como o numero de programadores) v^em se ampliando muito em anos recentes. 1.3 Princpios de Organizac~ao de Computadores Apesar da evoluc~ao tecnologica que ampliou sensivelmente a capacidade de processamento de computadores em anos recentes, a base da organizac~ao interna damaior parte dos computadores permanece inalterada. Esta organizac~ao, conhecida com a Arquitetura von Neumann 1 e diagramaticamente apresentada na Figura 1.1. Por esta gura, observa-se que um computador tem tr^es elementos basicos: processador central (CPU): e ocerebro do computador, que decifra instruc~oes recebidas e as executa memoria: permite armazenar instruc~oes e dados 1 De John von Neumann, matematico hungaro (1903{1957). Atuou como consultor no Projeto ENIAC, em meados dadecada de c1996

12 Introduc~ao Programac~ao C CPU Unid. Controle Unid. Lógica e Aritmética Progr. Dados Memória E/S Mundo Exterior Barramento Figura 1.1: Arquitetura von Neumann. sistemadeentradaesada (E/S): estabelece a comunicac~ao entre o computador e o mundo exterior. Qualquer interac~ao entre umaaplicac~ao e o computador deve agir sobre umdestes tr^es elementos. Cada processador entende uma linguagem propria, que reete as instruc~oes basicas que ele pode entender. Uma sequ^encia de comandos simbolicos utilizando este nvel de instruc~oes e um programa assembly, que pode ser convertido para os bits que ser~ao entendidos pelo processador (a linguagem de maquina). Na arquitetura von Neumann, um programa (convertido para a linguagem da maquina) e armazenado na memoria. A memoria e acessada pelo processador em unidades chamadas palavras. A forma deum processador acessar uma palavra especca dentro da memoria e atraves da posic~ao da palavra dentro da memoria esta posic~ao e chamada de endereco. Assim, a memoria pode ser visualizada como uma sequ^encia de palavras ordenadas segundo seus enderecos. A execuc~ao de uma instruc~ao de um programa pode ser vista (simplicadamente) da seguinte forma: 1. o processador busca a instruc~ao do programa 2. o processador decodica a instruc~ao, isto e, descobre que ac~ao ele deve realizar para aquela instruc~ao 3. se esta ac~ao requer dados adicionais que est~ao em memoria, o processador busca tambem estes dados 4. o processador executa aac~ao associada a instruc~ao DCA/FEEC/UNICAMP 4

13 Ricarte Princpios de Organizac~ao de Computadores [1.3] 5. o processador armazena o resultado gerado na memoria. Este processo e repetido desde a primeira ate aultima instruc~ao de um programa. Quando uma instruc~ao requer uma interac~ao com algum dispositivo externo (por exemplo, entrada via teclado, apresentac~ao de um caracter na tela, acesso a um dado em disco), os dispositivos de entrada esada s~ao ativados de forma que ocorre uma interac~ao entre estes dispositivos e a memoria do computador. Quandoaoperac~ao e desada dedados, palavras s~ao transferidas da memoria para o dispositivo externo. Quando a operac~ao e deentrada, dados s~ao transferidos do dispositivo externo para a memoria do computador Representac~ao Numerica Internamente, todos os dados s~ao representados no computador como sequ^encias de bits 2. Estaea forma mais conveniente para manipular os dados atraves de circuitos digitais, que podem diferenciar apenas entre dois estados (on ou o, verdade ou falso, 0ou1). Uma sequ^encia de N bits pode representar uma faixa com 2 N valores distintos. Oformato de representac~ao interna (ou seja, como uma sequ^encia de bitse traduzida para um valor) pode variar de computador para computador, embora a busca por uma uniformizac~ao para a representac~ao de tipos basicos venha ocorrendo nos ultimos anos. Assim, um caracter usualmente ocupa um byte com conteudo denido pelo codigo ASCII umnumero inteiro tem uma representac~ao binaria, em geral em complemento de dois e um valor real e usualmente representado no padr~ao IEEE de representac~ao em ponto utuante. Inteiros sem sinal (unsigned) t^em uma representac~ao computacional (em numeros binarios) equivalentea representac~ao usual para numeros decimais, ou seja, atraves da atribuic~ao de pesos associados a posic~ao de cada bit. Grande parte dos computadores atuais utilizam 32 bits para representar numeros inteiros, o que permite representar 4:924:967:296 valores distintos. (A gerac~ao mais recente de computadores suporta tambem inteiros com 64 bits.) Uma sequ^encia binaria esta associada ao valor inteiro s n;1s n;2s n;3 :::s 2 s 1 s 0 n;1 X i=0 s i 2 i onde s i 2 f0 1g. Obit s n;1 e chamado bit mais signicativo, enquanto que s 0 eobit menos signicativo. 2 Um bit e umdgito binario (binary digit), usualmente representado pelos smbolos 0 e 1. 5 c1996

14 Introduc~ao Programac~ao C A representac~ao de inteiros com sinal pode usar outros formatos. Aformamais basica e a representac~ao em sinal e magnitude, onde o bit mais signicativodenota osinal associado ao restante da sequ^encia (s n;1 =1indicaria que o numero e negativo). Este formato tem a desvantagem de ter duas representac~oes diferentes para o valor zero, alem de ter circuitos complicados para suportar operac~oes basicas. Outra formato suportado para representar inteiros com sinal e a representac~ao em complemento de um. A representac~ao para um numero negativo neste formato pode ser obtida facilmente a partir da representac~ao do numero positivo correspondente simplesmentecomplementando cada bit da sequ^encia, ou seja, trocando 0's por 1's e 1's por 0's. Apesar de simplicar circuitos para operac~oes basicas, este formato ainda mantem duas representac~oes distintas para o valor zero. O formato mais aceito para inteiros com sinal e semduvida a representac~ao em complemento de dois. Para obter a representac~ao de umnumero negativo neste formato, computa-se inicialmentea representac~ao em complementodeum e adiciona-se 1 ao bit menos signicativo. Neste caso, o valor inteiro associado a sequ^encia s n;1 :::s 0 e n;2 X i=0 s i 2 i ; s n;1 2 n : Este formato mantem a simplicidade dos circuitos aritmeticos e tem apenas uma representac~ao para o valor zero. Uma caracterstica que lhe e peculiar e ofato de que a faixa de valores representaveis n~ao e simetrica em torno de 0,havendo um valor negativo amais que a quantidade de valores positivos distintos. Por exemplo, sequ^encias de cinco bits podem representar valores entre -16 (10000) e +15 (01111). Nem todos valores armazenados em variaveis do computador representam numeros inteiros. O tipo n~ao-numerico mais suportado em diversas linguagens de programac~ao e o caracter (character). Sequ^encias de caracteres ocorrem t~ao frequentementeemcomputac~ao que recebem um nome especco, (string). Como uma sequ^encia de bits e traduzida emtermos de caracteres tem sido o objeto de diversos esforcos de padronizac~ao, tais como ASCII, ISO-8859, UniCode eobasic Multilingual Plan (BMP). O padr~ao mais aceito e semduvida oformato ASCII (American Standard for Computer Information Exchange). O formato ASCII basico permite representar 128 caracteres distintos, entre os quais est~ao diversos caracteres de controle (tais com esc, associado a tecla de escape, ecr, associado ao carriage return) e caracteres de pontuac~ao. Neste formato, os caracteres entre `0' e `9' s~ao representados pelos valores hexadecimais 30 H a39 H,respectivamente (valores decimais entre 48 e 57) as letras maiusculas `A' a `Z', pelos valores de 41 H a5a H e as letras minusculas `a' a `z', pelos DCA/FEEC/UNICAMP 6

15 Ricarte Princpios de Organizac~ao de Computadores [1.3] valores de 61 H a7a H. Outra forma de representac~ao n~ao-inteira corresponde a representac~ao em ponto utuante. Neste formato, associado ao conceito de notac~ao cientca, cada numero (real) e representado por umsinal, umamantissa e um expoente. Entre as inumeras combinac~oes possveis de formatos de representac~ao que seguem esta losoa basica, o padr~ao IEEE-754 tem sido o mais aceito e usualmente suportado em hardware (atraves das unidades de ponto utuante em co-processadores ou incorporados a CPUs). Este formato suporta representac~oes de numeros reais em precis~ao simples (32 bits, dos quais 8 para a representac~ao do expoente e 23 para a representac~ao da mantissa) e em precis~ao dupla (64 bits, sendo 11 para o expoente e 53 para a mantissa). Ha tambem representac~oes especiais para os valores ;1, +1 e NaN (Not a Number, associado ao resultado de operac~oes sem signicado matematico, tal como a divis~ao de zero por zero) Modos de Enderecamento Variaveis de um programa de computador s~ao armazenadas em memoria, e refer^encias a estas variaveis devem ser traduzidas internamenteemtermos de seus enderecos. Ha diversas maneiras possveis que computadores podem usar para especicar enderecos em suas instruc~oes estas formas s~ao os chamados modos de enderecamento. Embora o numero de combinac~oes possveis para a especicac~ao de enderecos possa ser praticamente sem m, processadores mais recentes (da linha RISC 3 ) suportam apenas as formas mais basicas de enderecamento, descritas a seguir. No modo de enderecamento direto oendereco de uma variavel e especicado diretamentena instruc~ao. Estae a forma mais intuitivadeenderecamento. No modo de enderecamento indexado, oendereco e computado a partir da soma deum endereco base (mantido em um registroda CPU) e um deslocamento. Esta formadeenderecamentoe perfeitamenteadequada para acesso a sequ^encias de valores, tais como suportadas por vetores numericos ou strings de caracteres. Oterceiro modo basico e oenderecamento indireto, onde oendereco especicado em uma instruc~ao n~ao e oendereco da variavel mas sim um endereco onde oendereco da variavel podera ser obtido. Este mododeenderecamento permite suportar um mecanismo de acesso din^amico, ou seja, uma mesma instruc~ao pode operar sobre variaveis distintas. Em termos de linguagem de programac~ao, este mododeenderecamento esta usualmente associado ao conceito deapontadores. 3 Reduced Instruction Set Computers, ou seja, computadores com um pequeno numero de instruc~oes. 7 c1996

16 Introduc~ao Programac~ao C 1.4 Princpios de Sistemas Operacionais O Sistema Operacional e um programa supervisor que estabelece uma camada entre o hardware do computador e aplicac~oes de usuarios. Umade suas func~oes e estabelecer umainterface de software uniforme entre o computador e outros programas do sistema e programas de aplicac~ao de usuarios. Outra func~ao fundamental de umsistema operacional e gerenciar os recursos de um computador de forma a promover sua eciente utilizac~ao. Exemplos de sistemas operacionais s~ao MS-DOS, OS/2 e Linux para computadores pessoais e sistemas Unix para estac~oes de trabalho. Aunidade basica de computac~ao gerenciada por um sistemaoperacional e um processo, que e basicamenteum programa em execuc~ao. Os recursos requeridos por um processo, tais como espaco em memoria para guardar os dados e as instruc~oes do programa, s~ao alocados pelo sistema operacional. Um processo passa a existir a partir do momento em que um programa foiativado, e deixa de existir quando a execuc~ao do programa e encerrada. Neste ponto, os recursos que lhe foram alocados pelo sistemaoperacional s~ao liberados. Outra func~ao associada aosistema operacional e a ger^encia dos recursos de memoria do computador. Em um sistemaonde mais de um programa pode estar sendo executado simultaneamente, os diversos processos est~ao competindo pelos recursos de memoria, que s~ao limitados. Etarefa do sistemaoperacional coordenar estes recursos de forma que, em media, todos os processos tenham tempo de execuc~ao em limites razoaveis. Do ponto devistalogico, a area de memoria de um processo e dividida emsegmentos independentes. No sistema operacional Unix, por exemplo, ha tr^es segmentos de memoria associados a um processo: texto, dados e pilha. O segmento de texto contem as instruc~oes do programa, e geralmentee uma area protegida pelo sistemaoperacional istoe, um programa deum usuario n~ao pode modicar diretamenteo conteudo ou o tamanho desta area. Umatentativa de modicac~ao em uma palavra desta area ira causar um erro de execuc~ao de um programa, tal com segmentation fault. Deve car claro que o conteudo desta area n~ao e otexto das instruc~oes em uma linguagem de alto nvel (C, por exemplo), mas sim sua traduc~ao em termos de linguagem de maquina. Esta traduc~ao e realizada pelo programa compilador, umdosaplicativos em um sistema operacional. O segmento de dados armazenadados e variaveis do programa. Esta e uma area cujo conteudo pode ser modicado (o valor de variaveis) e cujo tamanho pode seralterado. O segmentodedados pode ser conceitualmente dividido em duas sub-areas, uma area estatica, com dimens~ao conhecida no momento da compilac~ao de um programa, e uma area din^amica ou livre, que pode crescer ou encolher durante a execuc~ao do programa. Entretanto, deve-se observar que este tamanho n~ao pode DCA/FEEC/UNICAMP 8

17 Ricarte Princpios de Sistemas Operacionais [1.4] crescer indenidamente, havendo limites para a memoria total associada aum processo. O segmento de pilha mantem as informac~oes temporarias de um processo. Este segmento tambem tem conteudo e tamanho variaveis, embora tambem haja limites para a expans~ao da pilha. O crescimento ilimitado da pilha pode causar um erro de execuc~ao tal como stack overow. Outro recurso gerenciado pelo sistemaoperacional eosistema de arquivos, que permite armazenar dados e acessa-los de discos sob a formade arquivos. Estae umaatividade importantedosistema operacional, uma vez que o acesso a discos magneticos pode setornar um ponto crtico no desempenho de aplicac~oes manipulando muitos dados. Uma forma queosistema operacional suporta para melhorar a eci^encia de acesso a arquivos e manter, em memoria principal, parte da informac~ao sobre arquivos em disco. Para tanto, o sistema operacional mantem uma tabeladearquivos. Esta tabela mantem informac~oes que permitem agilizar o acesso aos dados do arquivo, alem de manter informac~oes de suporte (porexemplo, indicac~ao de qual a posic~ao corrente dentro do arquivo). Uma aplicac~ao pode referenciar um arquivo presente nesta tabela atraves de um descritor de arquivo, umnumero inteiro indicando uma posic~ao na tabela alocada pelo sistema operacional. O sistemaoperacional suporta rotinas para requisitar a abertura de um arquivo (alocando-lhe uma entrada natabela de arquivos), para fechar um arquivo aberto (liberando espaco nesta tabela), para transferir dados entre o arquivo eamemoria principal, e para rotinas de suporte a manipulac~ao de arquivos. A seguir, s~ao apresentadas algumas das principais operac~oes suportadas pelo sistema operacional Unix para a manipulac~ao de arquivos: open abrir arquivo argumentos: nome do arquivo, modo de abertura retorno: descritor do arquivo ouindicador de erro read transferir bytes do arquivo parauma area em memoria argumentos: descritor do arquivo, endereco da area em memoria, numero de bytes retorno: numero de bytes efetivamente lidos do arquivo ouindicador de erro write transferir bytes de uma area em memoria para o arquivo argumentos: descritor do arquivo, endereco da area em memoria, numero de bytes retorno: numero de bytes efetivamente escritos para o arquivo ouindicador de erro close fechar o arquivo argumento: descritor do arquivo retorno: indicador de sucesso ou erro 9 c1996

18 Introduc~ao Programac~ao C Em Unix, a manipulac~ao de dispositivos de entrada esada (impressoras, teclados, monitores) e tratada uniformemente sob a forma de arquivos. Por exemplo, o teclado esta associadoaum arquivo padr~ao de entrada (descritor 0), enquanto que o monitor esta associado ao arquivo padr~ao de sada (descritor 1) e tambem ao arquivo padr~ao de mensagens de erro(descritor 2). A Figura 1.2 apresenta o papel do sistema operacional como interface entre aplicativos e o hardware. Aplicativos podem ser tanto os programas desenvolvidos pelo usuario como outras aplicac~oes que suportam ou facilitam o desenvolvimento das aplicac~oes do usuario. Aplicação Rotinas de Suporte Sistema Operacional Hardware Figura 1.2: Papel do Sistema Operacional. Oobjetivo deste curso e fornecer a base de programac~ao em linguagem C necessaria para o desenvolvimentodeaplicac~oes dousuario, que podem ser autocontidos, usar recursos do sistema operacional ou recursos de outros aplicativos. A seguir, alguns aspectos ligados ao desenvolvimento deste tipo de aplicac~oes s~ao abordados. 1.5 Desenvolvimento de Software N~ao ha duvidas hoje em dia quanto a import^ancia do software no desenvolvimentodosmais diversos sistemas. Com esta evoluc~ao do papel do software em sistemas computacionais, veio tambem uma maior complexidade de programas e uma maior preocupac~ao em desenvolver programas que pudessem ser facilmenteentendidos e modicados (se necessario), n~ao apenas pelo autor do programa mas tambem por outros programadores. A disciplina que estuda odesenvolvimento de bom software e conhecida comoengenharia de Software. AEngenharia de Software estabelece alguns princpios de desenvolvimento queindependem da linguagem de programac~ao adotada. Estes princpios s~ao utilizados nas tr^es fases da vida deum DCA/FEEC/UNICAMP 10

19 Ricarte Desenvolvimento de Software [1.5] programa, que s~ao: Denic~ao: estuda oquedeve ser feito pelo programa, incluindo analises do sistema e do problema a ser resolvido Desenvolvimento: incorpora o projeto do programa (por exemplo, uma descric~ao do algoritmo e estruturas necessarias), a codicac~ao (traduc~ao do projeto emtermos de uma linguagem de programac~ao) e testes do programa e Manutenc~ao: e a fase de mudancas decorrentes da correc~ao de erros e atualizac~oes do programa. Afasededesenvolvimento costuma tomaramaior parte do ciclo de vidade criac~ao de um software. Nesta fase s~ao tomadas decis~oes que podem afetar sensivelmenteocusto e a qualidade do software gerado. Umavez estabelecidaafuncionalidade do software que se deseja implementar na fasededenic~ao, afasededesenvolvimentopropriamentedita pode ser iniciada. Esta fase pode ser divididaemtr^es etapas principais, que s~ao projeto, codicac~ao e teste. A seguir, ser~ao destacados alguns aspectos ligados ao desenvolvimentodesoftware, que sera o principal enfoque deste curso Projeto O projeto de software pode ser subdividido em dois grandes passos, projeto preliminar e projeto detalhado. O projeto preliminar preocupa-se em transformar os requisitos especicados na fasede analise em arquiteturas de dados e de software. O projeto detalhado rena estas representac~oes de arquitetura em estruturas de dados detalhadas e em representac~oes algortmicas do software. Uma das estrategias de projeto mais utilizadas e odesenvolvimento top-down. Neste tipo de desenvolvimento, trabalha-se com o conceito de renamento dedescric~oes do software em distintos nveis abstrac~ao. O conceito deabstrac~ao esta relacionado com esconder informac~ao sobre os detalhes. No nvel mais alto deabstrac~ao, praticamentenenhuma informac~ao e detalhada sobre como uma dada tarefa sera implementada simplesmentedescreve-se qual e atarefa. Em etapas sucessivas de renamento, o projetista do software vai elaborando sobre a descric~ao da etapa anterior, fornecendo cada vez mais detalhes sobre como realizar a tarefa. O resultado natural do desenvolvimento top-down e uma estrutura de software, que representa a organizac~ao dos distintos componentes (ou modulos) do programa. A Figura 1.3 ilustra de forma simplicada o processo de passagem de um problema auma estrutura de software para sua soluc~ao. Observenesta gura que a soluc~ao pode n~ao ser unica: dependendo de como o projetoedesenvolvido edas decis~oes tomadas, distintas estruturas podem resultar. 11 c1996

20 Introduc~ao Programac~ao C "Problema" P2 P1 P3 P4 Solucao por software S1 S3 S4 S2 Possiveis estruturas de software S1 S2 S3 S4 S1 S4 S2 S3 Figura 1.3: Processo de evoluc~ao do software. DCA/FEEC/UNICAMP 12

21 Ricarte Desenvolvimento de Software [1.5] Outro aspecto t~ao importante quanto a estrutura de software e aestrutura de dados, que e uma representac~ao do relacionamentologico entre os elementos de dados individuais. As estruturas de dados utilizadas denem a organizac~ao, metodos de acessoealternativas de processamento para a informac~ao manipulada pelo programa. Embora a estrutura nal possa ser t~ao complexa quanto o projetista deseja, ha alguns blocos basicos (Figura 1.4) que permitem construir as estruturas mais sosticadas. A estrutura de dao mais simples e um escalar, que representaum elemento simples de informac~ao que pode ser acessado atraves de umidenticador. Elementos escalares organizados como um grupo contguo constituem um vetor sequencial, cujos elementospodem ser acessados atraves de um identicador em associac~ao com umndice. Elementos n~ao-contguos podem ser agrupados atraves de uma lista ligada, cuja unidade de acesso e um no que contem um item de dado (escalar ou n~ao) eumponteiro para indicar o proximo no nalista. Escalar Vetor sequencial... Lista ligada Figura 1.4: Estruturas elementares de dados. Uma vez estabelecidas as estruturas de softwareededados do programa, o detalhamentodo projeto pode prosseguir com o projeto procedimental, onde s~ao denidos os detalhes dos algoritmos que ser~ao utilizados para implementar o programa. Um algoritmo e uma soluc~ao passo-a-passo para a resoluc~ao do problema especicado. Em princpio, algoritmos poderiam ser descritos usando linguagem natural (portugu^es, por exemplo). Entretanto, o uso da linguagem natural para descrever algoritmos geralmente leva aambiguidades, de modo que se utilizam normalmentelinguagens mais restritas para a descric~ao dos passos de um algoritmo. Algumas formas de especicac~ao destas linguagens s~ao descritas na sequ^encia Programac~ao Estruturada A programac~ao estruturada estabelece uma disciplina de desenvolvimento de algoritmos que facilita a compreens~ao de programas. O princpio basico de programac~ao estruturada e que um pro- 13 c1996

22 Introduc~ao Programac~ao C grama e composto por blocos elementares que se interligam atraves de tr^es mecanismos basicos, que s~ao sequ^encia, selec~ao e repetic~ao. Cadauma destas construc~oes tem um ponto deincio (o topo do bloco) e um ponto determino (o m do bloco) de execuc~ao. Qualquer algoritmo, independentemente da area de aplicac~ao ede sua complexidade, pode ser descrito atraves destes mecanismos basicos. Um dos mecanismos mais utilizados para a representac~ao de algoritmos e ouxograma. Em um uxograma, o ret^angulo indica um passo do processamento (uma tarefa), o losango indica uma condic~ao logica e as setas mostram o uxo de controle. A Figura 1.5 mostra os smbolos utilizados para representar as principais formas de construc~ao estruturada de algoritmos. Sequ^encia (Figura 1.5(a)) implementa os passos de processamento necessarios para descrever qualquer programa. Por exemplo, um segmento de programa da forma \faca primeiro a Tarefa a e depois a Tarefa b" seria representado por uma sequ^encia de dois ret^angulos. Uma notac~ao textual equivalente poderia ser obtida atraves de uma pseudo-linguagem que se restringisse a construc~oes estruturadas, como em Tarefa a Tarefa b Selec~ao especica a possibilidade de selecionar o uxo de execuc~ao do processamento baseado em ocorr^encias logicas. Ha duas formas basicas de condic~ao. Aprimeira forma e a construc~ao IF-THEN-ELSE (Figura 1.5(b)), que permite representar uxos da forma \seacondic~ao x for verdadeira, faca a Tarefa a sen~ao (isto e, se a condic~ao x for falsa), faca a Tarefa b." As duas setas que saem do losango de condic~ao no uxograma recebem rotulos T e F para indicar o uxo de execuc~ao quando a condic~ao especicada e verdadeira ou falsa, respectivamente. O ret^angulo sob asetarotulada T normalmentee denominado a parte then da construc~ao, enquanto queooutro ret^angulo e denominado parte else. Emtermos de pseudo-linguagem, a construc~ao equivalente pode ser descrita como IF (x) THEN Tarefa a ELSE Tarefa c ENDIF Aoutra forma de selec~ao estende onumero de condic~oes que podem ser testadas para denir o uxo de execuc~ao. Esta construc~ao, CASE-SELECT (Figura 1.5(c)), permite representar uxos da forma\seavariavel v tem o valor x, faca a Tarefa a sev tem o valor y, faca a Tarefa b esetem o valor z, faca a Tarefa c." Uma possvel representac~ao para tal construc~ao em termos de pseudo-linguagem e: DCA/FEEC/UNICAMP 14

23 Ricarte Desenvolvimento de Software [1.5] T F T F T F... T (a) (b) F (c) T F T F (d) (e) Figura 1.5: Representac~ao dos mecanismos basicos da programac~ao estruturada: (a) sequ^encia (b) selec~ao IF (c) selec~ao CASE (d) repetic~ao WHILE (e) repetic~ao DO. 15 c1996

24 Introduc~ao Programac~ao C CASE OF v: WHEN x SELECT Tarefa a WHEN y SELECT Tarefa b WHEN z SELECT Tarefa c DEFAULT: Tarefa d ENDCASE Neste exemplo em pseudo-linguagem, ilustra-se a inclus~ao de uma condic~ao default, que indica qual deve ser a ac~ao executada (no caso, Tarefa d) quando a variavel assume umvalor n~ao explicitamente especicado pelo programador. Observe que a construc~ao case-select n~ao e essencial, uma vez que ela pode ser representada em termos de if-then-else, como em IF (v = x) THEN Tarefa a ELSE IF (v = y) THEN Tarefa b ELSE IF (v = z) THEN Tarefa c ELSE Tarefa d ENDIF ENDIF ENDIF Entretanto, a utilizac~ao deste tipo de estrutura simplica a express~ao de situac~oes que ocorrem frequentemente em programas (por exemplo, selecionar ac~oes dependendo de uma opc~ao escolhida em um menu) sem ter que recorrer ao aninhamento excessivo de condic~oes da forma if-then-else. Repetic~ao permite a execuc~ao repetitiva de segmentos do programa. Na forma basica de repetic~ao, WHILE-DO (Figura 1.5(d)), uma condic~ao x e vericada. caso seja verdadeira, ent~ao uma Tarefa a e executada, e ent~ao a condic~ao e reavaliada. Enquanto a condic~ao for verdadeira,atarefa e repetidamente executada. Em termos da pseudo-linguagem, esta construc~ao pode ser representada por WHILE (x) DO Tarefa a ENDWHILE DCA/FEEC/UNICAMP 16

25 Ricarte Desenvolvimento de Software [1.5] Uma ligeira variac~ao desta construc~ao e apresentada na Figura 1.5(e), onde inicialmenteatarefa e executada eapenas ent~ao a condic~ao de repetic~ao e avaliada. Esta variante, DO-WHILE, pode ser expressa em termos da pseudo-linguagem por DO Tarefa a WHILE (x) A estrategia de desenvolvimento top-down pode tambem ser utilizada nadescric~ao algortmica de procedimentos. Neste caso, um ret^angulo pode descrever uma tarefa t~ao complexa quanto necessario, sendo que esta tarefa pode ser posteriormentedescrita emtermos de outro(s) uxograma(s). Em geral, s~ao aplicados tantos renamentos quanto necessario ate oponto em que uma tarefa possa ser facilmentedescrita emtermos das construc~oes suportadas pela linguagem de codicac~ao Codicac~ao Aetapa de codicac~ao traduz a representac~ao do projeto detalhado em termos de uma linguagem de programac~ao. Normalmentes~ao utilizadas linguagens de alto nvel, que podem ent~ao ser automaticamente traduzidas para a linguagem de maquina pelo processo de compilac~ao. A traduc~ao de uma especicac~ao de um programa para uma linguagem de programac~ao pode resultar em programas incompreensveis se n~ao houver um cuidado na preservac~ao da informac~ao presente. As linhas gerais que est~ao a seguir buscam estabelecer uma disciplina de codicac~ao que, se seguida, facilitaoentendimentoemanutenc~ao de programas. Codigo deve ser acima detudo claro. Os compiladores modernos fazem um otimo trabalho de otimizac~ao decodigo, de forma que n~ao ha necessidade do programador car se preocupando em usar pequenos \truques" para economizar algumas instruc~oes no codigo de maquina provavelmenteo compilador ja faria isto para o programador. A preocupac~ao com a otimizac~ao de codigo so deve existir apos a detecc~ao da necessidade realdesta otimizac~ao, e ela deve serestringir ao segmento do programa onde o problema dedesempenho foi localizado. Nomes de identicadores (variaveis, procedimentos) devem denotar claramente o signicado do identicador. Linguagens de programac~ao modernas raramente limitam o numero de caracteres que um identicador pode ter, de forma que n~ao faz sentido restringir este tamanho. Compare as duas linhas de codigo a seguir, e observe como nomes claros podem facilitar a compreens~ao de um programa: d = v*t distancia = velocidade * tempo 17 c1996

26 Introduc~ao Programac~ao C O uso de comentarios deve ser usado como forma dedocumentac~ao interna deum programa. O excesso de comentarios n~ao e recomendado, pois isto pode prejudicar a leitura de um programa. Entretanto, ha comentarios que devem estar presentes em qualquer programa, tais como Comentarios de prologo, que aparecem no incio de cada modulo. Devem indicar a nalidade do modulo, uma historia de desenvolvimento (autor e data decriac~ao e modicac~oes), e uma descric~ao das variaveis globais (se houver) Comentarios de procedimento, que aparecem antes de cada func~ao indicando seu proposito, uma descric~ao dos argumentos e valores de retorno Comentarios descritivos, que descrevem blocos de codigo. Comentarios devem ser facilmente diferenciaveis de codigo, seja atraves do uso de linhas em branco, seja atraves de tabulac~oes. E importante que comentarios sejam corretos, uma vez que um comentario err^oneo pode dicultar mais ainda oentendimentodeum programa doquesen~ao houvesse comentario nenhum. Na especicac~ao das construc~oes estruturadas, use tabulac~oes para indicar blocos de distintos nveis. Evite sempre que possvel o uso de condic~oes de teste complicadas e o aninhamento muito profundo de condic~oes de teste. Use par^enteses para deixar claro como express~oes logicas e aritmeticas ser~ao computadas. Com relac~ao a instruc~oes de entrada esada, todos os dados de entrada devem ser validados. O formato deentrada deve ser t~ao simples quanto possvel e, no caso de entrada interativa, o usuario deve receber uma indicac~ao de que o programa esta aguardando dados. Da mesma forma, a apresentac~ao de resultados deve ser clara, com indicac~ao sobre o que esta sendo apresentado. Finalmente, teste ovalor de retorno de qualquer rotina que possa retornar um erro, tomando as ac~oes que forem necessarias para minimizar o efeito do erro Criando um Programa Executavel Para que o computador entenda um programa escrito emuma linguagem de alto nvel e preciso traduzir as instruc~oes deste programa para a linguagem do computador. A primeira etapa e a criac~ao de um arquivo com o chamado codigo fonte. Ocodigo fonte contem as func~oes com instruc~oes em linguagem C, que ser~ao posteriormente compiladas em um arquivo com codigo objeto. Para criar um arquivo comocodigo fonte do programa, e preciso usar um editor de programas ou editor de textos (desde que seja possvel criar um arquivo sem caracteres de formatac~ao). DCA/FEEC/UNICAMP 18

27 Ricarte Atividades [1.6] Apos criado o arquivo comcodigo fonte, este sera passado como entrada para o programa compilador. O compilador C executa a traduc~ao do codigo fonte para um arquivo executavel em diversas etapas, quais sejam: Pre-processador: nesta primeira etapa, algumas abreviaturas que o programador usou em seu codigo fonte s~ao traduzidas para os comandos (n~ao abreviados) da linguagem C. O resultado desta fasee ainda umcodigo fonte, porem expandido. Estas abreviaturas s~ao introduzidas no codigo fonte atraves das diretivas do pre-processador Compilador (propriamente dito): nestasegunda etapa, o codigo fontee traduzido em linguagem assembly da maquina para a qual ele esta sendo compilado. Nesta etapa verica-se se o codigo fonte esta sintaticamente correto, isto e, se as regras da linguagem de programac~ao C foram seguidas. Otimizac~oes sobre o codigo fonte s~ao realizadas nesta fase Montador: usando este aplicativo do sistema, o codigo assembly (ainda um arquivo texto) e traduzido em linguagem de maquina (um arquivo binario). O resultado e ocodigo objeto relocavel, um formato intermediario que n~ao pode ser lido pelo usuario e n~ao pode ser executado pelo sistema Ligador: este aplicativo dosistema executa a fase nal da criac~ao de um arquivo executavel. Nesta etapa, o codigo objeto relocavel do programa criado pelo usuario e ligado a rotinas internas do sistema (e possivelmenterotinas de outras aplicativos) para criar uma unidade independente, um arquivo com codigo executavel. Em um sistemaoperacional como Unix, estas etapas s~ao transparentes para o usuario, pois o aplicativo compilador C realiza as quatro etapas internamente. Assim, o processo de criac~ao de um programa Cenvolve aedic~ao (criac~ao do codigo fonte), a compilac~ao (criac~ao do codigo executavel) e a execuc~ao do programa. Casa haja erros de sintaxe, o programa executavel n~ao sera gerado, e deve-se voltar so processo de edic~ao para corrigir estes erros. Caso o programa executavel tenha sido gerado mas apresente resultados imprevistos, o ciclo tambem deve se repetir a partir da edic~ao. 1.6 Atividades Atividade 1Apresente a representac~ao binaria em complemento de dois (8 bits) para os seguintes valores decimais inteiros: (a) c1996

28 Introduc~ao Programac~ao C (b) -31 (c) 74 (d) -127 Atividade 2Apresente ovalor decimal associado aos seguintes inteiros em representac~ao binaria em complementode dois: (a) (b) (c) (d) Atividade 3Desenvolva algoritmos para resolver os seguintes problemas. Indique quais par^ametros s~ao necessarios, diferenciando entre aqueles que s~ao constantes e aqueles que s~ao variaveis. (a) Converter um valor dado em dolares para reais ou um valor dado em reais para dolares. (b) Dado o nome deum arquivo contendo texto, contar e apresentaronumero de caracteres no arquivo. (c) Dado o nome deum arquivo contendo texto, apresentar na telaoseuconteudo. Atividade 4Investigue no manual do seu sistemaoperacional (por exemplo, a sec~ao 2 do man em Unix) que tipo de atividades s~ao suportadas na interface de servicos para programas (os system calls). Selecione cinco operac~oes e classique-as de acordo com o recurso do computador que estara sendo utilizado. DCA/FEEC/UNICAMP 20

29 Captulo 2 Princpios de Programac~ao C Resumo: Neste captulo, os fundamentos de programac~ao em linguagem C ser~ao introduzidos. Particularmente, sera enfatizada a traduc~ao de algoritmos para comandos e estruturas da linguagem. 2.1 Organizac~ao Basica de Programas C Na linguagem C, todo algoritmo deve ser traduzido para uma func~ao. Umafunc~ao nada mais e do que um conjunto de express~oes da linguagem C (possivelmente incluindo invocac~oes ou chamadas para outras func~oes) com um nome e argumentos associados. Em geral, a denic~ao de uma func~ao Ctem a forma tipo nome(lista de argumentos) { declaracoes comandos O tipo indica o valor de retorno de uma func~ao, podendo assumir qualquer valor valido da linguagem C (que ser~ao vistos adiante). O tipo da func~ao pode ser omitido, sendo que neste caso o compilador ira assumir que o tipo int (inteiro) sera retornado. Nome e orotulo dado a func~ao, que em geral deve expressar de alguma forma o que a func~ao realiza. Nos compiladores mais antigos, o numero de caracteres em um nome era limitado (em geral, a 6 ou 8 caracteres). Atualmente, n~ao ha restric~oes aocomprimentodeumnome, de forma que nomes signicativos devem ser preferencialmenteutilizados. Em C, todo nome que estiver seguido 21

30 Princpios de Programac~ao C Programac~ao C por par^enteses sera reconhecido como o nomedeuma func~ao. A lista de argumentos que ca no interior dos par^enteses indica que valoresafunc~ao precisa para realizar suas tarefas. Quando nenhum valor e necessario para a func~ao, a lista sera vazia, como em ( ). O que se segue na denic~ao da func~ao, delimitado entre chaves f e g, e ocorpodafunc~ao. Declarac~oes correspondem as variaveis internas que ser~ao utilizadas pela func~ao, e comandos implementam o algoritmo associado a func~ao. Todo algoritmo (e consequentementetodo programa) deve ter um ponto deincio e um ponto de mde execuc~ao. Na Figura 2.1, esta estrutura basica de um algoritmo e ilustrada onde ha uma \nuvem" faz alguma coisa, deve ser inserido o corpo do algoritmo que descreveafunc~ao aser realizada. start Faz alguma coisa end Figura 2.1: Estrutura basica de um algoritmo. Um programa Ce basicamenteum conjunto defunc~oes. O ponto deincio e termino de execuc~ao de um programa Cesta associado com uma func~ao com um nome especial: a func~ao main (principal). Omenor programa C que pode ser compilado corretamenteeum programa que nada faz (Figura 2.2). Este programa Ce: main( ) { Neste caso, a func~ao de nome main e denida sem nenhum comando. observac~oes devem ser feitas: Neste ponto, algumas Todo programa C tem que ter pelo menos uma func~ao. DCA/FEEC/UNICAMP 22

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br LP II Estrutura de Dados Introdução e Linguagem C Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br Resumo da aula Considerações Gerais Introdução a Linguagem C Variáveis e C Tipos de

Leia mais

Introdução à Programação

Introdução à Programação Introdução à Programação Introdução a Linguagem C Construções Básicas Programa em C #include int main ( ) { Palavras Reservadas } float celsius ; float farenheit ; celsius = 30; farenheit = 9.0/5

Leia mais

Algoritmos e Programação Estruturada

Algoritmos e Programação Estruturada Algoritmos e Programação Estruturada Virgínia M. Cardoso Linguagem C Criada por Dennis M. Ritchie e Ken Thompson no Laboratório Bell em 1972. A Linguagem C foi baseada na Linguagem B criada por Thompson.

Leia mais

MC102 Algoritmos e Programação de Computadores 1ª Aula Introdução à Programação de Computadores

MC102 Algoritmos e Programação de Computadores 1ª Aula Introdução à Programação de Computadores MC102 Algoritmos e Programação de Computadores 1ª Aula Introdução à Programação de Computadores 1. Objetivos Situar a atividade de programação de computadores Apresentar conceitos fundamentais relativos

Leia mais

Programação de Computadores III

Programação de Computadores III Programação de Computadores III Introdução a Linguagens de Programação Professor Leandro Augusto Frata Fernandes laffernandes@ic.uff.br Material disponível em http://www.ic.uff.br/~laffernandes/teaching/2013.1/tcc-00.157

Leia mais

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES 3.1 - IDENTIFICADORES Os objetos que usamos no nosso algoritmo são uma representação simbólica de um valor de dado. Assim, quando executamos a seguinte instrução:

Leia mais

MC102 Algoritmos e Programação de Computadores 2ª Aula Programa, entrada e saída de dados

MC102 Algoritmos e Programação de Computadores 2ª Aula Programa, entrada e saída de dados MC102 Algoritmos e Programação de Computadores 2ª Aula Programa, entrada e saída de dados 1. Objetivos Falar sobre programa de computador, diferenciando programa em linguagem de máquina, de programa em

Leia mais

Arquiteturas RISC. (Reduced Instructions Set Computers)

Arquiteturas RISC. (Reduced Instructions Set Computers) Arquiteturas RISC (Reduced Instructions Set Computers) 1 INOVAÇÕES DESDE O SURGIMENTO DO COMPU- TADOR DE PROGRAMA ARMAZENADO (1950)! O conceito de família: desacoplamento da arquitetura de uma máquina

Leia mais

Introdução. INF1005 Programação I 33K Prof. Gustavo Moreira gmoreira@inf.puc-rio.br

Introdução. INF1005 Programação I 33K Prof. Gustavo Moreira gmoreira@inf.puc-rio.br Introdução INF1005 Programação I 33K Prof. Gustavo Moreira gmoreira@inf.puc-rio.br introdução Tópicos conceitos básicos o que é um programa um programa na memória decifrando um código referência Capítulo

Leia mais

1.1. Organização de um Sistema Computacional

1.1. Organização de um Sistema Computacional 1. INTRODUÇÃO 1.1. Organização de um Sistema Computacional Desde a antiguidade, o homem vem desenvolvendo dispositivos elétricoeletrônicos (hardware) que funciona com base em instruções e que são capazes

Leia mais

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA Responda 1) Quem desenvolveu a linguagem C? Quando? 2) Existe alguma norma sobre a sintaxe da linguagem C? 3) Quais são os tipos básicos de dados disponíveis na linguagem C? 4) Quais são as principais

Leia mais

Organização e Arquitetura de Computadores I

Organização e Arquitetura de Computadores I Organização e Arquitetura de Computadores I Aritmética Computacional Slide 1 Sumário Unidade Lógica e Aritmética Representação de Números Inteiros Aritmética de Números Inteiros Representação de Números

Leia mais

Sistema de Computação

Sistema de Computação Sistema de Computação Máquinas multinível Nível 0 verdadeiro hardware da máquina, executando os programas em linguagem de máquina de nível 1 (portas lógicas); Nível 1 Composto por registrados e pela ALU

Leia mais

Figura 1 - O computador

Figura 1 - O computador Organização e arquitectura dum computador Índice Índice... 2 1. Introdução... 3 2. Representação da informação no computador... 4 3. Funcionamento básico dum computador... 5 4. Estrutura do processador...

Leia mais

Curso Técnico em Redes

Curso Técnico em Redes Curso Técnico em Redes Prof. Airton Ribeiro - 2012 Histórico das Linguagens de Programação O que é? É um método padronizado para expressar instruções para um computador. É um conjunto de regras sintáticas

Leia mais

O COMPUTADOR. Introdução à Computação

O COMPUTADOR. Introdução à Computação O COMPUTADOR Introdução à Computação Sumário O Hardware O Software Linguagens de Programação Histórico da Linguagem C Componentes Básicos do Computador O HARDWARE: O equipamento propriamente dito. Inclui:

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Gerência de Arquivos Edson Moreno edson.moreno@pucrs.br http://www.inf.pucrs.br/~emoreno Sumário Conceituação de arquivos Implementação do sistemas de arquivo Introdução Sistema de

Leia mais

O modelo do computador

O modelo do computador O modelo do computador Objetivos: Mostrar como é o funcionamento dos computadores modernos Mostrar as limitações a que estamos sujeitos quando programamos Histórico Os primeiros computadores são da década

Leia mais

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP)

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP) Hardware (Nível 0) Organização O AS/400 isola os usuários das características do hardware através de uma arquitetura de camadas. Vários modelos da família AS/400 de computadores de médio porte estão disponíveis,

Leia mais

Resumo da Introdução de Prática de Programação com C. A Linguagem C

Resumo da Introdução de Prática de Programação com C. A Linguagem C Resumo da Introdução de Prática de Programação com C A Linguagem C O C nasceu na década de 70. Seu inventor, Dennis Ritchie, implementou-o pela primeira vez usando um DEC PDP-11 rodando o sistema operacional

Leia mais

INTRODUÇÃO À PROGRAMAÇÃO BCC 201 TURMAS 31, 32 E 33 2015-2 AULA TEÓRICA 2 PROF. MARCELO LUIZ SILVA (R E D)

INTRODUÇÃO À PROGRAMAÇÃO BCC 201 TURMAS 31, 32 E 33 2015-2 AULA TEÓRICA 2 PROF. MARCELO LUIZ SILVA (R E D) Universidade Federal de Ouro Preto - UFOP Instituto de Ciências Exatas e Biológicas - ICEB Departamento de Computação - DECOM INTRODUÇÃO À PROGRAMAÇÃO BCC 201 TURMAS 31, 32 E 33 2015-2 1 AULA TEÓRICA 2

Leia mais

Curso de Linguagem C

Curso de Linguagem C Curso de Linguagem C 1 Aula 1 - INTRODUÇÃO...4 AULA 2 - Primeiros Passos...5 O C é "Case Sensitive"...5 Dois Primeiros Programas...6 Introdução às Funções...7 Introdução Básica às Entradas e Saídas...

Leia mais

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008 Tabela de Símbolos Análise Semântica A Tabela de Símbolos Fabiano Baldo Após a árvore de derivação, a tabela de símbolos é o principal atributo herdado em um compilador. É possível, mas não necessário,

Leia mais

Linguagem de Programação I. Aula 05 Linguagem C

Linguagem de Programação I. Aula 05 Linguagem C Linguagem de Programação I Aula 05 Linguagem C Da Aula Anterior Algoritmos Portugol: aspectos básicos Estruturas repetição e controle Array: vetores e matrizes Nesta Aula Linguagens de Programação A Linguagem

Leia mais

1. NÍVEL CONVENCIONAL DE MÁQUINA

1. NÍVEL CONVENCIONAL DE MÁQUINA 1. NÍVEL CONVENCIONAL DE MÁQUINA Relembrando a nossa matéria de Arquitetura de Computadores, a arquitetura de Computadores se divide em vários níveis como já estudamos anteriormente. Ou seja: o Nível 0

Leia mais

Unidade 5: Sistemas de Representação

Unidade 5: Sistemas de Representação Arquitetura e Organização de Computadores Atualização: 9/8/ Unidade 5: Sistemas de Representação Números de Ponto Flutuante IEEE 754/8 e Caracteres ASCII Prof. Daniel Caetano Objetivo: Compreender a representação

Leia mais

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO Capítulo 1 INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO 1.1 Histórico de Linguagens de Programação Para um computador executar uma dada tarefa é necessário que se informe a ele, de uma maneira clara, como ele

Leia mais

IFPE. Disciplina: Sistemas Operacionais. Prof. Anderson Luiz Moreira

IFPE. Disciplina: Sistemas Operacionais. Prof. Anderson Luiz Moreira IFPE Disciplina: Sistemas Operacionais Prof. Anderson Luiz Moreira SERVIÇOS OFERECIDOS PELOS SOS 1 Introdução O SO é formado por um conjunto de rotinas (procedimentos) que oferecem serviços aos usuários

Leia mais

Introdução à Lógica de Programação

Introdução à Lógica de Programação Introdução à Lógica de Programação Sistemas Numéricos As informações inseridas em um computador são traduzidos em dados, ou seja, em sinais que podem ser manipulados pelo computador. O computador trabalha

Leia mais

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá.

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá. INTRODUÇÃO A lógica de programação é extremamente necessária para as pessoas que queiram trabalhar na área de programação, seja em qualquer linguagem de programação, como por exemplo: Pascal, Visual Basic,

Leia mais

ENIAC. Introdução aos Computadores e à Programação (Noções Básicas)

ENIAC. Introdução aos Computadores e à Programação (Noções Básicas) ENIAC Introdução aos Computadores e à ção (Noções Básicas) Introdução aos Computadores e à ção (Noções Básicas) 1 Introdução aos Computadores e à ção (Noções Básicas) 2 O transistor foi inventado em 1947

Leia mais

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO Conceitos básicos e serviços do Sistema Operacional Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO Tipos de serviço do S.O. O S.O.

Leia mais

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM 71 Introdução Difere dos níveis inferiores por ser implementado por tradução A tradução é usada quando um processador está disponível para uma mensagem fonte mas

Leia mais

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br Introdução O computador como ferramenta indispensável: Faz parte das nossas vidas; Por si só não faz nada de útil; Grande capacidade de resolução

Leia mais

BARRAMENTO DO SISTEMA

BARRAMENTO DO SISTEMA BARRAMENTO DO SISTEMA Memória Principal Processador Barramento local Memória cachê/ ponte Barramento de sistema SCSI FireWire Dispositivo gráfico Controlador de vídeo Rede Local Barramento de alta velocidade

Leia mais

Resumo da Matéria de Linguagem de Programação. Linguagem C

Resumo da Matéria de Linguagem de Programação. Linguagem C Resumo da Matéria de Linguagem de Programação Linguagem C Vitor H. Migoto de Gouvêa 2011 Sumário Como instalar um programa para executar o C...3 Sintaxe inicial da Linguagem de Programação C...4 Variáveis

Leia mais

A Unidade Central de Processamento é a responsável pelo processamento e execução de programas armazenados na MP.

A Unidade Central de Processamento é a responsável pelo processamento e execução de programas armazenados na MP. A ARQUITETURA DE UM COMPUTADOR A arquitetura básica de um computador moderno segue ainda de forma geral os conceitos estabelecidos pelo Professor da Universidade de Princeton, John Von Neumann (1903-1957),

Leia mais

3. Arquitetura Básica do Computador

3. Arquitetura Básica do Computador 3. Arquitetura Básica do Computador 3.1. Modelo de Von Neumann Dar-me-eis um grão de trigo pela primeira casa do tabuleiro; dois pela segunda, quatro pela terceira, oito pela quarta, e assim dobrando sucessivamente,

Leia mais

LINGUAGENS E PARADIGMAS DE PROGRAMAÇÃO. Ciência da Computação IFSC Lages. Prof. Wilson Castello Branco Neto

LINGUAGENS E PARADIGMAS DE PROGRAMAÇÃO. Ciência da Computação IFSC Lages. Prof. Wilson Castello Branco Neto LINGUAGENS E PARADIGMAS DE PROGRAMAÇÃO Ciência da Computação IFSC Lages. Prof. Wilson Castello Branco Neto Conceitos de Linguagens de Roteiro: Apresentação do plano de ensino; Apresentação do plano de

Leia mais

Convertendo Algoritmos para a Linguagem C

Convertendo Algoritmos para a Linguagem C onvertendo Algoritmos para a Linguagem Notas de Aula Prof. Francisco Rapchan www.geocities.com/chicorapchan O objetivo deste texto é mostrar alguns programas em, dando uma breve descrição de seu funcionamento

Leia mais

Introdução. Introdução. Introdução. Organização Estruturada de Computadores. Introdução. Máquinas Multiníveis

Introdução. Introdução. Introdução. Organização Estruturada de Computadores. Introdução. Máquinas Multiníveis Ciência da Computação Arq. e Org. de Computadores Máquinas Multiníveis Prof. Sergio Ribeiro Computador digital máquina que resolve problemas executando uma série de instruções. Programa conjunto de instruções

Leia mais

LINGUAGEM C UMA INTRODUÇÃO

LINGUAGEM C UMA INTRODUÇÃO LINGUAGEM C UMA INTRODUÇÃO AULA 1 Conceitos muito básicos 1 Introdução O C nasceu na década de 70. Seu inventor, Dennis Ritchie, implementou-o pela primeira vez usando um DEC PDP-11 rodando o sistema operacional

Leia mais

Funções de um SO. Gerência de processos Gerência de memória Gerência de Arquivos Gerência de I/O Sistema de Proteção

Funções de um SO. Gerência de processos Gerência de memória Gerência de Arquivos Gerência de I/O Sistema de Proteção Sistemas de Arquivos Funções de um SO Gerência de processos Gerência de memória Gerência de Arquivos Gerência de I/O Sistema de Proteção 2 Sistemas Operacionais Necessidade de Armazenamento Grandes quantidades

Leia mais

2. OPERADORES... 6 3. ALGORITMOS, FLUXOGRAMAS E PROGRAMAS... 8 4. FUNÇÕES... 10

2. OPERADORES... 6 3. ALGORITMOS, FLUXOGRAMAS E PROGRAMAS... 8 4. FUNÇÕES... 10 1. TIPOS DE DADOS... 3 1.1 DEFINIÇÃO DE DADOS... 3 1.2 - DEFINIÇÃO DE VARIÁVEIS... 3 1.3 - VARIÁVEIS EM C... 3 1.3.1. NOME DAS VARIÁVEIS... 3 1.3.2 - TIPOS BÁSICOS... 3 1.3.3 DECLARAÇÃO DE VARIÁVEIS...

Leia mais

Armazenamento de Dados. Prof. Antonio Almeida de Barros Junior

Armazenamento de Dados. Prof. Antonio Almeida de Barros Junior Armazenamento de Dados Prof. Antonio Almeida de Barros Junior 1 Armazenamento de Dados Todos os dados que utilizamos até o momento, ficavam armazenados apenas na memória. Ao final da execução dos programas,

Leia mais

20 Caracteres - Tipo char

20 Caracteres - Tipo char 0 Caracteres - Tipo char Ronaldo F. Hashimoto e Carlos H. Morimoto Até agora vimos como o computador pode ser utilizado para processar informação que pode ser quantificada de forma numérica. No entanto,

Leia mais

ALP Algoritmos e Programação. . Linguagens para Computadores

ALP Algoritmos e Programação. . Linguagens para Computadores ALP Algoritmos e Programação Iniciação aos computadores. Linguagens para Computadores. Compiladores, Interpretadores. Ambientes de Programação 1 Linguagens para Computadores. Linguagem binária: Dispositivos

Leia mais

FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES

FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES Prof. Ms. Carlos José Giudice dos Santos cpgcarlos@yahoo.com.br www.oficinadapesquisa.com.br Conceito de Computador Um computador digital é

Leia mais

Resolução de problemas e desenvolvimento de algoritmos

Resolução de problemas e desenvolvimento de algoritmos SSC0101 - ICC1 Teórica Introdução à Ciência da Computação I Resolução de problemas e desenvolvimento de algoritmos Prof. Vanderlei Bonato Prof. Cláudio Fabiano Motta Toledo Sumário Análise e solução de

Leia mais

Programação de Computadores

Programação de Computadores Aula 01 Introdução Departamento de Computação Universidade Federal de Ouro Preto 2011.1 1 Processamento de dados 2 Organização de Computadores 3 Sistemas de Numeração Processamento de dados Processamento

Leia mais

ULA Sinais de Controle enviados pela UC

ULA Sinais de Controle enviados pela UC Solução - Exercícios Processadores 1- Qual as funções da Unidade Aritmética e Lógica (ULA)? A ULA é o dispositivo da CPU que executa operações tais como: Adição Subtração Multiplicação Divisão Incremento

Leia mais

MC-102 Aula 01. Instituto de Computação Unicamp

MC-102 Aula 01. Instituto de Computação Unicamp MC-102 Aula 01 Introdução à Programação de Computadores Instituto de Computação Unicamp 2015 Roteiro 1 Por que aprender a programar? 2 Hardware e Software 3 Organização de um ambiente computacional 4 Algoritmos

Leia mais

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Sistemas Operacionais Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Estruturas de Sistemas Operacionais Um sistema operacional fornece o ambiente no qual os programas são executados. Internamente,

Leia mais

Arquitetura de Computadores. Introdução aos Sistemas Operacionais

Arquitetura de Computadores. Introdução aos Sistemas Operacionais Arquitetura de Computadores Introdução aos Sistemas Operacionais O que é um Sistema Operacional? Programa que atua como um intermediário entre um usuário do computador ou um programa e o hardware. Os 4

Leia mais

Componentes da linguagem C++

Componentes da linguagem C++ Componentes da linguagem C++ C++ é uma linguagem de programação orientada a objetos (OO) que oferece suporte às características OO, além de permitir você realizar outras tarefas, similarmente a outras

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Aula 3 Software Prof.: Edilberto M. Silva http://www.edilms.eti.br SO - Prof. Edilberto Silva Barramento Sistemas Operacionais Interliga os dispositivos de E/S (I/O), memória principal

Leia mais

Conceitos básicos da linguagem C

Conceitos básicos da linguagem C Conceitos básicos da linguagem C 2 Em 1969 Ken Thompson cria o Unix. O C nasceu logo depois, na década de 70. Dennis Ritchie, implementou-o pela primeira vez usando o sistema operacional UNIX criado por

Leia mais

ULA- Unidade Lógica Aritmética. Prof. Rômulo Calado Pantaleão Camara. Carga Horária: 60h

ULA- Unidade Lógica Aritmética. Prof. Rômulo Calado Pantaleão Camara. Carga Horária: 60h ULA- Unidade Lógica Aritmética. Prof. Rômulo Calado Pantaleão Camara Carga Horária: 60h Sumário Unidade Lógica Aritmetrica Registradores Unidade Lógica Operações da ULA Unidade de Ponto Flutuante Representação

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais SISTEMAS DE ARQUIVOS MACHADO/MAIA: CAPÍTULO 11 Prof. Pedro Luís Antonelli Anhanguera Educacional SISTEMAS DE ARQUIVOS - INTRODUÇÃO O armazenamento e a recuperação de informações é

Leia mais

Aluísio Eustáquio da Silva

Aluísio Eustáquio da Silva 1 Aluísio Eustáquio da Silva SciLab Programável Material didático usado em aulas de Programação de Computadores, Algoritmos e Lógica de Programação Betim Maio de 2012 2 PROGRAMAÇÃO O SciLab permite que

Leia mais

ARQUITETURA DE COMPUTADORES. Rogério Spindula Rosa

ARQUITETURA DE COMPUTADORES. Rogério Spindula Rosa ARQUITETURA DE COMPUTADORES 1 Rogério Spindula Rosa 2 EXECUÇÃO DE PROGRAMAS PROGRAMA 3 4 INTRODUÇÃO Hoje é raro escrever um programa diretamente em linguagem de computador em virtude da enorme dificuldade

Leia mais

INFORMÁTICA BÁSICA. Prof. Rafael Zimmermann

INFORMÁTICA BÁSICA. Prof. Rafael Zimmermann INFORMÁTICA BÁSICA Prof. Rafael Zimmermann 1. INFORMÁTICA É a ciência que estuda o processamento de informações. Nasceu da necessidade do homem processar informações cada vez mais complexas e com maior

Leia mais

Algoritmos: Lógica para desenvolvimento de programação de computadores. Autor: José Augusto Manzano. Capítulo 1 Abordagem Contextual

Algoritmos: Lógica para desenvolvimento de programação de computadores. Autor: José Augusto Manzano. Capítulo 1 Abordagem Contextual Algoritmos: Lógica para desenvolvimento de programação de computadores Autor: José Augusto Manzano Capítulo 1 Abordagem Contextual 1.1. Definições Básicas Raciocínio lógico depende de vários fatores para

Leia mais

SISTEMAS OPERACIONAIS ABERTOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com

SISTEMAS OPERACIONAIS ABERTOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com - Aula 2-1. PRINCÍPIOS DE SOFTWARE DE ENTRADA E SAÍDA (E/S) As metas gerais do software de entrada e saída é organizar o software como uma série de camadas, com as mais baixas preocupadas em esconder as

Leia mais

Sistema de Arquivos. Ambientes Operacionais. Prof. Simão Sirineo Toscani stoscani@inf.pucrs.br www.inf.pucrs.br/~stoscani

Sistema de Arquivos. Ambientes Operacionais. Prof. Simão Sirineo Toscani stoscani@inf.pucrs.br www.inf.pucrs.br/~stoscani Sistema de Arquivos Ambientes Operacionais Prof. Simão Sirineo Toscani stoscani@inf.pucrs.br www.inf.pucrs.br/~stoscani Gerência de Arquivos É um dos serviços mais visíveis do SO. Arquivos são normalmente

Leia mais

e à Linguagem de Programação Python

e à Linguagem de Programação Python Introdução a Algoritmos, Computação Algébrica e à Linguagem de Programação Python Curso de Números Inteiros e Criptografia Prof. Luis Menasché Schechter Departamento de Ciência da Computação UFRJ Agosto

Leia mais

Gerenciamento de Entrada e Saída Hélio Crestana Guardia e Hermes Senger

Gerenciamento de Entrada e Saída Hélio Crestana Guardia e Hermes Senger Gerenciamento de Entrada e Saída Hélio Crestana Guardia e Hermes Senger O controle da entrada e saída (E/S ou I/O, input/output) de dados dos dispositivos é uma das funções principais de um sistema operacional.

Leia mais

3/9/2010. Ligação da UCP com o barramento do. sistema. As funções básicas dos registradores nos permitem classificá-los em duas categorias:

3/9/2010. Ligação da UCP com o barramento do. sistema. As funções básicas dos registradores nos permitem classificá-los em duas categorias: Arquitetura de Computadores Estrutura e Funcionamento da CPU Prof. Marcos Quinet Universidade Federal Fluminense P.U.R.O. Revisão dos conceitos básicos O processador é o componente vital do sistema de

Leia mais

Gerência de Entrada/Saída

Gerência de Entrada/Saída Gerência de Entrada/Saída Prof Clodoaldo Ap Moraes Lima 1 Princípios básicos de hardware Periférico é um dispositivo conectado a um computador de forma a possibilitar sua interação com o mundo externo

Leia mais

OPERADORES E ESTRUTURAS DE CONTROLE

OPERADORES E ESTRUTURAS DE CONTROLE OPERADORES E ESTRUTURAS DE CONTROLE 3.1 Operadores Os operadores indicam o tipo de operação matemática que será executada gerando novos valores a partir de um ou mais operadores. São muito utilizados em

Leia mais

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À ORGANIZAÇÃO DE COMPUTADORES

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À ORGANIZAÇÃO DE COMPUTADORES LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À ORGANIZAÇÃO DE COMPUTADORES Prof. Dr. Daniel Caetano 2012-1 Objetivos Apresentar o funcionamento do computador Apresentar a função da memória e dos dispositivos

Leia mais

Algoritmos Computacionais ( Programas )

Algoritmos Computacionais ( Programas ) Algoritmos Computacionais ( Programas ) A partir deste tópico, consideramos a utilização do universo Computacional na solução de problemas. Para tanto devemos lembrar que a transposição de problemas do

Leia mais

Prof. Luis Nícolas de Amorim Trigo nicolas.trigo@ifsertao-pe.edu.br

Prof. Luis Nícolas de Amorim Trigo nicolas.trigo@ifsertao-pe.edu.br Programação Estruturada Linguagem C Introdução Prof. Luis Nícolas de Amorim Trigo nicolas.trigo@ifsertao-pe.edu.br Sumário Um pouco da história Por que aprender a programar em C Ambiente de Desenvolvimento

Leia mais

Conceitos de Linguagens de Programação

Conceitos de Linguagens de Programação Conceitos de Linguagens de Programação Aula 07 Nomes, Vinculações, Escopos e Tipos de Dados Edirlei Soares de Lima Introdução Linguagens de programação imperativas são abstrações

Leia mais

Orientação a Objetos

Orientação a Objetos 1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou

Leia mais

Capítulo I : Noções Gerais

Capítulo I : Noções Gerais Capítulo I : Noções Gerais 1 Capítulo I : Noções Gerais Informática (Teoria da Informação): Ciência do tratamento e transmissão da informação. Computador: Sistema que permite armazenar grandes quantidades

Leia mais

Componentes do Computador e. aula 3. Profa. Débora Matos

Componentes do Computador e. aula 3. Profa. Débora Matos Componentes do Computador e modelo de Von Neumann aula 3 Profa. Débora Matos O que difere nos componentes que constituem um computador? Princípios básicos Cada computador tem um conjunto de operações e

Leia mais

Introdução. Capítulo 1. 1.1. Breve sinopse

Introdução. Capítulo 1. 1.1. Breve sinopse Capítulo 1 Introdução 1.1. Breve sinopse O C é uma linguagem de programação criada por Dennis Ritchie no início da década de 70 do século XX. É uma linguagem de complexidade baixa, estruturada, imperativa

Leia mais

NOTAS DE AULA Prof. Antonio Carlos Schneider Beck Filho (UFSM) Prof. Júlio Carlos Balzano de Mattos (UFPel) Arquitetura de Von Neumann

NOTAS DE AULA Prof. Antonio Carlos Schneider Beck Filho (UFSM) Prof. Júlio Carlos Balzano de Mattos (UFPel) Arquitetura de Von Neumann Universidade Federal de Santa Maria NOTAS DE AULA Prof. Antonio Carlos Schneider Beck Filho (UFSM) Prof. Júlio Carlos Balzano de Mattos (UFPel) Arquitetura de Von Neumann O modelo (ou arquitetura) de von

Leia mais

Figura 01 Kernel de um Sistema Operacional

Figura 01 Kernel de um Sistema Operacional 01 INTRODUÇÃO 1.5 ESTRUTURA DOS SISTEMAS OPERACIONAIS O Sistema Operacional é formado por um Conjunto de rotinas (denominado de núcleo do sistema ou kernel) que oferece serviços aos usuários e suas aplicações

Leia mais

Conceitos Básicos de C

Conceitos Básicos de C Conceitos Básicos de C Bibliografia Problem Solving & Program design in C, Jeri R. Hanly e Elliot B. Kpffman, 3 a edição Data Structures and Algorithm Analysis in C, Mark Allen Weiss, 2 a edição, Addison-Wesley,

Leia mais

CONVENÇÃO DE CÓDIGO JAVA

CONVENÇÃO DE CÓDIGO JAVA CONVENÇÃO DE CÓDIGO JAVA Eligiane Ceron - Abril de 2012 Versão 1.0 Conteúdo Considerações iniciais... 2 Introdução... 2 Extensão de arquivos... 2 Arquivos de código Java... 2 Comentários iniciais... 2

Leia mais

1.6. Tratamento de Exceções

1.6. Tratamento de Exceções Paradigmas de Linguagens I 1 1.6. Tratamento de Exceções Uma exceção denota um comportamento anormal, indesejado, que ocorre raramente e requer alguma ação imediata em uma parte do programa [GHE 97, DER

Leia mais

Curso: Técnico de Informática Disciplina: Redes de Computadores. 1- Apresentação Binária

Curso: Técnico de Informática Disciplina: Redes de Computadores. 1- Apresentação Binária 1- Apresentação Binária Os computadores funcionam e armazenam dados mediante a utilização de chaves eletrônicas que são LIGADAS ou DESLIGADAS. Os computadores só entendem e utilizam dados existentes neste

Leia mais

Capítulo 2: Introdução à Linguagem C

Capítulo 2: Introdução à Linguagem C Capítulo 2: Introdução à Linguagem C INF1005 Programação 1 Pontifícia Universidade Católica Departamento de Informática Programa Programa é um algoritmo escrito em uma linguagem de programação. No nosso

Leia mais

Algoritmos e Estruturas de Dados I 01/2013. Estruturas Condicionais e de Repetição (parte 2) Pedro O.S. Vaz de Melo

Algoritmos e Estruturas de Dados I 01/2013. Estruturas Condicionais e de Repetição (parte 2) Pedro O.S. Vaz de Melo Algoritmos e Estruturas de Dados I 01/2013 Estruturas Condicionais e de Repetição (parte 2) Pedro O.S. Vaz de Melo Problema 1 Suponha que soma (+) e subtração (-) são as únicas operações disponíveis em

Leia mais

Algoritmos e Programação Aula 01 Introdução a Computação

Algoritmos e Programação Aula 01 Introdução a Computação Algoritmos e Programação Aula 01 Introdução a Computação Felipe S. L. G. Duarte Felipelageduarte+fatece@gmail.com Baseado no material do Prof. Luis Otavio Alvares e do Prof. Dr. Rodrigo Fernandes de Mello

Leia mais

ARQUITETURA DE COMPUTADORES - 1866

ARQUITETURA DE COMPUTADORES - 1866 7 Unidade Central de Processamento (UCP): O processador é o componente vital do sistema de computação, responsável pela realização das operações de processamento e de controle, durante a execução de um

Leia mais

PROGRAMAÇÃO DE COMPUTADORES (Teoria)

PROGRAMAÇÃO DE COMPUTADORES (Teoria) PC PROGRAMAÇÃO DE COMPUTADORES (Teoria) Aula 01 Prof. Ricardo Veras (prof.rveras@gmail.com) ALGORITMOS "Seqüência ordenada de passos, que deve ser seguida para a realização de um tarefa" "Algoritmo é um

Leia mais

1. CAPÍTULO COMPUTADORES

1. CAPÍTULO COMPUTADORES 1. CAPÍTULO COMPUTADORES 1.1. Computadores Denomina-se computador uma máquina capaz de executar variados tipos de tratamento automático de informações ou processamento de dados. Os primeiros eram capazes

Leia mais

Software Básico (INF1018)

Software Básico (INF1018) Software Básico (INF1018) http://www.inf.puc-rio.br/~inf1018 Noemi Rodriguez (noemi@inf.puc-rio.br) Ana Lúcia de Moura (amoura@inf.puc-rio.br) 1 Objetivo do curso Entender como funciona um computador típico,

Leia mais

3. O NIVEL DA LINGUAGEM DE MONTAGEM

3. O NIVEL DA LINGUAGEM DE MONTAGEM 3. O NIVEL DA LINGUAGEM DE MONTAGEM Nas aulas anteriores tivemos a oportunidade de discutir dois diferentes níveis presentes na maioria dos computadores atuais. Nesta aula dedica-se a outro nível que também

Leia mais

Apresentação. Ementa da Disciplina. Objetivo da Disciplina. DCA-108 Sistemas Operacionais

Apresentação. Ementa da Disciplina. Objetivo da Disciplina. DCA-108 Sistemas Operacionais DCA-108 Sistemas Operacionais Luiz Affonso Guedes www.dca.ufrn.br/~affonso affonso@dca.ufrn.br Apresentação Disciplina básica do curso de Engenharia de Computação Carga-horária: 60h teóricas Associadas

Leia mais

O Processo de Programação

O Processo de Programação Programação de Computadores I Aula 04 O Processo de Programação José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/23 Algoritmo Um algoritmo é uma seqüência de

Leia mais

Introdução aos Computadores

Introdução aos Computadores Os Computadores revolucionaram as formas de processamento de Informação pela sua capacidade de tratar grandes quantidades de dados em curto espaço de tempo. Nos anos 60-80 os computadores eram máquinas

Leia mais

Organização de Computadores 1

Organização de Computadores 1 Organização de Computadores 1 5 CONJUNTO DE INSTRUÇÕES Prof. Luiz Gustavo A. Martins Introdução O que é um conjunto de instruções? Coleção completa das instruções que a CPU é capaz de executar (entende).

Leia mais

Capítulo 13. VARIÁVEIS DO TIPO REAL DUPLA

Capítulo 13. VARIÁVEIS DO TIPO REAL DUPLA Capítulo 13. VARIÁVEIS DO TIPO REAL DUPLA OBJETIVOS DO CAPÍTULO Conceitos de: variáveis de precisão simples e dupla, variáveis do tipo real simples e dupla, mistura de variáveis do tipo inteiro com real

Leia mais

Sistemas Operacionais 3º bimestre. Dierone C.Foltran Jr. dcfoltran@yahoo.com

Sistemas Operacionais 3º bimestre. Dierone C.Foltran Jr. dcfoltran@yahoo.com Sistemas Operacionais 3º bimestre Dierone C.Foltran Jr. dcfoltran@yahoo.com Sistema de Arquivos (1) Todas as aplicações precisam armazenar e recuperar informações. Considerações sobre os processos: Espaço

Leia mais

Computador Digital Circuitos de um computador (Hardware)

Computador Digital Circuitos de um computador (Hardware) Computador Digital SIS17 - Arquitetura de Computadores (Parte I) Máquina que pode resolver problemas executando uma série de instruções que lhe são fornecidas. Executa Programas conjunto de instruções

Leia mais