CCO 016 / COM 110 - rcosta62br.unifei.edu.br · •Quando o valor de adição é igual a hum, é...

49
CCO 016 / COM 110 Fundamentos de Fundamentos de Programação Programação Universidade Federal de Itajubá Prof. Roberto Affonso da Costa Junior

Transcript of CCO 016 / COM 110 - rcosta62br.unifei.edu.br · •Quando o valor de adição é igual a hum, é...

CCO 016 / COM 110Fundamentos de Fundamentos de

ProgramaçãoProgramação

Universidade Federal de Itajubá

Prof. Roberto Affonso da Costa Junior

AULA 05AULA 05

– Entrada de dados– Leia– scanf

Entrada dos dadosEntrada dos dados

• Entrada de dados compreende a operação realizada pelo usuário do programa de fornecer o conteúdo de uma informação ao computador e este armazenar esta informação numa variável.

• Os dispositivos disponíveis para a execução desta tarefa são: o teclado, um arquivo.

• Embora a operação de atribuição tenha a mesma função, ela é operacionalmente diferente da entrada de dados, pois enquanto a atribuição, atribui um valor fixo e conhecido no programa, a entrada de dados permite ao usuário fornecer qualquer valor à variável em tempo de execução do programa.

• Para valores conhecidos e constantes, utiliza-se atribuição;

• Para valores não conhecidos a priori, utiliza-se entrada de dados.

• Em linguagem algorítmica tem-se:

leia ( informação )

Esta informação deve ser o nome de uma variável, onde o valor fornecido pelo usuário do programa vai ser armazenado.

Exemplo 8Exemplo 8

inteiro soma_valor, media_idades

leia ( soma_valor )

leia ( media_idades )

• Ou ainda:

leia ( soma_valor, media_idades )

• Ou ainda, com identificação da entrada para o usuário:

imprima ( “entre com a soma dos valores” )

leia ( soma_valor )

imprima ( “entre com a media das idades” )

leia ( media_idades )

Exemplo 9Exemplo 9

inteiro a, b, c

a ← 20

b ← 10

c ← a + b

imprima ( c )

Saída visualizadaSaída visualizada

30

Exemplo 10Exemplo 10

inteiro a, b, c

a ← 20

b ← 10

c ← a + b

imprima ( “a = “, a )

imprima ( “b = “, b )

imprima ( “c = “, c )

Saída visualizadaSaída visualizada

a = 10

b = 20

c = 30

Exemplo 11Exemplo 11

real x, y, pi

pi ← 3.14159

x ← pi / 2

y ← sen(x)

imprima ( y )

Saída visualizadaSaída visualizada

1.0

Exemplo 11Exemplo 11 inteiro a, b, c

imprima ( “entre com o valor de a “ )leia ( a )imprima ( “entre com o valor de b “ )leia ( b )

c ← a + b

imprima ( “ Valores Lidos: “ )imprima ( “a = “, a )imprima ( “b = “, b )

imprima ( “ Soma dos valores lidos: “ )imprima ( “c = “, c )

Saída visualizadaSaída visualizada

entre com o valor de a neste ponto o usuário digita um valor

entre com o valor de b neste ponto o usuário digita um valor

Valores lidos:

a = ........

b = ........

Soma dos valores lidos:

c = ........

ObservaçõesObservações

• É necessário neste caso um valor inicial para a variável

• É chamada de acumulador

• Quando o valor de adição é igual a hum, é chamada somador

Exemplo 13Exemplo 13

• Calcular o resto da divisão entre dois valores numéricos dados

inteiro a, b, resto_ab

imprima ( “entre com o valor de a “ )leia ( a )imprima ( “entre com o valor de b “ )leia ( b )

resto_ab ← resto ( a , b )

imprima ( “ Valores Lidos: “ )imprima ( “a = “, a )imprima ( “b = “, b )

imprima ( “ Resto da divisão dos valores lidos = “ , resto_ab )

Saída visualizadaSaída visualizada

entre com o valor de a neste ponto o usuário digita um valor

entre com o valor de b neste ponto o usuário digita um valor

Valores lidos:

a = ........

b = ........

Resto da divisão dos valores lidos = .........

Exemplo 14Exemplo 14Dados os 3 dígitos de um número inteiro, fazer um algoritmo para construir outro numero constituído de 4 dígitos, de acordo com as seguintes regras:

– Os 2 primeiros dígitos, contados da esquerda para a direita são iguais aos dígitos dados;

– O terceiro dígito é obtido através do resto da divisão entre a soma dos 3 dígitos dados por 3

– O quarto dígito é o chamado dígito de controle e é calculado da seguinte forma:

• Primeiro digito dado somado ao segundo digito dado multiplicado por 3; tudo isto somado ao terceiro digito calculado multipli-cado por 5;

• O digito de controle é obtido calculando o resto da soma anterior por 7

inteiro dig_dado1, dig_dado2, dig_dado3

inteiro dig_novo1, dig_novo2, dig_novo3, dig_novo4

inteiro auxiliar, soma_digitos

imprima ( “entre com os 3 digitos “ )

leia ( dig_dado1, dig_dado2, dig_dado3 )

dig_novo1 ← dig_dado1

dig_novo2 ← dig_dado2

soma_digitos ← dig_dado1 + dig_dado2 + dig_dado3

dig_novo3 ← resto ( soma_digitos, 3 )

auxiliar ← dig_dado1 + ( dig_dados2 * 3 )

auxiliar ← auxiliar + ( dig_novo3 * 5 )

dig_novo4 ← resto ( auxiliar, 7 )

imprima ( “numero dado: “ , dig_dado1, dig_dado2,

dig_dado3 )

imprima ( “numero obtido: “, dig_novo1, dig_novo2,

dig_novo3, dig_novo4 )

Entrada de DadosEntrada de Dados

● A entrada de dados pode ser feita de duas formas:– via teclado do computador

• Neste caso o usuário do programa digita os dados necessários ao programa no momento em que este os solicita ( programa interativo ); - assunto desta aula

– via arquivo de dados• Neste caso o usuário monta, através de editor de texto, um

arquivo contendo os dados necessários ao programa, que os lê diretamente sem a intervenção do usuário; - assunto de uma próxima aula

Entrada de dados via tecladoEntrada de dados via teclado

● entrada simples

algoritmo:

leia ( x )

em linguagem C:

scanf ( “%d”, &x );

ConsideraçõesConsiderações

● Aqui não é usado o caractere especial \n como na saída de dados;

● Observar a utilização dos códigos de formatos;

● É obrigatório para todos os tipos, exceto cadeia, a utilização do sinal & antes do nome da variável de entrada;

Execução da entrada de dadosExecução da entrada de dados

scanf ( “%d”, &x );

Esta declaração indica ao programa que este deve esperar pela digitação pelo usuário, de um valor numérico inteiro que irá ser armazenado na variável x, logo após o usuário digitar o comando Enter do teclado, indicando assim o envio da informação ao computador;

Biblioteca: stdio.h

Exemplo 1Exemplo 1# include <stdio.h>

int main ( ) {

// definicao das variaveisint x;

// entrada dos dados printf ( “entre com um valor numerico\n” );

scanf ( “%d”, &x );

// saida dos resultadosprintf ( “valor lido para x = %5d\n”, x );

return 0;}

ConsideraçõesConsiderações● Observar a necessidade de uma instrução que indica

a interação entre o usuário e o programa: printf ( “entre com um valor numerico\n” );

● Sem ela, o usuário não saberia o que fazer quando o programa estivesse sendo executado;

● O usuário é responsável pelo conhecimento antecipado do tipo da variável que está sendo inserida, caso contrário, a inserção de variáveis diferentes dos tipos definidos para elas, causam erros na execução do programa;

● Deve-se formatar de forma mais simples possível os dados de entrada, caso contrário, o usuário terá muito trabalho digitando os dados num formato complexo.

● Uma vez armazenado na memória a informação é tratada normalmente como já visto anteriormente, quando foi apresentado a atribuição de valores;

● Desta forma, a impressão da variável pode ser feita conforme a necessidade do programa, independentemente da forma da entrada da mesma.

● Observe no exemplo anterior, que a variável x tem o formato %d na entrada e %5d na saída.

Exemplo 2Exemplo 2

int x, y;

float a, b, c;

char p;

scanf ( “%d %f %d %c”, &y, &b, &x, &p );

Antes do %c, sempretem espaço em branco

ConsideraçõesConsiderações1. Neste caso, são esperados 4 valores na entrada de

dados;

3. Portanto, o usuário deve digitar os dados na ordem em que eles são solicitados;

5. Observar que as variáveis devem corresponder aos respectivos formatos;

4. Os dados podem ser digitados na mesma linha, separados por um ou mais espaços em branco, e após a digitação dos mesmos, digita-se o comando Enter do teclado;

9. Os dados podem ser também fornecidos, na ordem solicitada, digitando-se separadamente cada um deles, seguidos do comando Enter do teclado;

AlternativaAlternativa

int x, y; float a, b, c; char p;

scanf ( “%d”, &y ); scanf ( “%f”, &b ); scanf ( “%d”, &x ); scanf ( “ %c”, &p );

Lembre-se de colocaro espaço em branco

ConsideraçõesConsiderações

● Aqui são válidas todas as considerações do exemplo anterior, exceto a quarta, pois como se tem 4 comandos de scanf, obrigatoriamente tem-se 4 entradas separadas.

● Ou seja, neste exemplo, obrigatoriamente a forma de entrada tem que ser aquela especificada na quinta consideração anterior.

Entrada de dados para CadeiaEntrada de dados para Cadeia

char titulo[30];

scanf ( “%s”, titulo );

Observar que neste caso, o nome da variável não é antecedido pelo símbolo & como nos casos anteriores.

todas as observações anteriores são válidas para este caso;

● Neste caso é esperado que o usuário digite uma cadeia ( alfanumérica ) e após isto digite o comando Enter do teclado;

● Se tiver mais de uma variável no comando de entrada, os valores devem ser digitados da mesma forma que os casos anteriores, ou seja:– Se na mesma linha, os dados deverão ser separados por um

ou mais espaços em branco; no final do comando digitar Enter

– Se em linhas diferentes, cada dado é digitado na sua respectiva linha, e após o término da mesma, digitar o comando Enter

● Observar também que o código de formato %s na entrada de dados indica que o valor alfanumérico a ser digitado não tem espaços em branco.

● Portanto, no programa anterior são válidos os seguintes valores para a variável titulo:Efei

Casa

Universidade

● No entanto, se for necessário o armazenamento de um valor alfanumérico que tenha espaços em branco em seu conteúdo, como por exemplo:

Universidade Federal de Itajuba

é necessário trocar-se o código de formato %s, na entrada de dados, pelo código %[^\n]

● na saída, independentemente da forma de entrada, uma cadeia só pode ser impressa, com o formato %s.

Exemplo 3Exemplo 3

char primeiro_nome[15], sobrenome[30];

printf ( “entre com seu primeiro nome\n”);

scanf ( “%s”, primeiro_nome );

printf ( “entre com seu sobrenome completo \n “ );scanf ( “ %[^\n]”, sobrenome ); ( observar um espaço em branco

antes do sinal de % )

printf ( “nome completo: %s %s\n”, primeiro_nome,

sobrenome );

Exemplo de dadosExemplo de dados● Suponha que o usuário entre com os seguintes valores

respectivamente para as variáveis primeiro_nome e nome:

RONALDO

BUENO MARCONDES PORTELA

● Neste caso, a impressão teria o seguinte aspecto:

nome completo: RONALDO BUENO MARCONDES PORTELA

O que faz o scanf?O que faz o scanf?● Dado os scanfs a seguir, estude o que eles irão fazer:

– scanf (“%d.%d”, &m, &n);– scanf (“%d/%d/%d”, &dia, &mes, &ano);– scanf (“%d.%d.%d-%d”, &cpf1, &cpf2,

&cpf3, &cpf4);– scanf("%[^,],%[^,]",str1,str2);

44

ExercíciosExercícios

• https://www.urionlinejudge.com.br/judge/en/login

– URI 1957, 2757 a 2766, menos o 2760 (está errado)

EstudoEstudo

Visite os sites:

https://www.tutorialspoint.com/c_standard_library/c_function_scanf.htm

http://www.cplusplus.com/reference/cstdio/scanf/

http://homepages.dcc.ufmg.br/~rodolfo/aedsi-2-10/printf_scanf/printfscanf.html

TreinamentoTreinamento

Extremamente BásicoExtremamente BásicoLeia 2 valores inteiros e armazene-os nas variáveis A e B. Efetue a soma de A e B atribuindo o seu resultado na variável X. Imprima X conforme exemplo apresentado abaixo. Não apresente mensagem alguma além daquilo que está sendo especificado e não esqueça de imprimir o fim de linha após o resultado, caso contrário, você receberá "Presentation Error".

https://www.urionlinejudge.com.br/judge/pt/problems/view/1001

TreinamentoTreinamento

Entrada

A entrada contém 2 valores inteiros.

TreinamentoTreinamento

Saída

Imprima a variável X conforme exemplo abaixo, com um espaço em branco antes e depois da igualdade.

TreinamentoTreinamento

ExemplosExemplos

EntradaEntrada109-104 15-7

EntradaEntradaX = 19X = -6X = 8