Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Livia D'Lacourt

Exercício em pascal

Recommended Posts

Olá, pessoal.Tudo bom? (espero que sim) xD

Quero uma ajudinha num exercício.

 

O exercício é o seguinte:

 

"Dado o arquivo ligacoes.txt que terá o seguinte conteúdo: nº celular, operadora, duração, hora:min.

Onde:

nº celular: Número que foi ligado;

operadora: operadora ao qual o número ligado pertence;
duração: duração da ligação em segundos;
hora:min : horário do dia que ocorreu a ligação;
E o arquivo tarifa.txt com: operadora, preço min, hora inicial, hora final, preço reduzido.
Onde:

operadora: Operadora de telefonia celular;
preço Min: preço por minuto;
hora inicial e final: Faixa de horário onde o preço do minuto é reduzido, ou seja, possui valor econômico.
preço reduzido: é o valor econômico.

Faça um programa que deve gerar um arquivo de saída chamado conta.html. Esse arquivo deve conter uma tabela com as seguintes colunas:

nº celular, operadora, duração, horário, valor.

Onde:

 

nº celular: Número que foi ligado;

operadora: operadora ao qual o número ligado pertence;
duração: duração da ligação em segundos;
horário: horário do dia que ocorreu a ligação;
valor: Valor de cada ligação.
E no final da tabela deve conter a soma do valor total."
Bem, eu fiz praticamente todo o programa, mas estou com problemas no momento de calcular os valores. Não sei o que há de errado. Então postarei aqui meu código e peço ajuda pra me orientarem no que eu errei e tals.. =D
Obrigada pela atenção :yay:
Código:
program conta;

uses
  crt;
  
const
  TAMARQTARIFA = 4;
  
type
  thora=record
	h,m:integer;
	end;

  tregtarifa=record
	operadora: string;
	valormin: real;
	horainicio, horafim: thora;
	valormineco: real;
	end;

  tregligacoes=record
	numero: string;
	operadora: string;
	temposeg: integer;
	horaligada: thora;
	end;

  ttabtarifa = array [1..TAMARQTARIFA] of tregtarifa;

//VARIAVEIS UNIVERSAIS
var
  tabtarifa: ttabtarifa;
  linha, aux: string;
  arqtarifa, arqligacoes, arqconta: text;
  p, i, c: integer;
  tabligacoes: tregligacoes;
  valor: real;

//PROCEDURES  
procedure separavirg(var paux: string; var pp: integer);
  begin
	paux:=copy(paux,pp+1,length(paux)-pp);
	pp:=pos(',',paux);
  end;
  
procedure separahr(var paux: string; var pp: integer);
  begin
	paux:=copy(paux,pp+1,length(paux)-pp);
	pp:=pos(':',paux);	
  end;
  
procedure cabecalho_html(var conta_cabecalho_html: text);
begin
  writeln(conta_cabecalho_html,'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">');
  writeln(conta_cabecalho_html,'<html>');
  writeln(conta_cabecalho_html,'<head>');
  writeln(conta_cabecalho_html,'<meta name="Generator" content="FreshHTML v3.70"></meta>');
  writeln(conta_cabecalho_html,'<title>Tabela da conta</title>');
  writeln(conta_cabecalho_html,'</head>');
  writeln(conta_cabecalho_html,'<body>');
  writeln(conta_cabecalho_html,'<<font size="18" face="Arial"><b><center>Tabela da Conta de Amanda Bragança Farias</center></b></font><br>');
  writeln(conta_cabecalho_html,'<div align="center">');
  writeln(conta_cabecalho_html,'<table border="1" cellspacing="0" cellpadding="4" width="100%" align="center">');
  writeln(conta_cabecalho_html,'<tr valign=top>');
  writeln(conta_cabecalho_html,'<td style="vertical-align: top;"><font face="Arial, sans-serif"><b>Numero</b></font><br>');
  writeln(conta_cabecalho_html,'</td>');
  writeln(conta_cabecalho_html,'<td style="vertical-align: top;"><font face="Arial, sans-serif"><b>Operadora</b></font><br>');
  writeln(conta_cabecalho_html,'</td>');
  writeln(conta_cabecalho_html,'<td style="vertical-align: top;"><font face="Arial, sans-serif"><b>Duracao</b></font><br>');
  writeln(conta_cabecalho_html,'</td>');
  writeln(conta_cabecalho_html,'<td style="vertical-align: top;"><font face="Arial, sans-serif"><b>Horario</b></font><br>');
  writeln(conta_cabecalho_html,'</td>');
  writeln(conta_cabecalho_html,'<td style="vertical-align: top;"><font face="Arial, sans-serif"><b>Valor</b></font><br>');
  writeln(conta_cabecalho_html,'</td>');
  writeln(conta_cabecalho_html,'</tr>');
end;

procedure corpo_html(var conta_corpo_html: text);
begin
  writeln(conta_corpo_html,'<tr>');
  writeln(conta_corpo_html,'<td style="vertical-align: top;"><font face="Arial, sans-serif">',tabligacoes.numero,'</font><br>');
  writeln(conta_corpo_html,'</td>');
  writeln(conta_corpo_html,'<td style="vertical-align: top;"><font face="Arial, sans-serif">',tabligacoes.operadora,'</font><br>');
  writeln(conta_corpo_html,'</td>');
  writeln(conta_corpo_html,'<td style="vertical-align: top;"><font face="Arial, sans-serif">',tabligacoes.temposeg,'</font><br>');
  writeln(conta_corpo_html,'</td>');
  writeln(conta_corpo_html,'<td style="vertical-align: top;"><font face="Arial, sans-serif">',tabligacoes.horaligada.h,':',tabligacoes.horaligada.m,'</font><br>');
  writeln(conta_corpo_html,'</td>');
  writeln(conta_corpo_html,'<td style="vertical-align: top;"><font face="Arial, sans-serif">',valor:0:2,'</font><br>');
  writeln(conta_corpo_html,'</td>');
end;

procedure final_html(var conta_final_html: text);
begin
  writeln(conta_final_html,'</table>');
  writeln(conta_final_html,'</body>');
  writeln(conta_final_html,'</html>');
end;

//PROGRAMA PRINCIPAL
begin
	assign(arqtarifa, 'tarifa.txt');	
	{*********************************************}
	{ DESMEMBRANDO TARIFAS.TXT     }
	{*********************************************}
	reset(arqtarifa);     	
	while not eof(arqtarifa) do
    	begin
		readln(arqtarifa,linha);
		linha := linha + ',';
		writeln(linha + '*******'); readkey;
		
		aux:= linha;
		p:=pos(',',aux);
		tabtarifa[i].operadora:=copy(aux,1,p-1);
		
		separavirg(aux,p);			  
		val(copy(aux,1,p-1),tabtarifa[i].valormin,c);
      
		separahr(aux,p);			  
		val(copy(aux,1,p-1),tabtarifa[i].horainicio.h,c);			  
      
		separavirg(aux,p);			  
		val(copy(aux,1,p-1),tabtarifa[i].horainicio.m,c);
	  
		separahr(aux,p);			  
		val(copy(aux,1,p-1),tabtarifa[i].horafim.h,c);			  
      
		separavirg(aux,p);			  
		val(copy(aux,1,p-1),tabtarifa[i].horafim.m,c);			  
      
		separavirg(aux,p);			  
		val(copy(aux,1,p-1),tabtarifa[i].valormineco,c);
		
		writeln(tabtarifa[i].operadora);
		writeln(tabtarifa[i].valormin:0:2);
		writeln(tabtarifa[i].horainicio.h, ':', tabtarifa[i].horainicio.m);
		writeln(tabtarifa[i].horafim.h, ':', tabtarifa[i].horafim.m);
		writeln(tabtarifa[i].valormineco:0:2);
		writeln('**********************');
		readkey;
	end;// end do while not eof(arqtarifa)
	
	assign(arqligacoes, 'ligacoes.txt');	
	assign(arqconta,'conta.txt');
	rewrite(arqconta);// Cria o arquivo arqconta
	cabecalho_html(arqconta);
	
	{*********************************************}
	{DESMEMBRANDO LIGACOES.TXT   }
	{*********************************************}
	reset(arqligacoes);     	
	while not eof(arqligacoes) do
    	begin
	    readln(arqligacoes,linha);
		linha := linha + ',';
		writeln('**********************');
		writeln(linha + '*******');
		readkey;
		
		aux:= linha;  
		p:=pos(',',aux);
		tabligacoes.numero:=copy(aux,1,p-1);      
		
		separavirg(aux,p);			  
		tabligacoes.operadora:=copy(aux,1,p-1);
      
		separavirg(aux,p);			  
		val(copy(aux,1,p-1),tabligacoes.temposeg,c);			  
      
		separahr(aux,p);			  
		val(copy(aux,1,p-1),tabligacoes.horaligada.h,c);			  
	  
		separavirg(aux,p);			  
		val(copy(aux,1,p-1),tabligacoes.horaligada.m,c);
		
		writeln(tabligacoes.numero);
		writeln(tabligacoes.operadora);
		writeln(tabligacoes.temposeg);
		writeln(tabligacoes.horaligada.h, ':', tabligacoes.horaligada.m);
		readkey;
		
		{****** CALCULANDO VALOR DE CADA LIGAÇÃO ******}

		if tabligacoes.operadora = 'Vivo' then
		begin
			if (tabligacoes.horaligada.h >= tabtarifa[1].horainicio.h) and (tabligacoes.horaligada.h <= tabtarifa[1].horafim.h) then		
				valor := (tabligacoes.temposeg/60) * tabtarifa[1].valormineco;
			else		
				valor := (tabligacoes.temposeg/60) * tabtarifa[1].valormin;		
		end;
		
		if tabligacoes.operadora = 'Claro' then
		begin  	  
			if (tabligacoes.horaligada.h >= tabtarifa[2].horainicio.h) and (tabligacoes.horaligada.h <= tabtarifa[2].horafim.h) then
				valor := (tabligacoes.temposeg/60) * tabtarifa[2].valormineco 
			else     
				valor := (tabligacoes.temposeg/60) * tabtarifa[2].valormin;
		end;
	
		if tabligacoes.operadora = 'Tim' then
		begin  	  
			if (tabligacoes.horaligada.h >= tabtarifa[3].horainicio.h) and (tabligacoes.horaligada.h <= tabtarifa[3].horafim.h) then
				valor := (tabligacoes.temposeg/60) * tabtarifa[3].valormineco  
			else     
				valor := (tabligacoes.temposeg/60) * tabtarifa[3].valormin;
		end;
	
		if tabligacoes.operadora = 'Oi' then
		begin  	  
			if (tabligacoes.horaligada.h >= tabtarifa[4].horainicio.h) and (tabligacoes.horaligada.h <= tabtarifa[4].horafim.h) then
				valor := (tabligacoes.temposeg/60) * tabtarifa[4].valormineco 
			else     
				valor := (tabligacoes.temposeg/60) * tabtarifa[4].valormin;
		end;
	
		corpo_html(arqconta);
	
		writeln('**********************');
		writeln(tabligacoes.numero);
		writeln(tabligacoes.operadora);
		writeln(tabligacoes.temposeg);
		writeln(tabligacoes.horaligada.h, ':', tabligacoes.horaligada.m);	
		writeln(valor);
		readkey; 
	end;// end do while not eof(arqligacoes)
	
	final_html(arqconta);
	close(arqtarifa);
	close(arqligacoes);
	close(arqconta);
end.

 

PS (Meus writeln são pra testar mesmo, vê se estou mesmo pegando as informações que preciso).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendendo nada de Paschal mas aqui vai uma contribuição.

Primeiro o bom e velho if para saber se a hora que a ligação iniciou esta de acordo com a faixa de horário onde o preço é reduzido.
caso seja você vai saber quanto tempo que durou a ligação e fazer o tempo de duração mas a hora que iniciou a chamada para saber se enquanto ele falava saia dessa horário.
depois é valor por minuto vezes o tempo convertido em minuto ou seja Variavel de dias divido por 24 e divido por 60.

caso não esteja no horário você faz o processo semelhante só que vai verificar se enquanto ele falava entrava na tarifa.

é, acho que é um caminho..
qualquer dúvida estamos ai

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.