Did you know that you can navigate the posts by swiping left and right?

Simulador de carreras tonto en Pascal

07 May 2012 . category: . Comments

program Carrera;

function clima_funct(): String;
	var aleatorio: Integer;
	begin
		randomize;
		aleatorio := random(101);
		if aleatorio in [0..25] then begin
			clima_funct := 'Mojado';
		end
		else begin
			clima_funct := 'Seco';
		end;
	end;

function tiempo_mala_maniobra(p: Real): Integer;
	var aleatorio: Integer;
	begin
		randomize;
		if (p > random())then begin
			tiempo_mala_maniobra := 0
		end
		else begin
			aleatorio := random(24) + 7;
			tiempo_mala_maniobra := aleatorio;
		end;
	end;
	
function work_funct(p: Real): Boolean;
	begin
		randomize;
		if (p > random()) then begin
			work_funct := False;
		end
		else begin
			work_funct := True;
		end;
	end;
var f_piloto, f_circuito, f_out: Text;
	//
	cant_pilotos: Integer;
	h_pista_seca, h_pista_moj, prob_mala_man,
		prob_falla_mec: Real;
	vel_prom_rect, vel_prom_curv: Integer;
	//
	
	//
	vueltas, tipo_curva, rect_dist, curv_deg,
		curv_radio: Integer;
	//
	
	//
	dist_total_recta: Integer;
	dist_total_curva, dist_total: Real;
	vel_prom: Real;
	t_curva, t_recta: Real;
	clima: String;
	tiempo: Real;
	i, j: Integer;
	ganador: Integer;
	tiempo_ant: Real;
	work: Boolean;
	//
	
begin

	//
	assign(f_piloto, 'piloto.txt');
	assign(f_circuito, 'circuito.txt');
	assign(f_out, 'resumen.txt');
	reset(f_piloto);
	reset(f_circuito);
	rewrite(f_out);
	//
	
	dist_total_curva := 0;
	dist_total_recta := 0;
	
	while not eof(f_circuito) do begin
		read(f_circuito, vueltas, tipo_curva);
		while not eoln(f_circuito) do begin
			if tipo_curva = 1 then begin
				read(f_circuito, rect_dist);
				dist_total_recta := dist_total_recta +
									rect_dist;
			end;
			if tipo_curva = 2 then begin
				read(f_circuito, curv_deg, curv_radio);
				dist_total_curva := dist_total_curva +
									curv_radio*(pi()*curv_deg/180);
			end;
			read(f_circuito, tipo_curva);
		end;
	end;
	writeln('sali');
	dist_total := dist_total_recta + dist_total_curva;
	clima := clima_funct();
	
	writeln(f_out, 'Longitud de pista: ', dist_total:1:2);
	writeln(f_out, 'Numero de vueltas: ', vueltas);
	writeln(f_out, 'Condicion de pista: ', clima);
	writeln(f_out, 'Piloto/Tiempo');

	//
	read(f_piloto, cant_pilotos);
	//
	ganador := 1;
	for i:= 1 to cant_pilotos do begin
		work := True;
		read(f_piloto, h_pista_seca, h_pista_moj, 
			vel_prom_rect, vel_prom_curv, 
			prob_mala_man, prob_falla_mec);
		t_recta := dist_total_recta/vel_prom_rect;
		t_curva := dist_total_curva/vel_prom_curv;
		vel_prom := dist_total/(t_recta + t_curva);
		if clima = 'Mojado' then begin
			vel_prom := vel_prom * h_pista_moj;
		end;
		if clima = 'Seco' then begin
			vel_prom := vel_prom * h_pista_seca;
		end;
		tiempo := (dist_total/vel_prom)*vueltas;
		j := 0;
		while (j  1 then begin
				if tiempo < tiempo_ant then begin
					ganador := i;
				end;
				tiempo_ant := tiempo; //¿Es la mejor manera?
			end;
		end
		else begin
			writeln(f_out, 'Piloto ', i, ': AFUERA');
			ganador := 0;
		end;
	end;
	writeln(f_out, 'El ganador fue el piloto ', ganador);

	close(f_piloto);
	close(f_circuito);
	close(f_out);

end.

piloto.txt

5
1.1 0.95 235 170 0.05 0.001
0.98 0.90 240 180 0.1 0.004
1.11 0.98 225 190 0.08 0.005
1.05 0.97 221 185 0.01 0.001
0.99 1.1 220 200 0.005 0.003

circuito.txt

57 1 800 2 100 60 1 1100 2 150 230 1 1500 2 110 370

Me

Fabián Orccón is an awesome person. He lives in Perú, the land of the Incas.