Ivan L. M. Ricarte. Departamento de Engenharia de Computac~ao e Automac~ao Industrial. Faculdade de Engenharia Eletrica e de Computac~ao
|
|
- Sara Fonseca Caetano
- 8 Há anos
- Visualizações:
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 Resumo da aula Considerações Gerais Introdução a Linguagem C Variáveis e C Tipos de
Leia maisIntroduçã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 maisAlgoritmos 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 maisMC102 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 maisProgramaçã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 maisCAPÍ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 maisMC102 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 maisArquiteturas 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 maisIntroduçã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 mais1.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 maisUNIVERSIDADE 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 maisOrganizaçã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 maisSistema 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 maisFigura 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 maisCurso 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 maisO 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 maisSistemas 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 maisO 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 maisHardware (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 maisResumo 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 maisINTRODUÇÃ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 maisCurso 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 maisTabela 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 maisLinguagem 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 mais1. 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 maisUnidade 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 maisINTRODUÇÃ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 maisIFPE. 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 maisIntroduçã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 maisA 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 maisENIAC. 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 maisProf. 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 maisCAPÍ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 maisAlgoritmos 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 maisBARRAMENTO 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 maisResumo 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 maisA 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 mais3. 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 maisLINGUAGENS 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 maisConvertendo 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 maisIntroduçã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 maisLINGUAGEM 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 maisFunçõ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 mais2. 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 maisArmazenamento 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 mais20 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 maisALP 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 maisFACULDADE 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 maisResoluçã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 maisProgramaçã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 maisULA 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 maisMC-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 maisSistemas 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 maisArquitetura 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 maisComponentes 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 maisSistemas 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 maisConceitos 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 maisULA- 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 maisSistemas 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 maisAluí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 maisARQUITETURA 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 maisINFORMÁ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 maisAlgoritmos: 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 maisSISTEMAS 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 maisSistema 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 maise à 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 maisGerenciamento 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 mais3/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 maisGerê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 maisOPERADORES 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 maisLÓ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 maisAlgoritmos 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 maisProf. 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 maisConceitos 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 maisOrientaçã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 maisCapí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 maisComponentes 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 maisIntroduçã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 maisNOTAS 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 maisFigura 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 maisConceitos 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 maisCONVENÇÃ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 mais1.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 maisCurso: 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 maisCapí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 maisAlgoritmos 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 maisAlgoritmos 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 maisARQUITETURA 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 maisPROGRAMAÇÃ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 mais1. 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 maisSoftware 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 mais3. 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 maisApresentaçã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 maisO 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 maisIntroduçã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 maisOrganizaçã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 maisCapí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 maisSistemas 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 maisComputador 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