Livia D'Lacourt 0 Denunciar post Postado Abril 7, 2013 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
Vinicius Rangel 208 Denunciar post Postado Abril 8, 2013 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