TJFBarreto Posted March 20, 2012 at 07:36 PM Report #444801 Posted March 20, 2012 at 07:36 PM Boas mais uma vez, ontem abri um tópico sobre uma ajuda de uma parte deste projecto que vou por, onde me foi esclarecido pelo nunopicado, mais um vez obrigado 😁 O Código está a correr, quando faço o método de PayPal, ele retira-me o dinheiro que é como eu quero, mas quando faço com o PaySafeCard ele não retira o valor, fica exacto como estava e depois se fizer novamente ele começa adicionar o valor do PaySafe... não sei qual será o problema.. Aguardo respostas pois, isto está-me a dar a volta à cabeça pois não consigo achar o erro.. Program MOD4; var Escolha, Valor, Valor2, Carregar, Carregar2, EscolhaPay, Montante, Entidade, Referencia, Dinheiro, NIB : integer; Nome, Nome2, Escolha2, Escolha3 : string; Procedure Menu; var EscolhaCerta: Boolean; Begin EscolhaCerta:=False; repeat clrscr; gotoxy(21,2);textcolor(yellow);writeln('----------------------------------------'); gotoxy(21,3);textcolor(yellow);writeln('| Pagamentos/Transfêrencias via-online |'); gotoxy(21,4);textcolor(yellow);writeln('----------------------------------------'); gotoxy(21,6);textcolor(green);writeln('Escolha o método que vai utilizar:'); gotoxy(21,9);textcolor(yellow);writeln('1 - PayPal'); gotoxy(21,10); writeln('2 - Cartao de Credito'); gotoxy(21,11); writeln('3 - PaySafeCard'); gotoxy(21,12); writeln('4 - Multibanco'); gotoxy(21,15);textcolor(red);writeln('5 - Sair '); gotoxy(21,17);textcolor(white); write('Insira o numero do método que vai utilizar: '); readln(Escolha); if (Escolha=1) or (Escolha=2) or (Escolha=3) or (Escolha=4) or (Escolha=5) then EscolhaCerta:=true else begin clrscr; gotoxy(21,15);textcolor(red); writeln('Escolheu um método de pagamento não previsto na via-online.'); readln; end until EscolhaCerta=true; End; Function MostraDinheiro(a:integer;b:integer):integer; Begin MostraDinheiro:=a-b; End; Procedure PayPal; Begin clrscr; textcolor(green); write('Escreva o nome da sua conta PayPal: '); readln(Nome); clrscr; write(Nome,' digite o nome da conta para quem deseja efectuar a transferência: '); readln(Nome2); clrscr; write('Quanto deseja transferir para a conta ',Nome2,': '); readln(Valor); Carregar:=0; repeat clrscr; textcolor(11);writeln('A transferência está a ser processada ',carregar,'%'); Carregar:=Carregar + random(10); delay(300) until Carregar>100; delay(1000); clrscr; textcolor(green); write('Transferência concluida de '); textcolor(yellow); write(Valor); textcolor(green); write(' euros, ficou com '); textcolor(yellow); write(MostraDinheiro(Dinheiro,Valor)); textcolor(green); write(' euros na sua conta. '); gotoxy(5,3); textcolor(yellow); writeln('Prime qualquer tecla para continuar...'); readln; End; Function MostraDinheiro2(a:integer;b:integer):integer; Begin MostraDinheiro2:=a-b; End; Procedure CartaoDeCredito; Begin clrscr; textcolor(green); writeln('Escreva o NIB para quem deseja transferir: '); readln(NIB); clrscr; textcolor(green); write('Qual o montante que deseja transferir: '); readln(Valor2); clrscr; textcolor(green); write('Deseja confirmar a tranferência de '); textcolor(yellow); write(Valor2); textcolor(green); write(' euros para o NIB '); textcolor(yellow); write(NIB); textcolor(green); write(' ? | Sim/Nao | '); readln(Escolha2); If (Escolha2='Sim') or (Escolha2='sim') then Begin Carregar:=0; repeat clrscr; textcolor(11); writeln('A transferência está a ser processada ',carregar,'%'); Carregar:=Carregar + random(10); delay(400) until Carregar>100; delay(1000); clrscr; textcolor(green); write('Transferência concluida de '); textcolor(yellow); write(Valor2); textcolor(green); write(' euros, ficou com '); textcolor(yellow); write(MostraDinheiro2(Dinheiro,Valor2)); textcolor(green); write(' euros na sua conta. '); readln; end else begin clrscr; textcolor(red); writeln('A OPERAÇÂO FOI CANCELADA!!!'); readln; End; End; Function MostraDinheiroPay10(a:integer):integer; Begin MostraDinheiroPay10:=a-10; End; Function MostraDinheiroPay25(a:integer):integer; Begin MostraDinheiroPay25:=a-25; End; Function MostraDinheiroPay50(a:integer):integer; Begin MostraDinheiroPay50:=a-50; End; Function MostraDinheiroPay100(a:integer):integer; Begin MostraDinheiroPay100:=a-100; End; Procedure PaySafeCard; Begin repeat clrscr; gotoxy(21,3);textcolor(green); writeln('Escolha a opção de valor que vai utilizar:'); gotoxy(21,6);textcolor(yellow);writeln('1 - 10 Euros'); gotoxy(21,7);writeln('2 - 25 Euros'); gotoxy(21,8);writeln('3 - 50 Euros'); gotoxy(21,9);writeln('4 - 100 Euros'); writeln(''); gotoxy(21,11);textcolor(white);write('Escolha o numero da opção: '); readln(EscolhaPay); textcolor(white); gotoxy(15,5); Until (EscolhaPay>0) and (EscolhaPay<5); clrscr; case EscolhaPay of 1:writeln('O seu código: H245-HJYL-87G9-HTT0, ficou com ',MostraDinheiroPay10(Dinheiro)); 2:writeln('O seu código: 8HJ2-I2A8-0194-21QW, ficou com ',MostraDinheiroPay25(Dinheiro)); 3:writeln('O seu código: QWER-TY12-00XL-PLO3, ficou com ',MostraDinheiroPay50(Dinheiro)); 4:writeln('O seu código: HJ1S-S20A-I7EQ-QS58, ficou com ',MostraDinheiroPay100(Dinheiro)); end; gotoxy(5,3);textcolor(yellow);writeln('Prime qualquer tecla para continuar...'); readln; End; Function MostraDinheiro3(a:integer;b:integer):integer; Begin MostraDinheiro3:=a-b; End; Procedure Multibanco; Begin clrscr; textcolor(green); writeln('Digite a Entidade: '); readln(Entidade); writeln(''); textcolor(green); writeln('Digite a Referência: '); readln(Referencia); writeln(''); textcolor(green); writeln('Qual o montante: '); readln(Montante); clrscr; textcolor(green); write('Deseja confirmar a tranferência com a entidade: '); textcolor(yellow); write(Entidade); textcolor(green); write(' Referência: '); textcolor(yellow); write(Referencia); textcolor(green); write(' com o valor de: '); textcolor(yellow); write(Montante); textcolor(green); write(' ? | Sim/Nao | '); readln(Escolha3); If (Escolha3='Sim') or (Escolha3='sim') then Begin Carregar:=0; repeat clrscr; textcolor(11); writeln('A transferência está a ser processada ',carregar,'%'); Carregar:=Carregar + random(10); delay(400) until Carregar>100; delay(1000); clrscr; textcolor(green); write('Transferência concluida de '); textcolor(yellow); write(Montante); textcolor(green); write(' euros, ficou com '); textcolor(yellow); write(MostraDinheiro3(Dinheiro,Montante)); textcolor(green); write(' euros na sua conta. '); gotoxy(5,3);textcolor(yellow);writeln('Prime qualquer tecla para continuar...'); readln; end else begin clrscr; textcolor(red); writeln('A OPERAÇÂO FOI CANCELADA!!!'); readln; End; End; Procedure Escolhas; Begin Case Escolha of 1:PayPal; 2:CartaoDeCredito; 3:PaySafeCard; 4:Multibanco; { 5:Sair;} end; end; Begin Dinheiro:=300; Repeat Menu; Escolhas; until Escolha=5; End.
nunopicado Posted March 20, 2012 at 08:38 PM Report #444815 Posted March 20, 2012 at 08:38 PM Bem, com tantas funções para fazer basicamente a mesma coisa, parece-me que de espantar seria se trabalhasse bem! :dontgetit: Conta lá qual é a ideia do programa: Tens uma conta inicial com 300€. Depois tens vários métodos de pagamento. 1. Todos esses métodos vão abater nos 300€? 2. A conta é contínua? (se tirares 70 por paypal e a seguir 30 por cartão de crédito, a ideia é ficarem 200, ou é independente por método?) Vou aqui dar uma olhada a isto, mas convinha que explicasses isto melhor, porque se a ideia for fazer correctamente o programa, tens aqui muita coisa para alterar... 😁 "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
TJFBarreto Posted March 20, 2012 at 08:52 PM Author Report #444821 Posted March 20, 2012 at 08:52 PM A ideia é fazer um programa tipo Pagamentos e Serviços, onde escolhias vários métodos, e todos esses estavam ligados à variável do dinheiro, que só tem a opção de extrair.., por exemplo escolhia PayPal e pagava 50€ era suposto ficar com 250€, mas depois quando vou ao PaySafeCard ou outro ele não me retira o dinheiro e se voltar a fazer no mesmo método ele adiciona o valor que era suposto retirar... 1. Sim todos os métodos estão interligados com a variável "Dinheiro", pois só faço pagamentos menos que isso.. para ver se dá certo. 2. Pois, ai é onde eu quero chegar, é para ser usada em todos os métodos.. Isto é um exercício, onde é para ser avaliado as Funções e Procedimentos, por isso as tal tantas funções para fazer a mesma coisa :bored:
nunopicado Posted March 20, 2012 at 09:04 PM Report #444823 Posted March 20, 2012 at 09:04 PM Isto é um exercício, onde é para ser avaliado as Funções e Procedimentos, por isso as tal tantas funções para fazer a mesma coisa :bored: Na minha ideia, avaliar um aluno em funções e procedimentos é verificar se ele consegue fazer funções e procedimentos que resolvam os problemas do programa... Não adicionar mais problemas repetindo código (até porque as funções e procedimentos existem exactamente para não ter de repetir código). Ter duas funções repetidas não é sinal que o aluno consiga fazer duas funções. É sinal que ele sabe fazer Copy-Paste. Vê se percebeste bem a ideia do teu professor, ou se é mesmo ele que não percebe nada de programação. :dontgetit: 😁 À parte disso, e não tendo ainda visto tudo, estás em alguns locais a usar as funções para mostrar o resultado, mas não estás efectivamente a alterar o valor da variável dinheiro. Quanto ao que te queixas em concreto, de ele não subtrair à primeira vez e nas seguintes ainda aumentar, aqui não está a fazer. E nem poderia: . . . case EscolhaPay of 1: writeln('O seu código: H245-HJYL-87G9-HTT0, ficou com ', MostraDinheiroPay10(Dinheiro)); 2: writeln('O seu código: 8HJ2-I2A8-0194-21QW, ficou com ', MostraDinheiroPay25(Dinheiro)); 3: writeln('O seu código: QWER-TY12-00XL-PLO3, ficou com ', MostraDinheiroPay50(Dinheiro)); 4: writeln('O seu código: HJ1S-S20A-I7EQ-QS58, ficou com ', MostraDinheiroPay100(Dinheiro)); end; . . . Tu não estás a atribuir o resultado das várias funções MostraDinheiroPayXXX a lado nenhum. Só estás a mandar para o ecrã. Para isto funcionar, tens de ter a variavel dinheiro com um valor inicial, e depois, a cada operação, tens de pensar em duas coisas: 1. Antes da efectivar a operação, verificar se tem dinheiro que chegue 2. Depois de efectivar a operação, substrair à variável dinheiro o valor da transferencia Só no fim é que mostras o resultado, e basicamente o que tens de mostrar é o valor que está em "Dinheiro" "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
TJFBarreto Posted March 20, 2012 at 09:12 PM Author Report #444824 Posted March 20, 2012 at 09:12 PM Hum.. Terá que ficar assim? (penso eu) case EscolhaPay of 1: Begin Resultado:=MostraDinheiroPay10(Dinheiro); writeln('O seu código: H245-HJYL-87G9-HTT0, ficou com ',Resultado); End; 2:
nunopicado Posted March 20, 2012 at 09:20 PM Report #444825 Posted March 20, 2012 at 09:20 PM Não, porque isso continuava a não abater na variavel dinheiro. Teria de ficar assim: case EscolhaPay of 1: Begin Dinheiro:=MostraDinheiroPay10(Dinheiro); writeln('O seu código: H245-HJYL-87G9-HTT0, ficou com ',Dinheiro); End; 2: Assim, na proxima operação, a variável dinheiro já não terá 300, mas sim 290, e a operação será feita com base nisso... "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
TJFBarreto Posted March 20, 2012 at 09:29 PM Author Report #444826 Posted March 20, 2012 at 09:29 PM Claro bah ?, muito obrigado.
thoga31 Posted March 20, 2012 at 09:45 PM Report #444830 Posted March 20, 2012 at 09:45 PM De facto, para quê tanta função? ? Basta isto que se segue... function MostraDinheiro(inicial, retirar : integer) : integer; begin MostraDinheiro := inicial - retirar; end; E isto só mostra a diferença, não altera o valor em qualquer variável global. É esta a intenção? Knowledge is free!
nunopicado Posted March 20, 2012 at 09:47 PM Report #444831 Posted March 20, 2012 at 09:47 PM Não. Aparentemente a ideia é abater o valor global. 😁 "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
thoga31 Posted March 20, 2012 at 09:51 PM Report #444832 Posted March 20, 2012 at 09:51 PM E, olha lá, oh @TJFBarreto, trata de melhorar a indentação. Já te dissemos isto vezes sem conta, e não atinas com isso de uma vez! Não consigo ver esse código, e nem me vou esforçar a isso. Para isso é que existe indentação e os IDEs até têm ferramentas de suporte à aplicação dessa mesma indentação, como tabulações inteligentes... E se a ideia é abater, então a função deve abater na variável global e depois fazer MostrarResultado := VariavelGlobal Knowledge is free!
TJFBarreto Posted March 20, 2012 at 10:28 PM Author Report #444840 Posted March 20, 2012 at 10:28 PM Eu ainda só pôs 4 tópicos de perguntas em relações a códigos, e só o Nuno é que me disse isso de tratar melhor a indentação hoje, estou a ser ensinado com o compilador "Pascalzim" pois o mesmo não tem essas tal ferramentas... ninguém nasce a saber tudo e vamos melhorado com o tempo, e com prática de outros que já tem experiência na "matéria" 😁
nunopicado Posted March 20, 2012 at 10:40 PM Report #444843 Posted March 20, 2012 at 10:40 PM O teu professor tem mesmo um problema qualquer... PascalZIM? Se não houvesse outro ainda compreendia. Mas com o excelente freepascal, gratuito e tudo, usar o pascalzim é coisa que não encaixa com quem quer realmente ensinar! Ah, e já agora, o PascalZIM não é um compilador. É um interpretador, com qualidade abaixo (quanto a mim) dos compiladores de pascal originais dos anos 70. 😁 "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
TJFBarreto Posted March 20, 2012 at 10:44 PM Author Report #444844 Posted March 20, 2012 at 10:44 PM Pois, nisso também tens razão, mas estamos no primeiro ano e como tal, e o melhor para agora para aprender o básico é o Pascalzim...
nunopicado Posted March 20, 2012 at 11:13 PM Report #444847 Posted March 20, 2012 at 11:13 PM (...) e o melhor para agora para aprender o básico é o Pascalzim... O mal é mesmo achar isto... Mas ainda ninguém me deu um único motivo que validasse esta ideia. O PZim é além de mais um engano, e um dos motivos de haver tanta gente a pensar que Pascal é uma linguagem limitada. É que ainda não houve professor nenhum que ensinasse em PZim e dissesse: eh pá, vamos aprender neste por este ou aquele motivo, mas isto é fraco como o diabo, e há bem melhor. E não dizem isto porque não teriam como justificar então o porque de usar isto. Nunca é boa política trabalhar, seja no que for, com a ferramenta errada. Nem o trabalho sai bem, nem se aprende a trabalhar como deve ser. "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
thoga31 Posted March 21, 2012 at 03:17 PM Report #444907 Posted March 21, 2012 at 03:17 PM Eu ainda só pôs 4 tópicos de perguntas em relações a códigos, e só o Nuno é que me disse isso de tratar melhor a indentação hoje, estou a ser ensinado com o compilador "Pascalzim" pois o mesmo não tem essas tal ferramentas... ninguém nasce a saber tudo e vamos melhorado com o tempo, e com prática de outros que já tem experiência na "matéria" Desculpa. Isto já são tantos a aparecer aqui sem indentar nada que vos confundo. 🙂 Mas já sabes, começa a indentar bem o teu código. E não utilizes mais o PascalZIM. Mal por mal utiliza o Dev-Pascal, e mesmo bem é utilizares o Free Pascal. Pois, nisso também tens razão, mas estamos no primeiro ano e como tal, e o melhor para agora para aprender o básico é o Pascalzim... De pequenino é que se torce o pepino, já diz o ditado popular. Ou seja, a começar, começa-se bem. Se não habituaste de tal modo ao mau que nunca mais fazes bem. Vara nascida torta nunca se endireita. E só uma cena, o PascalZIM não é o básico, é uma valente porcaria que nem aos calcanhares do Dev-Pascal chega, e é porque o Dev-Pascal já é velho e desactualizado!... Em suma, um conselho de bom amigo: Free Pascal nesse PC e toca a programar lá. Sim? 😉 Quanto ao problema que tinhas no início deste tópico, como estão a evoluir as coisas? Knowledge is free!
TJFBarreto Posted March 21, 2012 at 08:41 PM Author Report #444985 Posted March 21, 2012 at 08:41 PM Quanto ao problema que tinhas no início deste tópico, como estão a evoluir as coisas? Já o terminei, só faltava aquela atribuição à variável do "Dinheiro" em todos os procedimentos, pois era o único erro que me estava a dar.. Obrigado.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now