BPinto98 235 Posted November 9, 2015 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
Lawps 63 Posted November 9, 2015 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 1 BPinto98 reacted to this Share this post Link to post Share on other sites
BPinto98 235 Posted November 9, 2015 (edited) 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 November 9, 2015 by Bruno Pinto - BFCP98 (see edit history) Share this post Link to post Share on other sites
RachadoPT 140 Posted November 10, 2015 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... é malandro >>) 1 BPinto98 reacted to this Share this post Link to post Share on other sites
BPinto98 235 Posted November 10, 2015 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
RachadoPT 140 Posted November 10, 2015 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 1 BPinto98 reacted to this Share this post Link to post Share on other sites
BPinto98 235 Posted November 12, 2015 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
RachadoPT 140 Posted November 12, 2015 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 1 BPinto98 reacted to this Share this post Link to post Share on other sites
BPinto98 235 Posted November 12, 2015 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
RachadoPT 140 Posted November 12, 2015 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
BPinto98 235 Posted November 12, 2015 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
RachadoPT 140 Posted November 12, 2015 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
rokkialo23 28 Posted November 13, 2015 :O ainda se da pascal? Share this post Link to post Share on other sites
RachadoPT 140 Posted November 13, 2015 :O ainda se da pascal? Infelizmente... Na vez de iniciarem com C, dão-noa Pascal... Why not? Cumpz, RachadoPT Share this post Link to post Share on other sites
BPinto98 235 Posted November 14, 2015 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