Introdução à Programação



Documentos relacionados
Introdução à Programação

LINGUAGEM C. Estrutura básica de um programa

INF 1005 Programação I

INF 1005 Programação I

José Romildo Malaquias

Introdução à Programação em C (II)

Linguagem e Técnicas de Programação I Operadores, expressões e funções. Prof. MSc. Hugo Souza Material desenvolvido por: Profa.

Estruturas de entrada e saída

#define SIM 1 equivale a definição de constantes; a palavra SIM é substituída por 1 toda vez que é utilizada no programa.

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

Introdução à Programação em C Input / Output

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

Cap.2.5: Design de Algoritmos e Programação Estruturada. Algoritmos, fluxogramas e pseudo-código

2. OPERADORES ALGORITMOS, FLUXOGRAMAS E PROGRAMAS FUNÇÕES... 10

Programas simples em C

Introdução a Computação

Curso de C: uma breve introdução

Module Introduction. Programação. Cap. 4 Algoritmos e Programação Estruturada

Programação. MEAer. Bertinho Andrade da Costa. Instituto Superior Técnico. Introdução ao Pré-Processador. 2011/2012 1º Semestre

Prof. Dr. Abel Gomes Cap.4: Design de Algoritmos e Programação Estruturada. Algoritmos, fluxogramas e pseudo-código

Aula 01. Programação Condicional Programação repetitiva

Curso de C. Procedimentos e Funções. 6/4/200901/04/09 09:42 Copyright@Arnaldo V Moura, Daniel F Ferber 1

INTRODUÇÃO AO JAVA PARA PROGRAMADORES C

Exercício 1. Tabela 1: Cadastro de usuários, senhas e privilégios (exemplo). Login Senha Privilégio Armamento

Algoritmia e Programação APROG. Linguagem JAVA. Básico. Nelson Freire (ISEP DEI-APROG 2012/13) 1/31

MC-102 Aula 19 Registros

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

Curso C: Controle de Fluxo

2 Orientação a objetos na prática

compreender a importância de cada estrutura de controle disponível na Linguagem C;

Programação: Estruturas de seleção

20 Caracteres - Tipo char

Linguagem C. Programação Estruturada. Fundamentos da Linguagem. Prof. Luis Nícolas de Amorim Trigo

Linguagem C Funções definidas pelo usuário. Lógica de Programação

INTRODUÇÃO À LINGUAGEM C++

Operadores unários de incremento/decremento. Ciclo for

Programação Básica em Arduino Aula 2

Estruturas de Repetição

P r o g r a m a ç ã o d e C o m p u t a d o r e s 1 o S e m P r o f. A n d r é A m a r a n t e L u i z L A B 5 tag %2d while printf PE1:

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

Tipos de Dados Simples

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento NetBeans Introdução à Linguagem de Programação JAVA

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

1) <stdio.h> - Contém protótipos de funções da biblioteca padrão de entrada/saída e as informações utilizadas por elas.

5 Apresentando a linguagem C

O código JavaScript deve ser colocado entre tags de comentário para ficar escondido no caso de navegadores antigos que não reconhecem a linguagem.

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

Algoritmos e Programação

Os objetivos indicados aplicam-se a duas linguagens de programação: C e PHP

A Linguagem Java. Alberto Costa Neto DComp - UFS

Estruturas de repetição (Ciclos)

Linguagem C Tipos de Dados. void; escalares; sizeof Vectores; strings em C Estruturas Introdução ao pré-processador

Estrutura switch if-else switch switch switch if-else-if switch switch case default break switch switch break Observações: case

Comandos Sequenciais if else, e Switch

Edwar Saliba Júnior. Dicas, Comandos e Exemplos Comparativos entre Linguagem Algorítmica e Linguagem C

Apresentar os conceitos básicos e as estruturas de linguagem relacionadas à tomada de decisão ofertadas pela linguagem C, tais como:

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento Eclipse Introdução à Linguagem de Programação JAVA

Faculdade Anglo-Americano Curso de Ciência da Computação Linguagem de Programação. Lista de Exercícios 1

Programando em C++ Histórico da Linguagem C

15 a Aula Subprogramação /Subalgoritmos Função e Procedimento

Aula 06 - Funções. O que é uma Função - Comando return - Protótipos de Funções - Tipos de Funções - Escopo de Variáveis - Passagem de parâmetros

INTRODUÇÃO AO C++ SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Vetores. Vetores. Figura 1 Exemplo de vetor com 10 elementos

Curso de Linguagem C

PROGRAMAÇÃO INSTRUÇÕES DA LINGUAGEM C

Faculdade de Ciências Universidade Agostinho Neto Departamento de Matemática e Engenharia Geográfica Ciências da Computação

3 Classes e instanciação de objectos (em Java)

17 - Funções e Procedimentos em C Programação Modular

Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre

Linguagem de Programação I

Linguagem C: variáveis, operadores, entrada/saída. Prof. Críston Algoritmos e Programação

Bacharelado em Ciência e Tecnologia Processamento da Informação. Equivalência Portugol Java. Linguagem Java

Algoritmos e Programação Estruturada

Exercício de Revisão Linguagem C

Conceitos Básicos de C

Laboratório de Programação 02

Introdução à Programação

ESTRUTURA CONDICIONAL

Operaçõe õ s c om o Strings Intr oduç ão a o Ponte iros o e Funçõe õ s

Roteiro 1: Dados, variáveis, operadores e precedência

Introdução. Manipulação de arquivos em C. Estrutura de Dados II Prof Jairo Francisco de Souza

Algoritmos de Busca em Tabelas

Programação WEB I Estruturas de controle e repetição

Convertendo Algoritmos para a Linguagem C

Conceitos de Linguagens de Programação

3.1 - Funções para manipular dados de entrada e saída padrão

Solucionário de. Programação

Linguagem C (estruturas condicionais)

Transcrição:

Aula Teórica/Pratica 5: ciclos e funções

Getchar e putchar Escrever e ler caracteres A função getchar da biblioteca stdio.h permite de receber exatamente um (1) carácter da o "teclado"ou stdin Definição: int getchar(void) Notam: o tipo int permite de gravar o char, que é um inteiro mais pequeno (1 byte) Uso típico: receber uma sequencia de carateres ate o final (EOF) A função putchar faz o oposto, seja escreve um carácter no stdout int putchar(int c)

Getchar e putchar Exercício: getchar Fazer um programa que recebe um carácter da o stdin e verifica se é ugual a k HowTo: declarar uma variável inteira (c), fazer c= getchar(), verificar o valor de c Conselho: iniciar com uma printf("inserir um caracter") Fazer um programa que continua a receber caracteres da o stdin ate que o utente não insere k HowTo: inserir c= getchar() na condição do while, verificar o valor de c na condição mesma Conselho: iniciar também o corpo do ciclo com uma printf("inserir um caracter") Modificar o programa e por como caracter de stop o primeiro caracter recebido

Getchar e putchar Exercício: putchar Fazer um programa que escreve um carácter sobre o stdout HowTo: declarar uma variavel inteira (c), atribuir um valor, fazer putchar(c) Fazer um programa que continua a receber caracteres da o stdin e escreve o carácter no stdout quando o carácter é uma letra, se não escreve "inserir uma letra" Conselho: iniciar o programa e também o corpo do ciclo com uma printf("inserir um carácter") HowTo: inserir c= getchar() na condição do while, usar putchar no corpo verificando antes c >= a &&...

Getchar e putchar Exercício Usar os programas feitos sobre um ficheiro em input O ficheiro permite de evitar de utilizar o stdin HowTo: chamar o programa em esta maneira./nomprograma < ficheirotexto Por exemplo: podem utilizar o ficheiro C!./NomPrograma < ficheiro.c Mas atenção!! Para fazer isso tem de verificar que cada ciclo while/getchar termina quando encontra o carácter EOF que indica a fim do ficheiro

Getchar e putchar Exemplo: double.c #include <stdio.h> int main(void) { int c; while ((c = getchar()) && c!= EOF) { putchar(c); putchar(c); /* Compact version while ((c = getchar())!= EOF) { putchar(c); putchar(c); */ return 0;

Getchar e putchar Stdout: Double < double.c ##iinncclluuddee <<ssttddiioo..hh>> iinntt mmaaiinn((vvooiidd)) {{ iinntt cc;; wwhhiillee ((((cc == ggeettcchhaarr(())))!!== EEOOFF)) {{ ppuuttcchhaarr((cc));; ppuuttcchhaarr((cc));; rreettuurrnn 00;;

Getchar e putchar Exemplo: capitalize.c #include <stdio.h> int main(void) { int c; while ((c = getchar())!= EOF) if (c >= a && c <= z ) putchar(c + A - a ); else putchar(c); return 0; Lembram o exercício sobre os caracteres e os numerais? a +1 == b, b +1 == c... ( A - a ) == ( B - b )... c + A - a == C

Getchar e putchar Stdout: Capitalize < capitalize.c #INCLUDE <STDIO.H> INT MAIN(VOID) { INT C; WHILE ((C = GETCHAR())!= EOF) IF (C >= A && C <= Z ) PUTCHAR(C + A - A ); ELSE PUTCHAR(C); RETURN 0;

Getchar e putchar Exercício Fazer a operação inversa do capitalize, seja o lower case Encontrar todas as Letras maiúsculas e transformar em minuscolas HowTo: mudar o codigo do capitalize.c em maneira certa Para testar o programa: $./Lowercase < ficheirotexto Exemplo: $./Lowercase < lowercase.c

Getchar e putchar Exemplo: cnt-char.c /* Count blanks, digits, letters, newlines, and others. */ #include <stdio.h> int main(void) { int blank_cnt = 0, c, digit_cnt = 0, letter_cnt = 0, nl_cnt = 0, other_cnt = 0; while ((c = getchar())!= EOF) /* braces not necessary */ if (c == ) ++blank_cnt; else if (c >= 0 && c <= 9 ) ++digit_cnt; else if (c >= a && c <= z c >= A && c <= Z ) ++letter_cnt; else if (c == \n ) ++nl_cnt; else ++other_cnt; printf("%10s%10s%10s%10s%10s%10s\n\n", "blanks", "digits", "letters", "lines", "others", "total"); printf("%10d%10d%10d%10d%10d%10d\n\n", blank_cnt, digit_cnt, letter_cnt, nl_cnt, other_cnt, blank_cnt + digit_cnt + letter_cnt + nl_cnt + other_cnt); return 0;

Getchar e putchar Stdout: CntChar < cnt-char.c blanks digits letters lines others total 197 31 348 27 180 783

Getchar e putchar Exercício Fazer um programa que conta o numero de if no ficheiro de texto HowTo: usar a getchar na maneira usual para encontrar a letra i, depois verificar que a letra seguinte e a f antes de aumentar o contador Para testar o programa: $./countif < ficheirotexto Exemplo: $./Countif < countif.c Fazer a mesma coisa para contar o numero de comandos while Conselho: precisam também de contar o numero de do, dato que um comando do termina com while Mas este comando não tem de ser incluído na conta final, seja: o numero final de while é nr-while = nr-while - nr-do

Tabela verdade Ciclos encaixados Podemos utilizar ciclos encaixados para construir uma tabela verdade para uma data formula Exemplo: cinco variáveis inteiras (b1 b5) com valor 0 o 1 Tabela para a função de maioridade e dois formulas 1 função da um quando a majoria das variáveis ha valor 1 2 Formula fct1: b1 b2 b3 3 Formula fct2: b1 && b2 b4 && b5

Tabela verdade Exemplo: tabela.c /* Print a table of values for some boolean functions. */ #include <stdio.h> int main(void) { int b1, b2, b3, b4, b5; /* boolean variables */ int cnt = 0; printf("\n%5s%5s%5s%5s%5s%5s%7s%7s%11s\n\n", /* headings */ "Cnt", "b1", "b2", "b3", "b4", "b5", "fct1", "fct2", "majority"); for (b1 = 0; b1 <= 1; ++b1) for (b2 = 0; b2 <= 1; ++b2) for (b3 = 0; b3 <= 1; ++b3) for (b4 = 0; b4 <= 1; ++b4) for (b5 = 0; b5 <= 1; ++b5) printf("%5d%5d%5d%5d%5d%5d%6d%7d%9d\n", ++cnt, b1, b2, b3, b4, b5, b1 b3 b5, b1 && b2 b4 && b5, b1 + b2 + b3 + b4 + b5 >= 3); putchar( \n ); return 0;

Tabela verdade Stdout Cnt b1 b2 b3 b4 b5 fct1 fct2 majority 1 0 0 0 0 0 0 0 0 2 0 0 0 0 1 1 0 0 3 0 0 0 1 0 0 0 0 4 0 0 0 1 1 1 1 0 5 0 0 1 0 0 1 0 0 6 0 0 1 0 1 1 0 0 7 0 0 1 1 0 1 0 0 8 0 0 1 1 1 1 1 1 9 0 1 0 0 0 0 0 0 10 0 1 0 0 1 1 0 0 11 0 1 0 1 0 0 0 0 12 0 1 0 1 1 1 1 1 13 0 1 1 0 0 1 0 0 14 0 1 1 0 1 1 0 1 15 0 1 1 1 0 1 0 1 16 0 1 1 1 1 1 1 1 17 1 0 0 0 0 1 0 0 18 1 0 0 0 1 1 0 0 19 1 0 0 1 0 1 0 0 20 1 0 0 1 1 1 1 1 21 1 0 1 0 0 1 0 0 22 1 0 1 0 1 1 0 1 23 1 0 1 1 0 1 0 1 24 1 0 1 1 1 1 1 1 25 1 1 0 0 0 1 1 0 26 1 1 0 0 1 1 1 1 27 1 1 0 1 0 1 1 1

Tabela verdade Exercício Fazer uma tabela verdade para três variáveis x, y, z e a formula (x y)&&(!z (x&&y))&&!(x&&z) HowTo: usar três for encaixados, um para cada variável, sendo o valor inicial de cada variável 0 e o valor máximo 1 A impressao da tabela e feita no for "mas encaixado" Lembram: incrementar cada variável. E util tambem utilizar um contador para ver quantos ciclos precisam em total A formula pode ser simplificada? HowTo: ver se há uma formula mais simples que da os mesmos 1 em ocorrência de os mesmo valores das variáveis Verificar a nova formula imprimindo a sua tabela verdade

Operador virgula Operador virgula Já utilizamos este operador na definição das variáveis int x=0, y, z=2; // equivalente a int x=0; int y; int z=2; A mesma coisa acontece no ciclo for for (sum=0, i=1; i <=n; ++i) sum=sum+1; Código equivalente: for (sum=0, i=1; i <=n; sum=sum+1, ++i) ; Notam o ordem no ultimo comando : sum=sum+1, ++i Se o ordem muda, o resultado muda também: ++i, sum=sum+1

Comando do Comando do do { O do é diferente do while enquanto o comando e sempre executado Exemplo: receber um numero do stdin que seja positivo A função scanf na biblioteca stdio.h permite de ler o stdin (cf. printf) Exemplo: scanf("%d", &n) atribui o inteiro do stdin a variável n Notam o simbolo "&"! Mais em frente estudaremos o que e o "&" printf("input a positive integer: "); scanf("%d", &n); if (error= (n <= 0)) printf("\n ERROR: n must be > 0"); while (error);

Comando do Exemplo: do while #include<stdio.h> int main(){ int error, n; do { printf("input a positive integer: "); scanf("%d", &n); if (error= (n <= 0)) printf("\n ERROR: n must be > 0\n"); while (error); return 0;

Comando do Exercício Fazer um comando do while que continua ate que o utente não insere uma letra maiúscula HowTo: modificar o do while do exemplo precedente e inserir o controlo sobre a maiuscola como ja fizeste nos exercícios precedentes

Comando switch Switch and break O switch permite de evitar o uso de if encaixados Ideia: fazer um test sobre um valor de uma variavel Uso: switch (x){ case 1: comandos (break);... case n: comandos (break); default: comandos; Notam: o break permite de sortir do switch imediatamente Sem o break, o controlo passa ao case seguinte

Comando switch Exemplo: switch.c #include <stdio.h> int main(void) { int x=0, c= a ; switch (x) { case 0: printf("x is %d==0\n",x); break; case 1: printf("x is %d==1\n",x); case 2: default: printf("x is %d\n",x); switch (c) { case a : printf("c is a. No break here.\n"); case A : printf("c is A. Not true yet, c is %c.\n",c); default: c= A ; printf("c is %c (printing c s value).\n", c); return 0;

Comando switch Switch.c: stdout // C snippet switch (x) { case 0: printf("x is %d==0\n",x); break;... switch (c) { case a : printf("c is a. No break here.\n"); case A : printf("c is A. Not true yet, c is %c.\n",c); default: c= A ; printf("c is %c (printing c s value).\n", c); // Output on stdout x is 0==0 c is a. No break here. c is A. Not true yet, c is a. c is A (printing c s value).

Comando switch Ciclos e break Na mesma maneira o break pode ser utilizado para interromper um ciclo #include <stdio.h> int main(void){ int n; while (1) { printf("insert an integer:\n"); scanf("%d", & n); if (n<0) break; else if (n==0) printf("%d: defined as 0\n", n); else printf("%d:function f returns %d\n", n, f(n)); return 0; Insert an integer: 0: defined as 0 Insert an integer: 1:function f returns 1 Insert an integer: 2:function f returns 2 Insert an integer:

Conditional operator Operador ternário Operador?: utilizado para fazer if-else em maneira compacta Exemplo: x = ( y < z)? y : z e equivalente a if (y < z) x=y; else x=z;

Conditional operator

Invocar as funções Quando programamos, a majoria dos cálculos são efetuados das funções Invocar uma função significa chamar a função com um argumento de tipo compatível Exemplo: chamada de uma função sem utilizar or resultado #include <stdio.h> int id (int x){ return x; int main(void){ int y=0; id(y); return 0;

Invocar as funções Quando programamos, a majoria dos cálculos são efetuados das funções Invocar uma função significa chamar a função com um argumento de tipo compatível Exemplo: chamada de uma função para utilizar or resultado #include <stdio.h> int segredo(int x){ return ((1-x)*(1+x)); int main(void){ int z; z=segredo(3); return 0;

Exemplo Exemplo: chamada de uma função para utilizar or resultado A função segredo usa dois funções para fazer o calculo int prim_seg(int x){ return x*x-(x+x); int sec_seg(int x){ return x+(x*(x-1)); int segredo(int x){ return (prim_seg(1-x)*sec_seg(1+x));

Scope das variáveis Reutilizar os mesmos nomes para as variáveis não e um problema Cada nome e noto só no scope delimitado da { int prim_seg(int x){ return x*x-(x+x); int sec_seg(int x){ return x+(x*(x-1)); int segredo(int x){ return (prim_seg(1-x)*sec_seg(1+x));

Scope das variáveis Podemos delimitar o scope com { em cada parte de um programa/função { int a = 2; printf("a is %d\n",a); //a is 2 { int a = 5; printf("a is %d\n",a); //a is 5 printf("a is %d==3\n",++a); //a is 3==3

Variáveis globais Podemos também definir variáveis acessíveis em todas as funções Mais a regra do scope sempre vales #include <stdio.h> int a=1,b=5,c=6; int test(void) { int a = c+2; printf(" a is %d\n b is %d\n c is %d\n",a,b,++c); //a is 8, b is 5, c is 7 return 0; int main(void){ test(); printf(" c is %d\n",c); //c is 7

Funções e scope: recapitular Estratégia call by value Uma função com parâmetros de tipo int, char, float, double,... (não apontadores) não muda o valor dos parâmetros O parâmetro é formal, seja a declaração no header limita o scope na função int segredo (int x){... Todas as ocorrências de x no corpo da função são referidas ao parâmetro Notam: se x e também o nome de uma variável global... O x na função refere bem ao parâmetro formal e não a variável global!