Logo Hardware.com.br
jigga
jigga Membro Senior Registrado
348 Mensagens 0 Curtidas

Tradução de Pascal para C

#1 Por jigga 23/05/2011 - 12:43
Olá amigos, estou precisando traduzir um código em pascal para C.
Já fiz aqui, mas gostaria de saber se está tudo certo..podem conferir??

Código em Pascal:
[code=rich]
program FilaCaixa;
uses Filas;
const Final = 100;
var crono,espera,totcli,client : integer;
caixa: array[1..3] of integer;
filcx: Fila;
function ClienteChegou : boolean;
begin
ClienteChegou := (random(3) = 0);
end;
function Transação : integer;
begin
case random(5) of
0: Transação := 10;
1: Transação := 20;
2: Transação := 30;
3: Transação := 40;
4: Transação := 50;
end;
end;
crono := 0;
espera:= 0;
totcli:= 0;
Qinit(filcx);
for i:=1 to 3 do
caixa[i] :=0;
while crono
begin
if ClienteChegou then
begin
Enqueue(filcx,crono);
inc(totcli);
end;
for i:=1 to 3 do
if (not QisEmpty(filcx)) and (caixa[i]=0) then
begin
client:= Dequeue(filcx);
inc(espera,(crono-client));
caixa[i]:= Transação;
end;
for i:=1 to 3 do
if caixa[i]<>0 then dec(caixa[i]);
inc(crono);
end;
writeln;
writeln(' Tempo de atendimento: ',Final);
writeln(' Total de clientes..:', totcli);
writeln(' Tempo tot. de espera:',espera);
writeln(' Tempo med. de espera:',(espera/totcli):0:2);
end.
[/code]

Código Traduzido para C:

[code=rich]
#include
#define final 100;
int main()
{
int crono,espera,totcli,client;
int caixa1,caixa2,caixa3;
fila f1;
int ClienteChegou()
{
if ((rand()%3)==0)
return 1;
else
return 0;
}
int Transacao(){
int Transacao;
switch(rand()%5)
{
case 0:Transacao=10;
case 1:Transacao=20;
case 2:Transacao=30;
case 3:Transacao=40;
case 4:Transacao=50;
}
return Transacao;
}
crono=0;
espera=0;
totcli=0;
iniciar_fila(f1);
for (i=1;i==3,i++)
caixa[i]=0;
while (crono
if (ClienteChegou()==1){
enfileirar(f1,crono);
totcli++;}
for(i=1;i==3;i++)
if ((vazia(f1)==0) && (caixa[i]==0))
{
client=desenfileirar(f1);
espera=(espera+(crono-client))
caixa[i]=Transacao();
}
for(i=0,i==3,i++)
{
if (caixa!=0)
caixa[i]--;
crono++;
}
printf(“Tempo de Atendimento: “,Final);
printf(“Total de Clientes:”,totcli);
printf(“Tempo total de Espera”,espera);
printf(“Tempo Medio de Espera”,(espera/totcli)
}
[/code]
TerraSkilll
TerraSkilll Zumbi Moderador
4K Mensagens 1.2K Curtidas
#2 Por TerraSkilll
23/05/2011 - 13:27
jigga
Teoricamente falando, em linguagens de programação a simples "tradução" não é suficiente pois, mesmo que a estrutra seja a mesma, cada linguagem possui funções que podem reagir de maneiras distintas (por exemplo, em pascal write e writeln são diferentes, enquanto que o equivalente em c - printf - difere por apenas um parâmetros, o "\n").

Melhor jeito seria você testar os programas e ver se o comportamento é o mesmo. Somente pelo código, não há garantias de que se comportem de forma igual.

Em todo caso, uma observação que fari é que, em pascal, antes de chamar o random, é preciso executar randomize. Não sei em C se há equivalente.

Abraço.
Contribua para um fórum melhor: pense antes de postar.
"It isn't a contest. Just enjoy the ride." -> Seth Vidal
Hardware.com.br no Youtube!
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal