Você está na página 1de 18

Laboratrio de Programao I

Prof.: Cssio Prazeres (prazeres@dcc.ufba.br) Pascal vs. C

Tipos de dados
Pascal
char integer * (-32768 a 32767) shortint * longint * real byte word boolean unsigned int (unsigned um modificador de tipo) unsigned long int (unsigned um modificador de tipo) double extended string (vetor de caracteres) double long double char[] (char nomeString[tamanho])

C
char int (-2.147.483.648 a 2.147.483.647) short int (short um modificador de tipo) long int (long um modificador de tipo) float unsigned char (unsigned um modificador de tipo)

* Na prtica os tipo int de C so maiores em abrangncia que os do Pascal. Ex.: integer de Pascal na verdade tem o tamanho do short int de C.

Abrangncia dos tipos de C: 32 bits

Estrutura bsica de um programa


Pascal
program primeiroPrograma; uses crt; begin {seu programa} end.

C
#include <stdio.h> int main(){ /* seu programa */ }

Exemplo em Pascal
program soma; uses crt; var soma: integer; a,b: integer; begin a:=2; b:=3; soma:=a+b; end.

Exemplo em C
#include <stdio.h> int main(){ int soma; int a,b; a=2; b=3; soma=a+b; }

Declarao de variveis
Em Pascal apenas se pode declarar variveis antes do incio do programa principal, ou no incio de funes e procedimentos.
program soma; uses crt; function soma(a,b:integer):integer; var s: integer; begin s:=a+b; soma:=s; end; var s1,s2,x,y: integer; begin s1:=soma(2,3); x:=4; y:=5; if (x<y) then s2:=soma(x,y); end.

C possui o conceito de blocos. A cada incio de bloco pode-se declarar variveis. As variveis tem escopo do bloco.
#include <stdio.h> int soma(int a, int b){ int s; s=a+b; return s; } int main(){ int s1,x,y; s1=soma(2,3); x=4; y=5; if (x<y){ int s2; s2=soma(x,y); } }

Constantes

Pascal
program constante; uses crt; const PI = 3.1415926; var raio: real;

C
#include <stdio.h> #define PI 3.1415926 int main(){ float raio; //seu programa }

begin {seu programa} end.

Operadores aritmticos
Pascal + * / mod div C + * / (para diviso de float) % / (para diviso de int)

Comandos de atribuio
Pascal: identificador de varivel := expresso;
a:=b+c;

C: identificador de varivel = expresso;


a=b+c;

Operadores lgicos
Pascal > >= < <= = <> C > >= < <= == !=

Expresses lgicas
Pascal and or not C && || !

Entrada/sada de dados
O conjunto de procedimentos e funes pr-definidos em Pascal fixo e inclui as funes read, readln, write e writeln, para realizar E/S.
program soma; uses crt; var soma,a,b: integer; begin writeln(Digite 2 numeros:); readln(a); readln(b); soma:=a+b; write(Soma eh: , soma); end.

Em C deve-se usar funes ou procedimentos de uma biblioteca especfica para E/S. A biblioteca mais comum a stdio.h.

#include <stdio.h> int main(){ int soma,a,b; printf(Digite 2 numeros:\n); scanf(%d,&a); //%d %f %c %s scanf(%d,&b); soma=a+b; printf(Soma eh: %d,soma); }

Funes e procedimentos
Funes em pascal so escritas com a palavra chave function e procedimentos com a palavra chave procedure.
program soma; function soma(a,b:integer):integer; var s: integer; begin s:=a+b; soma:=s; end; procedure imprimeInt(i:integer); begin write(i); end; var s1: integer; begin s1:=soma(2,3); imprimeInt(s1); end.

Em C tudo uma funo (incluindo o programa principal) com um tipo de retorno. Para procedimentos usa-se o tipo void (sem retorno).
#include <stdio.h> int soma(int a, int b){ int s; s=a+b; return s; } void (int i){ printf(Inteiro: %d,i); } int main(){ int s1; s1=soma(2,3); imprimeInt(s1); }

Estruturas de seleo: if ... else


program testaA; var a: integer; begin readln(a); if (a>=2) then a:=a-2 else a:=a+2; writeln(a); end. program testaA; var a: integer; begin readln(a); if (a>=2) then begin a:=a-2; writeln(a); end else begin a:=a+2; writeln(a); end; end. #include <stdio.h> int main(){ int a; scanf(%d,&a); if (a<=2) a=a-2; else a=a+2; printf(%d,a); } #include <stdio.h> int main(){ int a; scanf(%d,&a); if (a<=2){ a=a-2; printf(%d,a); } else{ a=a+2; printf(%d,a); } }

Estruturas de seleo: case


program opcoes; var op,: integer; res,a,b: real; begin writeln('Digite 2 numeros: '); readln(a,b); write('Digite a opcao: '); readln(op); case op of 1: begin Writeln(Soma!'); res:=soma(a,b); end; 2: begin Writeln(Subtracao!'); res:=subtrai(a,b); end; 3: begin Writeln(Multiplicacao!'); res:=multiplica(a,b); end; 4: begin Writeln(Divisao!'); res:=divide(a,b); end; else writeln (Opcao invalida!); end; {end Case} writeln(Resultado: ,res); end. #include <stdio.h> int main(){ int op; float res,a,b; printf(Digite 2 numeros: \n); scanf(%f %f,&a,&b); printf(Digite a opcao: ); scanf(%d,&op); switch (op) { case 1: printf(Soma!); res=soma(a,b); break; case 2: printf(Subtracao!); res=subtrai(a,b); break; case 3: printf(Multiplicacao!); res=multiplica(a,b); break; case 4: printf(Divisao!); res=divide(a,b); break; default: printf(Opcao invalida!); break; } printf(Resultado: %f,res); }

Estruturas repetio
var i: integer; i:=1; while (i<=10) do begin {comandos a repetir} i:=i+1; end; var i: integer; i:=1; repeat {no tem begin...end} {comandos a repetir} i:=i+1; until i=10; int i = 1; while (i<=10){ //comandos a repetir i++; //i=i+1; }

int i = 1; do{ i++; //comandos a repetir } while (i<=10);

var i: integer; for i:=1 to 10 do begin {comandos a repetir} end;

int i; for (i=1;i<=10;i++){ //comandos a repetir }

Vetores e Matrizes
Pascal
var vetInt: array[1..10] of integer; var matReal: array[1..10,1..10] of real; Pode-se usar estruturas de repetio para percorrer o vetor ou matriz
a:=vetInt[i]; b:=matReal[i][j];

C
Pode-se ter vetor e matrizes de qualquer tipo bsico ou de tipos definidos
int vetInt[10]; float matFloat[10][10]; Racional vetRac[10]; Pode-se usar estruturas de repetio para percorrer o vetor ou matriz
a=vetInt[i]; b=matFloat[i][j];

Strings
Pascal
Tipo de dados string Funciona como um vetor
var strNome: string; strNome[i]: retorna o caracter da posio i Pode-se usar estruturas de repetio para percorrer a string Existem funes para tratamento de string

C
No existe tipo string Vetor de caracteres
char strNome[20]; strNome[i]: retorna o caracter da posio i Pode-se usar estruturas de repetio para percorrer a string Existem funes para tratamento de string

Ponteiros
program testaPonteiro; var x: integer; a,b: ^integer; begin x := 10; a := @x; b := a; b^ := a^ + 10; writeln('Resultado = ',a^); end. #include <stdio.h> int main(){ int x; int *a, *b; x=10; a=&x; b=a; *b=*a+10; printf(%d,*a); }

x 20

Passagem de parmetros: valor e referncia


Pascal: ponteiro implcito
Passagem por valor na funo soma: sem a palavra reservada var Passagem por referncia no procedimento troca: usa a palavra reservada var program passagem; function soma(a,b:integer):integer; begin soma:=a+b; end; procedure troca(var a,b:integer); var aux: integer; begin aux:=a; a:=b; b:=aux; end; var s1,x,y: integer; begin x:=2; y:=4; s1:=soma(x,y); troca(x,y); end.

C: ponteiro explcito
Passagem por valor na funo soma: sem ponteiros Passagem por referncia no procedimento troca: com ponteiros #include <stdio.h> int soma(int a, int b){ return (a+b); } void troca(int *a, int *b){ int aux; aux=*a; *a=*b; *b=aux; } int main(){ int s1,x,y; x=2; y=3; s1=soma(2,3); troca(&x,&y); }