Docsity
Docsity

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

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


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Técnicas de Programação Parte1, Notas de estudo de Informática

Apostilas de Computação da Pontifícia Universidade Católica do Paraná PUCPR sobre Técnicas de Programação, Estrutura do algoritmo em portugol, Comandos de controle, Algoritmos em portugol, Programação em linguagem c.

Tipologia: Notas de estudo

2013

Compartilhado em 11/12/2013

Futebol13
Futebol13 🇧🇷

4.5

(186)

450 documentos

1 / 46

Documentos relacionados


Pré-visualização parcial do texto

Baixe Técnicas de Programação Parte1 e outras Notas de estudo em PDF para Informática, somente na Docsity! PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ CENTRO DE CIÊNCIAS EXATAS E DE TECNOLOGIA DEPARTAMENTO DE ENGENHARIA MECATRÔNICA APOSTILA DE TÉCNICAS DE PROGRAMAÇÃO CURITIBA JANEIRO/2002 1 PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ CENTRO DE CIÊNCIAS EXATAS E DE TECNOLOGIA DEPARTAMENTO DE ENGENHARIA MECATRÔNICA APOSTILA DE TÉCNICAS DE PROGRAMAÇÃO ELABORAÇÃO: PROFESSOR MARCELO RUDEK COLABORAÇÃO: GELSON LUIZ CARNEIRO ADRIANO ZELAZOWSKI PEREIRA CURITIBA JANEIRO/2002 Capítulo 1 3 2.7.2. DECLARAÇÃO..................................................................................................................56 2.7.3 PARÂMETROS E RETORNO .................................................................................................56 2.7.4. EXEMPLO 1 ......................................................................................................................57 2.7.5. EXEMPLO 2 ......................................................................................................................59 2.7.6. EXERCÍCIOS .....................................................................................................................61 2.8. INCREMENTOS E DECREMENTOS ......................................................................................62 2.8.1. INCREMENTO/DECREMENTO A POSTERIORI .....................................................................62 2.8.2. INCREMENTO/DECREMENTO A PRIORI .............................................................................63 2.8.3. EXERCÍCIO.......................................................................................................................63 2.9. ATRIBUIÇÃO COMPOSTA ..................................................................................................64 2.9.1. EXERCÍCIO .......................................................................................................................64 2.10. ATRIBUIÇÃO MÚLTIPLA.................................................................................................64 2.10.1. EXEMPLO .......................................................................................................................64 2.11. OPERADOR INTERROGAÇÃO (?) .....................................................................................65 2.12. NÚMEROS ALEATÓRIOS ..................................................................................................65 2.12.1. SINTAXE DO COMANDO .................................................................................................65 2.12.2. EXEMPLO .......................................................................................................................65 2.13 COMANDO SWITCH/CASE..................................................................................................66 2.13.1. SINTAXE DO COMANDO..................................................................................................66 2.13.2. EXEMPLO .......................................................................................................................66 2.14. TIMER ..............................................................................................................................67 2.14.1. O COMPONENTE TIMER NO C++ BUILDER.....................................................................67 2.14.2. AS PROPRIEDADES DO TIMER .........................................................................................68 2.14.3. EXEMPLO .......................................................................................................................68 2.14.4. EXERCÍCIO.....................................................................................................................68 3. ESTRUTUAS HOMOGÊNEAS DE DADOS ..................................................................69 3.1. MATRIZES UNIDIMENSIONAIS (VETORES).........................................................69 3.1.1. EXEMPLOS .......................................................................................................................69 3.1.2. INDEXAÇÃO.....................................................................................................................69 3.1.3. EXEMPLO .........................................................................................................................70 3.1.4. EXERCÍCIO.......................................................................................................................71 3.2. ORDENAÇÃO DE VETORES .................................................................................................71 3.2.1. ALGORITMO DE ORDENAÇÃO (BOLHA).............................................................................71 3.2.2. EXERCÍCIO.......................................................................................................................72 3.3. STRINGS..........................................................................................................................73 3.3.1.EXEMPLO 1 .......................................................................................................................73 3.3.2.EXEMPLO 2 .......................................................................................................................74 3.3.3. COPIANDO STRINGS .........................................................................................................74 3.3.4. COMPARAÇÃO DE STRINGS ..............................................................................................75 3.3.5. TAMANHO DE STRINGS .....................................................................................................75 3.3.6. COMPARAÇÃO DE ELEMENTOS DA STRING......................................................................76 3.3.7. CONVERSÃO DE TIPOS ......................................................................................................76 3.3.7.1. convertendo valores numéricos para caracter ..............................................................77 3.3.7.2. convertendo string para valores numéricos .................................................................77 3.3.8 EXERCÍCIOS ......................................................................................................................78 3.4. MATRIZES ......................................................................................................................79 Capítulo 1 4 3.4.1. MATRIZES BIDIMENSIONAIS ............................................................................................79 3.4.2. MATRIZES MULTIDIMENSIONAIS ......................................................................................80 3.4.3. MATRIZES DE STRINGS .....................................................................................................80 3.4.4. EXERCÍCIOS .....................................................................................................................82 9) DESENVOLA UM PROGRAMA QUE PERMITA MOVIMENTAR O ELEMENTO 1 DA MATRIZ ABAIXO EM UMA DIREÇÃO ALEATÓRIA A CADA 1S. O MOVIMENTO DO ELEMENTO NÃO PODE EXTRAPOLAR OS LIMITES DA MATRIZ.........................................................................................82 4. PONTEIROS EM C ...........................................................................................................83 4.1. DEFINIÇÃO ....................................................................................................................83 4.2. DECLARAÇÃO DE UM PONTEIRO .......................................................................................84 4.3. EXEMPLOS .........................................................................................................................85 4.4. PONTEIROS PARA MATRIZ .................................................................................................87 4.5. VETORES DE PONTEIROS ..................................................................................................89 4.5.1. EXEMPLO 1 ......................................................................................................................89 4.5.2. EXERCÍCIO.......................................................................................................................91 4.5.3. EXEMPLO 2 ......................................................................................................................91 4.5.4. EXERCÍCIOS .....................................................................................................................92 5. ALOCAÇÃO DINÂMICA DE MEMÓRIA ....................................................................93 5.1. INTRODUÇÃO .....................................................................................................................93 5.2. COMANDO DE ALOCAÇÃO .................................................................................................93 5.2.1. EXEMPLO DE ALOCAÇÃO USANDO O COMANDO MALLOC().............................................93 5.2.2. MELHORANDO O USO DE PONTEIROS...............................................................................96 5.3. EXERCÍCIOS.......................................................................................................................97 5.4. PORTABILIDADE................................................................................................................97 5.4.1. EXEMPLO DO USO DE SIZEOF ............................................................................................98 5.5. EXERCÍCIOS ..................................................................................................................98 6. ARQUIVOS EM C ..........................................................................................................103 6.1. PONTEIRO DE ARQUIVO...................................................................................................103 6.2. ABRINDO ARQUIVOS ........................................................................................................103 6.2.1. ARQUIVOS TIPO TEXTO .................................................................................................104 6.2.2. ARQUIVOS BINÁRIOS .....................................................................................................105 6.3. ABRINDO UM ARQUIVO PARA ESCRITA ...........................................................................105 6.3.1. OBSERVAÇÕES ...............................................................................................................106 6.4. ABRINDO UM ARQUIVO PARA LEITURA ...........................................................................107 6.5. FECHANDO UM ARQUIVO.................................................................................................107 6.6. COMANDOS DE ESCRITA E LEITURA................................................................................108 6.6.1. FPUTC() ..........................................................................................................................108 6.6.2. FGETC()..........................................................................................................................110 6.6.3. EXERCÍCIO COM FPUTC() E FGETC() ...............................................................................111 6.7. GRAVAÇÃO DE STRINGS COM FPUTS() ............................................................................111 Capítulo 1 5 6.8. LEITURA DE STRINGS COM FGETS() ................................................................................112 6.9. EXERCÍCIOS COM FPUTS() E FGETS()..............................................................................113 6.10. LEITURA COM FREAD() .................................................................................................113 6.11. GRAVAÇÃO COM FWRITE() ...........................................................................................114 6.12. GRAVAÇÃO COM FPRINTF() ..........................................................................................115 6.13. LEITURA COM FSCANF() ................................................................................................115 6.14. EXERCÍCIOS...................................................................................................................116 7. REGISTROS .....................................................................................................................117 7.1. DEFINIÇÃO.......................................................................................................................117 7.2. INICIALIZAÇÃO................................................................................................................117 7.2.1. EXEMPLO 1 ....................................................................................................................118 7.2.2. EXEMPLO 2 ....................................................................................................................118 7.3. ACESSO AOS ELEMENTOS DA ESTRUTURA ......................................................................118 7.4. EXERCÍCIO.......................................................................................................................119 7.5. MATRIZES DE ESTRUTURAS ............................................................................................119 7.5.1.EXEMPLO ........................................................................................................................119 7.5.2. EXERCÍCIO.....................................................................................................................120 7.6. USO DE TYPEDEF..........................................................................................................122 7.6.1. EXEMPLO .......................................................................................................................122 7.6.2. EXEMPLO 2 ....................................................................................................................122 7.7. GRAVAÇÃO E LEITURA DE REGISTROS ..........................................................................123 7.7.1 EXEMPLO ........................................................................................................................123 7.7.2.EXERCÍCIO......................................................................................................................123 7.8. PONTEIROS PARA REGISTROS .........................................................................................124 7.8.1.EXEMPLO ........................................................................................................................124 8. GRÁFICOS EM C............................................................................................................127 8.1. INTRODUÇÃO..............................................................................................................127 8.2. DESENHANDO LINHAS .....................................................................................................127 8.3. USANDO O PAINTBOX......................................................................................................129 8.4. COMPONENTE PANEL......................................................................................................130 8.5. DESENHANDO RETÂNGULOS ...........................................................................................131 8.6. DESENHANDO ELIPSES ....................................................................................................132 8.7. DESENHANDO PONTOS (PIXELS).....................................................................................133 8.8. EXEMPLO .........................................................................................................................133 8.9 EXERCÍCIOS......................................................................................................................137 9. LISTAS LINEARES.........................................................................................................138 9.1. FILA .................................................................................................................................138 9.1.1. DEFINIÇÃO.....................................................................................................................138 9.1.2. OBJETIVO .......................................................................................................................138 9.1.3. EXEMPLO .......................................................................................................................138 Capítulo 1 8 I. Contrato Didático i. INFORMAÇÕES GERAIS • Todas as aulas (teoria e prática) serão em laboratório; então todos deverão estar familiarizados com o manuseio dos computadores, pois o conteúdo da aula será fornecido pela internet através do endereço http://www.las.pucpr.br/rudek • Trazer disquetes para armazenar os trabalhos de aula; • Quem necessitar pode (e deve) usar os laboratórios da PUC para aprender a usar o computador; cada laboratório possui um monitor responsável que pode ajudar nas dúvidas, fora dos horários de aula; • Observar as normas de utilização do laboratório e das aulas de TP1, principalmente em relação ao zelo pelos equipamentos e atenção às atividades de aula; • Informações sobre o curso de Engenharia de Controle e Automação (ECA) e de atividades do Laboratório de Automação e Sistemas (LAS) podem ser obtidas diretamente no site do LAS através do endereço www.las.pucpr.br. ii. SISTEMA DE AVALIAÇÃO • A avaliação é contínua durante todo o curso. Será composta de provas, trabalhos, exercícios em sala (participação); • A nota semestral será composta de 3 notas parciais:, sendo: o 1.ª parcial : prova (80%) + exercícios (20%); o 2.ª parcial: prova (60%) + exercícios (10%) + trabalhos (30 %); o 3.ª parcial: prova (50%) + exercícios (20%) + trabalhos (30 %); OBS: a forma de avaliação das parciais, pode variar de acordo com o andamento das aulas e nível de aprendizado0 da turma. • Os trabalhos serão divulgados na minha página; Trabalhos entregues com atraso não serão cosiderados, ou terão nota reduzida (2,0 pts por dia de atraso), de acordo com critério do professor. • Faltas: no máximo 12 faltas (4 dias de aula). Mais de 12 faltas o aluno estará automaticamente reprovado por falta, independente das notas que possua. Capítulo 1 9 iii. O PROGRAMA DE APRENDIZAGEM (P.A.) Este programa de aprendizagem explora o estudo de algoritmos e programação em linguagem C. Para aprovação neste semestre o aluno deverá estar apto a raciocinar e desenvolver a sua capacidade de abstração, para a criação de algoritmos e programas elementares. As técnicas de programação serão vistas através da utilização de uma pseudolinguagem em português, denominada "Portugol". Assim, o aluno poderá escrever algoritmos e aplicar as técnicas de desenvolvimento para serem usadas com qualquer linguagem de programação. Para este P.A., será utilizada a linguagem C padrão, em ambiente Windows. Na seção seguinte será apresentado o conteúdo programático de Técnicas de Programação I e II (TPI e TPII ). Capítulo 1 10 II. Apresentação do Programa de Aprendizagem (P.A.) i. CONTEÚDO PROGRAMÁTICO: - Conceitos de Informática e Programação; . Princípios de funcionamento; . Sistemas Operacionais (DOS e WINDOWS); . Sistemas Numéricos; . Memória e Dispositivos de Armazenamento; . Linguagens de Programação; - Algoritmos: Introdução; - Algoritmos: Portugol; - Introdução a Linguagem C : Principais comandos e programação para Windows; - OBS: Conteúdo das aulas em www.las.pucpr.br/rudek ii. Bibliografia Recomendada: 1. Algoritmos e Estruturas de Dados; Guimarães e Lages; LTC – Livros Técnicos e Científicos. 2. Estruturas de Dados Usando C; A. Tanenbaum; Makron Books 3. Dominando Algoritmos com C; Kyle Loundon; Ed. Ciência Moderna. 4. C Completo e Total; Herbert Schildt; Makron Books; 5. C A Linguagem de Programação Padrão Ansi; Brian W. Kerninghan, Dennis M. Ritchie; Editora Campus; 6. C++ Builder 5 - Guia Prático; César A Mateus. Ed. Érica (www.erica.com.br); 7. C++ Builder 5 Developer´s Guide; J. Hollinworth, D. Butterfield, et al. Ed. SAMS; 8. C Completo e Total; Herbert Schildt; Makron Books; 9. Internet. Capítulo 1 13 executados sequencialmente, de forma que um comando só será executado após a finalização do comando anterior. A estrutura de um algoritmo em portugol pode ser dada como: Exemplo: início <declarações de variáveis> <comandos> fim 1.4. Variáveis 1.4.1. Declaração de Variáveis Uma variável é um local (área na memória do computador) que armazena um tipo específico de conteúdo. Uma variável contém um valor que se modifica durante a execução do programa. A variável possui um identificador (nome), que pode ser representado da seguinte forma: Capítulo 1 14 1.4.1.1. Tipos de Variáveis Variáveis são componentes das linguagens de programação, que identificam os valores que estão sendo manipulados pelos programas. Uma variável, como o próprio nome sugere, contém valores que variam de acordo com a execução do programa. Uma variável deve possuir um tipo específico. As variáveis em portugol, são divididas em 4 tipos principais, (embora na linguagem C existam modificações para estes tipos principais). No portugol, os tipos básicos de variáveis são: • Inteiro: Qualquer número inteiro (negativo, nulo ou positivo). Exemplo: -100, 0, 1, 2, 1250. • Real: Qualquer número real, nulo ou positivo. Exemplo: -10, -1.5, 11.2, 0,1, 2, 50. • Caracter: Caracteres alfanuméricos. Exemplo: casa, Win31, 123, alfa#2, etc... • Lógico: valor lógico verdadeiro ou falso Exemplo: x > y ? Exemplos: inteiro: valor; // a variável valor é do tipo inteiro real: media; // a variável media é do tipo real caracter: nome_aluno; // a variável nome_aluno é do tipo caracter lógico: maior; // a variável maior é do tipo booleano 1.4.1.2. Identificadores de Variáveis O identificador de uma variável, se refere ao nome de como ela vai ser conhecida no programa. È importante não esquecer que: a) Não é possível definir variáveis de diferentes tipos com o mesmo identificador (nome); O exemplo: real A; inteiro A; causaria erro na programação, mas pode ser Capítulo 1 15 usado real A1; inteiro A2; ou normalmente um nome mais significativo, como real media, inteiro valor, caracter nome, etc. b) Tomar alguns cuidados em relação à sintaxe da linguagem, por exemplo, não é possível ter identificador como: caracter ?nome, real valor*, inteiro 1x, . c) .Letras maiúsculas e minúsculas são tratadas de forma diferente, então Media é diferente de media, como também de MEDIA. Cada variável definida no programa usa um local da memória, que é acessada através do nome dado a variável. O espaço de memória ocupado pelo conteúdo da variável, depende do tamanho destes tipos de dados, que variam de acordo com o tipo do processador a com a implementação do compilador. Como referência inicial para este estudo sobre variáveis, pode-se considerar pelo ANSI C, o seguinte: • Tipo Inteiro com 2 bytes; • Tipo real com 4 bytes; • Tipo caracter com 1 byte; Exemplo: Pode-se supor a memória como uma matriz, como a figura abaixo, onde cada célula possui tamanho de 1 byte (8 bits): Para armazenar o valor inteiro A= 1, necessita-se de 2 bytes (1 inteiro = 2 bytes na memória*); Para armazenar o valor real B= 1, necessita-se de 4 bytes (1 real = 4 bytes na memória*); * no C ANSI; no C++ Builder os tamanhos das variáveis são diferentes. A B área ocupada por outros programas. Capítulo 1 18 Obs: - O incoveniente deste algoritmo é que sempre fornecerá o mesmo resultado, o que não é interessante. De maneira mais correta, os valores de x e y podem ser fornecidos pelo usuário, permitindo ao algoritmo que efetue a soma de dois números quaisquer. - Neste exemplo podemos observar que o resultado da soma de x + y será armazenado em z. Como o usuário ficará sabendo da resposta ? É necessário usar comandos de escrita, para apresentar os resultados. 1.5.3. Entrada e Saída de Dados Na construção de algoritmos, é conveniente que o usuário possa informar dados externos, para serem operados pelo programa. Assim, um programa pode receber um dado informado por um operador através de um comando de leitura. Da mesma forma, pode ser necessário conhecer o resultado de determinada operação executada pelo computador, então será necessária uma forma de exibir os dados. Cada linguagem tem uma forma específica para entrada e saída de dados. Em algoritmos usaremos os comandos genéricos leia() e escreva(), para realizar a interface com o usuário. Exemplo: início real A, B, C; leia(A); leia(B); c <- A + B; escreva(B); fim Lê os valores fonecidos pelo usuário e armazena em A e B. Apresenta a resposta (tela, impressora, arquivo, etc) Capítulo 1 19 1.5.4. Regras para escrever algoritmos em portugol • Incluir comentários pelo menos nas linhas mais importantes do programa; • Usar nomes significativos para as variáveis e constantes, que possam identificar o conteúdo; • Grifar as palavras chaves do portugol; • Alinhar os comandos facilita a legibilidade do algoritmo e reduz a possibilidade de erros. 1.5.5. Exercícios 1 – Desenvolva um algoritmo em portugol para calcular xy. Os valores de x e y serão fornecidos pelo usuário do programa; 2 – Desenvolva um programa que calcule o volume de uma esfera de raio R, fornecido pelo usuário. [ V = 4/3 π R3 ] 3 – Desenvolva um programa que transforme um valor de temperatura fornecido pelo usuário, de Farenheit ( F ) para Graus Celcius ( ºC ). [V = 5/9 (F – 32)] 4 – Desenvolva um algoritmo para calcular a média entre 4 valores fornecidos pelo usuário. 5 – Desenvolva um algoritmo para encontrar as raízes de uma equação do tipo Ax2 + Bx + C. 1.6. Comandos de Controle Os comandos de controle permitem alterar a direção tomada por um programa (desvio), ou fazer com que partes específicas de um algoritmo seja executada mais de uma vez (loop). 1.6.1. Desvio Condicional Muitas vezes será necessário desviar a execução do programa segundo uma condição. (Exemplo: ir a universidade de carro ou de ônibus ?). Para se testar condições é necessário utilizar operadores lógicos e relacionais. 1.6.1.1. Operadores Lógicos Capítulo 1 20 Os operadores "e", "ou" e "não" permitem realizar a combinação lógica de variáveis do tipo booleana (lógico). Para isto utilizam-se as tabelas verdade: Var1 Var2 E V V V V F F F V F F F F Var1 Var2 OU V V V V F V F V V F F F Var1 Não V F F V 1.6.1.2. Operadores Relacionais Permitem realizar a comparação de conteúdos das variáveis: A igualdade é dada por = ; Maior ou igual, pelo símbolo >=; A desigualdade é dada por <> ; Menor ou igual, pelo símbolo <=; Maior que, pelo símbolo >; Não !; Menor que, pelo símbolo <; 1.6.1.3. Desvio Condicional Simples Para que a execução de um algoritmo seja desviada para uma outra ação, é necessário um comando de desvio. Este comando é dado pelas palavras reservadas se e fim se. Dentro deste bloco podemos ter vários comandos de atribuição, operações lógicas e aritméticas, e também novos blocos de desvio condicional. se (condição) então lista de comandos... fim se Capítulo 1 23 1.6.2. Laços de Repetição (loop) Uma sequência de ações é repetida por um número específico de vezes, até que uma condição seja satisfeita. Enquanto a condição for verdadeira, as instruções serão executadas. O laço de repetição também pode ser chamado de loop. Exemplo 1: Durante uma semana, um mês, etc, vc pode realizar a mesma seqüência de ações, como no exemplo: 1 º Dia Acordar → levantar → tomar café → pegar o ônibus Ou → chegar ao destino → pegar o carro 2 º Dia Acordar → levantar → tomar café → pegar o ônibus Ou → chegar ao destino → pegar o carro . . . N – ésimo Dia Acordar → levantar → tomar café → pegar o ônibus Ou → chegar ao destino → pegar o carro Como as ações se repetem durante um período ou até que um evento ocorra (chegar ao fim de semana) , pode-se melhorar escrita da sequência do exemplo acima, como: Capítulo 1 24 Exemplo 2: Enquanto ( não chegar ao fim de semana) faça Acordar → levantar → tomar café → pegar o ônibus Ou → chegar ao destino → pegar o carro Exemplo 3: Enquanto ( dia < N) faça Acordar → levantar → tomar café → pegar o ônibus Ou → chegar ao destino → pegar o carro Então, pode-se observar que as construções dos exemplos 2 e 3, representam as N repetições do exemplo 1. Em termos práticos da programação, a forma dos exemplos 2 e 3, de escrever ações que se repetem, são corretas. A forma de escrever as ações do exemplo 1 que se repetem é incorreta, apesar de levar o mesmo resultado, pois imagine reescrever as mesmas ações para 365 dias, ou mais... 1.6.2.1. Comando: enquanto/faça Em portugol, escreve-se o comando enquanto / faça, da forma apresentada abaixo. Note que se forma um bloco de comandos, delimitado ente o início e o fim do loop. Veja o exemplo: enquanto (condição) faça fim enquanto ... lista de comandos; ... A “condição “ se refere a um critério de parada do loop, ou seja, até quando o loop vai ser executado. Um ou mais comandos que serão executados enquanto a condição for verdadeira. Capítulo 1 25 Suponha os algoritmos abaixo que calculam o valor de x10, sendo x fornecido pelo usuário. Em termos de programação, pode-se ver a diferença na escrita dos programas a seguir, com e sem o uso de um laço de repetição (loop): Exemplo sem loop Exemplo com loop inicio inteiro x,y; leia (x); y <- x; y <- y * x; y <- y * x; y <- y * x; y <- y * x; ... ... ... y <- y * x; escreva (y); fim inicio inteiro x,y,z; leia (x); y <- x; z <- 1; enquanto (z < 10) faça y <- y * x; z <- z + 1; fim enquanto escreva (y); fim Exemplos: a) O problema do loop infinito: inicio inteiro I; I <- 0; enquanto (I < 5) faça escreva (I); fim enquanto fim Teste de Mesa inicio I = 0 1ª iteração I = 0 2ª iteração I = 0 3ª iteração I = 0 ... ... infinitas iterações I = 0 Obs: O programa ficará travado, pois a condição de saída do loop nunca será satisfeita Capítulo 2 28 2. PROGRAMAÇÃO EM LINGUAGEM C 2.1. INTRODUÇÃO A PROGRAMAÇÃO EM LINGUAGEM C 2.1.1. Declaração de Variáveis As diferenças entre os tipos de variáveis do portugol para o C são: inteiro = int real = float, double caracter = char lógico = bool (normalmente não é necessário tipos booleanos para testes lógicos) Para alterar a precisão dos valores podem ser utilizados modificadores: C ANSI Modificadores Exemplos: char int float double signed unsigned long short int x ; (x é um inteiro com sinal - signed) unsigned int y; (x é um inteiro sem sinal - unsigned) long z; (z é um inteiro com o dobro do tamanho de um int) short int v; (v tem o mesmo tamanho de um int) Exemplos: a) signed int (ou simplesmente int): Tipo de variável que se refere a um número inteiro com sinal. Ou seja, se um variável int ocupa dois bytes na memória, então, o maior valor decimal que pode ser armazenado neste tipo de variável deve estar entre –32.767 a 32.767. O primeiro bit (mais significativo) representa o sinal (0 positivo e 1 negativo). Então o maior valor decimal que pode ser armazenado em 15 bits é 32.767. 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 bit de sinal 15 bits de informação Capítulo 2 29 b) unsigned int; Tipo de variável que se refere a um número inteiro sem sinal. Ou seja, se um variável int ocupa dois bytes na memória, então, o maior valor decimal que pode ser armazenado neste tipo de variável deve estar entre 0 a 65.535. O primeiro bit (mais significativo) não representa mais o sinal. Então o maior valor decimal que pode ser armazenado em 16 bits é 65.535. O tamanho em bytes de cada tipo de variável no C, é apresentado na tabela abaixo. Tipo Tamanho em Bits Faixa de valores char 8 -127 a 127 unsigned char 8 0 a 255 signed char 8 -127 a 127 int 16 -32767 a 32767 unsigned int 16 0 a 65.535 signed int 16 mesmo que int short int 16 mesmo que int unsigned short int 16 mesmo que unsigned int signed short int 16 mesmo que short int long int 32 -2.147.483.647 a 2.147.483.647 signed long int 32 Mesmo que long int unsigned long int 32 0 a 4.294.967.295 float 32 seis dígitos de precisão double 64 dez dígitos de precisão long double 80 dez dígitos de precisão Fonte: C Completo e Total; Herbert Schildt. 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 bits de informação Capítulo 2 30 2.1.2. Comando de atribuição: O comando de atribuição em linguagem é dado pelo símbolo = (igual). Exemplo: float A, B, C; A = 10; B = 20; C = A + B; 2.1.3. Blocos de Comandos: Os blocos de comando, definidos no portugol pelas palavras início/fim, na linguagem C serão representados pelas { } (chaves). Exemplo: Portugol Linguagem C início real A, B, C; A <- 10; B <- 20; c <- A + B; fim { float A, B, C; A = 10; B = 20; C = A + B; } Capítulo 2 33 2.2.2.3. Barra de Propriedades Cada componente possui uma lista de propriedades (no object inspector) que pode ser alterada de acordo com a necessidade do programador. Da mesma forma os eventos podem ser utilizados para executarem ações durante o uso do programa. 2.2.3. A criação de programas Enunciado: Dado o algoritmo que calcula a soma de dois números, elabore um programa em C, que realize as operações representadas no algoritmo. Para resolver este problema, primeiramente é necessário conhecer as diferenças entre os comandos do portugol e da linguagem C, como apresentado a seguir: Esta janela apresenta as propriedades do componente com o "foco". As propriedades, ou eventos podem ser alterados nesta janela, quando da escrita do programa. Por exemplo: a) para alterar o título do formulário, alterar a propriedade “caption”; b) para alterar o nome do formulário alterar a propriedade “name”; c) para alterar as cores do formulário alterar a propriedade “color”. As propriedades podem ser alteradas também durante a execução do programa, bastando referenciar o componente e a respectiva propriedade através do conector "->". Assim, no programa, pode-se escrever: Form1->Caption = “programa1”; . Capítulo 2 34 Portugol Linguagem C inicio inteiro a,b,c; leia(a); leia(b); c = a + b: escreva(c); fim { int a,b,c; a = atoi(Edit1->Text.c_str()); b = atoi(Edit2->Text.c_str()); c = a + b; Edit3->Text = c; } Algumas diferenças ocorrem na leitura, escrita e atribuição de valores, como também em relação aos operadores relacionais, lógicos e aritméticos, como apresentado a seguir: a) Entrada de Dados leia(n); é escrito como n = atoi(Edit1->Text.c_str()); Onde, Edit1 é o nome do componente EditBox; Edit1->Text é a propriedade texto de Edit1; Edit1->Text.c_str() é o formalismo do Builder para leitura de string; atoi() é a função do C para converter caracteres alfanuméricos (texto) em valor numérico do tipo inteiro. Para usar a função atoi() é necessário incluir uma biblioteca do C: #include <stdlib.h> Obs: - Note que Edit1 é o nome do componente e Text é uma das propriedades; esta especificamente diz respeito ao conteúdo da caixa de texto. - Note também que Edit1 é o nome do EditBox. Este nome será usado para todo o programa. Lembre que através da propriedade name, o nome pode ser alterado. Por exemplo, Texto1->Text = ...; Capítulo 2 35 b) Atribuição f <- n; é escrito como f = n; (com o sinal de igualdade) c) Saída de Dados escreva(f); em C, é dado atribuindo um valor de resposta ao componente do formulário usado para apresentá-la, como por exemplo, um EditBox. Ou seja, Edit2->Text = f; (a propriedade Text do Edit2, irá conter o valor de f). d) Operadores aritméticos em C Operação Símbolo Operação Símbolo Adição + Raiz quadrada sqrt() Subtração - Exponenciação pow() Multiplicação * Resto % Divisão / e) Operadores relacionais Operação Símbolo Operação Símbolo Maior que > Menor ou igual < = Menor que < Igualdade = = Maior ou igual > = Diferença ! = 2.2.4. Passos para Criar uma Aplicação em C A seguir será apresentada uma sequência de passos para a criação de programas em C, no ambiente do Borland C++ Builder. Capítulo 2 38 e) Compilando um Programa O C++ Builder deve compilar o programa para verificar a sintaxe, e gerar o código executável. Para compilar selecione a opção correspondente no menu, ou use as teclas de atalho Ctrl F9 ou F9. f) Executando um Programa Para executar o programa, utilize o comando RUN ou a tecla F9. Local para declaração das bibliotecas Evento clique do botão Programa em C Capítulo 2 39 g) Salvando o Programa Para gravar o programa recomenda-se criar uma pasta, pois vários arquivos gerados pelo compilador devem ser armazenados. Se este local for conhecido, então facilitará a localização e manutenção dos programas. Use o comando "Save All" para que todos os arquivos sejam salvos. Uma janela, como abaixo, é apresentada. Forneça um nome para o arquivo Unit1.cpp. Em seguida deverá ser fornecido um nome para o arquivo de projeto Project1.cpp . Obs: - Como a unit e o projeto tem a mesma extensão (.cpp), não esqueça de dar nomes diferentes para os dois arquivos. - Grave sempre no HD, pois o C++ gera vários arquivos durante a compilação. 2.2.5. Exercícios 1. Escreva um programa em C para somar e subtrair dois números fornecidos por um usuário, e apresentar o resultado usando um Editbox. 2. Modifique o exercício 3.1, para apresentar o resultado através de um Label; 3. Escreva um programa em C que calcule as raízes de uma equação de 2.º grau. 4. Escreva um algoritmo e um programa em C que conte quantas vezes um botão foi pressionado, e apresente o resultado em um EditBox. Capítulo 2 40 2.3. ESCOPO DE VARIÁVEIS 2.3.1. Variáveis locais As variáveis devem existir (ser declaradas) antes de serem usadas no programa. Existem duas formas de declaração de variáveis. As variáveis locais são declaradas dentro de um procedimento ou função, ou associadas a um evento, como por exemplo, um botão no formulário. Estas variáveis são utilizadas dentro do bloco de comandos do botão. Estas variáveis não são acessíveis por outras partes do programa, por exemplo, associadas a um segundo botão. Exemplo Escreva um algoritmo e um programa em C (usando C++ Builder), para contar o número de vezes que foi apertado o botão [OK] do formulário abaixo. Implementar este exemplo e analisar o resultado obtido. Dentro do botão OK: { int vezes = 0; // variável local vezes = vezes + 1; // incrementa o número de vezes Edit1->Text = vezes; // apresenta resultado } Capítulo 2 43 2.4.3. If’s Aninhados se (condição) então se (condição) então comando 1; fim se se (condição) então comando 2; senão comando 3; fim se senão comando 4; fim se if (condição) { if (condição) comando 1; if (condição) comando 2; else comando 3; } else comando 4; if (condição) comando 1; else if (condição) comando 2; else if (condição) comando 4; 2.4.4. Exemplo Escreva um algoritmo em portugol e o respectivo programa em C, para calcular as raízes de uma equação do 2.o grau: Ax² + Bx + C. Solução sem o uso de “if”. - Algoritmo em Portugol: Inicio inteiro: A, B, C; real: x1, x2; leia(A, B, C); x1 <- (-B + raiz(B^2 - 4*A*C))/ 2*A; x2 <- (-B - raiz(B^2 - 4*A*C))/ 2*A; escreva(x1, x2); fim Capítulo 2 44 - Programa em Linguagem C++ Builder #include <stdlib.h> // contém atoi() #include <math.h> // contém pow() e sqrt() // no botão OK: { int A, B, C; float x1, x2; A = atoi(Edit1->Text.c_str()); B = atoi(Edit2->Text.c_str()); C = atoi(Edit3->Text.c_str()); x1 = (-B + sqrt(pow(B,2) - 4*A*C))/ 2*A; x2 = (-B - sqrt(pow(B,2) - 4*A*C))/ 2*A; Edit4->Text = x1; Edit5->Text = x2; } b) Solução com o uso de “if”. - Algoritmo em Portugol: inicio inteiro: A, B, C, D; real: x1, x2; leia(A, B, C); D <- (B^2 - 4*A*C); se (D >= 0) então x1 <- (-B + raiz(D)/ 2*A; x2 <- (-B - raiz(D)/ 2*A; escreva(x1, x2); senão escreva("Delta < 0"); fim se fim
Docsity logo



Copyright © 2024 Ladybird Srl - Via Leonardo da Vinci 16, 10126, Torino, Italy - VAT 10816460017 - All rights reserved