55
Pascal/C Técnicas de Programação

Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Embed Size (px)

Citation preview

Page 1: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Pascal/C

Técnicas de Programação

Page 2: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Introdução • Programar um computador é instruí-lo a executar uma série de

passos para se atingir um determinado objetivo. • Cada computador possui uma linguagem que ele compreende -

linguagem de máquina. • A linguagem de máquina é composta, geralmente, por

representações dos sinais elétricos que o computador compreende.

• Como quase todo computador é binário – compreende apenas dois níveis de voltagem elétricos – a linguagem de máquina geralmente é expressa em sequências compostas por dois valores: 0, para um nível menor de voltagem; e 1, para um nível maior de voltagem. Algo do tipo: 001001010010100101010100101010101 010101001010100001011101010101010

• Para o computador isto é completamente compreensível, mas para o ser humano este tipo de linguagem seria difícil de compreender, pois para cada comando do computador haveria uma sequência diferente de zeros e uns.

Page 3: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

• Para resolver este problema, com o passar do tempo, foram criadas linguagens de programação mais compreensíveis, geralmente baseadas em termos de idiomas humanos reais (inglês é o mais utilizado), para expressar as instruções que o computador deveria executar.

• Como os computadores continuam entendendo somente o código de máquina, após os programas serem criados nestas novas linguagens de programação eles devem ser traduzidos para programas em linguagens de máquina.

• Para fazer esta tradução são utilizados programas especiais chamados tradutores. O trabalho do tradutor é: – ler um código-fonte escrito em uma linguagem de programação; – analisar possíveis erros de escrita no código-fonte e informá-los ao

programador; – se não houver erros, gerar um código de máquina correspondente a este

programa.

• Isto foi uma grande evolução na programação de computadores, pois aumentou a eficiência dos programadores e diminuiu a probabilidade de erros nos códigos.

Introdução

Page 4: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

• A forma como o tradutor faz a leitura do código-fonte em uma linguagem de programação e gera um programa em código de máquina é que define o tipo do tradutor. Tradicionalmente os tradutores podem ser classificados como compiladores, interpretadores, ou híbridos.

• O compilador lê todo o código-fonte, verifica se há erros e gera um programa em linguagem de máquina. Após isso o programa está pronto para ser executado e o código-fonte não é mais necessário. Um programa feito por compilação pode ser entregue para o usuário sem o código-fonte, pois o executável é uma tradução fiel e total do código-fonte.

• O interpretador realiza o trabalho de tradução e execução de forma simultânea. Em vez de gerar todo o código de máquina para depois possibilitar a execução, ele vai lendo o código-fonte instrução por instrução, gera o código de máquina correspondente àquela instrução e executa-o. Não há separação entre traduzir e executar, a tradução é feita de acordo com a sequência do código que é executado. Portanto, o código-fonte é entregue ao usuário e ele deve ter o interpretador na máquina para executar o programa.

Introdução

Page 5: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito
Page 6: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Breve Panorama das Linguagens de Programação

• As primeiras linguagens de programação não eram tão diferentes das linguagens de máquina. Eram chamadas de linguagens de montagem, ou Assembly.

• Depois surgiram linguagens que possuíam instruções que se aproximavam mais de construções matemáticas como expressões, funções e ofereciam estruturas complexas de repetição e desvio de execução. Linguagens como FORTRAN, C, Pascal e BASIC ofereciam tal facilidade.

• Nosso interesse é aprender a lógica de programação utilizando duas linguagens estruturadas: C e Pascal, pois estas linguagens são muito utilizadas para ensino no meio acadêmico.

Page 7: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Code::Blocks • Para facilitar o desenvolvimento e compilação de um programa

em C, o Code::Blocks oferece um ambiente que integra um editor de textos a um compilador para linguagem C.

• O compilador usado pelo Code::Blocks é o famoso gcc (Gnu C Compiler).

• No Windows há basicamente dois tipos de programas de usuário:

– aplicações para o console (Console Applications), que são executadas numa janela de texto (também conhecida como Prompt do MS-DOS); e

– aplicações Gráficas (GUI Applications), que usam janelas, menus e outros elementos visuais como parte de sua interface com o programador.

• Todos os programas em C que faremos serão aplicações para o console.

Page 8: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Code::Blocks

• O Code::Blocks é “Free Software” (sob GNU General Public License). Isto significa, entre outras coisas, que ele pode ser distribuído e copiado à vontade.

Page 9: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Tela inicial do Code::Blocks

• Inicie o Code::Blocks clicando no ícone do mesmo que aparece na área de trabalho, ou em Iniciar —> Todos os Programas —> CodeBlocks —> CodeBlocks

• Com isso, o ambiente de programação do Code::Blocks é iniciado. Isso fará com que apareça no monitor uma janela semelhante à mostrada a seguir.

Page 10: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Code::Blocks

Page 11: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

• Uma vez obtida a tela inicial do Code::Blocks clique em File —> New —> File....

conforme ilustrado abaixo.

Code::Blocks

Page 12: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

• Na próxima janela clique e C/C++ source e clique em GO

• Clique em Next para as duas próximas janelas, em especial para a segunda janela a seguir, se certifique que linguagem selecionada é a C.

Page 13: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

• Na janela a seguir, digite um nome para o arquivo de programa a ser digitado. Para tanto, clique no quadrado com ... que aparece ao lado da caixa com título Filename with full path: e digite um nome de arquivo, por exemplo: primeiro

• Clique agora em Salvar e depois em Finish.

• Na janela que foi criada você vai digitar, compilar e executar seu primeiro programa em C.

Code::Blocks

Page 14: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Primeiro Programa

• Tradicionalmente o primeiro programa desenvolvido em qualquer linguagem de programação é um programa vazio, ou seja, sem instrução nenhuma.

• Em Português Estruturado, seria algo assim:

Page 15: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

• Em Pascal, todo programa deve ser criado em um arquivo com extensão .pas. No nosso caso podemos chamar nosso primeiro programa de primeiro.pas. O correspondente em Pascal ao programa acima é:

Primeiro Programa

Page 16: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

• Em C, todo programa é criado em um arquivo com extensão .c, ou .ccp em C++. Chamaremos este programa de primeiro.c e seu código será o seguinte:

• Não temos uma definição explícita para nome de programa em C, porque o

nome do programa é o nome do seu arquivo executável. • O programa consiste na criação da função main, que é um nome reservado

exclusivamente para este fim. Outras funções podem ser criadas mas main só pode ser usada para este propósito. Toda função tem um tipo de retorno e o tipo de main é int, já que em C o programa geralmente retorna um valor inteiro que indica se o programa rodou corretamente ou apresentou erros – 0 indica que não houve erro.

• As chaves, { }, indicam início e fim de um bloco, assim como begin e end em Pascal.

Primeiro Programa

Page 17: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

• Podemos enriquecer os programas adicionando comentários.

Primeiro Programa

Page 18: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Bibliotecas

• Em Pascal nós incluímos a biblioteca através de uses crt

• Em C, é necessário incluir algumas bibliotecas. Estas bibliotecas geralmente vem com o pacote padrão do compilador ou do sistema operacional, e devem ser incluídas com a diretiva de compilação #include.

#include <stdio.h> permite entrada e saída #include<stdlib.h> permite interação com funções do sistema operacional

Page 19: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Programa Olá, Mundo • Com o programa Hello, World (Olá, mundo) é

possível ver uma saída visual no monitor, a fim do programador poder “ver algo acontecer”. Temos:

Page 20: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Programa Olá, Mundo

Page 21: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

• Para compilar o seu programa pelo Code::Blocks você deve clicar em – Build —> Compile current file

• Se tudo der certo, na janela de log abaixo do programa, haverá a indicação de que o programa foi compilado com sucesso: 0 errors, 0 warnings

Programa Olá, Mundo

Page 22: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

• Bem, com o programa primeiro compilado sem erros, a pasta onde foi salvo o arquivo primeiro.c contém agora o programa executável primeiro.exe. Para executar o programa clique no botão

Build —> Run da janela principal do Code::Blocks. Deverá surgir uma nova janela, de DOS, mostrando a execução de seu programa

Programa Olá, Mundo

Page 23: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Variáveis

• Variáveis são espaços de memórias reservados pelo programa para armazenar dados.

• O nome de uma variável pode ser de uma letra até palavras com no máximo 32 caracteres;

• Obrigatoriamente deve começar com uma letra ou underscore (“_”). O restante pode ser letras de A a Z, maiúsculas, minúsculas, números e o underscore; – Ex: a; num; essa_e_uma_variavel; tambem_essa;

• Cuidados: – O nome de uma variável não pode ser igual a uma palavra

reservada; – O nome de uma variável não pode ser igual a de uma

função declarada pelo programador ou pelas bibliotecas do C.

Page 24: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Variáveis

• Algumas palavras reservadas em C:

Page 25: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

• Em C, letras maiúsculas e minúsculas são tratadas diferentemente.

– int variavel;

– int Variavel;

– int VaRiAVeL;

– int VARIAVEL;

– ou

– int variavel, Variavel, VaRiAVeL, VARIAVEL;

Variáveis

Page 26: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Tipos de Variáveis

• O tipo de uma variável informa a quantidade de memória, em bytes, que a variável ocupará e a forma como um valor deverá ser armazenado;

• Tipos básicos de dados em C: TIPO BIT BYTES ESCALAS

char 8 1 -128 a 127

int 16 2 -32768 a 32767

float 32 4 3.4E-38 a 3.4E+38

double 64 8 1.7E-308 a 1.7E+308

Page 27: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Tipos de Variáveis

• Um modificador pode ser usado para alterar o significado de um tipo básico e adaptá-lo mais precisamente às necessidades de diversas situações, veja:

Page 28: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Tipos de Variáveis

• Uma tabela com um descritivo dos tipos em Pascal e C:

Page 29: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Atribuições

• Quanto à atribuição de valores às variáveis, usamos, em cada linguagem, o operador de atribuição correspondente. – Em Pascal := – Em C =

• Quanto aos valores atribuídos, em ambas as linguagens o valor decimal utiliza o ponto e não vírgula como separador das casas numéricas e aspas simples para envolver um caractere simples.

• Para strings Pascal usa aspas simples e C usa aspas duplas para envolvê-las.

• Em C, as variáveis podem ser inicializadas em suas declarações, ou seja, ela recebe um valor já no momento da criação.

Page 30: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Exemplos

Program Variaveis; Uses CRT; {Declara variáveis com seus tipos} Var c: char; i:integer; d:real; f:string; Begin c:= ‘a’; i:=12; d:=45.23; f:=‘Hello, world’; End.

#include <stdio.h> #include <stdlib.h> {Declara variáveis com seus tipos} int main(void) { char c = 'a'; int i; float d; char* f; i = 12; d=45.23; f = "Hello,world"; }

Em C as variáveis devem ser declaradas após o início do corpo da função.

Em Pascal as variáveis devem ser declaradas em um bloco especial iniciado por var

• Podemos verificar a forma como as variáveis são declaradas e como recebem valores via atribuição.

Page 31: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Tipo de variável e Atribuição

• Em C, as variáveis podem ser inicializadas na declaração.

int a = 5, b = 10; /* declara e inicializa as variáveis */

float c = 5.3;

• Não é possível, por exemplo, armazenar um número real numa variável do tipo int. Se fizermos:

int a = 4.3; /* a variável armazenará o valor 4 */

será armazenada em a apenas a parte inteira, isto é, 4.

No Pascal, como não temos conversão de tipo, teríamos um erro!

Page 32: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Conversão de tipos em atribuição • A regra é muito simples: o valor do lado direito

(expressão) de uma atribuição é convertida no tipo do lado esquerdo (variável destino) #include <stdio.h>

int i;

char ch;

float f;

int main()

{

i = f; //i recebe a parte inteira (16 bits) de f;

f = i; //f converte um inteiro de 16 bits em um ponto flutuante;

ch = i; //coloca os bits menos significativos de i em ch

f = ch; //f converte o inteiro de 8 bits guardado em ch em um ponto flutuante;

}

Page 33: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

• A tabela abaixo reúne as conversões de tipos.

Conversão de tipos

Tipo do destino Bits Tipo da origem Bits Possível informação perdida

char 8 int 16 Os 8 bits mais significativos

char 8 long int 32 Os 24 bits mais significativos

int 16 long int 32 Os 16 bits mais significativos

int 16 float 32 A parte fracionária e/ou mais

float 32 double 64 Precisão, o resultado é arredondado

Page 34: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Exercício:

int a = 17, b = 3;

int x, y;

float z = 17.0 , z1, z2;

x = a / b;

y = a % b;

z1 = z / b;

z2 = a/b;

Page 35: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Correção

int a = 17, b = 3;

int x, y;

float z = 17.0 , z1, z2;

x = a / b; // x =5

y = a % b; // y = 2

z1 = z / b; // z1 = 5.666666 (float/int)

z2 = a/b; // z2 = 5.0 (int/int)

Page 36: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

#include <stdio.h> int main() { int x=1; char y='A'; printf("\n x possui valor %d",x); x=y; printf("\n Agora x possui valor %d",x); printf("\n Agora x possui valor %c",x); printf("\n y possui valor %c",y); }

Conversão de tipos

Tabela ASCII

Saída

Page 37: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

#include <stdio.h> int main() { int x=1; char y='A'; printf("\n x possui valor %d",x); x=y; printf("\n Agora x possui valor %d",x); printf("\n Agora x possui valor %c",x); printf("\n y possui valor %c",y); x=x+y; printf("\n x possui valor %d",x); }

Conversão de tipos

X+Y 65+65

Saída

Page 38: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

#include <stdio.h> int main() { int x=1; char y='A'; printf("\n x possui valor %d",x); x=y; printf("\n Agora x possui valor %d",x); printf("\n Agora x possui valor %c",x); printf("\n y possui valor %c",y); x=x+y; printf("\n xpossui valor %d",x); x=x-64; printf("\n x possui valor %d",x); printf("\n x possui valor %c",x); }

Tabela ASCII

Conversão de tipos

Page 39: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Entrada e saída de dados

• Para que um programa torne-se minimamente funcional é preciso que ele receba dados do meio externo e emita o resultado de seu processamento de volta para o meio externo .

• Em Pascal usamos para entrada read e readln e para saída write e writeln.

• Em C, existem muitas funções pré-definidas que tratam de entrada e saída. Vamos agora dar uma idéia das funções printf() e scanf() em C.

Page 40: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Saída Formatada: printf() • Esta função imprime dados numéricos, caracteres e

strings e os dados de saída podem ser formatados (alinhados, com número de dígitos variáveis, etc.)

• Observe no exemplo abaixo as instruções de saída formatada e os respectivos resultados.

• Observe que na primeira instrução, a saída é exatamente igual a string de controle. Já na segunda instrução a impressão se deu em duas linhas. Isto se deve ao \n que representa o código ASCII para quebra de linha

Page 41: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Exemplos

#include <stdio.h> #include <stdlib.h> int main() { // somente texto printf("Texto Exemplo"); // sem quebra de linha printf("Texto Exemplo"); printf("Texto Exemplo"); printf("\nTexto Exemplo"); // com quebra de linha printf("\nTexto Exemplo"); printf("\nTexto Exemplo"); } Saída:

Page 42: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

• É possível reservar espaço para o valor de alguma variável usando especificadores de formato que marcam o lugar e o formato de impressão das variáveis contidas na lista variáveis. Deve haver um especificador de formato para cada variável a ser impressa e todos eles começam com um %

• Exemplo:

Admita que idade seja uma variável int com valor 29

printf(“Tenho %d anos de vida”,idade);

Saída: Tenho 29 anos de vida

Saída Formatada: printf()

Page 43: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Formatadores mais comuns: %d número inteiro em formato decimal %f número real em ponto flutuante %c caractere simples %s cadeia de caracteres \n nova linha (pula uma linha) \t tab (insere espaços de uma tabulação) \“ aspas (usado quando se quer imprimir aspas) \\ barra (usado quando se quer imprimir uma barra)

Saída Formatada: printf()

Page 44: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

• Exemplo: Admita que tot e din sejam variáveis float cujo valores são 12.3 e 15.0.

• printf(“Total: %.2f \nDinheiro: %.2f \nTroco: %.2f“,tot,din,din-tot);

Saída: Total: 12.30

Dinheiro: 15.00

Troco: 2.70

Saída Formatada: printf()

Número de casas decimais a serem exibidas para o valor da variável float Padrão 6 dígitos – se omitido .0 – sem casas decimais .n – com n casas decimais

Page 45: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Exemplos #include <stdio.h> // biblioteca da funcao printf() #include <stdlib.h> // biblioteca da funcao clrscr() int main(){ char letra = 'a'; char* nome = "Teste"; // formato caracter printf("%c",letra);//escreve o valor da variável letra e continua na mesma linha

printf("\n%c",'b');//primeiro muda de linha, depois escreve b e continua na mesma linha

printf("%c\n",'b');//primeiro escreve b, depois muda de linha

printf("\n%c",'b');//primeiro muda de linha, depois escreve b

// formato string printf("\n%s",nome); //muda de linha e escreve o valor da variável nome

} Saída:

Page 46: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Exemplos #include <stdio.h> // biblioteca da funcao printf()! #include <stdlib.h> // biblioteca da funcao clrscr() int main(){ int i = 12; float m = 9.5; // texto e numero sem formatacao printf("\nJoaozinho tem %d amiguinhos!",i); printf("\n Media: %f ",m); } Saída: Joaozinho tem 12 amiguinhos! Media:9.500000

Page 47: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Exemplos #include <stdio.h> // biblioteca da funcao printf()!

#include <stdlib.h> // biblioteca da funcao clrscr()

int main(){

int i = 12;

float r = 5.83;

// Uso dos modificadores de formato

printf("\n %d %12f",i,r);//muda de linha escreve o valor da variável i, escreve o valor da variável r

usando pelo menos 12 dígitos (como ele ocupa 4 serão inseridos 8 espaços em branco)

printf("\n %10d %12f",i,r); //muda de linha escreve o valor da variável i usando pelo menos 10

dígitos(como ele tem 2 dígitos serão inseridos 8 espaços em branco, escreve o valor da variável r usando pelo menos 12 dígitos (como ele ocupa 4 serão inseridos 8 espaços em branco)

printf("\n %010d %12f",i,r); //muda de linha escreve o valor da variável i usando pelo menos 10

dígitos(como ele tem 2 dígitos serão inseridos 8 zeros à esquerda, escreve o valor da variável r usando pelo menos 12 dígitos (como ele ocupa 4 serão inseridos 8 espaços em branco)

}

A especificação de tamanho é opcional n pelo menos n dígitos serão impressos (dígitos faltantes serão completados por brancos).

0n pelo menos ndígitos serão impressos (dígitos faltantes serão completados por zeros).

Saída:

Page 48: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Exemplos #include <stdio.h> // biblioteca da funcao printf()!

#include <stdlib.h> // biblioteca da funcao clrscr()

int main(){

int i = 12;

int j = -35;

int k = 9386;

float r = 5.83;

float s = -82.3;

float t = 5467.75;

// Uso dos modificadores de formato

printf("\n\nJustificacao a direita");

printf("\n %6d %12f",i,r);

printf("\n %6d %12f",j,s);

printf("\n %6d %12f",k,t);

printf("\n\nJustificacao a esquerda");

printf("\n %-6d %-12f",i,r);

printf("\n %-6d %-12f",j,s);

printf("\n %-6d %-12f",k,t);

printf("\n\nCom sinal");

printf("\n %+6d %+12f",i,r);

printf("\n %+6d %+12f",j,s);

printf("\n %+6d %+12f",k,t);

}

A justificação de saída é o elemento que é inserido logo após o % e ela é opcional omitido justificação à direita (padrão) - justificação à esquerda. + conversão de sinal (com sinal: + ou -)

Saída:

Page 49: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Leitura formatada: scanf()

• O uso da função scanf() é semelhante ao da função printf(). A função lê da entrada padrão (em geral, teclado) uma lista de valores que serão formatados e armazenados nos endereços das variáveis da lista.

Especificadores de formatos mais comuns d inteiro decimal (int) f ponto flutuante (float) i inteiro decimal de qualquer formato(int) u inteiro decimal sem sinal (unsigned int) s string (char*) c caracter (char)

Page 50: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

• A lista de variáveis é o conjunto de (endereços) de variáveis para os quais serão passados os dados lidos. Variáveis simples devem ser precedidas pelo caracter &.

Para essa declaração de variáveis:

int cod; float preco; int dia,mes,ano;

Podemos ter: scanf("%d",&cod);

scanf("%d %f",&cod,&preco);

scanf("%2d %2d %2d",&dia,&mes,&ano);

Leitura formatada: scanf()

Page 51: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

#include <stdio.h> // biblioteca das funcoes scanf() e printf()

int main(){

int cod;

float preco; // leitura individual

printf("Digite o codigo do item: ");

scanf("%d",&cod);

printf("Digite o preco do item: ");

scanf("%f",&preco); }

Page 52: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Exemplo

#include <stdio.h> // biblioteca das funcoes scanf() e printf()

int main(){

int cod;

float preco; // leitura conjunta

printf("\nDigite o codigo e preco do item: ");

scanf("%d %f",&cod,&preco); }

Page 53: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Exemplo

#include <stdio.h> // biblioteca das funcoes scanf() e printf()

int main(){

int cod;

float preco;

preco=9.80;

// leitura conjunta com supressao

printf("\nDigite o codigo e preco do item: ");

scanf("%d %f",&cod,&preco);

printf("\nCodigo %d Preço %f",cod,preco);

}

Page 54: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Exemplo

#include <stdio.h> // biblioteca das funcoes scanf() e printf()

int main(){

int dia,mes,ano;

// leitura segmentada

printf("\nDigite sua data de nascimento (ddmmaa): ");

scanf("%2d %2d %2d",&dia,&mes,&ano);

printf("\nVoce nasceu em %d de %d de 19%d!",dia,mes,ano);

}

Observe que neste exemplo temos um 2 na especificação de %2d que define o valor das variáveis dia, mês e ano. Esse 2 indica que o numero máximo de caracteres para leitura desses campos é de 2 dígitos. Assim, os dois primeiros dígitos digitados serão atribuídos à dia, os dois seguintes à mês e os dois últimos à ano.

Page 55: Pascal/C - ebrito.com.br · No Pascal, como não temos conversão de tipo, teríamos um erro! Conversão de tipos em atribuição •A regra é muito simples: o valor do lado direito

Função gets

• Para leitura de string (cadeia de caracteres) a função scanf não é adequada.

• A função gets() lê uma string do teclado.

• Sua forma geral é: gets() (nome_da_string);

• O programa abaixo demonstra o funcionamento da função gets(): char nome[30];

gets(nome);