pascal/c - ebrito.com.br · no pascal, como não temos conversão de tipo, teríamos um erro!...
TRANSCRIPT
![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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/1.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/2.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/3.jpg)
• 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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/4.jpg)
• 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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/5.jpg)
![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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/6.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/7.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/8.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/9.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/10.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/11.jpg)
• 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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/12.jpg)
• 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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/13.jpg)
• 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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/14.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/15.jpg)
• 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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/16.jpg)
• 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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/17.jpg)
• 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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/18.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/19.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/20.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/21.jpg)
• 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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/22.jpg)
• 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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/23.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/24.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/25.jpg)
• 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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/26.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/27.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/28.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/29.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/30.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/31.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/32.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/33.jpg)
• 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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/34.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/35.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/36.jpg)
#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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/37.jpg)
#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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/38.jpg)
#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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/39.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/40.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/41.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/42.jpg)
• É 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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/43.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/44.jpg)
• 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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/45.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/46.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/47.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/48.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/49.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/50.jpg)
• 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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/51.jpg)
#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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/52.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/53.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/54.jpg)
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](https://reader031.vdocuments.com.br/reader031/viewer/2022022714/5c0c490809d3f295058bdc7a/html5/thumbnails/55.jpg)
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);