Prévia do material em texto
Laboratório de Programação I APRESENTAÇÃO 25/07/2013 Prof. Jair Alves Barbosa 25/07/2013 Laboratório de Programação I 2 Apresentação • Conteúdo programático • Recursos e metodologia de ensino • Bibliografia • Cronograma das atividades • Avaliação 25/07/2013 Laboratório de Programação I 3 Conteúdo Programático • Revisão -Estrutura de Dados Homogênea (vetor e matriz) • Revisão- Manipulação de Strings • Tipos de dados definidos pelo usuário • Apontadores (ponteiros) • Estrutura de Dados Heterogênea (estrutura) • Arquivos • Alocação Dinâmica • Pesquisa e Ordenação 25/07/2013 Laboratório de Programação I 4 Recursos e Metodologia de ensino • Aulas expositivas teóricas • Aulas práticas em laboratório • Exercícios de fixação usando exemplos reais • Desenvolvimento de atividades extra-classe • Diversificação dos métodos de exposição do conteúdo disciplinar de acordo com a necessidade da abordagem explicativa 25/07/2013 Laboratório de Programação I 5 Bibliografia • Básica SCHILDT, H., C Completo e Total, Editora Makron Books do Brasil Editora Ltda, 1996. • Complementar EVARISTO, J., Aprendendo a programar programando em linguagem C, Book Express, 2001. MIZRAHI, V. V., Treinamento em Linguagem C, Curso Completo, Módulos 1 e 2, Makron Books do Brasil Editora Ltda,1990. DEITEL, H. M. e Deitel, P. J., C++ Como Programar, 2001. 25/07/2013 Laboratório de Programação I 6 Cronograma das Atividades • O período letivo é de 26/07 até 06/12/2013. • Todas as aulas utilizarão o laboratório em período integral • Existem 36 encontros previstos para as turmas, onde diversas atividades estão prevista para serem realizadas neste plano • A última aula deste semestre corresponde a aula síntese de cada turma 25/07/2013 Laboratório de Programação I 7 AVALIAÇÃO • Consiste em três avaliações (P1,P2,P3) Cada uma destas avaliações consiste no resultado obtido pelo aluno na avaliação presencial (AP) e de uma avaliação virtual (AV) que corresponde a um prêmio de 10% da mesma nota. Existirá ainda mais uma quarta avaliação de recuperação (PR), em caráter de recuperação/aprovação na disciplina, para substituição da menor nota entre P1, P2 e P3 Onde: P1=(AP1)+(AV1x 0,1) P2=(AP2)+(AV2 x 0,1) P3=(AP3)+(AV3 x 0,1) Obs.: P1, P2 e P3 estão limitados ao máximo de 10 pontos. 25/07/2013 Laboratório de Programação I 8 AVALIAÇÃO • As notas inferiores a 4.0, em qualquer uma destas avaliações (AP1, AP2 ou AP3), obrigam o estudante a cumprir a atividade de reforço, conforme plano elaborado com o professor/monitor • A avaliação desta disciplina também é baseada no acompanhamento de atividades realizadas durante todo o semestre, tendo cada uma o seu respectivo peso: – 45% - corresponde as avaliações P1, P2 e P3; – 10% - desenvolver e entregar o estudo dirigido (D); – 10% - elaborar e entregar exercícios e tarefas solicitadas (EX); – 35% - desenvolver e apresentar o projeto final (PF). Média Final=(1,5xP1+1,5xP2 + 1,5xP3 + EX x 1 + D x 1+ PF x 3,5) 10 25/07/2013 Laboratório de Programação I 9 AVALIAÇÃO - continuação • Para os que não atingirem sete (7,0) será realizada a avaliação de recuperação, que poderá substituir a menor nota ente P1, P2 ou P3 e o calculo da Média será refeito. • PR poderá ser usada como exame final onde são abandonadas todas as outras notas e seu resultado será considerado unicamente na avaliação do estudante, sendo esta avaliação o indicador que mostrará se o estudante está apto ou não para continuar na próxima disciplina desta subárea. Neste caso serão desprezadas todas as notas anteriores, ficando ainda a média do aluno na disciplina limitada a nota 7,0 (sete), o que indica a aprovação do mesmo. 25/07/2013 Laboratório de Programação I 10 • A atividade de reforço será obrigatória quando o estudante não obtiver nota superior a 4,0 em qualquer uma das provas, sendo a mesma realizada semanalmente até a próxima avaliação (prova). Alcançando nota superior a quatro esta atividade deixa de ser obrigatória. Caso sua nota seja igual ou inferior a 4.0 na nova avaliação, o estudante permanece em atividade de reforço até a próxima avaliação (prova). • A falta na atividade de reforço deverá ser justificada diretamente ao professor da disciplina AVALIAÇÃO - continuação 25/07/2013 Laboratório de Programação I 11 APOIO À DISCIPLINA • Apoio virtual: • e-mail professor: jairab@yahoo.com.br • Moodle: http://moodle.catolicavirtual.br • SAE : http://sae.ucb.br • Siteprogramar : http://cae.ucb.br/conteudo/programar/ programação computacional laboratórios LAB I • Servidor de arquivos: ftp://materias.ucb.br Login: aljair turma022013/Lab1BCC Senha:alunoftp • Monitores • Grupo de Estudos • Biblioteca • Softwares: • devC++ 25/07/2013 Laboratório de Programação I 12 Considerações ... 25/07/2013 Laboratório de Programação I 13 • Utilizar Lógica ==> colocar Ordem no Pensamento Para objetivo específico Algoritmo • Ex.: receita de um bolo, manual de instruções, etc. Algoritmo Revisão 25/07/2013 Laboratório de Programação I 14 • Mover os três discos de uma haste para outra • Regras: c b a 1 2 3 Solução move o disco a para a haste 2 move o disco b para a haste 3 move o disco a para a haste 3 move o disco c para a haste 2 move o disco a para a haste 1 move o disco b para a haste 2 move o disco a para a haste 2 Torre de Hanói – pode-se mover apenas um disco de cada vez – nunca pode ser colocado um disco maior sobre um menor Revisão 25/07/2013 Laboratório de Programação I 15 Algoritmo Programa Linguagem de computação Algoritmo X computador Revisão 25/07/2013 Laboratório de Programação I 16 Representação ou descrição do Algoritmo Revisão • Português Estruturado (Portugol) • Diagrama de Chapin (Nassi e Schneider) • Fluxograma 25/07/2013 Laboratório de Programação I 17 Revisão • Inteiro: toda informação numérica inteira (não fracionária) negativa, nula ou positiva. Ex: 100, 0, -3 • Real: toda informação numérica pertencente ao conjunto dos números reais (inteiras ou fracionárias), (negativa, nula ou positiva). Ex: 100, 0, -3, 1,7, 1000,50. • Caractere: sequência contendo letras, números e símbolos especiais (caracteres alfanuméricos) – essa sequência deve ser indicada entre aspas (“ “) – Ex.: “Taguatinga - DF”, “356-9025”, “Desconto 10%” – também chamado de string ou cadeia • Lógico: conjunto de valores falso ou verdadeiro. – Esse tipo só apresenta um desses valores – também chamado de booleano Tipos primitivos ou escalares de informação processada pelo computador: 25/07/2013 Laboratório de Programação I 18 01) Qual o resultado produzido pelo algoritmo: Exercícios de Revisão algoritmo “revisao” //Síntese: ? //Declarações var a,b,c:logico x,y:real v,z:inteiro inicio b verdadeiro a falso c falso x 1.5 y 3.2 x x + 1 se ((c) ou (( x+y) > 5) ou (nao a e b)) entao z 0 senao z 0 fimse escreva (z) fimalgoritmo 25/07/2013 Laboratório de Programação I 19 Exercícios de Revisão 02) Qual o resultado produzido pelo algoritmo: algoritmo “revisao” //Síntese: ? //Declarações var resultado:real num: inteiro inicio escreva(“ Numero =“) leia (num) se (num > 0) entao resultado num* 10 senao resultado num * 100 fimse escreva (resultado) fimalgoritmo Valores para teste: 10, -10 e –1000001 Verificar precisão? 25/07/2013 Laboratório de Programação I 20 Exercícios de Revisão 03) Faça um algoritmo que leia o número do DDD e informe a qual cidade pertence, considerando as seguintes localidades: – 61 - Brasília – 71 - Salvador – 11 - São Paulo – 21 - Riode Janeiro – 32 - Juiz de Fora – 19 - Campinas – 27 - Vitória – 31 - Belo Horizonte – Ligação NÃO pode ser feita por esta operadora telefônica (MSG) => Após elaborar o algoritmo faça o teste (chinês) na solução proposta. => Se você ainda não pensou nisso, o seu usuário pode querer fazer mais que uma ligação para mais que um lugar. Corrija o algoritmo proposto para realizar ligações enquanto o usuário desejar 25/07/2013 Laboratório de Programação I 21 04) Elabore um algoritmo que permita a escolha das frutas especificadas abaixo, sendo elas identificadas por meio do seu valor correspondente. 1 => ABACAXI 2 => MAÇA 3 => PERA Usando a instrução repita...até identifique quais as frutas desejadas por seu usuário, lembrando que ele pode desejar somente um tipo de fruta, ou mais que um. Porém deve existir o cuidado na identificação correta das frutas, pois o feirante só possui estes três tipos. Sendo assim o usuário que escolher uma fruta não existente deve ser notificado que a fruta não esta disponível e a solicitação deve ser feita novamente sobre qual fruta ele deseja. Exercícios de Revisão 25/07/2013 Laboratório de Programação I 22 Exercícios de Revisão 05) Sendo H = 1+1/2+1/3+ ... +1/N. Prepare uma algoritmo, usando PARA, para calcular H, sendo N fornecido pelo usuário. Algoritmo “ revisao” //Síntese: objetivo: calcular o valor final da sequencia // entrada: um número (n) // saída: o valor da sequencia (h) //Declarações var contador, n: inteiro total : real inicio total 0 escreva(“ Qtde de termos = “) leia(n) para contador de 1 ate n passo 1 faca total total + 1 / contador fimpara escreva(“Resultado = ”, total) fimalgoritmo 25/07/2013 Laboratório de Programação I 23 Programa (ou código) Conjunto de instruções seqüenciais que solicita que o computador execute alguma ação (ou atividade) por meio de uma comunicação, no nosso caso, usando uma linguagem de programação Fonte - escrito na linguagem desejada - no caso „.C‟ ou „.CPP‟ Objeto - fonte traduzido em linguagem de máquina - „.OBJ‟ Executável - agrega ao código objeto algumas rotinas por meio da linkedição, gerando um programa „.EXE‟ Revisão de Programação 25/07/2013 Laboratório de Programação I 24 Qualquer linguagem de programação pode ser interpretada ou compilada, onde a interpretação ou a compilação trabalham sobre o programa/código fonte Compilador X Interpretador • O ser humano compreende a linguagem natural (português, chinês, ...), enquanto que o computador entende a linguagem de máquina (binária – 0 e 1) tradutor Ser humano computador Interpretando ou compilando Revisão de Programação 25/07/2013 Laboratório de Programação I 25 • Combina elementos de linguagens de alto nível (Basic, Pascal, ...) com a funcionalidade da linguagem de baixo nível (Assembler, ...) • Linguagem Portável (portabilidade) • Não efetua nenhuma verificação em tempo de execução (responsabilidade do programador) Ex. tamanho de vetores e matrizes • O padrão ANSI implementa o conceito de protótipo de função Alto Baixo Intermediário Nível de linguagem Revisão de Programação 25/07/2013 Laboratório de Programação I 26 • A função é o principal componente estrutural em C • Programa em C consiste em uma ou várias funções (o termo programa e função se confundem em C) • A função pode ter qualquer nome(padrão de um identificador), mas a função main é obrigatória, pois é a partir dela que inicia a execução de um programa em C • Esta presente em C o conceito de bloco de instruções (que é um grupo de comandos de programa conectado logicamente e tratado como uma unidade) • 32 palavras reservadas (27 originais e 5 ANSI) Revisão de Programação Estrutura de programa na linguagem C 25/07/2013 Laboratório de Programação I 27 CUIDADOS na Elaboração de Programas em C • A linguagem é case sensitive (maiúscula/minúscula) • Uso de texto estruturado na elaboração do programa • A função main( ) é obrigatória em cada programa • Constantes do tipo string são entre aspas duplas ("), enquanto que um único caractere é entre aspas simples(') • Comentário é /* no início e */ no fim ou // resto linha • Identificadores usam letras, números e sublinha ´_´ • Toda instrução deve estar entre as chaves ´{´, ´}` e encerrar-se com um ´;´ que é parte da instrução Parênteses certificam uma função e „;‟ uma instrução Revisão de Programação 25/07/2013 Laboratório de Programação I 28 Palavras Reservadas auto double int struct break else long switch case enum * register typedef char extern return union const * float short unsigned continue for signed * void * default goto!! sizeof volatile* do if static while * ANSI Continuação dos cuidados com programas em C •Não usar palavras reservadas como identificadores (nome de funções, variáveis, entre outros nomes) Revisão de Programação 25/07/2013 Laboratório de Programação I 29 Linguagem C X Linguagem C ++ • A linguagem C++ é um superconjunto da linguagem C, consistindo em uma versão estendida e melhorada de C, projetada para suportar programação orientada a objetos (OOP - Oriented Object Programming) • Como C++ é construído sobre os fundamentos de C, não será possível programar em C++ sem conhecer C • Compiladores C++ também são compiladores C padrão ANSI completo C C++ Revisão de Programação 25/07/2013 Laboratório de Programação I 30 Tipo de Dados Básicos (escalares) Tipo Tamanho em bits Faixa char 8 -128 a 127 int 32 -2147483648 a 2147483647 float 32 3.4E-38 a 3.4E38 seis dígitos de precisão double 64 1.7E-308 a 1.7E308 dez dígitos de precisão void 0 sem valor • Todos os outros tipos de dados em C são baseados em um desses cinco tipos • A definição do tipo de dados permite que o computador aloque e mantenha livre um espaço exato de memória que vai ser utilizado pelo “programa” Revisão de Programação 25/07/2013 Laboratório de Programação I 31 Modificadores de Tipo de Dados • signed • long • unsigned • short Por exemplo: short int (16 bits) faixa ( -32768 a 32767) unsigned char (8 bits) faixa de 0 a 255 • Todo modificador pode ser aplicado aos tipos char e int • O tipo long pode ser aplicado a double (long float tem o mesmo significado que double) • O signed com int é redundante Revisão de Programação 25/07/2013 Algoritmo e Programação 32 IDENTIFICADORES • São alguns objetos definidos pelos usuários (nome de variáveis, constantes, funções, etc.) • Na criação de nomes para estes objetos usar somente letras, números e sublinhado („_‟) • Não usar caracteres especiais no nome destes objetos • O primeiro caractere do nome deve ser letra (podendo ser sublinhado, mas deve ser evitado (reduz a portabilidade) • Letras maiúsculas são diferentes de minúsculas • Não pode ser igual a uma palavra reserva em C • Devem ser de fácil reconhecimento (auto explicativo) Exemplos: nroFunc, soma_total, totalAlunos (correto) 1x, jul!o, &teste, ácido (incorreto) _total, _mes_5 (evitar) Iniciando a Programação 25/07/2013 Algoritmo e Programação 33 OPERADOR DE ATRIBUIÇÃO Realiza o armazenamento de um determinado valor, representado a direita do símbolo de igual (=), a um local de armazenamento representado por um identificador a esquerda do símbolo (=). Este valor a ser armazenado no identificador a esquerda do símbolo poder ser: • um valor único teste = 5 • o resultado de uma expressão total = 10 + 20 Forma Geral <identificador> = <expressão> Pode ser usado em atribuições múltiplas : x = y = z = 2 Iniciando a Programação à direita à esquerda símbolo 25/07/2013 Laboratóriode Programação I 34 CONSTANTE • Posição nomeada de memória usada para guardar um único valor que não pode ser modificado pelo programa • Todas constantes em C devem ser declaradas antes de serem usadas • Forma geral de definição de constate const <tipo de dado> <identificador> = <valor>; onde <tipo de dado> - é qualquer tipo de dado válido em C <identificador> - nome do identificador const -palavra reservada que identifica a criação de uma constante <valor> - valor atribuído a constante Exemplo: const int valor = 30; Revisão de Programação 25/07/2013 Laboratório de Programação I 35 ATRIBUINDO VALORES A CONSTANTES • Recebe apenas um valor inicial não podendo ser alterado pelo programa (valor fixo e inalterável) const int contador = 100; • Protege os valores passados como parâmetros de uma função int calculaProduto (const int a, const int b) { a += b; /* não pode ser efetuada - erro de sintaxe */ return (a*b); } • Muitas funções da biblioteca C padrão usam const em suas declarações de parâmetros size_t strlen (const char *str) Revisão de Programação 25/07/2013 Laboratório de Programação I 36 VARIÁVEL • Posição nomeada de memória usada para guardar um valor que pode ser modificado pelo programa • Todas variáveis em C devem ser declaradas antes de serem usadas • Forma geral da definição de variável <tipo de dado> <identificador>; onde <tipo de dado> é qualquer tipo válido mais qualquer modificador <identificador> um ou mais nomes de identificadores separados por „,‟ Exemplos: short int contador, idProcesso; unsigned int empregados; double balancoAtual; Revisão de Programação 25/07/2013 Algoritmo e Programação 37 Operadores Binários = atribuição + adição - subtração * multiplicação / divisão (resultado depende dos operandos) % módulo (mod-resto da divisão) Operadores Unário + - menos (troca de sinal) EXPRESSÕES - Operadores Aritméticos Incremento e Decremento ++ incremento -- decremento Prefixo a++ ou a-- Sufixo ++a ou --a Precedência 1 ++ -- 2 * / % 3 + - 4 = Iniciando a Programação 25/07/2013 Algoritmo e Programação 38 EXPRESSÕES - Operadores Aritméticos de Atribuição Estes operadores (+= , -= , *= , /= , %= ) são usados com uma variável a sua esquerda e uma expressão a sua direita. A operação consiste em atribuir um novo valor à variável que dependerá do operador e da expressão à direita <variável> <operador> = <expressão> Exemplos: i + = 2; equivale i = i + 2; x * = y + 1; equivale x = x * (y + 1); t / = 2.5; equivale t = t / 2.5; p % = 5; equivale p = p % 5; d - = 3; equivale d = d – 3; Iniciando a Programação 25/07/2013 Algoritmo e Programação 39 EXPRESSÕES - Operadores Relacionais Todas as expressões relacionais retornam true ou false (verdadeiro ou falso respectivamente) Operadores . igualdade = = diferente ! = maior que > menor que < maior ou igual > = menor ou igual < = IMPORTANTE O valor zero (0) é considerado FALSO e qualquer valor diferente de zero é considerado VERDADEIRO, sendo representado pelo valor inteiro um (1), normalmente. Iniciando a Programação 25/07/2013 Algoritmo e Programação 40 EXPRESSÕES - Operadores Lógicos Operador Símbolo E (and) && OU (or) || NÃO (not) ! Exemplos: (E) se ((x = 5) e (y = 5)) entao if ((x = = 5) && (y = = 5)) em programação (OU) se ((x = 5) ou (y = 5)) entao if((x==5)||(y==5)) em programação (NÃO) se (nao (x = 5)) entao if ( ! (x = = 5)) em programação que seria o mesmo que: se ( x <> 5) entao ou if ( x != 5 ) Iniciando a Programação 25/07/2013 Algoritmo e Programação 41 Exercício Proposto 1.) Elabore um algoritmo que armazene as três notas de um aluno, 5.5, 7.2 e 8.3 em três variáveis diferentes. Após o armazenamento, realize o cálculo da média aritmética das notas informadas e o apresente. 2) Depois que o algoritmo estiver pronto e funcionando corretamente, faça a sua tradução para a linguagem que começamos a estudar, onde as declarações e a expressão do cálculo deverão ser escritas baseadas nesta linguagem. 25/07/2013 Laboratório de Programação I 42 Os programas na linguagem C constituem-se em uma ou várias funções. FUNÇÃO main() • A função main é obrigatória em um programa na linguagem C, e marca o ponto de início da execução do programa • Se um programa consistir em apenas uma função esta será main() • Todas as instruções devem estar dentro das chaves que iniciam e terminam a função (bloco de instrução) e são executadas na ordem seqüencial de escrita no programa • Instruções em C sempre encerram com „;‟ , pois ele faz parte da instrução e não é somente um simples separador Revisão de Programação 25/07/2013 Algoritmo e Programação 43 DIRETIVA include Provoca a inclusão de um programa fonte em outro, instruindo ao compilador a ler e agregar o arquivo no programa que tiver a diretiva include #include <arq> arquivo na pasta(diretório) padrão ou #include “arq” arquivo na pasta (diretório) especificado arq - esta representando o nome do arquivo a ser incluído O símbolo de sustenido „#‟, antes da diretiva include, é um sinal para o pré-processador, que têm a função de examinar o programa fonte em C e executar certas modificações, baseadas nas instruções das diretivas Elaborando um Programa 25/07/2013 Algoritmo e Programação 44 DIRETIVA define Usada para melhorar o entendimento de um programa através da substituição de constantes simbólicas por nomes mais apropriados. Ela não tem nenhum tipo específico (int, char, ...), mas simplesmente faz a substituição de texto. Como o pré-processador é executado antes da compilação, seu compilador somente vê os valores trocados e nunca as constantes. #define <identificador> <texto> Elaborando um Programa valor a ser substituído nome atribuído a constante (letras maiúsculas) Exemplo: #define PI 3.14159 #define ERRO printf(“Encontrado um erro.\n ”) Observações Não existe „;‟ nas diretivas de pré-processador Nunca deve existir espaço em branco no identificador, pois será interpretado como o fim do identificador e o início do texto 25/07/2013 Algoritmo e Programação 45 FUNÇÃO printf() • Uma das funções de saída que pode ser usada em C • A <expressão_controle> pode conter caracteres que serão exibidos na tela e códigos de formatação dos argumentos • A <lista_de_argumentos> é formada pelos argumentos que serão usados pela função (constantes, variáveis,expressões,etc.) • Faz parte da biblioteca padrão da linguagem C e tem seu protótipo definido em (stdio.h) e pode receber um número variável de argumentos (separados por „,‟) printf(“<expressão_controle>”,<lista_de_argumentos>); Exemplo: printf(“Elaborando um programa”); printf(“Esta é a letra %c”, „C‟); printf(“Escreva o valor %d \n %s”,2, “por extenso”); Elaborando um Programa 25/07/2013 Laboratório de Programação I 46 FUNÇÃO printf() Alguns caracteres não podem ser obtidos diretamente do teclado (como mudança de linha), por isso tem a sua representação feita por códigos especiais usando um controlador („\‟) com a combinação de outro caractere. Código Significado Código Formato \n nova linha %c caractere simples \r retorno do cursor %d decimal \t tab %e notação científica \b retrocesso %f ponto flutuante \” aspas %g %e ou %f (o mais curto) \\ barra %o octal \f salta página de formulário %s cadeia de caracteres \0 nulo %u decimal sem sinal \x caractere gráfico (este símbolo %x hexadecimal escreve códigos acima de 127 %ld decimal longo decimal) \xdd onde dd é hexad. %lf ponto flutuante longo Revisão deProgramação 25/07/2013 Laboratório de Programação I 47 FUNÇÃO printf() • Para a impressão do caractere % são usados dois % (%d %%) • É possível estabelecer o tamanho mínimo de saída em printf • A formatação com „-‟ à frente alinha a saída a esquerda, enquanto que a direita consegue-se pela especificação coerente dos tamanhos • A saída formatada pode ser completada com zeros a esquerda Exemplos: 1) printf(“Reajuste = %d %%”,valor); saída Reajuste = 5 % 2) printf(“Tem %4d alunos”, 50); saída Tem 50 alunos 2) printf(“Gasolina= %3.2f ltr.”, 1.629); saída Gasolina=1.63 ltr. 3) printf(“%5.2f %5.2f ”,8.0, 15.32); saída 8.00 15.32 3) printf(“%5.2f %5.2f ”,15.8, 0.7); saída 15.80 0.70 3) printf(“%-5.2f %-5.2f ”,8.0, 15.32); saída 8.00 15.32 3) printf(“%-5.2f %-5.2f ”,15.8, 0.7); saída 15.80 0.70 4) printf(“%06d”, 25); saída 000025 Revisão de Programação 25/07/2013 Algoritmo e Programação 48 FUNÇÃO scanf() • Permite ler dados formatados da entrada padrão (teclado) • A <expressão_controle> deve conter os códigos compatíveis com a formatação dos argumentos (similar ao printf) • A <lista_de_argumentos> nesta função deve conter os endereços das variáveis (usar operador de endereço (&) em C) • O símbolo %* indica que será lido um valor do tipo especificado, mas não será atribuído a nenhuma variável (não devendo ter parâmetros na lista de argumentos) • Faz parte da biblioteca padrão da linguagem C, necessita dos protótipos definidos em (stdio.h) e pode receber um número variável de argumentos (separados por „,‟) scanf(“<expressão_controle>”,<lista_de_argumentos>); Exemplo: scanf(“%f ”, &valor); Elaborando um Programa endereços 25/07/2013 Algoritmo e Programação 49 FUNÇÃO scanf() O endereço de uma variável é o local onde ela localiza-se na memória. O endereço representa o primeiro byte ocupado por ela Código Formatação da Função %c leia um único caractere %d leia um inteiro decimal %e leia um número em notação científica %f leia um número em ponto flutuante %o leia um inteiro octal %s leia uma série de caracteres %u leia um decimal sem sinal %x leia um número hexadecimal %l leia um inteiro longo %lf leia um double Exemplo: int main(void) { int num; num = 5; printf(“Valor= %d\n”, num); printf(“Endereço=%u,&num ); } Possível saída em tela Valor=5 Endereço=2293620 Elaborando um Programa 25/07/2013 Laboratório de Programação I 50 FUNÇÃO clrscr() Esta função efetua a limpeza de toda a tela (ou janela). Esta limpeza consiste em apagar todos os símbolos (ou caracteres) que estavam sendo apresentados em instruções anteriores em uma tela de no máximo 24 linhas e 80 colunas. Com a limpeza de toda a tela o cursor fica posicionado na primeira posição dela, ou seja, no canto superior esquerdo. Exemplo: : printf(“Qual o valor agregado: \n”); scanf(“%f”,&valor); clrscr( ); printf(“O resultado %f”, total); : Revisão de Programação 25/07/2013 Laboratório de Programação I 51 FUNÇÃO getche() Esta função lê um caractere do teclado, no instante em que foi pressionado, apresentando-o na tela int main (void) { char tecla; tecla = getche(); } FUNÇÃO getch() Esta função lê um caractere do teclado, no instante em que foi pressionado, não apresentando-o na tela int main (void) { char tecla; tecla = getch(); } Estas duas funções não aceitam argumentos e retornam o valor lido após serem acionadas Revisão de Programação 25/07/2013 Laboratório de Programação I 52 FUNÇÃO getchar() Lê um caractere da console após pressionada a tecla “enter”, e retorna „-1‟ se nada foi lido. Exemplo: : c = getchar( ); : FUNÇÃO putchar() Escreve o valor passado pelo argumento da função, que pode ser uma outra função. Exemplo: : : c = getchar( ); ou como putchar(getchar()); putchar(c); : : Revisão de Programação 25/07/2013 Algoritmo e Programação 53 TELA DE SAÍDA OU DE EXECUÇÃO A execução de um programa elaborado no compilador C abre uma nova janela que possui um tamanho padrão. Este tamanho permanece o mesmo do ambiente DOS, mas agora fazendo a rolagem da janela, quando ela é necessária (extrapola o tamanho padrão). Para aproveitar melhor toda janela, sem usar a rolagem, trabalha-se com uma dimensão de 24 linhas, por 80 colunas (tamanho padrão do DOS).. Linhas (1 => 24) Colunas (1 => 80) Informe sua idade 25 Sua fase é adulta Obs.: A função clrscr() limpa só o que estiver contido na tela padrão(24x80) 25/07/2013 Laboratório de Programação I 54 Conhecendo as medidas da janela de saída pode-se trabalhar melhor a execução de um programa. Com este intuito, é usada a função gotoxy que permite o posicionamento correto na janela de execução. FUNÇÃO gotoxy() Esta função oferece o posicionamento exato do cursor, possibilitando uma apresentação mais amigável na execução de qualquer programa em C. gotoxy(<coluna> , <linha>); Exemplo: : gotoxy(24,11); printf("Aula de Laboratorio de Programacao"); : REVISÃO - TELA DE SAÍDA OU DE EXECUÇÃO 25/07/2013 Laboratório de Programação I 55 03) Elabore um programa que solicite ao usuário um valor percentual a ser calculado. Este cálculo deverá ocorrer sobre um valor constante igual a 555. O programa deverá calcular o percentual desejado e apresentar o resultado calculado deste percentual. O programa deverá acionar o notepad, calculadora e terminar dando uma mensagem no meio da tela Exercício Proposto 25/07/2013 Algoritmo e Programação 56 Estrutura Condicional Estrutura if – else – if if (<condição 1>) instrução 1; else if (<condição 2>) instrução 2; else if (<condição 3>) instrução 3; else <instrução padrão>; uma instrução será executada quando uma condição for verdadeira. A instrução padrão é opcional e só é executada quando todas as outras condições forem falsas Simples if (<condição>) instrução; a instrução será executada se a expressão for verdadeira Composta if (<condição>) instrução 1; else instrução 2; a instrução 1 será executada se a expressão for verdadeira, senão a instrução 2 será executada Elaborando um Programa 25/07/2013 Algoritmo e Programação 57 Estrutura Condicional Aninhada if (<condição 1>) { if (<condição 2>) instrução 1; else instrução 2; } else { if (<condição 3>) instrução 3; else instrução 4; } •Um condicional aninhado é simplesmente um if dentro de outro if externo •O único cuidado que deve-se ter é com a identificação de qual else pertence a determinado if •O emprego de técnicas de texto estruturado facilitam a correta identificação da estrutura condicional aninhada Elaborando um Programa 25/07/2013 Algoritmo e Programação 58 ESTRUTURA CONDICIONAL Usando o Operador Condicional Ternário (?) Este operador não atende a uma gama grande de casos, mas pode ser usado para simplificar expressões ou comandos se simples. <condição> ? <expressão 1> : <expressão 2>; Exemplo: Com a expressão Posso simplificar para if (a > 0) b = -50; b = a > 0 ? -50 : 100; else b = 100; várias podem ser as formas de se combinarem (aninharem) as estruturas condicionais, as demais serão abordadas no decorrer deste curso Elaborando um Programa 25/07/2013 Laboratório de Programação I 59 COMANDO switch É um comando de tomada de decisão mais apropriado no teste de uma variável em relação a diversos valores pré-estabelecidos •Similiar ao if – else – if, onde a diferença fundamental é que ele não aceita expressões, apenas constantes inteiras ou caracteres. •A declaração default é opcional e somente será executada se a variáveltestada não for igual a nenhuma das constantes Exemplo: scanf(“%d”, &valor); switch (valor) { case 1: printf(“Valor = 1”); case 2: printf(“Valor = 2”); default: printf(“Valores diferente de 1 ou 2”); } Revisão de Programação Analisar a saída do programa para valor = 1 25/07/2013 Laboratório de Programação I 60 COMANDO break •Este comando causa a interrupção (parada ou quebra) imediata de algumas estruturas dentro da seqüência de execução. •A utilização dentro do comando switch interrompe a continuidade das verificações (testes) de valores constantes, tornando-se um comando interessante dentro deste tipo de estrutura, pois salta para o final do bloco e continua a execução Exemplo: scanf(“%d”, &valor); switch (valor) { case 1: printf(“Valor = 1”); break; case 2: printf(“Valor = 2”); break; default: printf(“Valores diferente de 1 ou 2”); } Revisão de Programação Verificar a saída deste programa para valor =1 25/07/2013 Laboratório de Programação I 61 FUNÇÃO fflush(stdin) A leitura dos dados procura ser realizada de forma que evite inconvenientes e desperdícios de tempos, porém nem sempre ela ocorre diretamente na memória indicada pelo programa, e sim em uma parte separada denominada buffer. Diversas são as razões para o uso de buffer: • leitura de um disco com recuperação de todo um setor que possui várias informações, mas só um registro é desejado pela instrução em execução • liberação do processador para a execução de um outro programa enquanto os dados estão sendo lidos e disponibilizados. Revisão de Programação – cuidados na leitura 25/07/2013 Laboratório de Programação I 62 Revisão de Programação – cuidados na leitura FUNÇÃO fflush(stdin) Os valores obtidos através da leitura dos dados são levados a memória do programa no momento em que são necessários. Porém quando a leitura de alguns tipos de dados que manipulam caracteres são realizados usando as funções scanf e gets intercalados, o buffer é descarregado na memória do programa de uma forma que não condiz com o esperado . Para evitar este tipo de ocorrência utiliza-se a função fflush(stdin), cujo protótipo está na stdio.h, que simplesmente limpa o buffer de teclado antes do uso da função gets. stdin dispositivo de entrada padrão (teclado) 25/07/2013 Laboratório de Programação I 63 04) Faça um programa que leia três valores numéricos e os mostre em ordem crescente no centro de uma janela limpa envoltos por uma moldura. 05) Elabore um programa que desenhe uma moldura de 10 caracteres de altura e 20 de largura. Use os caracteres hexadecimais BA ||, CD =, C9 , BB , C8 e BC . Exercícios de Revisão 25/07/2013 Laboratório de Programação I 64 Em C existem três comandos de repetição que são empregados de maneira mais apropriada a determinadas situações, onde as características de cada um possam ser melhor aproveitadas. for(<inicialização>;<condição>;<incremento>) <instrução>; A inicialização é executada uma única vez antes do laço ser iniciado A seqüência de comandos será repetida enquanto a condição for verdadeira. Quando ela for falsa os comandos após o laço são executados O incremento define como será alterada a variável de controle do laço, cada vez que ele for repetido, sendo executado logo após o fim do corpo do laço Revisão de Programação - repetição 25/07/2013 Algoritmo e Programação 65 Exemplos: int main(void) { int x,y; for(x=0,y=0;x+y<10;x=x+1,y=y+1) printf(“%d”,x+y); } Estrutura de Repetição int main(void) { int c; for(c=getch();c!=´X´;c=getch()) printf(“%c”,c+1); } int main(void) { int c; for(c=´a´; c<=´z´; c++) printf(“%c ASCII= %d\n”,c,c); } int main(void) { int c; for( ; (c=getch())!=´X´; ) printf(“%c”, c); } A <inicialização>, <condição> e <incremento>, podem conter compostas por qualquer instrução válida em C A <inicialização>, <condição> e <incremento>, podem conter várias instruções separadas por „,‟ e qualquer uma delas pode ser omitida, mantendo sempre os „;‟ que as separam A <inicialização>, <condição> e <incremento>, podem chamar funções 25/07/2013 Algoritmo e Programação 66 Instruções Múltiplas no Corpo do for Estrutura de Repetição Duas ou mais instruções podem fazer parte do corpo do laço „for‟. Quando isso for necessário abra um bloco de instrução ({), coloque as instruções desejadas e feche o bloco (}). Não se esqueça do „;‟ para encerrar cada uma destas instruções. Laço for Aninhados Quando tem-se um laço dentro de outro, diz-se que o laço interior esta aninhado for (<inicialização>;<condição>;<incremento>) { for (<inicialização>;<condição>;<incremento>) instrução 1; instrução 2; } 25/07/2013 Laboratório de Programação I 67 Exercício Extra = Apresentar a tabela ASCII, avisando ao usuário quando for encontrado os caracteres a ou A, C ou c, f ou F e w ou W, dentro de uma moldura construída usando os caracteres especiais: BA ||, CD =, C9 , BB , C8 e BC . A Cada 15 caracteres da tabela ASCII a saída deverá ser interrompida até o usuário pressionar qualquer tecla. Exercícios de Revisão 25/07/2013 Laboratório de Programação I 68 A segunda estrutura de repetição usa os mesmos elementos do laço „for‟, mas eles estão distribuídos de forma diferente. while (<condição>) <instrução>; Revisão de Programação - repetição Se a condição for verdadeira (!=0) o corpo do laço é executado e a condição é novamente avaliada. Esta operação se repete até que a condição se torne falsa (=|=0), encerrando o laço e continuando a executar o programa depois do corpo do laço. • O laço while é mais apropriado para situações que a repetição possa ser encerrada inesperadamente, enquanto que o „for‟ é mais empregado em quantidades de repetições mais conhecidas. • O while também pode ser aninhado, ou seja, possuir um while dentro de outro while. 25/07/2013 Laboratório de Programação I 69 A última estrutura de repetição cria um ciclo repetitivo até a condição ser falsa (=|=0). A condição neste laço é avaliada depois do laço ser executado, ou seja, seu bloco é executado ao menos uma vez para que a condição seja verificada. do { <instruções>; } while (<condição>); Revisão de Programação - repetição Exemplo: : do { total += valor; printf(“O total seria %5.2f”, total); } while (total < 8000); : 25/07/2013 Laboratório de Programação I 70 COMANDO break Conhecendo as estruturas de repetição será possível agregar mais algumas funcionalidades para o comando break. Dentro de um laço, este comando causa a saída imediata da repetição e passa a execução do programa para a próxima instrução depois do bloco. break; Em estruturas aninhadas o break só afetará o laço que o contém e os laços internos a ele. COMANDO continue Este comando permite que se retorne ao início do laço (loop) na parte de incremento da variável de controle e verificação da condição novamente. Em alguns casos que não exista a necessidade de continuar até o final do bloco de instruções do laço, pode-se usar o continue. continue; Revisão de Programação 25/07/2013 Laboratório de Programação I 71 Exercícios de Revisão 06) Tem-se um conjunto de dados contendo a altura e o sexo (masculino, feminino) de até 100 pessoas. Fazer um programa que calcule e escreva: a maior e a menor altura do grupo, a média de altura das mulheres e o número de homens. Desafio : apresentar as alturas e sexos lidos 07) Fazer um programa que calcule e escreva a soma dos n primeiros termos da série: 480 – 475 + 470 – 465 +... 10 11 12 13 25/07/2013 Laboratóriode Programação I 72 FUNÇÕES Uma função consiste em um subprograma que pode atuar sobre dados e retornar ou não um valor. Todo programa em C tem pelo menos uma função (a main) que pode chamar outras funções, algumas das quais, podem ainda chamar outras e assim por diante. Toda função tem seu próprio nome, e quando este nome é encontrado, a execução do programa é desviado para o corpo da função. Quando ela retorna, a execução recomeça na linha seguinte a chamada da função. main( ) { instrução; função1( ); instrução; função2( ); } função1 { instrução; return; } função2 { instrução; função3( ); return; } função3 { instrução; return; } Programa Revisão de Programação 25/07/2013 Laboratório de Programação I 73 As tarefas devem ser divididas em múltiplas funções para que possam ser chamadas uma a uma. Isso faz com que: • a solução de um problema complexo se torne mais simples, pois a soma da complexidade de pequenas partes de um problema é menor que a complexidade do problema. • Possibilita o trabalho em equipe. • Possibilita o reaproveitamento de códigos. • Facilita manutenções posteriores Revisão de Programação 25/07/2013 Laboratório de Programação I 74 Uma função bem elaborada efetua uma tarefa específica, conclui corretamente a execução e depois retorna ao programa. Para usar uma função é preciso primeiro declará-la e depois defini-la. Nenhuma função pode ser chamada por outra função se não tiver sido primeiro declarada. A declaração, denominada protótipo da função, informa ao compilador qual o seu tipo de retorno, seu nome e os seus parâmetros, enquanto que a sua definição diz o que ela executa (faz). O protótipo da função é uma instrução, o que significa que ele é encerrado com um „;‟. <tipo retorno> <identificador> (<lista parâmetros>); A <lista parâmetros> é uma lista de todos os parâmetros e seus respectivos tipos separados por „,‟. Entre os parâmetros, o nome e o tipo de retorno devem ter compatibilidade entre a definição e a declaração da função. Revisão de Programação 25/07/2013 Laboratório de Programação I 75 A definição de uma função é iniciada pelo seu cabeçalho, que consiste no protótipo da função, com nome(s), obrigatoriamente, para o(s) parâmetro(s) e sem o „;‟ no final. Iniciasse o corpo da função com a abertura de „{„ e encerrasse com o fechamento „}‟. Não é necessário que uma função apresente parâmetros, porém os parênteses tem que existirem . Exemplo: int calculaArea (int largura, int altura); //protótipo (declaração) int calculaArea (int largura, int altura) // definição (corpo) { return (largura *altura); } Tem que ter „;‟ Revisão de Programação 25/07/2013 Laboratório de Programação I 76 Declaração de Variáveis • Variáveis locais são internas as funções ou blocos • Parâmetros formais são parâmetros de funções • Variáveis globais estão fora de todas as funções Variáveis Locais • Só podem ser referenciadas dentro da função ou no bloco onde foram declaradas • Só existem dentro do bloco de instrução onde foram declaradas, quando este estiver sendo executado (pilha) • Elas podem ser declaradas no início de qualquer bloco de instrução e não somente no início das funções Revisão de Programação 25/07/2013 Laboratório de Programação I 77 Parâmetros Formais • São variáveis que recebem os valores dos argumentos das funções e devem ser do mesmo tipo • Comportam-se como qualquer outra variável local dentro de uma função Variáveis Globais • São reconhecidas dentro de todo o contexto onde foram declaradas • Estão declaradas fora das funções • São armazenadas em área específica da memória (não podem ser usadas nesta disciplina) Revisão de Programação 25/07/2013 Laboratório de Programação I 78 Pode-se passar variáveis para a função, assim como também pode-se declarar variáveis locais dentro do corpo da função. Estas variáveis recebem esta denominação porque só existem dentro da função, pois quando a função retorna (ou termina) elas deixam de estar disponíveis. Os parâmetros passados para a função também são considerados variáveis locais. Por exemplo: #include<stdio.h> float converter(float f); // protótipo int main( ) { float tempFar, tempCel; printf(“Temp.em Fahrenheit: ”); scanf(“%f”,&tempFar); tempCel = converter(tempFar); printf(“Em Celsius %f”,tempCel); return 0; } // Definição do corpo da função float converter(float tempFar) { float tempCel; tempCel = ((tempFar – 32) *5) / 9; return tempCel; } Revisão de Programação 25/07/2013 Laboratório de Programação I 79 Função como parâmetro de outra Função Embora seja possível, isto pode dificultar a leitura e a depuração do código. Por exemplo: resposta = (dobro(quadrado(raiz(valor))); Mudanças feitas nos argumentos não afetam os valores da função de chamada, pois é feita uma cópia local para cada argumento. Essa cópia é tratada como uma outra variável qualquer. Esta forma de passagem de parâmetro recebe o nome de “argumento por valor” (ou passagem por valor). O argumento por referência acontece quando é copiado o endereço do argumento para o parâmetro (passando um ponteiro para o argumento). Com isso, as alterações efetuadas sobre o parâmetro afetarão também o valor da variável usada na chamada da função. Será visto mais a frente quando for estudado ponteiros. Revisão de Programação 25/07/2013 Laboratório de Programação I 80 PARÂMETROS PADRÃO Quando uma função possui algum parâmetro (na sua definição ou no protótipo) a função de chamada deve passar um valor quando a chamar, a menos que ela tenha um valor padrão. Um valor padrão é um valor a ser usado caso nenhum valor seja fornecido (informado). Exemplo: int testar(int x = 10); // protótipo O cabeçalho da função não é alterado pela definição padrão. Quando uma função possui um valor padrão todos os parâmetros posteriores desta função deverão ter parâmetros padrões definidos. Exemplo: int testar(int par_1,int par_2 = 9,int par_3 = 7); int testar(int par_1= 3,int par_2=5,int par_3=7); Revisão de Programação 25/07/2013 Laboratório de Programação I 81 SOBRECARREGANDO FUNÇÕES Em C++ é permitido criar uma função com o mesmo nome, sobrecarregando-a. Isto é permitido diferenciando a lista de parâmetros em relação aos seus tipos ou quantidades (ou ambos). Exemplo: int testar(int p1,int p2); int testar(int p1,long int p2); int testar(int p1); Os tipos de retorno podem ser iguais ou diferentes em uma função sobrecarregada, desde que a lista de parâmetros seja diferente. Revisão de Programação 25/07/2013 Laboratório de Programação I 82 COMANDO return As funções retornam um valor ou void (nenhum valor). Para que elas retornem um valor escreva a palavra reservada return seguida pelo valor que se deseja retornar. Exemplo: return 5; return (x > 5); return (outra( ) ); Com return a execução do programa retorna imediatamente para a função responsável pela chamada, e qualquer instrução que esteja após o return não é executada. É permitido mais que um return em uma função, mas uma vez que um deles seja executado a função é encerrada. Revisão de Programação Deve sempre retornar um valor compatível para uma função que não seja do tipo void. As funções void caracterizam os procedimento (função sem retorno) 25/07/2013 Laboratório de Programação I 83 Exemplo: #include<stdio.h> // Declarações float converter(float f); // protótipo int main( ) { float tempFar; float tempCel; printf(“Temp.em Fahrenheit: ”); scanf(“%f”,&tempFar); tempCel=converter(tempFar); printf(“Em Celsius %f”,tempCel); return 0; } float converter(floatfar) { float cel; cel = ((far – 32) *5) 9; return cel; } A variável passada por parâmetro possui um endereço diferente e somente vai existir enquanto a função estiver sendo executada. É feita uma cópia da variável e a cópia é usada pela função. Revisão de Programação 25/07/2013 Laboratório de Programação I 84 PROCEDIMENTO Um procedimento consiste em uma função, porém sem retorno algum. O desenvolvimento de um procedimento na linguagem C é realizado seguindo todas as regras de criação e uso de funções, porém o tipo de retorno é sempre definido como void (tipo de dado não definido ou vazio). Até se pode usar o comando return, mas não se deve retornar nada, ficando somente a instruções return seguida do ponto e vírgula. Exemplo: Observe um simples procedimento que calcula e já apresenta a média aritmética de dois valores apenas. void calculaMedia(int valor1, int valor2); // protótipo Revisão de Programação 25/07/2013 Laboratório de Programação I 85 Exercício de Revisão 08) Elabore um programa que acione uma função que apresente as opções de menu com as seguintes concessionárias de veículos: FIAT, CHEVROLET e FORD. Solicite ao usuário qual das opções ele deseja verificar os carros disponíveis. Identifique qual a opção escolhida e apresente as respectivas opções dos carros disponíveis, conforme as listas descritas abaixo. A concessionária escolhida deverá acionar outra função que apresentará somente os veículos disponíveis da marca especificada. Para cada concessionária deverá existir uma função específica com os carros disponíveis. Após identificar o carro escolhido pelo usuário, apresente no centro de uma janela limpa uma mensagem de agradecimento e o nome do carro escolhido. ESQUEMA FIAT CHEVROLET FORD Uno Vectra Escort Tempra Astra Pampa - Silverado Ranger 25/07/2013 Laboratório de Programação I 86 •Existem quatro tipos de especificadores de classe de armazenamento auto extern static register •Esses especificadores servem para informar ao compilador como a variável deve ser armazenada. •O especificador de armazenamento precede a declaração da variável: especificador_de_armazenamento tipo nome_da_variável Revisão de Programação – Classes Armazen. 25/07/2013 Laboratório de Programação I 87 •Especificador auto: serve para definir variáveis automáticas que é uma referência para as variáveis locais. Como em C as variáveis são , por definição, locais ao bloco em que ela é declarada o uso de auto não tem nenhum significado, sendo portanto raramente utilizado. •Especificador extern: permite informar a vários arquivos fontes (.cpp, .c,.h ou .hpp) as variáveis globais que serão compartilhadas pelos mesmos . As variáveis globais devem ser declaradas em apenas um arquivo e usadas como extern nos outros. Revisão de Programação – Auto e Extern 25/07/2013 Laboratório de Programação I 88 Revisão de Programação – Extern. #include <stdio.h> #include <conio.h> int x = 1; /* variável global */ float Maior (float a, float b); void imprimeX( void); void main (void) { float c ,d; /******* principal.c ****/ c= 2.3; d=4.5; printf(“maior entre %f e %f e %f\n”, c, d, Maior (c, d)); printf(“valor de x antes chamada %d\n”, x); imprimeX(); printf(“valor de x apos chamada %d\n”, x); getch();} #include <stdio.h> extern int x; /* variável global */ float Maior (float a1, float a2) { if (a1>a2) return a1; else return a2; } void imprimeX() /***** funcao.c**/ { x+= 10; printf (“ x= %d\n”, x); } 25/07/2013 Laboratório de Programação I 89 •Os especificador static possibilita a definição de variáveis permanentes dentro de funções ou dentro de arquivos (.cpp, .c, .h ou .hpp) static tipo_da_variável nome_da_variável •As variáveis declaradas como static não são reconhecidas fora do escopo da função ou arquivo, mas mantém seus valores entre chamadas. •As variáveis estáticas tem comportamento diferentes para variáveis locais e globais. Revisão de Programação – Static 25/07/2013 Laboratório de Programação I 90 •O compilador cria um armazenamento permanente para as variáveis análogo ao armazenamento das variáveis globais . •A diferença entre as variáveis static locais e as variáveis globais é que as variáveis static locais são reconhecidas apenas no contexto em que são declaradas. •Uma variável static local é uma variável que retém seu valor entre chamadas de uma função •São muito usadas em bibliotecas de funções. Revisão de Programação – Static local 25/07/2013 Laboratório de Programação I 91 •Exemplo #include <stdio.h> #include <conio.h> int incrementaDez( void ); int main (void){ printf(“ 1 - numero gerado (%d)\n”, incrementaDez()); printf(“ 2 - numero gerado (%d)\n”, incrementaDez()); printf(“ 3 - numero gerado (%d)\n”, incrementaDez()); getch(); return 0; } int incrementaDez( void ){ /* a declaração e inicialização só é executada uma única vez */ static int numero = 0; numero += 10; return (numero);} } Revisão de Programação – Static local 25/07/2013 Laboratório de Programação I 92 •Informa ao compilador para criar uma variável global que é reconhecida apenas no arquivo onde é declarada. •Isto significa que, apesar da variável ser global , rotinas em outros arquivos não podem reconhecer ou alterar seu conteúdo diretamente, diminuindo com isto os efeitos colaterais das variáveis globais. •As funções da bilioteca ramdomize() (inicializa o gerador de números aleatórios) e rand() (gera um número aleatório) usam o conceito de variáveis estáticas globais. Revisão de Programação – Static global 25/07/2013 Laboratório de Programação I 93 Revisão de Programação – Static global Arquivo 1 : principal.c #include <stdio.h> #include <conio.h> int incrementaDez( void ); void inicializaIncremento(int valorInicial); int main (void){ inicializaIncremento(200); printf(“ 1 - numero gerado (%d)\n”, incrementaDez()); printf(“ 2 - numero gerado (%d)\n”, incrementaDez()); printf(“ 3 - numero gerado (%d)\n”, incrementaDez()); getch(); return 0;} Arquivo: funcao.c #include <stdio.h> #include <conio.h> static int numero; int incrementaDez( void ) { numero += 10; return (numero); } void inicializaIncremento (int valorInicial) { numero = valorInicial; } 25/07/2013 Laboratório de Programação I 94 •Determina que o acesso a variável declarada como register seja o mais rápido possível. •Variável register do tipo caracteres ou inteiros são colocadas diretamente nos registradores da CPU, variáveis maiores, como por exemplo matrizes, não podem ser colocadas nos registradores da CPU mas elas ainda assim receberão um tratamento diferenciado, embora para estas variáveis o aumento de performance não seja substancial. •O especificador register só pode ser aplicado a variáveis locais e a parâmetros formais de funções. Não permitido o uso do especificador register para as variáveis globais. Revisão de Programação – Register 25/07/2013 Laboratório de Programação I 95 •Como uma variável do tipo register pode ser armazenada em um registrador da CPU, ela não tem endereço. Não deve ser utilizado o operador & para estas variáveis. •O número de variáveis em registradores é determinado pelo Sistema operacional e pela implementação específica do compilador. Caso o limite seja alcançado, variáveis do tipo register são automaticamente transformadas em variáveis comuns. •Exemplo: int main(void){ register int i;for (i =0; i<1000;i++){ ........}} Revisão de Programação – Register 25/07/2013 Laboratório de Programação I 96 Sempre que duas variáveis possuírem o mesmo nome, mas endereços de memórias diferentes, elas não são as mesmas variáveis. Este conceito também se estende a blocos dentro de uma mesma função. Se duas variáveis possuem o mesmo nome, a que foi declarada no bloco atual tem precedência. Exemplo: void outra(void); int main ( ) { int x = 10; printf(“\n1 - Em main( ) X = %d”,x); outra( ); printf(“\n2 - Em main( ) X = %d”,x);return 0;} void outra() { int x= 50; printf(“\nEm outra( ) X = %d”,X);} Revisão - Conflitos de Nomes em Variáveis Saída em tela 1 Em main( ) X = 10 Em outra( ) X = 50 2 Em main( ) X = 10 25/07/2013 Laboratório de Programação I 97 Exercícios de Fixação 09)Elabore duas funções, além da função principal (main) que calcule duas operações aritméticas consecutivas, envolvendo três valores ineiros informados pelo usuário, com duas operações, lidas na função principal. Em outra função verifique se o resultado das operações produziram um número par ou impar. 10)Faça um programa que calcule, por meio de uma função, o valor de x (real) elevado a n (inteiro). 11)Desenvolva um programa que efetue os cálculos relacionados a avaliação final desta disciplina neste ano e semestre, onde a média final deverá ser calculada por outra função denominada calculaMedia. ATENÇÃO! Todos os exercícios a seguir não poderão usar variáveis globais 25/07/2013 Laboratório de Programação I 98 Referência de Criação e Apoio ao Estudo Material para Consulta e Apoio ao Conteúdo • Universidade Federal de Minas Gerais - site ead1.eee.ufmg.br/cursos (escolha a opção „C‟) • SCHILDT, H., C Completo e Total, Editora Makron Books do Brasil Editora Ltda, 1996. Capítulo 3 e 6 • EVARISTO, J., Aprendendo a programar programando em C, Book Express, 205 p., 2001. Capítulo 2, 3, 4 e 5 • MIZRAHI, V. V., Treinamento em Linguagem C, Curso Completo, Módulo 1, Makron Books do Brasil Editora Ltda,1990. Capítulo 2, 3, 4 e 5