Search the Community

Showing results for tags 'pascal'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Blogs

  • Projectos
  • Revista PROGRAMAR
  • Blog dos Moderadores
  • Eventos
  • Notícias de Tecnologia
  • Blog do Staff
  • Wiki

Forums

  • Bem-vindos ao Portugal-a-Programar
    • Sugestões, Críticas ou Dúvidas relativas ao P@P
    • Acerca do P@P
    • Apresentações
  • Comunidade a Trabalhar
    • Wiki P@P
    • Apresentação de Projectos de Programação
    • Downloads
  • Revista PROGRAMAR
    • Revista PROGRAMAR
  • Desenvolvimento Geral
    • C
    • C++
    • Java
    • Haskell
    • Pascal
    • Python
    • Bases de Dados
    • Visual Basic Clássico
    • Visual Basic for Applications (VBA)
    • Dispositivos Móveis
    • Outras Linguagens
  • Desenvolvimento Orientado para Web
    • PHP
    • HTML / XHTML
    • CSS
    • Javascript
    • Outras Linguagens de WebDevelopment
    • Desenvolvimento Web
  • Desenvolvimento .NET
    • C#
    • Visual Basic .NET
    • ASP.NET
    • WPF & SilverLight
  • Software e Sistemas Operativos
    • Software de Produtividade
    • Sistemas Operativos
    • SharePoint
    • Apresentação de Software
  • Informática Extra-Programação
    • Interfaces Visuais
    • Computação Gráfica
    • Algoritmia e Lógica
    • Segurança e Redes
    • Hardware
    • Electrónica
    • Automação Industrial
    • Dúvidas e Discussão de Programação
    • Notícias de Tecnologia
  • Outras Áreas
    • Matemática
    • Dúvidas Gerais
    • Discussão Geral
    • Eventos
    • Anúncios de Emprego
    • Tutoriais
    • Snippets / Armazém de Código
    • Arquivo Morto

Categories

  • Revista PROGRAMAR
  • Tutoriais
  • Textos Académicos
  • Exercícios Académicos
    • Exercícios c/ Solução
    • Exercícios s/ Solução
  • Bibliotecas e Aplicações
  • Outros

Found 167 results

  1. Bom dia, boa tarde, boa noite de acordo com a posição em que o planeta se encontra na sua localização! Eu queria saber se alguém sabe como usar a Graph, se souberem, peço pra que me ajudem, é muito ruim ficar programando numa janela de 80x25. Se tiverem algum link de um livro ou algo assim também aceito. Se não souberem, respondam essa pergunta: Tem como aumentar o tamanho da letra do programa? Obrigado por tudo! Vocês do Portugal A Programar são demais! B.H.A.M.F, Brasil, 20/09/2016 14:34 (Horário de Brasília)
  2. procedure Validate; assembler; asm mov eax,ADDRESS call eax end; seu fazer isso em uma dll funfa corretamente,porém se usar isso em um .exe da aparece ''acesso violado''... Usando Written e Creathread como fica em .exe ?
  3. Olá a todos, estou precisando saber todos os tipos de variáveis (todos literalmente como Ansistring e tal) do Pascal para o meu projeto o Lipiinn Program, porém não estou conseguindo achar aqui nas minhas pesquisas, se alguém puder me ajudar, fico muito agradecido, obrigado desde já! BHAMF.
  4. Queria saber como faço para criar pastas em Pascal, alguém aí sabe algo sobre? Estou à espera de respostas. Obrigado desde já
  5. Olá, conheço o P@P a algum tempo, porém não tinha criado minha conta, sempre quis responder algumas pessoas mas também tenho minhas dúvidas, a minha dúvida é a seguinte, estou criando um Software cujo o nome é Lipïïnn Program ©, nele tem uma procedure chamada, janela1, e nesta janela1 certamente abre uma janela (feita em códigos ASCII claro) e nesta janela tem dois readkeys no caso deveria ter só um, mas se eu colocar só um ele confunde tecla com letra, como faço pra resolver isso? Obrigado desde já! procedure janela1; var ATUAL : INTEGER; Construtor_de_janela : integer; tecla : char; begin gotoxy(20,5); for Construtor_de_janela := 1 to 30 do begin gotoxy(Construtor_de_janela + 20,5); write(#219); end; for Construtor_de_janela := 1 to 10 do begin gotoxy(50,Construtor_de_janela + 5); write(#219); end; for Construtor_de_janela := 1 to 30 do begin gotoxy(Construtor_de_janela + 20,15); write(#219); end; for Construtor_de_janela := 1 to 11 do begin gotoxy(20,Construtor_de_janela + 4); write(#219); end; window(21,6, 49,14); textbackground(blue); //29 colunas, 9 linhas clrscr; gotoxy(2,2); write('Janela de pausa'); gotoxy(2,3); write('Escolha uma opcao'); gotoxy(2,4); write('com as teclas de seta'); gotoxy(2,5); WRITE('Nao aperte outra tecla '); gotoxy(2,6); WRITE('A nao ser as de seta e ENTER (bug) '); cursoroff; window(38,13, 46,13); textbackground(blue); write('Desligar'); gotoxy(3,9); window(25,13, 34,13); textbackground(white); textcolor(red); write('Continuar'); tecla := readkey; tecla := readkey; repeat case tecla of #75 : begin //Seta esquerda //#75 // #37 window(25,13, 34,13); textbackground(white); textcolor(red); write('Continuar'); window(38,13, 46,13); textbackground(blue); write('Desligar'); tecla := readkey; tecla := readkey; atual := 1; cursoroff; end; {else gotoxy(2,6); window(21,6, 49,14); write('Incorrect Information'); delay(500); janela1;} end; {if (tecla = #77) then begin} case tecla of #77 : begin //Seta direita //#77 // #39 window(25,13, 34,13); textbackground(blue); textcolor(red); write('Continuar'); window(38,13, 46,13); textbackground(white); write('Desligar'); tecla := readkey; tecla := readkey; atual := 2; cursoroff; end; {else window(21,6, 49,14); gotoxy(2,6); delay(500); write('Incorrect Information'); janela1;} end; until(tecla = #13); case tecla of #13 : begin if (atual = 1) then begin clrscr; window(1,1, 80,1); textbackground(lightcyan); highvideo; clrscr; window(1,1, 80,25); gotoxy(2,2); textcolor(lightblue); textbackground(black); cursoron; piboaritiboyet3; end; if atual = 2 then begin clrscr; halt; end; end; end; end;
  6. Galera, por favor, me ajudem aqui nessa questão O código é de uma mini agenda telefonica certo O código é este. Program Pzim ; const quant = 5; type vnome = array[1..quant] of string[30]; vidade = array[1..quant] of integer; valtura = array[1..quant] of real; vsexo = array[1..quant] of char; var //posicao: integer; opcao: char; nomes: vnome; idades: vidade; alturas: valtura; sexos: vsexo; procedure menu(var op: char); begin clrscr; writeln('menu'); writeln('1 - listar todos'); writeln('2 - cadastrar'); writeln('3 - procurar'); writeln('4 - modificar'); writeln('5 - excluir'); writeln('6 - resetar'); writeln('7 - sair'); writeln('qual a sua opção?'); op:=readkey; end; procedure limpar_ns(var ns: vnome); var cont: integer; begin for cont:= 1 to quant do ns[cont]:='XXX'; end; procedure limpar_is(var is: vidade); var cont: integer; begin for cont:= 1 to quant do is[cont]:=0; end; procedure limpar_as(var as: valtura); var cont: integer; begin for cont:= 1 to quant do as[cont]:=0; end; procedure limpar_ss(var ss: vsexo); var cont: integer; begin for cont:= 1 to quant do ss[cont]:='X'; end; procedure limpar(var ns: vnome; var is: vidade; var as: valtura; var ss: vsexo); begin limpar_ns(ns); limpar_is(is); limpar_as(as); limpar_ss(ss); end; procedure exibir_ns(ns: vnome; c: integer); begin writeln('nome[',c,']=',ns[c]); end; procedure exibir_is(is: vidade; c: integer); begin writeln('idade[',c,']=',is[c]); end; procedure exibir_as(as: valtura; c: integer); begin writeln('altura[',c,']=',as[c]:4:2); end; procedure exibir_ss(ss: vsexo; c: integer); begin writeln('sexo[',c,']=',ss[c]); end; procedure exibir(ns: vnome; is: vidade; as: valtura; ss: vsexo; c: integer); begin exibir_ns(ns,c); exibir_is(is,c); exibir_as(as,c); exibir_ss(ss,c); end; procedure cadastrar_ns(var ns: vnome; p: integer); begin writeln('informe nome[',p,']='); readln(ns[p]); end; procedure cadastrar_is(var is: vidade; p: integer); begin writeln('informe idade[',p,']='); readln(is[p]); end; procedure cadastrar_as(var as: valtura; p: integer); begin writeln('informe altura[',p,']='); readln(as[p]); end; procedure cadastrar_ss(var ss: vsexo; p: integer); begin writeln('informe sexo[',p,']='); readln(ss[p]); end; procedure cadastrar(var ns: vnome; var is: vidade; var as: valtura; var ss: vsexo; var p: integer); begin cadastrar_ns(ns,p); cadastrar_is(is,p); cadastrar_as(as,p); cadastrar_ss(ss,p); //p:= p + 1; end; procedure executar(var op: char; var ns: vnome; var is: vidade; var as: valtura; var ss: vsexo); var posicao, cont, achou, atual: integer; chave: string[30]; begin limpar(ns,is,as,ss); posicao:=1; repeat menu(op); case (op) of '1':begin if (posicao = 1) then begin writeln('agenda vazia!'); readln; end else begin writeln('lista das pessoas'); for cont:=1 to (posicao-1) do begin exibir(ns,is,as,ss,cont); readln; end; end; end; '2':begin if (posicao > quant) then begin writeln('agenda cheia!'); readln; end else begin cadastrar(ns,is,as,ss,posicao); posicao:= posicao + 1; end; end; '3':begin if (posicao = 1) then begin writeln('agenda vazia! não posso procurar...'); readln; end else begin writeln('qual a pessoa a ser procurada:'); readln(chave); achou:=0; atual:=1; repeat if (chave = ns[atual]) then achou:= atual else atual:= atual + 1; until (achou<>0) or (atual = posicao); if (achou = 0) then begin writeln(chave,' não encotrada na agenda!'); readln; end else begin exibir(ns,is,as,ss,achou); readln; end; end; end; '4':begin if (posicao = 1) then begin writeln('agenda vazia! não posso modificar...'); readln; end else begin writeln('qual a pessoa a ser modificada:'); readln(chave); achou:=0; atual:=1; repeat if (chave = ns[atual]) then achou:= atual else atual:= atual + 1; until (achou<>0) or (atual = posicao); if (achou = 0) then begin writeln(chave,' não encotrada na agenda, logo não posso modificar!'); readln; end else begin writeln('dados antigos'); exibir(ns,is,as,ss,achou); readln; cadastrar(ns,is,as,ss,achou); writeln('dados novos'); exibir(ns,is,as,ss,achou); readln; end; end; end; '5':begin if (posicao = 1) then begin writeln('agenda vazia! não posso excluir...'); readln; end else begin writeln('qual a pessoa a ser excluída:'); readln(chave); achou:=0; atual:=1; repeat if (chave = ns[atual]) then achou:= atual else atual:= atual + 1; until (achou<>0) or (atual = posicao); if (achou = 0) then begin writeln(chave,' não encotrada na agenda! não posso excluir...'); readln; end else begin for cont:= (achou + 1) to (posicao - 1) do begin ns[cont-1]:=ns[cont]; as[cont-1]:=as[cont]; is[cont-1]:=is[cont]; ss[cont-1]:=ss[cont]; end; posicao:= posicao - 1; end; end; end; '6':begin //limpar(ns,is,as,ss); posicao:=1; writeln('agenda resetada...!'); readln; end else begin if (op = '7') then begin writeln('bye bye!'); readln; end else begin writeln('opção inválida!'); readln; end; end; end; until (op = '7'); end; Begin //posicao:=1; executar(opcao,nomes,idades,alturas,sexos); End. Só que que esse trecho aqui, se repete várias vezes no código, preciso transforma-lo em função e procedimento, só que não estou conseguindo raciocinar, como farei, isso, por favor alguém sabe me ajudar? O trecho é este. if (posicao = 1) then begin writeln('agenda vazia! não posso excluir...'); readln; end else begin writeln('qual a pessoa a ser excluída:'); readln(chave); achou:=0; atual:=1; repeat if (chave = ns[atual]) then achou:= atual else atual:= atual + 1; until (achou<>0) or (atual = posicao); if (achou = 0) por favor
  7. Olá a todos, recentemente venho enfrentando problemas com contadores e acumuladores, eu começo a entender o conceito usando como base exercícios anteriores, mas de tempo para cá não tem dado certo, venho expôr dois exercícios feitos por mim: 1) Receba K números quaisquer, K representa a quantidade de termos solicitada pelo usuário e cada termo pode ser representado pela variável N. Exiba a quantidade dos números divisíveis por 11 e a média apenas dos números ímpares negativos e múltiplos de 13. Exiba o maior número encontrado divisível por 11. Como eu fiz {Esse exercício está correto} Program ex19 ; var k,n,mult11,mult13,soma13,maior11,cont:integer; Begin Repeat Writeln('Digite a qt de termos'); readln(k); If k<=0 then Writeln('Num invalido'); Until k>0; For cont:=1 to k do Begin Writeln('Digite o ',cont,'o número'); readln(n); If ((N)MOD(11)=0) then Begin mult11:=mult11+1; If mult11=1 then maior11:=n else If(n>maior11) then maior11:=n; end; If ((N)MOD(13)=0) and (n<0) and (((N)MOD(2)<>0)) then Begin soma13:=soma13+n; mult13:=mult13+1; end; end; If (mult13=0) then Writeln('Não há número ímpar negativo divisível por 13') else Writeln('Média dos numeros impares e negativos e multiplos de 13: ' , soma13/mult13); Writeln('Quantidade de números divisíveis por 11: ' , mult11); Writeln('Maior número divisível por 11: ' , maior11); End. Agora estou me deparando com esse exercício: {Este está errado} Receba K números inteiros quaisquer. K representa a quantidade de termos solicitada pelo usuário e cada número pode ser representado pela variável N. Exiba a somatória dos números divisíveis por 5 e a média dos números múltiplos de 7.Mostre também o maior número digitado divisível por 5 e a quantidade de vezes que ele NÃO apareceu. Como fiz: Program ex24 ; var k,n,div5,mult7,maiordiv5,contn,cont,soma7,somat:integer; Begin Repeat Writeln('Digite a qt de termos'); readln(k); If k<=0 then Writeln('Num invalido'); Until k>0; For cont:=1 to k do Begin Writeln('Digite o ',cont,'o número'); readln(n); If ((n)mod(5)=0) then Begin div5:=div5+1; somat:=somat+n; end; If div5=1 then maiordiv5:=n else if n>maiordiv5 then maiordiv5:=n; end; If n<>maiordiv5 then contn:=contn+1; If (n)mod(7)=0 then Begin soma7:=soma7+n; mult7:=mult7+1; end; If (mult7=0) then Writeln('Não há multiplos de 7') else Writeln('Média dos números multiplos de 7: ',soma7/mult7); Writeln('Somatória dos números divisíveis por 5: ',somat); Writeln('Maior número divisível por 5: ',maiordiv5); Writeln('Quantidade de vezes que o maior número divisível por 5 NÃO apareceu: ', contn); End. Utilizando a mesma linha de raciocínio do exercício anterior eu obtive erro(Valores incorretos) em quase todas os acumuladores/contadores, então eu desejo saber porque eu errei e onde estou errando e se existe alguma técnica para não haver erros desse tipo novamente.
  8. Receba a quantidade de idades de K indivíduos. K representa essa quantidade e deve ser digitada pelo usuário. A variável Idade armazena cada uma das K idades digitadas. Calcule e mostre a somatória dessas idades. O que fiz até agora: Program pzim; var num,cont,k,idade,somat:integer; Begin Repeat Writeln('Digite quantos índividuos serão analisados'); readln(num); If num<=0 then Writeln('ERRO! Não existe quantidades de individuos nula ou negativa'); Until num>0; for cont:=1 to num do begin writeln('Digite a ', cont, 'a idade: '); readln(k); idade:=k; somat:=num*(idade)-1; writeln('Somatória das idades',somat); end; End. Minha dúvida é: Como fazer a soma das idades? Lembrando que o usuário deve digitar o numero de pessoas e suas respectivas idades para depois serem somadas.
  9. galera é o seguinte, tenho esse códigozinho ai, que é uma calculadora de áreas, que usa o comando de repetição " repeat " fiquei enrolado, e nao consegui fazer esse mesmo código usando a repetição " while " , e com ' for " voces poderiam me ajudar por favor? agradeço Program qc; var opcao:integer; a1,a2,a3:real; lado:real; base, altura:real; Begin repeat clrscr; writeln('MENU'); writeln('1: PARA CALCULAR A AREA DO QUADRADO'); writeln('2: PARA CALCULAR A AREA DO RETANGULO'); writeln('3: PARA CALCULAR A AREA DO TRIANGULO'); writeln('4: PARA SAIR'); writeln(' QUAL SUA OPCAO ?'); readln (opcao); case (opcao) of 1: begin writeln('VOCE ESCOLHEU A AREA DO QUADRADO'); writeln('POR FAVOR INFORME UM DOS LADOS DO QUADRADO'); readln (lado); writeln ('A ÁREA DO SEU QUADRADO É : ', lado*lado :4:2); end; 2: begin writeln ('VOCE ESCOLHEU CALCULARMOS A ÁREA DO RETANGULO'); writeln ('VAMOS ME AJUDE, INFORME A BASE E A ALTURA DO MESMO'); readln (base,altura); writeln ('A BASE DO SEU RETANGULO É ', base*altura :4:2); end; 3: begin writeln ('VOCEE ESCOLHEU CALCULARMOS A AREA DO TRIANGULO'); writeln ('POR FAVOR INFORME A BASE A ALTURA'); readln (base, altura); writeln ('A AREA DO SEU TRIANGULO É' , ((base*altura) /2):4:2); end else begin if(opcao=4) then begin writeln ('VOCE OPTOU POR SAIR, BYE BYE'); end else begin writeln ('VOCE DIGITOU UMA OPCAO INVÁLIDA'); end; end; end; readln; until (opcao=4); End.
  10. Olá, estou iniciando em pascal e estou encontrando dificuldades, preciso de ajuda nesse exercício: Receba três números onde o primeiro deve ser maior do que zero e menor que 20. O segundo deve ser negativo e o terceiro representa um número qualquer. Calcule a soma de cada número elevado ao quadrado. Se a soma resultar um valor inferior a 1000 solicite novos dados. O que eu fiz: Program EX2 ; var A,B,C,D:real; Begin Repeat Writeln('Digite o 1º numero'); readln(A); If A>0 then begin end; If a<20 then begin end else repeat Writeln('Digite o 2º numero'); readln(B); If B<0 then begin end else repeat Writeln('Digite o 3º numero'); readln(C); D:=A*A+B*B+C*C; If D<1000 then repeat Writeln('Digite os dados novamente'); End. O programa não roda, e aparece um aviso de erro sintático "END não esperado" , não sei mais o que fazer.
  11. Olá comunidade estou a realizar um projecto final sobre ficheiros, para a disciplina LP. Eu resolvi, realizar uma simulação de um programa de administração de um aeroporto, onde ele simula, o registo de clientes,voos e fornecedores e ainda vou adicionar sistema de compra e manutenção de aviões e bilhetes, mas ainda está muito incompleto. Eu uso para colocar o código o Gedit, e para compilar o FPC 2.6.4, no ubuntu 15.10. Program Pzim ; uses Crt; const Caminhocliente='/home/fmc/Documentos/Escola/LP/cliente.dat'; CaminhoFornecedore='/home/fmc/Documentos/Escola/LP/fornecedores.dat'; Caminhovoo='/home/fmc/Documentos/Escola/LP/voo.dat'; type dad_data=array[1..5] of integer; // Dia/mes/Ano dad_morada=record localidade:string[30]; rua:string[30]; cp:String[20]; distrito:string[30]; end; dad_cliente=record id:integer; Nome:string[50]; nascimento:dad_data; mora:dad_morada; num_civil:integer; end; dad_fornecedor=record id:integer; Nome:string[50]; empresa:string[50]; morada:dad_morada; Telemovel:integer; end; dad_voos=record id:integer; aviao:string; destino:string; partida:dad_data; num_lugares:integer; LugaresDisponiveis:integer; preco:integer; end; fc=file of dad_cliente; FF=file of dad_fornecedor; FV=file of dad_voos; var ficheiros_Clientes:fc; ficheiros_fornecedor:FF; ficheiros_voos:FV; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////-> Funções Existe Ficheiros function existe_fic_clientes:boolean; Begin assign(ficheiros_Clientes,Caminhocliente); {$I-} //Erros desativados reset(ficheiros_Clientes); close(ficheiros_Clientes); {$I+} //Erros Activados existe_fic_clientes:=(ioresult=0); end; function existe_fic_fornecedor:boolean; Begin assign(ficheiros_fornecedor,CaminhoFornecedore); {$I-} reset(ficheiros_fornecedor); close(ficheiros_fornecedor); {$I+} existe_fic_fornecedor:=(ioresult=0); end; function existe_fic_voo:boolean; Begin assign(ficheiros_voos,Caminhovoo); {$I-} reset(ficheiros_voos); close(ficheiros_voos); {$I+} existe_fic_voo:=(ioresult=0); end; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////-> Clientes procedure Digitar_Cliente(var entrada:dad_cliente ); Begin clrscr; writeln('+-+-+-+-+-+-+-+-+ |Registo de um novo cliente| +-+-+-+-+-+-+-+-+ '); writeln; write('Introduza o seu nome: '); readln(entrada.Nome); writeln; write('Numero Civil: '); readln(entrada.num_civil); writeln; write('Qual o dia que voce nasceu: '); readln(entrada.nascimento[1]); writeln; write('Qual o Mês: '); readln(entrada.nascimento[2]); writeln; write('Qual o ano: '); readln(entrada.nascimento[3]); writeln; write('Localidade: '); readln(entrada.mora.localidade); writeln; write('Rua: '); readln(entrada.mora.rua); writeln; write('Codigo de postal: '); readln(entrada.mora.cp); writeln; write('Distrito: '); readln(entrada.mora.distrito); writeln; end; procedure Monstrar_cliente(var entrada:dad_cliente ); Begin clrscr; writeln('+-+-+-+-+-+-+-+-+ |Cliente actual| +-+-+-+-+-+-+-+-+ '); writeln; writeln('Id: ', entrada.id); writeln; writeln('Nome :',entrada.nome); writeln; writeln('Numero Civil :',entrada.num_civil); writeln; writeln('Data de nascimento: ', entrada.nascimento[1],' / ',entrada.nascimento[2],' / ',entrada.nascimento[3]); write('Localidade: ', entrada.mora.localidade); writeln; write('Rua: ',entrada.mora.rua); writeln; writeln('Codigo de postal: ',entrada.mora.cp); writeln; writeln('Distrito: ',entrada.mora.distrito); writeln; readkey; end; procedure esc_clientes; var auxiliar:dad_cliente; Begin assign(ficheiros_Clientes,Caminhocliente); if existe_fic_clientes then reset(ficheiros_Clientes) else rewrite(ficheiros_Clientes); Digitar_Cliente(auxiliar); seek(ficheiros_Clientes,filesize(ficheiros_Clientes)); //Vai para a ultimo posição do ficheiro auxiliar.id:=filepos(ficheiros_Clientes); write(ficheiros_Clientes,auxiliar); //Escreve o registo no ficheiro close(ficheiros_Clientes); end; procedure l_clientes; var auxiliar:dad_cliente; Begin assign(ficheiros_Clientes,Caminhocliente); reset(ficheiros_Clientes); while not (eof(ficheiros_Clientes)) do //Se não chegar ao fim do ficheiro Begin read(ficheiros_Clientes,auxiliar); //Le o que está no ficheiro Monstrar_cliente(auxiliar); end; close(ficheiros_Clientes); end; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////-> Fornecedores procedure Digitar_Fornecedor(var entrada:dad_fornecedor); Begin clrscr; writeln('+-+-+-+-+-+-+-+-+ |Registo de um novo fornecedor| +-+-+-+-+-+-+-+-+ '); writeln; write('Nome do fornecedor: '); readln(entrada.nome); writeln; write('Numero de Telefone/telemovel: '); readln(entrada.Telemovel); writeln; write('Empresa: '); readln(entrada.empresa); writeln; write('Localidade: '); readln(entrada.morada.localidade); writeln; write('Rua: '); readln(entrada.morada.rua); writeln; write('Codigo de postal: '); readln(entrada.morada.cp); writeln; writeln('Distrito: '); readln(entrada.morada.distrito); writeln; readkey; end; procedure Monstrar_Fornecedor(var entrada:dad_fornecedor); Begin writeln('+-+-+-+-+-+-+-+-+ |Fornecedor actual| +-+-+-+-+-+-+-+-+ '); writeln; writeln('Id: ', entrada.id); writeln; writeln('Nome do fornecedor: ',entrada.nome); writeln; writeln('Telefone/telemovel: ',entrada.Telemovel); writeln; writeln('Empresa: ',entrada.empresa); writeln; writeln('Localidade: ', entrada.morada.localidade); writeln; writeln('Rua: ',entrada.morada.rua); writeln; writeln('Codigo de postal: ',entrada.morada.cp); writeln; writeln('Distrito: ',entrada.morada.distrito); readkey; end; procedure esc_fornecedor; var auxiliar:dad_fornecedor; Begin assign(ficheiros_fornecedor,CaminhoFornecedore); if existe_fic_fornecedor then reset(ficheiros_fornecedor) else rewrite(ficheiros_fornecedor); Digitar_Fornecedor(auxiliar); seek(ficheiros_fornecedor,filesize(ficheiros_fornecedor)); //Vai para a ultimo posição do ficheiro auxiliar.id:=filepos(ficheiros_fornecedor); write(ficheiros_fornecedor,auxiliar); //Escreve o registo no ficheiro close(ficheiros_fornecedor); end; procedure l_fornecedor; var auxiliar:dad_fornecedor; Begin assign(ficheiros_fornecedor,CaminhoFornecedore); reset(ficheiros_fornecedor); while not (eof(ficheiros_fornecedor)) do //Se não chegar ao fim do ficheiro Begin read(ficheiros_fornecedor,auxiliar); //Le o que está no ficheiro Monstrar_Fornecedor(auxiliar); end; close(ficheiros_fornecedor); end; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////-> Voos procedure Digitar_voo(var entrada:dad_voos); Begin clrscr; writeln('+-+-+-+-+-+-+-+-+ |Registo de um novo voo| +-+-+-+-+-+-+-+-+ '); writeln; write('Avião: '); readln(entrada.aviao); writeln; write('Destino: '); readln(entrada.destino); writeln; writeln('Partida!'); write('Dia: '); readln(entrada.partida[1]); write('Mes: '); readln(entrada.partida[2]); write('Ano: '); readln(entrada.partida[3]); write('Hora: '); readln(entrada.partida[4]); write('Minutos: '); readln(entrada.partida[5]); writeln; write('Numero de Lugares: '); readln(entrada.num_lugares); writeln; write('Preço de cada bilhete: '); readln(entrada.preco); end; procedure Monstrar_voo(var entrada:dad_voos); Begin clrscr; writeln('+-+-+-+-+-+-+-+-+ |voo actual| +-+-+-+-+-+-+-+-+ '); writeln; writeln('Id: ',entrada.id); writeln; writeln('Avião: ',entrada.aviao); writeln; writeln('Destino: ',entrada.destino); writeln; writeln('Partida!'); writeln('Dia: ',entrada.partida[1]); writeln('Mes: ',entrada.partida[2]); writeln('Ano: ',entrada.partida[3]); writeln('Hora: ',entrada.partida[4]); writeln('Minutos: ',entrada.partida[5]); writeln; writeln('Numero de Lugares: ',entrada.num_lugares); writeln; writeln('Preço de cada bilhete: ',entrada.preco); readkey; end; procedure esc_voo; var auxiliar:dad_voos; Begin assign(ficheiros_voos,Caminhovoo); if existe_fic_voo then reset(ficheiros_voos) else rewrite(ficheiros_voos); Digitar_voo(auxiliar); seek(ficheiros_voos,filesize(ficheiros_voos)); //Vai para a ultimo posição do ficheiro auxiliar.id:=filepos(ficheiros_voos); write(ficheiros_voos,auxiliar); //Escreve o registo no ficheiro close(ficheiros_voos); end; procedure l_voo; var auxiliar:dad_voos; Begin assign(ficheiros_voos,Caminhovoo); reset(ficheiros_voos); while not (eof(ficheiros_voos)) do //Se não chegar ao fim do ficheiro Begin read(ficheiros_voos,auxiliar); //Le o que está no ficheiro Monstrar_voo(auxiliar); end; close(ficheiros_voos); end; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////-> Pesquisar procedure Pesquisar_por_empresa_fornecedor; var entrada:string[50]; sinal:boolean; aux:dad_fornecedor; opcao:integer; Begin assign(ficheiros_fornecedor,CaminhoFornecedore); reset(ficheiros_fornecedor); repeat sinal:=false; writeln('Numero Civil: '); readln(entrada); while not(eof(ficheiros_fornecedor)) do Begin read(ficheiros_fornecedor,aux); if (entrada = aux.empresa ) then Begin Monstrar_Fornecedor(aux); readkey; sinal:=true; end; end; if (sinal=false)then Begin writeln('Nenhum fornecedor com esse numero civil, o que deseja realizar?'); writeln('1-> Registar um novo fornecedor.'); writeln('2-> Inserir novamente o numero civil'); writeln('3-> Voltar para o menu'); write('A sua opção: '); readln(opcao); if (opcao=1) then esc_fornecedor; end; until((opcao = 3) or (sinal = true)); close(ficheiros_fornecedor); end; procedure Pesquisar_por_Num_civil_cliente; var entrada:integer; auxiliar:boolean; aux:dad_cliente; op:integer; Begin assign(ficheiros_Clientes,Caminhocliente); reset(ficheiros_Clientes); repeat auxiliar:=false; seek(ficheiros_Clientes,0); entrada:=0; writeln('Numero Civil: '); readln(entrada); while not(eof(ficheiros_Clientes)) do Begin read(ficheiros_Clientes,aux); if (entrada = aux.num_civil ) then Begin Monstrar_cliente(aux); readkey; auxiliar:=true; end; end; if (auxiliar=false)then Begin writeln('Nenhum cliente com esse numero civil, o que deseja realizar?'); writeln('1-> Registar um novo cliente.'); writeln('2-> Inserir novamente o numero civil'); writeln('3-> Voltar para o menu'); write('A sua opção: '); readln(op); if (op=1) then esc_clientes; end; until((op = 3) or (auxiliar = true)); close(ficheiros_Clientes); end; procedure Pesquisar_por_Destino_voo; var entrada:string[50]; aux2:boolean; aux:dad_voos; op:integer; Begin assign(ficheiros_voos,Caminhovoo); reset(ficheiros_voos); repeat aux2:=false; writeln('Destino: '); readln(entrada); while not(eof(ficheiros_voos)) do Begin read(ficheiros_voos,aux); if (entrada = aux.destino ) then Begin Monstrar_voo(aux); readkey; aux2:=true; end; end; if (aux2=false)then Begin writeln('Nenhum voo com esse destino, o que deseja realizar?'); writeln('1-> Registar um novo voo.'); writeln('2-> Inserir novamente o destino'); writeln('3-> Voltar para o menu'); write('A sua opção: '); readln(op); if (op=1) then esc_voo; end; until((op = 3) or (aux2 = true)); close(ficheiros_Clientes); end; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////-> Menus procedure MENU; var opcao:integer; Begin repeat clrscr; writeln('+-+-+-+-+-+-+-+-+ |Menu Principal| +-+-+-+-+-+-+-+-+ '); writeln; writeln('(1) //////////////////-> Registar um cliente '); if existe_fic_clientes then Begin writeln('(2) //////////////////-> Escrever todos os clientes '); writeln('(3) //////////////////-> Pesquisar um cliente'); end; writeln('.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,'); writeln('(4) //////////////////-> Registar um fornecedor '); if existe_fic_fornecedor then Begin writeln('(5) //////////////////-> Escrever todos os fornecedor '); writeln('(6) //////////////////-> Pesquisar um fornecedor'); end; writeln('.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,'); writeln('(7) //////////////////-> Registar um Voo '); if existe_fic_voo then Begin writeln('(8) //////////////////-> Escrever todos os voos '); writeln('(9) //////////////////-> Pesquisar um voo'); end; writeln('.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,'); writeln('(10) //////////////////-> Sair'); writeln('Escreve a tua opção, respetivamente ao numero'); writeln('A tua opção: '); readln(opcao); case opcao of 1: Begin clrscr; esc_clientes; writeln; writeln; end; 2: Begin clrscr; if existe_fic_clientes then l_clientes; end; 3: Begin clrscr; if existe_fic_clientes then Pesquisar_por_Num_civil_cliente; end; 4: Begin clrscr; esc_fornecedor; end; 5: Begin clrscr; if existe_fic_fornecedor then l_fornecedor; end; 6: Begin clrscr; if existe_fic_fornecedor then Pesquisar_por_empresa_fornecedor; end; 7: Begin clrscr; esc_voo; end; 8: Begin clrscr; if existe_fic_voo then l_voo; end; 9: Begin clrscr; if existe_fic_voo then Pesquisar_por_Destino_voo; end; end; until (opcao = 10); writeln('Saiu com sucesso no programa, obrigado por utiiza-lo!'); readkey; clrscr; end; Begin clrscr; MENU; end. O problema é o seguinte, sempre que vou pesquisar sobre um cliente, fornecedor ou voo, e que ele não encontro nenhum resultado, ele dá para mim 3 opções, e sempre que escolho para criar mais um, ele pede para inserir e depois grava no ficheiro e depois vai pedir outra vez o valor a pesquisar (fiz isso para um sistema de compras, que ainda não fiz ), coloco e depois erro. O estúpido é que só acontece ás vezes! Erro(): Runtime error 103 at $00000000004027DD $00000000004027DD $0000000000402CF3 $0000000000402D5B $0000000000400180 Já agora como coloco as cores de programação no forum?
  12. Olá amigos. Cá estou eu outra vez... Desta vez preciso de uma pequena ajuda. Quero me divertir com o Pascal e lembrei-me de fazer uma espécie de Loading, mas não estou a conseguir xD O objetivo era carregar até aos 100% mas ter uma barrinha abaixo a acrescentar umas barrinhas. O código está assim.. letra:='V'; for contaux:=1 to 100 do begin gotoxy (33,7); write ('Carregando ',contaux,'%'); gotoxy (33,9); write (letra); delay (35); end; Já tive separado porque supostamente eu não quero 100 barrinhas mas sim umas 30/40/50
  13. ola, Eu estou a tentar fazer um pequeno jogo no qual eu clico nas setas e um caracter move-se. No entanto, isto está dificil e há qualquer coisa de errado. O meu 1º objetivo é fazer mover o personagem. Podem dar uma olhadela pelo programa e ver o que está errado?? Daria mesmo muito jeito. O que acontece, independentemente das teclas em que eu clico é isto: (não consigo colar um print screen do meu ecra aqui. Alguém me ajuda??) Para quem não quiser analisar as duas primeiras procedures: 1 - Na primeira procedure escreve-se as coordenadas do texto, escrevemos o texto que queremos e indicamos se queremos Writeln(True) ou Write(False) através de uma variável boolean. 2 - Na segunda procedure ele desenha simplesmente o caracter a ser movido nas coordenadas indicadas pelo programador. P.S.: Não usei clrscr pq apaga a tela toda e eu não quero. Só quero apagar a posição anterior do boneco (por isso usei o [ESPAÇO]) Aqui vai o codigo. Program Jogo; var Jogador:Record X,Y:integer; end; ch:char; Procedure Escrever(Escreve_x,Escreve_y:integer; texto:string; novaln: Boolean); Begin If novaln=True then Begin Gotoxy(Escreve_x,Escreve_y); Writeln(texto); End else Begin Gotoxy(Escreve_x,Escreve_y); Write(texto); End; End; Procedure Desenha_jogador(Desenha_Jogador_X,Desenha_Jogador_Y:integer); Begin Gotoxy(Desenha_Jogador_X,Desenha_Jogador_Y); Writeln(#178); End; Procedure Movimenta_personagem; var Jogador:Record X,Y:integer; end; ch:char; Begin repeat ch:=readkey; Case ch of #0:begin ch:=readkey; Case ch of #75:begin //left Escrever(Jogador.X,Jogador.Y,' ',False); Jogador.X:=Jogador.X-1; Desenha_Jogador(Jogador.X,Jogador.Y); end; #77:begin //right Escrever(Jogador.X,Jogador.Y,' ',False); Jogador.X:=Jogador.X+1; Desenha_Jogador(Jogador.X,Jogador.Y); end; #80:begin //up Escrever(Jogador.X,Jogador.Y,' ',False); Jogador.Y:=Jogador.Y+1; Desenha_Jogador(Jogador.X,Jogador.Y); end; #72:begin //down Escrever(Jogador.X,Jogador.Y,' ',False); Jogador.Y:=Jogador.Y-1; Desenha_Jogador(Jogador.X,Jogador.Y); end; #27:Exit; end; end; end; until ch=#27; End; BEGIN Jogador.X:=40; Jogador.Y:=12; Desenha_jogador(Jogador.X,Jogador.Y); Movimenta_personagem; END. [/Code]
  14. Como não quero que vos falte nada, deixo-vos aqui uma mui elegante árvore de Natal1... uma verdadeira obra prima Votos de um Feliz Natal e um Óptimo Ano Novo 2016 para todos vós e para os vossos 1 Alguns antivírus poderão acusar que o ficheiro é um vírus. No entanto, podem conferir no VirusTotal que eu não quero amaldiçoar os vossos computadores. Vejam na Wiki o código desta animação.
  15. Olá a todos. Preciso de ajuda. Estou com problemas em incluir a unit graph na chamada do compilador fpc pela linha de comando do linux. A página man diz que o parâmetro para incluir uma unit é -Fuxxx, mas mesmo assim parece não funcionar: fpc -Fu"/usr/lib/fpc/2.6.4/units/x86_64-linux" ./teste.pas O retorno é o seguinte:
  16. O tutorial está disponível em PDF: http://www.portugal-a-programar.pt/files/file/6-tutorial-de-pascal/ Tutorial disponível na Wiki. O presente tópico está descontinuado! Introdução ao Pascal - Parte 1 (2ª parte) Índice de Partes 1ª Parte - Preliminares. Programação básica. 2ª parte - Componente Prática para Aplicação de Conhecimentos. 3ª parte - Funções e Procedimentos padrão. Conversão. Personalização gráfica. 4ª parte - Registos. Ficheiros de texto simples. Aleatoriedade. 5ª parte - Conjuntos. Estruturação de um programa em Pascal. Data e Hora do Sistema. 6ª parte - Recursividade. Variáveis de Texto Simples. Estrutura de decisão. Lista padrão do Pascal. Objectivos do Post O presente post direcciona-se essencialmente a principiantes em Pascal. Tem por objectivo divulgar o Pascal como uma linguagem com grandes potencialidades para a aprendizagem de Programação, pois a sua linguagem aproxima-se deveras ao inglês. Pode-se dizer que quem sabe inglês sabe Pascal, depois é só juntar conhecimentos em Lógica e da estrutura desta linguagem e voilá! Espero que apreciem este post. Apesar de a maioria aqui saber coisas sobre Pascal e saber as bases, já vi que há quem não saiba nada, e há até mesmo novatos em programação que não sabem por onde começar. Eis um post para os iniciados poderem ponderar sobre esta linguagem. Enjoy it! Índice Breve história, nível da linguagem e compiladores Variáveis e tipos de dados Operações e operadores Igualdade, Diferença e Negação Soma, subtracção, multiplicação e divisão Gravar um resultado numa variável Valor absoluto e truncado, logaritmo, seno, co-seno e tangente, número ao quadrado e raiz quadrada Declarações e noções sobre Pascal Declarações iniciais e de variáveis e enunciações básicas Gravar valores num array Escrita de textos e leitura de dados 5. Condições e Ciclos Condição If… Then… Else… Ciclo Repeat… Until… Ciclo While… Do… Ciclo For… to/downto… do… Condição Case of… Else… Procedimentos e funções Procedimentos Funções Arredondamentos 1. Breve história, nível da linguagem e compiladores Após a criação do Assembly como primeira linguagem de programação que não exigia que o programador escrevesse os seus programas directamente em código binário, Niklaus Wirth criou, em 1971, a primeira linguagem de programação estruturada à qual, em homenagem ao grande matemático Blaise Pascal, deu o nome de Pascal. Niklaus Wirth preocupou-se em aproximar a linguagem de programação da linguagem do ser humano, em particular, claro está, o inglês. Depois do seu sucesso com o lançamento do Pascal, hoje em dia discute-se se esta é uma liguagem de baixo nível, médio nível ou alto nível. Se considerarmos que estas denominações foram criadas baseadas na proximidade da linguagem de programação à linguagem humana, constatamos que o Pascal é de alto nível. Contudo, actualmente confunde-se estas designações com as potencialidades que a linguagem oferece, e, devido a isto, muitos dizem que Pascal é de baixo nível. Ora, um dos compiladores mais antigos e dos mais famosos do mundo é o Turbo Pascal. Contudo, mais compiladores e IDEs têm saído, muitos na tentativa de criar um compilador/IDE com um ambiente gráfico muito mais agradável que o Turbo Pascal, como é o caso do Dev-Pascal (IDE que utiliza o GNU Pascal ou o Free Pascal como compilador subjacente). O compilador mais utilizado é o primeiro referido, havendo um compilador baseado neste e também muito utilizado, que é o Free Pascal. Qualquer um destes IDEs/compiladores é muito bom, apesar de muitas divergências quanto a este tema. Pessoalmente, eu já experimentei estes três, e todos estiveram ao nível das minhas expectativas, todos funcionaram, e, apesar das vantagens e desvantagens de uns e outros, o que interessa é que todos fazem excelentes compilações e criam ficheiros compatíveis entre si. Uma vantagem, por exemplo, do Dev-Pascal é o facto de podermos utilizar operadores da linguagem C, tais como *=, +=, etc, desde que tal opção esteja activada nas opções de compilação. Escolhido um IDE/compilador, e partindo do pressuposto que sabem as bases sobre Lógica e Algoritmos, passamos então a referir os tipos de variáveis com que mais se trabalha, os principais operadores e afins, condições e ciclos, bem como as principais declarações do pascal, os procedimentos e as funções. 2. Variáveis e tipos de dados Os principais tipos de dados são os seguintes: Integer – número inteiro Real – número real String – texto Char – caracter Word – número inteiro mais pequeno Longint – número inteiro mais longo Array – matriz de valores, de 1, 2 ou mais dimensões Boolean – booleano: verdadeiro ou falso Text – ficheiro de texto simples Nenhuma variável poderá ter o nome de um destes tipos de dados, ou seja, por exemplo, nunca uma variável de número inteiro poderá ser chamada de Array, pois esta é uma palavra reservada do Pascal. 3. Operações e operadores 3.1. Igualdade, Diferença e Negação A igualdade e a diferença são úteis essencialmente em condições. A resposta que estes operadores devolvem ao programa é do tipo booleana: verdadeiro ou falso. Por exemplo, no caso de 2 = 2 será devolvido True (verdadeiro), pois, de facto, 2 é igual (=) a 2. Já no caso de 2 <> 2 será devolvido False (falso), pois 2 não é diferente de 2. Já no caso de ser escrito NOT (2 <> 2), será devolvido que é verdade, pois, de facto, 2 não é diferente de 2. = – igual a <> – diferente de not – não 3.2. Soma, subtracção, multiplicação e divisão Se declararmos as variáveis A e B como números inteiros (Integer), então estas operações serão dadas segundo a seguinte lista: Soma: A+B Subtracção: A-B Multiplicação: A*B Divisão: A/B Contudo, no caso da divisão, o Pascal tem dois operadores que devolvem um o resultado da divisão como um número inteiro e outro o primeiro resto da divisão: Resultado inteiro: A div B Primeiro resto: A mod B 3.3. Gravar um resultado numa variável Claro que estas operações podem ser gravadas numa variável para depois ser utilizada noutros processos e cálculos. Em Pascal, o comando (operador) que dá ordem para gravar um resultado numa variável é :=. Este processo é denominado de atribuição. Por exemplo, se quisermos somar duas variáveis inteiras, A e B, e gravá-las numa variável inteira chamada RESULTADO, será escrito RESULTADO := A+B. As variáveis array têm uma forma diferente de serem gravadas, que será visto mais à frente. 3.4. Valor absoluto e truncado, logaritmo, seno, co-seno e tangente, número ao quadrado e raiz quadrada Continuando com a variável A do tipo Integer: Valor absoluto: abs(A) Valor truncado: trunc(A) Logaritmo neperiano (de base e): ln(A) Seno (ângulo em radianos, só): sin(A) Co-seno (ângulo em radianos, só): cos(A) Número ao quadrado: sqr(A) Raiz quadrada: sqrt(A) Ora, pela fórmula da tangente, esta á calculada por sin(A)/cos(A). é claro que, se o co-seno valer zero então o programa dará erro e irá abaixo. Mais à frente, nas condições, veremos como transpor esta situação. 4. Declarações e noções sobre Pascal 4.1. Declarações iniciais e de variáveis e enunciações básicas Um programa em Pascal tem de se iniciar com as seguintes declarações: Nome do programa Bibliotecas a utilizar Variáveis, tipos e constantes O nome do programa é enunciado com a declaração program, que deverá ter o mesmo nome do ficheiro que contém o código-fonte, tirando a extensão do ficheiro (*.pas, *.pp ou outra). As bibliotecas são conjuntos de operações e funções que, sem estas estarem enunciadas, não serão reconhecidas pelo compilador. Por exemplo, o comando gettime, que obtém a hora do computador, só funciona com a biblioteca dos. As bibliotecas a utilizar são declaradas com uses. A biblioteca mais utilizada e que contém as funções básicas é a biblioteca crt. Por fim, as variáveis são declaradas pela palavra reservada var. Contudo, para além destas, existem os Tipos de Variável e as Constantes. As constantes são valores que nunca são alterados ao longo do programa. Podem ser de qualquer tipo, sendo o mais comum número real, como por exemplo o valor de pi. As constantes são enunciadas com const. Contudo, se um conjunto de variáveis for todo do mesmo tipo, pode-se criar um tipo de variável com um nome dado por nós, para além dos enunciados anteriormente. Os novos tipos criados pelo programador são declarados por type. Por exemplo: program exemplo; uses crt; type lista = array[1..10] of integer; var avaliacoes:lista; n:string; const pi=3.14; Como pode ser visto por este exemplo, uma instrução é sempre sucedida de ponto e vírgula, excepto um caso, que será abordado mais à frente, que é com a condição else. Para além disso, um tipo de variável é definido por nome_do_tipo = tipo_de_dado. Neste caso, foi declarado que lista é do tipo array de 1 dimensão, constituído por dez elementos, que começa no elemento nº 1 e acaba no elemento nº 10, e este array é feito de variáveis integer. As constantes também são enunciadas como uma igualdade. Sempre que no programa for escrito num comando pi, o programa irá assumir o valor 3.14. Caso se tente gravar um resultado qualquer dentro de pi, o compilador dará erro na compilação. Ora, as variáveis são declaradas segundo a estrutura var nome_variavel : tipo_variavel;. Neste caso, foi enunciado que a variável n é do tipo String. Os arrays, como matrizes de variáveis, têm de ser declaradas quanto à sua dimensão e ao tipo de variáveis que comporta: var nome : array [dimensão] of tipo_variavel;. A dimensão pode ser uni ou multidimensionais, ou seja, uma simples lista ou uma espécie de tabela de valores. Por exemplo: var list_numeros : array [0..5] of real; tabela : array [0..5,0..3] of real; A variável list_numeros pode ser apresentada da seguinte forma: 0 1 2 3 4 5 Já a variável tabela pode ser apresentada graficamente desta forma: 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 4,0 4,1 4,2 4,3 5,0 5,1 5,2 5,3 Por fim, para o programa ser inicializado e finalizado: program exemplo; // declarações iniciais uses crt; var A:integer; begin // INÍCIO // programa principal end. // FIM 4.2. Gravar valores num array Continuando com as variáveis list_numero e tabela, vamos gravar um valor dentro de cada um destes arrays. Na list_numero, vamos gravar um valor na localização 2: list_numero[2] := -4.5 Assim, considerando que os restantes elementos do array ainda não foram alterados, o array list_numero terá o seginte aspecto gráfico (quando uma variável é declarada, e esta é do tipo numérico, o seu valor inicial é, por defeito, 0, zero): 0 0 -4.5 0 0 0 Já para gravar este valor em tabela na posição 3,1: tabela[3,1] := -4.5 O aspecto final do array será: 0 0 0 0 0 0 0 0 0 0 0 0 0 -4.5 0 0 0 0 0 0 0 0 0 0 4.3. Escrita de textos e leitura de dados Ora, o programa pode escrever textos e receber dados, como é óbvio. Para escrever um texto e fazer parágrafo: writeln('Texto'); Contudo, se quisermos escrever um texto e deixar o cursor a piscar à frente deste, escrevemos: write('Texto '); Para ler dados: readln(variável); Ora, a variável lida tem de coincidir com o seu tipo. Por exemplo, se a variável for a A, do tipo Integer, faremos: readln(A); Ora, no caso de introduzirmos um número real ou um texto em vez de um número inteiro, o programa irá abaixo. Por isso há que avisar o utilizador desse facto: write('Introduza um numero inteiro: '); readln(A); 5. Condições e Ciclos As condições permitem analisar resultados e fazer decisão automática no decorrer do programa. Já os ciclos permitem realizar várias vezes os mesmos comandos e cálculos até uma condição estiver satisfeita. 5.1. Condição if… then… else… Esta condição dá uma ordem ao programa do género Se… Então… Senão…: if (condição) then begin (comandos1) end else begin (comandos2) end; Se a condição for verdadeira, então são executados os comandos1, senão são executados os comandos2. Por exemplo, se a variável A, do tipo Real, for positiva ou nula, mostra-se o texto “numero positivo ou nulo”, caso contrário mostra-se o texto “numero negativo”: write('Introduza um numero real: '); readln(A); if (A>=0) then begin writeln('Numero positivo ou nulo'); end else begin writeln('Numero negativo'); end; 5.2. Ciclo repeat… until… Este ciclo obriga o programa a executar a mesma série de comandos até que a condição imposta seja satisfeita. Por exemplo, se quisermos que o utilizador introduza um número inteiro positivo e não nulo: repeat readln(A); until (A>0); 5.3. Ciclo while… do… Este ciclo faz o mesmo que o Repeat… Until…, contudo fá-lo com uma lógica contrária. Enquanto o ciclo anterior dizia Repetir até que a condição seja verdadeira, este ciclo diz Repetir enquanto a condição for verdadeira, e só parar quando for falsa. o mesmo exemplo anterior, mas aplicando este ciclo: while (A<=0) do begin readln(A); end; De forma a ser mais intuitivo quando se lê o código, pode-se escrever: while NOT (A>0) do begin readln(A); end; 5.4. Ciclo for… to/downto… do… Este é um ciclo que é muito útil, por exemplo, para escrever o conteúdo de um array. Voltando ao array anteriormente descrito, tabela, após o programa ter colocado valores dentro deste, vamos escrever o seu conteúdo no ecrã: program exemplo; uses crt; var tabela:array[0..5,0..3] of real; i,j:integer; begin // commandos anteriores, quaisqueres, que gravaram valores no array for i:=0 to 5 do begin for j:=0 to 3 do begin write(tabela[i,j]); end; writeln; end; end. Ora, é incrementado à variável i o valor 1 após o conjunto de comandos ter sido realizado, assim como à variável j. O conjunto de comandos que está dentro do primeiro ciclo for só termina quando i assumir o valor 3. Assim acontece com o segundo ciclo: só termina quando j valer 5. Contudo, poder-se-á escrever a ordem da tabela ao contrário. Em vez de começarmos pelo valor [0,0] e terminarmos no valor [5,3], começamos em [5,3] e acabamos em [0,0]. Em vez de escrevermos, no ciclo, to, escrevemos downto, que significa que se incrementa o valor -1 à variável em jogo no ciclo (a variável diminui em uma unidade): program exemplo; uses crt; var tabela:array[0..5,0..3] of real; i,j:integer; begin // commandos anteriores, quaisqueres, que gravaram valores no array for i:=5 downto 0 do begin for j:=3 downto 0 do begin write(tabela[i,j]); end; writeln; end; readln; // impede que o programa feche logo com o END final, esperando que seja premido ENTER end. Outro exemplo de utilização 5.5. Condição Case of… else Esta condição pode poupar a utilização excessiva de condições [t]if[/tt]. Este comando diz-nos Caso a variável assuma este valor, então…. Ora, se quisermos classificar uma nota de 0 a 20 em termos qualitativos, teremos, por exemplo, o seguinte: program avaliacoes; uses crt; var nota:integer; begin write('Introduza uma nota, de 0 a 20: '); readln(nota); case nota of 0..9:writeln('Insuficiente'); 10..14:writeln('Suficiente'); 15..17:writeln('Bom'); 18..20:writeln('Excelente'); end else begin if (nota<0) then writeln('ERRO! Nota nao pode ser negativa!'); if (nota>20) then writeln('ERRO! Nota nao pode ser maior que 20!'); end; readln; end. 6. Procedimentos e funções 6.1. Procedimentos Dentro de um programa pode existir um subprograma. Estes subprogramas são designados, em Pascal, por Procedimentos, e são declarados antes do bloco principal do programa pela expressão reservada procedure. Por exemplo, podemos criar um procedimento para calcular a raiz quadrada de um número, sem que tal seja feito no bloco principal: program raiz; uses crt; var a,resultado:real; procedure calc_raiz; begin resultado:=SQR(a); end; begin write('Introduza valor A: '); readln(a); calc_raiz; writeln('A raiz quadrada de A e: ',resultado); readln; end. 6.2. Funções O mesmo pode ser feito através de uma função. Podemos criar uma função, num programa, que calcule a tangente de um número sem ser necessário calcular no meio do bloco principal todas as contas necessárias. Uma função é declarada antes do bloco principal através da palavra reservada function. Dever-se-á ter em conta que uma função devolve um valor e um procedimento não, ou seja, uma função é da hierarquia das funções mais comuns do Pascal, como abs, e os procedimentos são subprogramas dentro do programa principal que executam instruções sem devolverem absolutamente nada no fim. Veja-se o exemplo: program tang_ang; uses crt; var angulo:real; procedure ler_angulo; begin write('Introduza angulo em radianos: '); readln(angulo); end; function tangente(a:real):real; begin tangente:=SIN(a)/COS(a); end; begin ler_angulo; // procedimento que vai ler o ângulo, mas nada devolve. writeln('A tangente do angulo e: ',tangente(angulo)); // função que calcula a tangente e devolve o seu resultado. readln; end. 7. Arredondamentos O programa em Pascal pode arredondar valores de duas maneiras. Através da função reservada round ou através de um código que utiliza dois pontos. Por exemplo, para arredondar um resultado do tipo real (sendo este a variável result) às unidades: round(result); Contudo, o arredondamento pode ser feito de outra forma. Podemos indicar o espaço que o número ocupa e o arredondamento que tem, do género: número:espaço:arredondamento. Por exemplo: result:12:5; Neste caso, se o resultado for 34.56356976356, irá aparecer algo como (sendo “-” indicação de um espaço vazio): ----34.56357 Já se for escrito: result:0:2; Irá aparecer exactamente como: 34.56 (2ª parte) EDIT: os erros técnicos e de código foram corrigidos. EDIT2: seria injusto não referir o excelente tutorial do @deathseeker25.
  17. Olá, tenho um exercício para resolver: Considere o seguinte jogo: n pessoas, numeradas de 1 a n são dispostas num círculo. Começando na 2ª pessoa, vamos removendo do círculo “pessoa-sim, pessoa-não” e o círculo aperta-se. O jogo termina quando resta apenas uma pessoa. Por exemplo, para n = 10 a ordem das eliminações é: 2, 4, 6, 8, 10, 3, 7, 1, 9 e 5 é o sobrevivente. Escreva um programa em Pascal que leia n e escreva a ordem das eliminações e o sobrevivente de acordo com este algoritmo. A minha duvida é oque eu devo usar para soluciona-lo, andei pesquisando sobre fila circular e não sei se esse é o caminho correto, por favor me digam se devo continuar nesse caminho ou dicas de alguma forma para solucionar o exercício.
  18. Aqui fica uma listagem de links úteis sobre Pascal e Object Pascal. (Links Úteis - Delphi) Se és um beginner, consulta um guia para escolher e instalar um IDE e um compilador para Pascal para as diferentes plataformas: Como começar a programar em Pascal. Índice Links do P@P Tutoriais Units Prontos-a-usar Snippets Comemorativos Diversos Artigos Revista PROGRAMAR Desafios e exercícios Projectos de Programação em Pascal Links externos ao P@P Links do P@P Tutoriais Tutorial de Pascal Fórum Wiki Versão PDF no Portal de Downloads: http://www.portugal-a-programar.pt/files/file/6-tutorial-de-pascal/ Anexo 1: Tipo de dado simples 'Boolean' Wiki Áudio em pascal Fórum DEMO - Como trabalhar com registos e ficheiros Fórum Wiki {$I-} / {$I+} - Gestão de erros ao lidar com ficheiros Fórum Wiki Indentação Fórum Wiki Modulação de um programa Wiki Ordenação: Algoritmo Bubblesort Fórum Wiki Passagem de parâmetros em linha de comandos Fórum Wiki Passagem por Parâmetro / Passagem por Referência Fórum Wiki Ponteiros (pointers) Fórum Wiki Procedimentos e Funções encadeados Fórum Wiki Simulação de multithreading Fórum Wiki Usar o Notepad++ para compilar e executar código Pascal (com o Free Pascal) Fórum Units CalcGraph Criação de calculadoras gráficas (Revista, Ed. 36) Bitbucket Código-fonte no Portal de Downloads: http://www.portugal-a-programar.pt/files/file/39-calcgraph/ GRF Unit geral para modo gráfico Fórum PasMenu Mini-Framework para fazer programas com menus Fórum Wiki Primes Módulo/Unidade para cálculo de números primos Fórum Wiki UFancyMenu Unit para fazer menus com rendering Fórum Bitbucket Wiki UOrder Método genérico de ordenação de arrays Fórum Bitbucket Wiki USecRead Input seguro Fórum Wiki debug Criação simples de um ou mais log files. Bitbucket Prontos-a-usar Alarm (pequenos lembretes) Fórum Wiki Apostas no Euromilhões Fórum Wiki Árvore Fractal Fórum Wiki Breve experiência com a unit 'Graph' Fórum Wiki Chaves do Euromilhões Fórum Wiki Configuração e execução de controlos simples de energia Fórum Wiki Editor de texto Fórum Wiki Fórmula resolvente Fórum Wiki Gestão de salas de cinema Fórum Wiki Mastermind Fórum Wiki RGB, uso de paletes http://www.portugal-a-programar.pt/files/file/36-rgb/ Tabela ASCII - programa completo Fórum Wiki Tabuada 10x10 Fórum Wiki Teorema de Pitágoras Fórum Wiki Triângulo de Sierpinski Fórum Wiki Verificar mudança de Locks Fórum Wiki Snippets Snippets vários Wiki Programas para beginners Wiki Conversor Decimal-Binário Fórum Wiki Mudar Data/Hora de ficheiros Fórum Wiki Pause - procedimento útil Fórum Wiki Saber se um ficheiro existe: FileExists Fórum Wiki Students (exercício) Fórum Wiki Comemorativos 2012 - Feliz Ano Novo! (snippet) Fórum Wiki 2012 - Carnaval! Fórum Wiki 2013 - Feliz Natal e Bom Ano! Fórum Wiki 2014 - Feliz Natal e Próspero Ano Novo! Fórum Wiki 2015 - Feliz Natal e Próspero Ano Novo! Fórum Wiki 2016 - Feliz Natal e Próspero Ano Novo! Fórum Wiki Diversos 11 razões para aprender e utilizar Pascal Fórum Wiki Artigos Revista PROGRAMAR Compilação de artigos http://www.portugal-a-programar.pt/files/file/101-compilação-de-artigos-relacionados-com-object-pascal/ [33ª Edição] Programação Orientada aos Objectos em Pascal Revista Wiki (revisto pelo autor) [34ª Edição] Módulos em Pascal Revista [35ª Edição] Registos variantes Revista [36ª Edição] Construção de uma calculadora gráfica Revista Código-fonte no Portal de Downloads: http://www.portugal-a-programar.pt/files/file/39-calcgraph/ [42ª Edição] Tipo de dados Variant e tipos genéricos Revista [44ª Edição] Operator Overloading Revista [45ª Edição] Array de argumentos Revista Desafios e exercícios Exercícios de Análise e Desenvolvimento de Algoritmos (U. Aveiro) 2004/2005 http://www.portugal-a-programar.pt/files/file/71-exercicios/ Consultar/alterar informação EXIF de imagens Tópico Crivo de Eratosthenes Tópico Escrita de SMS Tópico Fibonacci Tópico Wiki (adaptação) Números amigos Post Wiki Tutorial 2010 - Desafio 5 Tópico Projectos de Programação em Pascal Nome Autor Descrição Portal de Downloads PROGRAMAR Downloader for Linux thoga31 Utilitário para fazer o download selectivo ou total das edições da Revista PROGRAMAR. http://www.portugal-a-programar.pt/files/file/95-programar-downloader-for-linux/ Bitbucket Mini Calc 4 thoga31 Calculadora minimalista - inclui calc. gráfica, gestão visual de listas, etc. http://www.portugal-a-programar.pt/files/file/106-mini-calc/ Mini Calc for Linux thoga31 Calculadora minimalista para sistemas GNU/Linux. http://www.portugal-a-programar.pt/files/file/110-mini-calc-for-linux/ COX, Compiler Output eXtender thoga31 Permite colorir o output do compilador. Personalizável pelo programador, pode ligar-se a qualquer compilador. http://www.portugal-a-programar.pt/files/file/104-cox-compiler-output-extender/ Bitbucket Periodic Table thoga31 Uma tabela periódica dinâmica e com informações dos 118 elementos, e com várias opções de navegação. http://www.portugal-a-programar.pt/files/file/67-periodic-table/ Bitbucket Mini Calc 3 Legacy thoga31 Calculadora com várias funcionalidades, incluindo estatística com gráficos de barras. http://www.portugal-a-programar.pt/files/file/38-mini-calc/ Jogo da Glória - Matemática passarito Jogo da Glória aplicado à matemática. http://www.portugal-a-programar.pt/files/file/91-jogo-da-glória-matemática/ EArte - Editor de Figuras ASCII e Gerador de código pascal GRSa Este editor é uma ferramenta para quem programa em pascal, ou para quem quer criar figuras baseadas em caracteres ASCII. http://www.portugal-a-programar.pt/files/file/87-earte/ Jogo do Uno em Pascal GRSa Programa que implementa conhecido jogo do UNO em pascal. http://www.portugal-a-programar.pt/files/file/88-uno/ Operação Taiga GuiGa Pequeno jogo de aventura. PaintZim GuiGa Editor de ASCII Art, com opção de exportação em HTML. Damas GuiGa Jogo das damas, com 3 tabuleiros internacionais e Modo em Rede. ElementoFace GuiGa Unit para criar aplicações "gráficas" em consola facilmente. Calculadora de Números Inteiros GuiGa Calculadora cujo objectivo é o layout semelhante às janelas GUI mais antigas. Links externos ao P@P Documentação oficial - Free Pascal Documentation Inglês Link Reference for package 'rtl' Inglês Link Free Pascal supplied units: Reference guide Inglês Link Free Pascal Programming Tools Inglês Link Um tutorial Inglês Link Programar em Pascal Português Link Project Oberon - The Design of an Operating System and Compiler Inglês Link Esta lista será actualizada com os documentos mais relevantes sempre que houver novidades. Se quiserem propor mais documentos, sites e blogs de relevância, apitem. Este tópico não serve para discutir os links. Não se esqueçam: contribuam com novos documentos e snippets na Wiki! NOTA: este tópico é a nova versão deste tópico do @fnds.
  19. Boas Estou a fazer um mini projeto em pascal, uma calculadora de médias finais do secundario. Para fazer o calculo final da média, preciso de arredondar as notas, mas não sei como fazer isso. Por exemplo: filofinal := ((((filo10 + filo11)/2) *0.6) + ((examfilo/10)*0.4)); Nessa linha, tenho filofinal (média de filosofia dos dois anos) , filo10 (nota de filosofia do 10ºano), filo11 (nota de filosofia do 11ºano), examfilo (nota do exame de filosofia). Para a conta ficar correta, o resultado de (filo10 + filo11)/2) tem de ser arredondado as unidades para depois se multiplicar por 0.6 e se juntar a nota do exame (examfilo/10)*0.4) O único arredondamento, neste caso, é esse e é às unidades. Cumps
  20. Titulo do Projecto: Mini Calc for Linux Última Versão: 1.2.3 Site Oficial: N/D Licença: Freeware, uso não-comercial Líder do Projecto: thoga31 Membros Actuais do Projecto: thoga31 Screenshots: Demo (versão 1.1.0): vídeo Descrição do Projecto: Após ter feito a versão 4 da Mini Calc para Windows, chegou a hora de começar a portar a aplicação para Linux. A Mini Calc for Linux possui dois modos: Interactivo Toda a experiência da Mini Calc para Windows, excepto os gráficos (o sistema utilizado no Windows não é portável para Linux). Não-interactivo (ver instruções aqui) Permite avaliação de expressões (incluindo cálculo simples) assim como operações com funções e com listas. A versão actual é apenas um protótipo, sendo, portanto, um trabalho em progresso. Todas as sugestões são bem-vindas. Download executável: (apenas x64) http://www.portugal-a-programar.pt/files/file/110-/
  21. Olá outra vez! Desta vez preciso de uma pequena ajuda. Eu queria ordenar aqui umas coisas usando Pointers mas levar a informação. Vamos imaginar o seguinte: um parque de estacionamento onde tenho matricula, ano, dono, cor sei lá. informações (num record obvio) O que eu queria fazer era por exemplo ordenar os carros por ordem de ano (do maior para o menor) e levar a informação do carro. E é aí que eu erro, pois ele ordena mas não leva a informação. Alguma ajuda? Eu pensei em criar variáveis auxiliares para ir guardando e mostrando, mas não funciona :/
  22. Ola a todos, sempre tive curiosidade em relação á programação, e á cerca de uma semana comecei a tentar aprender Pascal, vi uns vídeos no youtube e pesquisei no google ate que encontrei este forum, percebi que é um forum bem ativo pelas publicações e pelas respostas das mesmas. Até hoje fiz dois "programas" que acho que sejam mais complexos (para mim) um que faz as tabuadas ate ao numero que quiseres mos: var n1,n2:integer; i:integer; begin writeln ('TABUADAS INFINITAS') ; writeln('digite o 1º valor'); readln(n1); writeln ('ate que valor quer a tabuada vá?'); readln(n2); while i < n2+1 do begin writeln(n1, 'X', i,'=',n1*i); i:= i+1; end; end. e outro que faz a media dos alunos program semnome; var nota: array [1..100] of real; i:integer; total,media,disc:real; nome:string; begin i := 1; writeln('escreva seu nome'); readln(nome); writeln('quantas disciplinas tem?'); readln(disc); while i< disc+1 do begin writeln('digite a ',i,'ª nota'); readln(nota[i]); total:=total+nota[i]; i:= i+1; end; ClrScr; media:= total/disc; if media >= 10 then begin writeln('o aluno/a ',nome,' tem media de ',media,' e foi aprovado.'); end else begin writeln('o aluno/a ',nome,' tem media de ',media,' e foi reprovado.'); end; end. e a minha duvida se dá para declarar o array de 1 ate infinito? ou outro comando que possa fazer o mesmo efeito
  23. Nome do Ficheiro: Mini Calc for Linux Submetido por: thoga31 Submetido em: 02 Mai 2015 Categoria: Bibliotecas e Aplicações Licença: Freeware, uso não-comercial Submetido pelo Autor?: Sim Calculadora minimalista para Linux com diversas funcionalidades, como cálculo de expressões naturais, trigonometria, simulador de probabilidades e gestão de listas. A versão actual é um protótipo. Projecto descrito neste tópico. Clique aqui para fazer download do ficheiro
  24. Version 1.2.3

    256 downloads

    Calculadora minimalista para Linux com diversas funcionalidades, como cálculo de expressões naturais, trigonometria, simulador de probabilidades e gestão de listas. A versão actual é um protótipo. Projecto descrito neste tópico.
  25. Titulo do Projecto: Mini Calc Última Versão: 4.1.2 Site Oficial: link Licença: Freeware, uso não-comercial Líder do Projecto: thoga31 Colaboradores do Projecto: nunopicado Para utilizadores GNU/Linux: Mini Calc for Linux. Screenshots: Descrição do Projecto: Há 5 anos eu iniciei este projecto apenas por mera brincadeira, mas agora decidi dar-lhe nova vida com esta nova Série. Mantendo a tradição das antigas versões - em ambiente consola e com recurso ao Free Pascal -, implementei a Mini Calc 4. Esta é uma calculadora minimalista que neste momento possui ferramentas básicas - algumas ainda em fase de teste -, tendo como principal objecto uma maior interactividade e usabilidade visual. A calculadora agora é "como deve ser" e avalia as expressões introduzidas. Tem calculadora gráfica e um gestor de listas visual (VLM). Todos os desenhos gráficos podem ser exportados para ficheiros de imagem BMP. Não sei se isto será alguma vez útil para alguém, mas partilho aqui esta minha brincadeira Bugs conhecidos: No sistema de ajuda embebido, caso não se seleccione nenhuma (sub)categoria do menu lateral, a aplicação irá bloquear após fechar a janela de ajuda. Download executável: http://www.portugal-a-programar.pt/files/file/106-/ Análise no VirusTotal Material para desenvolvimento de plugins: GitHub