antiblock
Cyphriun
  • Chatbox

    You don't have permission to chat.
    Load More
Sign in to follow this  
BPinto98

[Pascal] Pedido De Ajuda

16 posts in this topic

Boa Tarde pessoal!

Sei que será uma área que pouca gente utiliza e até terá conhecimento se calhar... No entanto não hesitei em perguntar.

Alguem sabe como resolver este exercício em Pascal por favor?

 

"Escreva um programa para ler o ano de nascimento de uma pessoa e escrever uma mensagem
que diga se ela poderá ou não votar este ano."
 
Sei que este exercício podia ser feito de um modo extremamente simples verificando por uma conta do género:
idade := 2015 - data_nascimento
 
No entanto foi proposto pela minha professora de Aplicações Informáticas B, para fazer de uma maneira diferente, complicando o exercício. Arranjar uma maneira em que consiga receber a informação do computador para defenir a hora atual e em simultâneo fazer o cálculo que referi, incluindo meses, dia etc e saber concretamente se pode ou não votar.
 
Ja pesquisei bastante sobre o assunto e soube que era possivel usando os "uses DOS" e os "uses CRT" mas nao consegui :s
 
Alguem pode ajudar?
Obrigado :)
 
Bruno Pinto

Share this post


Link to post
Share on other sites
antiblock
https://arwen2.global/

Eu ainda sou também um pouco novato no Pascal mas acho que esse dá (não testei).

Program Idade ;
var Age : integer;
Begin
writeln ('Introduza a idade :');
readln (Age);
if Age < 1997 then;
Begin
writeln ('Pode votar')
End;
if Age > 1997 then
Begin
writeln ('Nao pode votar')
End; 
End.

(Não tem as virgulas todas)

 

Cumprimentos

Share this post


Link to post
Share on other sites

Sim, esse código é funcional, pelo menos o algoritmo está correto, foi o que usei inicialmente.

Mas a questão nao era essa... Era fazer data concreta, imagina por exemplo que as eleiçoes tinham sido em Janeiro de 2015 e tu apenas fazias anos apenas em Fevereiro, tu por exemplo... fazias anos em 1997.

Logo:

2015-1997=18 correto

Mas no entanto na data das eleiçoes nao tinhas ainda os 18 anos. Apenas tinahs 17. O objetivo era obteres do sistema, fora do Pascal a informaçao do calendario. Obtendo o "getDate" por via dos "uses CRT, DOS" mas o problema é que nao consigo tornar isso funcional. Entendes a questao? Sei que tornasse um pouco complicado :(

A minha professora tambem sabe que é possivel, no entanto nao sabe bem utilizar essa funçao, visto nao ser a area de programaçao em que está mais especializada :s

 

Mas muitoo obrigado pela tentativa de ajuda :)

 

 

EDIT:

 

Dentro do teu algoritmo que fizeste, reconstruí-o na integra e poderia ser usado se o caso fosse de calculo direto entre ano podia ser o seguinte em uso:

Program Idade ;
  var Age : integer;

Begin
  write ('Introduza a idade :'); // Sem o "ln" poderás inserir seguida a idade melhorando o aspeto.
  readln (Age);
  if Age < 1997 then;
    writeln ('Pode votar');  // O uso do Begin+End dentro dos If, apenas para mais de uma linha.
  else
    writeln ('Nao pode votar');   // O uso do Begin+End dentro dos If, apenas para mais de uma linha.
End.

(Atençao.. Nao estou a dizer que estivesse mal! Apenas é o me ponto de vista de alteraçoes para simplificar o codigo entendes? xD)

Edited by Bruno Pinto - BFCP98 (see edit history)

Share this post


Link to post
Share on other sites

Qual é o compilador que usas?

Eu quando dei Pascal usei o Pascalzim e não dava para ir buscar a hora do sistema na altura... Agora não sei, mas posso dar uma vista de olhos se ainda conseguir programar em Pascal >>

 

Cumpz, RachadoPT

 

EDIT: se o cáculo tem que ser feito considerando também a diferença entre os meses de nascimento, terás que pedir dia/mês/ano do nascimento, não só o ano...

 

Caso queiras só com o ano, tens aqui para testar (não tenho a certeza se funciona mas tenta e logo dizes):

program idade;
uses DOS;

var age:integer;
var y,m,d,wd:word;

begin
	writeln("Introduza a idade");
	readln(age);
	GetDate(y, m, d, dw);
	age := y - age;
	
	if age >= 18 then
		writeln("Já pode votar!");
	else
		writeln("Não pode votar...");
	end;
end.

se não puder ser assim, diz-me que compilador tás a usar para programar em Pascal e eu logo tento resolver de outra maneira.

 

PS: beijinhos a professora que não consegue ajudar os alunos sobre a matéria que tem que ensinar oO o meu prof de programação também nunca tinha dado pascal e teve a estudar ao mesmo tempo que nós, no entanto ajudava sempre :) (quando não era eu... fdp é malandro >>)

Share this post


Link to post
Share on other sites

Obrigado desde já RachadoPT por tentares ajudar.

 

Bem eu fui experimentar o código que me enviaste e não funcionou. Inicialmente era as aspas tinham que ser trocadas por plicas ( " -> ' ) e tirar o ( ; ) antes do else. Corrigi isso e o codigo ficou completamente direito, mas o problema persistiu.

Ele nao reconhece o DOS e considera o erro: 

 

O arquivo dos.pas nao foi encontrado.

O arquivo deve estar na mesma pasta do programa, ou ainda na pasta 'units' do Pascalzim.

 

Nao sei como o resolver :S

 

Agora respondendo a pergunta que me fizeste...

Que compilador utilizo?

Bem, a nossa professora em aula inicialmente disponibilizou á turma o Pascalzim (v 5.0.3) entretanto fiz o download do Pascalzim (v 6.0.3b5), é a versão mais recente, foi disponibilizada em Outubro se não estou em erro. E no entanto em ambas não funcionou o uses DOS. Se conseguires resolver isso com outro compilador diz me por favor :)

Ahh e eu precisava considerar os dias e nao só o ano também... Preciso fazer calculo entre datas concretas daí ir buscar a data atual entendes? :p

Share this post


Link to post
Share on other sites

Obrigado desde já RachadoPT por tentares ajudar.

 

Bem eu fui experimentar o código que me enviaste e não funcionou. Inicialmente era as aspas tinham que ser trocadas por plicas ( " -> ' ) e tirar o ( ; ) antes do else. Corrigi isso e o codigo ficou completamente direito, mas o problema persistiu.

Ele nao reconhece o DOS e considera o erro: 

 

O arquivo dos.pas nao foi encontrado.

O arquivo deve estar na mesma pasta do programa, ou ainda na pasta 'units' do Pascalzim.

 

Nao sei como o resolver :S

 

Agora respondendo a pergunta que me fizeste...

Que compilador utilizo?

Bem, a nossa professora em aula inicialmente disponibilizou á turma o Pascalzim (v 5.0.3) entretanto fiz o download do Pascalzim (v 6.0.3b5), é a versão mais recente, foi disponibilizada em Outubro se não estou em erro. E no entanto em ambas não funcionou o uses DOS. Se conseguires resolver isso com outro compilador diz me por favor :)

Ahh e eu precisava considerar os dias e nao só o ano também... Preciso fazer calculo entre datas concretas daí ir buscar a data atual entendes? :p

O problema é que o pascalzim não consegue ir buscar a hora do sistema. Não encontra o arquivo DOS pq não tem essa lib... 

Além disso aquele código tinha alguns erros como disseste mas já corrigi, aqui tens:

program idade;
uses DOS;

var age:integer;
var y,m,d,wd:word;

begin
	writeln('Introduza a idade');
	readln(age);
	GetDate(y, m, d, wd);
	age := y - age;

	if age >= 18 then
		writeln('Ja pode votar!')
	else
		writeln('Nao pode votar...');
        readln();
end.         

Diz a tua professora para testar com o Free Pascal ou com o Lazarus (testei com os 2, tanto um como o outro deram mas considero o Lazarus muito melhor, sendo o Free Pascal tão antigo e ser só pascal)

 

Cumpz, RachadoPT

Share this post


Link to post
Share on other sites

Será possivel explicares-me como utilizar o Lazarus para usar esse codigo? Nao entendo muito bem :o

Share this post


Link to post
Share on other sites

Será possivel explicares-me como utilizar o Lazarus para usar esse codigo? Nao entendo muito bem :o

 

Depois de instalares o Lazarus, crias um novo projeto como Simple Project, ou abres um projeto como Simple Project também, depois é como qualquer outro IDE xD

Share this post


Link to post
Share on other sites

Depois de instalares o Lazarus, crias um novo projeto como Simple Project, ou abres um projeto como Simple Project também, depois é como qualquer outro IDE xD

Claro isso eu sei eu entendi.. É natural mas tipo... Aqui aparece me erros que supostamente no Pascalzim nao me apareciam :o Nao estou a perceber :o E nomes diferentes, chamam unit invés de program, atrofiei todo xD

Share this post


Link to post
Share on other sites

Claro isso eu sei eu entendi.. É natural mas tipo... Aqui aparece me erros que supostamente no Pascalzim nao me apareciam :o Nao estou a perceber :o E nomes diferentes, chamam unit invés de program, atrofiei todo xD

'-' deves ter feito em Delphi, Lazarus é um IDE que para além de pascal simples, dá para programar em pascal orientado a objetos e em Delphi, provavelmente fizeste um projeto de delphi, não sei, mete print que já vejo xD

Share this post


Link to post
Share on other sites

0add2fff8b2b181357811a9fd356452c.png

 

Juro que nao entendo nada disto ahaha xD Tou habituado ao Pascalzim e isto é umas 10x mais confuso xD Como faço isso? :p

Share this post


Link to post
Share on other sites

0add2fff8b2b181357811a9fd356452c.png

 

Juro que nao entendo nada disto ahaha xD Tou habituado ao Pascalzim e isto é umas 10x mais confuso xD Como faço isso? :p

 

Criaste uma unidade, não o projeto em Pascal xD

 

Carrega File>New...>Project>Simple Project, depois disso vai-te criar um project.lpr, aí trabalhas em pascal xD

Share this post


Link to post
Share on other sites

:O ainda se da pascal?

Infelizmente... Na vez de iniciarem com C, dão-noa Pascal...

Why not?  :protest:  :protest:

 

Cumpz, RachadoPT

Share this post


Link to post
Share on other sites

De facto tinhas razão, estava mesmo com outro tipo de projeto aberto XD Já consegui abrir Pascal no Lazarus e penso que consegui alterar o teu código de forma a ficar funcional a 100% para o que pretendia :p

 

Será que podes testar o código? A ver se está bom? E se possível até altera-lo? Para melhorar?

program idade;
uses DOS;

var age,day,month,year:integer;
var y,m,d,wd:word;

begin
	GetDate(y, m, d, wd);
        writeln('Introduza o seu Dia de Nascimento (Numero)');
        readln(day);
        writeln('Introduza o seu Mês de Nascimento (Numero)');
        readln(month);
        writeln('Introduza o seu Ano de Nascimento (Numero)');
	readln(year);
	age := y - year;

	if age > 18 then
		writeln('Ja pode votar!');
        if age = 18 then
                Begin
                if month<=m then
                        Begin
                        if day<=d then
                        writeln('Ja pode votar!')
                        else
                        writeln('Nao pode votar...')
                        end
                else
                writeln('Nao pode votar...')
                end;
        if age < 18 then
		writeln('Nao pode votar...');
        readln();
end.     

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this