Informática
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

[Info] Códigos-fonte de Programas variados

5 participantes

Ir para baixo

[Info] Códigos-fonte de Programas variados Empty [Info] Códigos-fonte de Programas variados

Mensagem por _viri_TT_ 12/1/2008, 10:59

Boas,
vou colocar aqui uma colectânea de alguns códigos feitos por mim no meu 10ºano de escolaridade não obrigatória Very Happy
O objectivo destes programas é apenas ensinar.
Não me responsabilizo por qualquer uso indevido dos mesmos, nem de notas altas em exames affraid Twisted Evil

Programas de Dificuldade 1/3

Programa que calcula áreas e perímetros.
Código:
program areeperimetro;

uses wincrt;

var
comp, larg, area, peri : Integer;
k : Char;

begin

    Repeat
          Writeln('Letra "a" -> área');
          Writeln('Letra "p" -> perímetro');
          Writeln('Letra "t" -> ambos');
          k := Readkey
    Until (k = 'a') OR (k = 'p') OR (k = 't');


    Write('Introduz o comp:');
    Read(comp);
    Write('Introduz a larg:');
    Read(larg);


    If k = 't'
        Then
            begin
                area:=comp*larg;
                Writeln('A área é:',area);
                peri:=comp*2+larg*2;
                Writeln('O perímetro é:',peri);
            end
        Else If k = 'a'
            Then
                begin
                      area:=comp*larg;
                      Writeln('A área é:',area);
                end
            Else
                begin
                      peri:=comp*2+larg*2;
                      Writeln('O perímetro é:',peri);
                end;


end.

Programa que calcula a média entre 2 Notas de 0-20
Código:
program media;

uses wincrt;

var
  n1, n2, media : Real;
  Sair : Char;

Begin

    Repeat

          clrscr;

          Write('Introduza a 1ª nota: ');
          Read(n1);

          If (n1<0) or (n1>20)
          Then
              Repeat
                    clrscr;
                    Writeln('A nota introduzida é inferior a 0 ou superior a 20.');
                    Writeln;
                    Write('Introduza a 1ª nota: ');
                    Read(n1);
              Until (n1>0) and (n1<20);

          Write('Introduza a 2ª nota: ');
          Read(n2);

          If (n2<0) or (n2>20)
          Then
              Repeat
                    clrscr;
                    Writeln('O valor introduzido é inferior a 0 ou superior a 20.');
                    Writeln;
                    Write('Introduza a 2ª nota: ');
                    Read(n2);
              Until (n2>0) and (n2<20);

          Media := (n1+n2)/2;

          clrscr;

          Case Round(media) of
          0..5 :
                Begin
                    Writeln('1ª nota: ',n1:0:2);
                    Writeln('2ª nota: ',n2:0:2);
                    Writeln;
                    Writeln('Tiveste ',media:0:2,' de média.');
                    Writeln('O resultado é: Mau');
                end;
          6..9 :
                Begin
                    Writeln('1ª nota: ',n1:0:2);
                    Writeln('2ª nota: ',n2:0:2);
                    Writeln;
                    Writeln('Tiveste ',media:0:2,' de média.');
                    Writeln('O resultado é: Insuficiente');
                end;
          10..13 :
                  Begin
                      Writeln('1ª nota: ',n1:0:2);
                      Writeln('2ª nota: ',n2:0:2);
                      Writeln;
                      Writeln('Tiveste ',media:0:2,' de média.');
                      Writeln('O resultado é: Suficiente');
                  end;
          14..17 :
                  Begin
                      Writeln('1ª nota: ',n1:0:2);
                      Writeln('2ª nota: ',n2:0:2);
                      Writeln;
                      Writeln('Tiveste ',media:0:2,' de média.');
                      Writeln('O resultado é: Bom');
                  end;
          18..20 :
                  Begin
                      Writeln('1ª nota: ',n1:0:2);
                      Writeln('2ª nota: ',n2:0:2);
                      Writeln;
                      Writeln('Tiveste ',media:0:2,' de média.');
                      Writeln('O resultado é: Muito Bom');
                  end;
          End;

          Writeln;
          Writeln;
          Writeln('Prima "S" para Sair.');
          Writeln('Prima outra tecla para Repetir.');

          Sair := readkey;

    Until (sair = 's') or (sair = 'S');

    donewincrt;

End.

Programa que corre até que se introduza 0 (zero). Mostra os pares e impares inseridos até inserir o 0.
Código:
program zerosparesimpares;

uses wincrt;

var
  valor, pares, impares : Integer;
  sair : Char;

Begin

    Repeat

          clrscr;

          Repeat

                Write('Introduza o valor: ');
                Readln(valor);

                If (valor <> 0)
                Then If (valor MOD 2 = 0)
                      Then pares := pares + 1
                      Else impares := impares +1       

          Until (valor = 0);

          GotoXY(40,1);
          Writeln('------------------------');
          GotoXY(40,2);
          Writeln('|    RESULTADO FINAL    |');
          GotoXY(40,3);
          Writeln('|                      |');
          GotoXY(40,4);
          Writeln('| Pares = ',pares);
          GotoXY(64,4);
          Writeln('|');
          GotoXY(40,5);
          Writeln('| Impares = ',impares);
          GotoXY(64,5);
          Writeln('|');
          GotoXY(40,6);
          Writeln('------------------------');

          GotoXY(1,25);
          Write('Novos valores (S/N)?');

          repeat

                sair:=readkey;

          Until (upcase(sair)='S') or (upcase(sair)='N')

    Until upcase(sair)='N';

    donewincrt;

End.

Calculadora
Código:
program valoresoperador;

uses wincrt;

var
  n1, n2 : Integer;
  r : Real;
  op, sair : Char;



Begin

    Repeat

          clrscr;

         
          Write('Introduza o primeiro número: ');
          Read(n1);

          If n1 < 0
          Then
              Repeat
                    Clrscr;
                    Writeln('O número tem de ser superior ou igual a zero. (Número indroduzido: ',n1,')');
                    Write('Introduza o primeiro número: ');
                    Read(n1);
              Until n1 >= 0;

          Writeln;

          Write('Introduza o segundo número: ');
          Read(n2);

          If n2 < 0
          Then
              Repeat
                    Clrscr;
                    Writeln('O número tem de ser superior ou igual a zero. (Número introduzido: ',n2,')');
                    Write('Introduza o segundo número: ');
                    Read(n2);
              Until n2 >= 0;

          Writeln;
          Writeln('  +  -> Para somar');
          Writeln('  -  -> Para subtrair');
          Writeln('  *  -> Para multiplicar');
          Writeln('  /  -> Para dividir');
          Writeln('  S  -> Para sair');
          Writeln;

          op := readkey;

          Case op of
          '+':
              begin

                    r := n1 + n2;
                    clrscr;
                    Writeln('A soma dos valores dá: ',r:0:2);
                    Writeln;
                    Writeln('  S  -> Para sair');
                    Writeln('  R  -> Para repetir');
                    sair := readkey;

              end;

          '-':

              begin

                    r := n1 - n2;
                    clrscr;
                          if n1 > n2
                          then r := n1 - n2
                          else if n2 > n1
                                then r := n2 - n1
                                else r := n1 - n2;

                    Writeln('A subtracção dos valores dá: ',r:0:2);
                    Writeln;
                    Writeln('  S  -> Para sair');
                    Writeln('  R  -> Para repetir');

                    sair := readkey;

              end;

          '*':

              begin

                    r := n1 * n2;

                    clrscr;

                    Writeln('A multiplicação dos valores dá: ',r:0:2);
                    Writeln;
                    Writeln('  S  -> Para sair');
                    Writeln('  R  -> Para repetir');

                    sair := readkey;

              end;

          '/':
              begin

                    r := n1 / n2;

                    clrscr;

                    Writeln('A divisão dos valores dá: ',r:0:2);
                    Writeln;
                    Writeln('  S  -> Para sair');
                    Writeln('  R  -> Para repetir');

                    sair := readkey;

              end;

          's','S': sair := 's';

          else
              begin

                    clrscr;

                    Writeln('Operação inválida.');
                    Writeln;
                    Writeln('  S  -> Para sair');
                    Writeln('  R  -> Para repetir');

                    sair := readkey;

              end;
          end;

    Until (sair = 's') or (sair = 'S');

    donewincrt;

End.

Programa de Conversão de temperaturas utilizando Case...Of.
Código:
Program grausd;

uses wincrt;

var c, k, f : Real;
    a, b : Char;

const k1 = 273.15;


Begin

    Repeat


          Repeat
                Clrscr;
                Writeln('Escolha a opção desejada:');
                Writeln;
                Writeln('a: Celcius -> Fahrenheit');
                Writeln('b: Celcius -> Kelvin');
                Writeln('c: Celcius -> Fahrenheit e Kelvin');
                Writeln('d: Kelvin -> Celcius');
                Writeln('e: Kelvin -> Fahrenheit');
                Writeln('f: Kelvin -> Celcius e Fahrenheit');
                Writeln('g: Fahrenheit -> Celcius');
                Writeln('h: Fahrenheit -> Kelvin');
                Writeln('i: Fahrenheit -> Celcius e Kelvin');
                Writeln('s: Sair');
                a := Readkey;
          Until (a='a')OR(a='b')OR(a='c')OR(a='d')OR(a='e')OR(a='f')OR(a='g')OR(a='h')OR(a='i')OR(a='s');

          Case a Of
                    'a':
                        begin
                            Clrscr;
                            Write('Introduza o valor em graus celcius: ');
                            Read(c);
                            f := (9/5)*c+32;
                            Writeln;
                            Writeln(c:0:1,' graus Celcius -> ',f:0:1,' Fahrenheit.');
                        end;
                    'b':
                        begin
                            Clrscr;
                            Write('Introduza o valor em graus celcius: ');
                            Read(c);
                            k := k1 + c;
                            Writeln;
                            Writeln(c:0:1,' graus Celcius -> ',k:0:1,' Kelvin.');
                        end;
                    'c':
                        begin
                            Clrscr;
                            Write('Introduza o valor em graus celcius: ');
                            Read(c);
                            f := (9/5)*c+32;
                            k := k1 + c;
                            Writeln;
                            Writeln(c:0:1,' graus Celcius -> ',f:0:1,' Fahrenheit.');
                            Writeln(c:0:1,' graus Celcius -> ',k:0:1,' Kelvin.');
                        end;
                    'd':
                        begin
                            Clrscr;
                            Write('Introduza o valor em graus kelvin: ');
                            Read(k);
                            c := k - 273.15;
                            Writeln;
                            Writeln(k:0:1,' graus Kelvin -> ',c:0:1,' Celcius.');
                        end;
                    'e':
                        begin
                            Clrscr;
                            Write('Introduza o valor em graus kelvin: ');
                            Read(k);
                            f := k * 1.8 - 459.67;
                            Writeln;
                            Writeln(k:0:1,' graus Kelvin -> ',f:0:1,' Fahrenheit.');
                        end;
                    'f':
                        begin
                            Clrscr;
                            Write('Introduza o valor em graus kelvin: ');
                            Read(k);
                            c := k - 273.15;
                            f := k * 1.8 - 459.67;
                            Writeln;
                            Writeln(k:0:1,' graus Kelvin -> ',c:0:1,' Celcius.');
                            Writeln(k:0:1,' graus Kelvin -> ',f:0:1,' Fahrenheit.');
                        end;
                    'g':
                        begin
                            Clrscr;
                            Write('Introduza o valor em graus Fahrenheit: ');
                            Read(f);
                            c := (5/9)*(f-32);
                            Writeln;
                            Writeln(f:0:1,' graus Fahrenheit -> ',c:0:1,' Celcius.');
                        end;
                    'h':
                        begin
                            Clrscr;
                            Write('Introduza o valor em graus Fahrenheit: ');
                            Read(f);
                            k := (f + 459.67)/1.8;
                            Writeln;
                            Writeln(f:0:1,' graus Fahrenheit -> ',k:0:1,' Kelvin.');
                        end;
                    'i':
                        begin
                            Clrscr;
                            Write('Introduza o valor em graus Fahrenheit: ');
                            Read(f);
                            c := (5/9)*(f-32);
                            k := (f + 459.67)/1.8;
                            Writeln;
                            Writeln(f:0:1,' graus Fahrenheit -> ',c:0:1,' Celcius.');
                            Writeln(f:0:1,' graus Fahrenheit -> ',k:0:1,' Kelvin.');
                        end;
          End;

   
        If (a<>'s')
        Then
            Repeat
                  Writeln;
                  Writeln('r -> Repetir o programa');
                  Writeln('s -> Sair do programa');
                  b := Readkey;
            Until (b='r') OR (b='s');

    Until (b='s') OR (a='s');

    DoneWincrt;
                             
End.

_viri_TT_
Moderator
Moderator

Número de Mensagens : 27
Idade : 33
Localização : De frente ao pc... -.-
Humor : Na companhia certa...
Data de inscrição : 21/11/2007

Ir para o topo Ir para baixo

[Info] Códigos-fonte de Programas variados Empty Re: [Info] Códigos-fonte de Programas variados

Mensagem por _viri_TT_ 12/1/2008, 11:00

Programas de Dificuldade 2/3

Programa de um banco onde se pode depositar, levantar ou ver a quantia na conta.
Código:
program saldof;

uses wincrt;

var
  ndep, nlev : Integer;
  sald, quantia, tdep, tlev : Real;
  op, rep : Char;

procedure menu;  { ---------------------------------------------------------------------- Início do procedimento para o Menu }
Begin                                                                                                         
    GotoXY(25,3);                                                                                               
    Writeln('Saldo = ',sald:0:2);
    GotoXY(15,7);
    Writeln('MENU:');
    GotoXY(15,9);
    Writeln('/-------------------------------------\');
    GotoXY(15,10);
    Writeln('| +  ->  Depositar uma quantia        |');
    GotoXY(15,11);
    Writeln('| -  ->  Levantar uma quantia        |');
    GotoXY(15,12);
    Writeln('| *  ->  Alterar o Saldo              |');
    GotoXY(15,13);
    Writeln('| 0  ->  Sair do programa            |');
    GotoXY(15,14);
    Writeln('\-------------------------------------/');
End;  { ------------------------------------------------------------------------------------- Fim do procedimento para o Menu}

procedure insaldo;  { --------------------------------------------------------- Início do procedimento para introduzir saldo }
Begin
    ClrScr;

    GotoXY(20,10);
    Write('Introduza o saldo: ');
   
    Repeat

          Readln(sald);

          If (sald < 0)
              Then
                  Begin
                      GotoXY(2,2);
                      Writeln('O saldo não pode ser negativo.');
                  End;

          Gotoxy(39,10);
          ClrEol;

    Until (sald >= 0);
End;  { -------------------------------------------------------------------------- Fim do procedimento para introduzir saldo }

procedure deposito;  { --------------------------------------------------------------- Início do procedimento para depósitos }
Begin
    Repeat
          Write('Introduza a quantia a depositar: ');
          Readln(quantia);
    Until (quantia > 0);

    sald := sald + quantia;
    tdep := tdep + quantia;
    ndep := ndep + 1;
End;  { --------------------------------------------------------------------------------- Fim do procedimento para depósitos }

procedure levantamento;  { ------------------------------------------------------- Início do procedimento para levantamentos }
Begin
    Repeat
          Write('Introduza a quantia a levantar: ');
          Readln(quantia);

          If (quantia > sald)
              Then               
                  Begin
                      Writeln('Está a levantar mais do que o saldo actual (',sald:0:2,').');
                      Writeln;
                  End
              Else If (quantia < 0)
                      Then
                          Begin
                              Writeln('Está a tentar levantar menos do que 0.');
                              Writeln;
                          End;

    Until (quantia >= 0) and (quantia <= sald);

                                     
    sald := sald - quantia;
    tlev := tlev + quantia;
    nlev := nlev + 1;
End;  { ----------------------------------------------------------------------------- Fim do procedimento para levantamentos }

Begin      { --------------------------------------------------------------------------------------------- Início do programa }

    insaldo;

    Repeat
         
          Clrscr;

          menu;

          Repeat
                op := readkey;
          Until (op = '+') or (op = '-') or (op = '*') or (op = '0');

          If (op <> '0')
              Then
                  Begin
                      Case op of             
                            '+': deposito;
                            '-': levantamento;
                            '*': insaldo;
                      End;                   

                      clrscr;

                      Writeln('Saldo = ',sald:0:2);

                      If (nlev = 1)
                          Then Writeln(nlev,' Levantamento = ',tlev:0:2)
                          Else Writeln(nlev,' Levantamentos = ',tlev:0:2);

                      If (ndep = 1)
                          Then Writeln(ndep,' Depósito = ',tdep:0:2)
                          Else Writeln(ndep,' Depósitos = ',tdep:0:2);

                      GotoXY(1,5);
                      Write('Deseja realizar mais alguma operação (S/N)?');

                      Repeat
                            rep := readkey;
                      Until (upcase(rep) = 'N') or (upcase(rep) = 'S');

                      If (upcase(rep) = 'S')
                          Then op := '1'
                          Else op := '0';
                  End;
                             
    Until (op = '0');

    Donewincrt;

End.      { ------------------------------------------------------------------------------------------------ Fim do programa }

Programa que permite preencher um vector com 10 numeros/letras e no fim indica vogais,consoantes e numeros no vector.
Código:
program ordenar;

uses wincrt;

Type
    vector = Array [1..10] of char;

Var
  VectorNormal, VectorAleat : vector;
  escolha, Sair : Char;
 
Procedure Menu;
  Begin
      Writeln('1 - Preencher Vector');
      Writeln('2 - Vector Aleatório');
      Writeln('S - Sair');

      Writeln;

      Write('Qual a Escolha ?');

      Repeat
            escolha := Readkey;
      Until Upcase(escolha) in ['1','2','S'];
  End;

Procedure Escreve_Vector;
  Var
    i : Byte;
  Begin
      For i := 1 To 10 Do
          Begin
                Write('Introduza o ',i,' caracter');
                VectorNormal[i] := ReadKey;
                Writeln(' ',VectorNormal[i]);
          End;     
  End;

Procedure Gera_Vector;
  var
    i, valor : byte;
  Begin
      Randomize;

      For i := 1 To 10 Do
          Begin
                Repeat
                      Valor := Random (123);
                Until Valor in [48..57,65..90,97..122];

                VectorAleat[i] := Chr(Valor);
          End;
  End;

Procedure Conta;
  Var
    i : byte;
    vogais, consoantes, numeros : Integer;
  Begin

      vogais := 0;
      consoantes := 0;
      numeros := 0;

      If escolha = '1' Then
          Begin
              For i := 1 To 10 Do
                Begin
                      If Ord(VectorNormal[i]) in [48..57] Then numeros := numeros + 1 Else
                        If upcase(VectorNormal[i]) in ['A','E','I','O','U']
                          Then vogais := vogais + 1
                          Else consoantes := consoantes + 1;
                End;
          End;

      If escolha = '2' Then
          Begin
              For i := 1 To 10 Do
                Begin
                      If Ord(VectorAleat[i]) in [48..57] Then numeros := numeros + 1 Else
                        If upcase(VectorAleat[i]) in ['A','E','I','O','U']
                          Then vogais := vogais + 1
                          Else consoantes := consoantes + 1;
               

                End;
          End;

      Writeln('Vogais: ',vogais);
      Writeln('Consoantes: ',consoantes);
      Writeln('Números: ',numeros);
 
  End;

Procedure alinhar;
  Var
    i, j : Integer;
  Begin

      For i := 48 To 90 Do
        Begin
              For j := 1 to 10 Do
                  Begin
                      If escolha = '1' Then If VectorNormal[j] = Chr(i) Then Write(Chr(i),'|');
                      If escolha = '2' Then If VectorAleat[j] = Chr(i) Then Write(Chr(i),'|');
                  End;

              If i = 57 Then i := 96;
              If i = 122 Then i := 64;
        End;
       
  End;

Begin

    Repeat
          ClrScr;

          Menu;

          ClrScr;

          If escolha = '1' Then Escreve_Vector;
          If escolha = '2' Then Gera_Vector;
          If upcase(escolha) = 'S' Then Sair := 'S';
     
          Conta;

          Writeln;

          Alinhar;

          Writeln;
          Writeln;
          Write('Prima qualquer tecla para voltar ao Menu...');
          ReadKey;

    Until (Sair) = 'S';

    DoneWinCrt;
End.

Jogo que gera números aleatórios. Temos um numero que definimos de tentativas para acertar.
Código:
program aleatorio;

uses wincrt;

var
  valor, maxtent, maxvalor, escolha : Integer;
  opcao : Char; 

{----------------------------------- Introduzir as tentativas máximas --------------------------------------------}

procedure maxtentp;
Begin
    Repeat
          Clrscr;
          Write('Introduza o número máximo de tentativas: ');
          Readln(maxtent);
    Until (maxtent > 0);
End;

{----------------------------------- Introduzir o valor máximo ---------------------------------------------------}

Procedure maxvalorp;
Begin
    Repeat
          Clrscr;
          Write('Introduza o máximo valor a gerar: ');
          Readln(maxvalor);
    Until (maxvalor > 0);
End;

{----------------------------------------- Menu ------------------------------------------------------------------}

procedure menu;
Begin

    Clrscr;

    Writeln(' Opção:          Descrição:');
    Writeln;
    Writeln(' T                Alterar o número de tentativas (',maxtent,')');
    Writeln(' N                Alterar o máximo valor a gerar (',maxvalor,')');
    Writeln(' J                Jogar');
    Writeln(' 0                Sair do programa');

    Repeat
          opcao := readkey;
    Until (upcase(opcao)) in ['T','N','J','0'];

End;

{-------------------------------------- Gerar o valor Aleatório --------------------------------------------------}

procedure gera_valor_aleatorio;
Begin
    Randomize;
    valor := Random(maxvalor+1);
End;

{---------------------------------------- Jogo -------------------------------------------------------------------}

procedure Tentativas;
var
  tent : Integer;
Begin

    Clrscr;

    For tent:=1 to maxtent do
    Begin

          GotoXY(1,1);
          ClrEol;
          Writeln(tent,'ª tentativa. (Restam ',maxtent-tent,') (Valor máximo: ',maxvalor,')');

          Writeln;

          GotoXY(1,3);
          ClrEol;

          Write('Tente acertar no valor: ');
          Readln(escolha);

          GotoXY(20,15);
          ClrEol;

          If (escolha = valor)
            Then tent := maxtent
            Else If (escolha <> valor)
                    Then If (escolha > maxvalor)
                            Then Writeln('A sua escolha é superior ao limite (',maxvalor,')!')
                            Else If (escolha < valor)
                                    Then Writeln('O valor é superior à sua escolha (',escolha,')!')
                                    Else Writeln('O valor é inferior à sua escolha (',escolha,')!');
         
    End;

End;

{----------------------------------------- Acertou no valor ------------------------------------------------------}

Procedure ganhou;
Begin
    Clrscr;

    Randomize;
    GotoXY(Random(55),Random(24));

    Writeln('Acertou no valor (',valor,')!');

    GotoXY(1,25);
    Write('Prima qualquer tecla para voltar ao menu ou "0" para sair... ');

    opcao := readkey;
End;

{------------------------------------- Não Acertou no valor ------------------------------------------------------}

Procedure perdeu;
Begin
    Clrscr;

    Randomize;
    GotoXY(Random(55),Random(24));

    Writeln('Perdeu, o valor era: ',valor,'!');

    GotoXY(1,25);
    Write('Prima qualquer tecla para voltar ao menu ou "0" para sair... ');

    opcao := readkey;
End;

{------------------------------------ Programa -------------------------------------------------------------------}

Begin

    maxtentp;

    maxvalorp;

    Repeat

          Repeat
                menu;
         
                Case upcase(opcao) of
                    'T': maxtentp;
                    'N': maxvalorp;
                End;
          Until (upcase(opcao)) in ['0','J'];

                If (upcase(opcao)='J')
                    Then
                        Begin
                            gera_valor_aleatorio;
                            Tentativas;
                       

                            If (escolha = valor)
                                Then ganhou
                                else perdeu;
                        end;

    Until (upcase(opcao)='0');

    Donewincrt;

End.


Última edição por em 12/1/2008, 11:02, editado 1 vez(es)

_viri_TT_
Moderator
Moderator

Número de Mensagens : 27
Idade : 33
Localização : De frente ao pc... -.-
Humor : Na companhia certa...
Data de inscrição : 21/11/2007

Ir para o topo Ir para baixo

[Info] Códigos-fonte de Programas variados Empty Re: [Info] Códigos-fonte de Programas variados

Mensagem por _viri_TT_ 12/1/2008, 11:00

Programas de Dificuldade 3/3

Programa que gera um vector aleatório de letras maiúsculas e minúsculas não repetidas. Ordena esse vector de formas diferentes. (Programa final do 10ºAno que valeu 19.5 valores Razz)
Código:
Program Trabalho;

Uses WinCrt;

Const
    Max = 10;

Type
    Vect = Array [1..Max] Of Char;

Var
  VectorO : Vect;
  op : Char;

Procedure InserirVectorA;  {Procedimento que gera vector aleatório}
  Var
    i, j, valor : Byte;
  Begin
      Randomize;

      For i := 1 To Max Do           
          Begin
              Repeat    {Gera valor aleatório e obriga a ser uma letra}
                    valor := Random(57) + 65;   
              Until valor in [65..90,97..122];

              VectorO[i] := CHR(valor);    {Atribui ao vector original a letra do valor ascii}

              For j := 1 To i-1 Do        {Verifica no vector se já existe alguma letra igual}
                  If valor = ORD(VectorO[j]) Then
                    Begin
                        Repeat            {se existir letra igual volta a gerar um valor aleatório}
                              valor := Random(57) + 65;
                        Until valor in [65..90,97..122];

                        VectorO[i] := CHR(valor);

                        j := 0 ;
                    End; 
          End;
  End;

Procedure InserirVectorM;    {Procedimento que deixa ao utilizador preencher o vector original}
  Var
    i, j : Byte;
    caracter, verificar : Char;
  Begin
      For i := 1 To Max Do
        Begin
              GotoXY(1,i);
              Write('Introduza o ',i,'º caracter do vector: ');

              Repeat  {Obriga o utilizador a introduzir uma letra}
                    caracter := ReadKey;
              Until Ord(caracter) in [65..90,97..122];

              Write(caracter);

              VectorO[i] := caracter;    {atribui a letra ao vector original}

              If (i > 1) Then    {Verifica se no vector existe alguma letra igual}
                For j := 1 To i-1 Do
                  Begin
                      verificar := (VectorO[j]);

                      If caracter = verificar
                        Then
                            Begin
                                  i := i - 1;

                                  GotoXY(1,25);
                                  Write('Caracter Repetido...');
                            End;
                  End;             
        End;
  End;

Procedure MostrarVector(MVector : Vect);    {Procedimento para mostrar o conteúdo de vectores do tipo vect}
  Var
    i : Byte;
  Begin
      For i := 1 To Max Do
          Write(i,' | ');

      Writeln;

      For i := 1 To Max Do
          Write(MVector[i],' | ');
  End;

Procedure AlterarElemento;      {Procedimento para alterar 1 elemento do vector original}
  Var
    posicao, i : byte;
    caracter, verificar : Char;
  Begin
      MostrarVector(VectorO);  {Mostra o conteudo do Vector Original}

      Writeln;
      Writeln;

      Write('Qual a posição do elemento que deseja alterar ? ');

      Repeat    {Lê a posição que o utilizador deseja alterar e obriga a ficar dentro dos limites do vector}
            ReadLn(posicao);

            If (posicao = 0) OR (posicao > Max) {Mostra mensagem de erro caso seja introduzido um valor fora dos limites}
              Then
                  Begin
                        GotoXY(1,25);
                        Write('Posição inválida...');
                        GotoXY(49,4);
                        ClrEOL;
                  End
              Else
                  Begin
                        GotoXY(1,25);
                        ClrEOL;
                  End;
      Until (posicao > 0) AND (posicao <= Max);

      Repeat

            Verificar := 'S';

            GotoXY(1,5);
            ClrEOL;

            Write('Introduza o caracter para a ',posicao,'ª posição do vector: ');

            Repeat          {Lê o caracter desejado para a posição}
                  caracter := ReadKey;
            Until Ord(caracter) in [65..90,97..122]; {obriga o caracter a ser uma letra}

            For i := 1 To Max Do  {verifica se o caracter já existe no vector}
                Begin
                    If (VectorO[i] = caracter) AND (ORD(VectorO[i]) <> ORD(VectorO[Posicao]))
                      Then
                          Begin
                                GotoXY(1,25);
                                Write('Caracter ',caracter,' já existe na posição ',i,' do vector.');

                                Verificar := 'N';
                                i := Max;
                            End
                End;

      Until verificar = 'S';

      Write(caracter);

      VectorO[posicao] := caracter;  {Altera o caracter se não existir igual}
      verificar := 'S';

      GotoXY(1,24);
      WriteLn('Caracter alterado...');
      ClrEOL;
  End;

Procedure MinusculaseMaiusculas;  {Procedimento que ordena o vector original primeiro em minusculas e depois em maiusculas}
  Var
    Vector2 : Vect;
    i, j, k, Minusculas, Maiusculas : Byte;
    troca : Char;
  Begin
      For i := 1 To Max Do  {Faz uma cópia do vector original para o Vector2}
          Vector2[i] := VectorO[i];

      Minusculas := 0;    {inicialização das variáveis}
      Maiusculas := 0;

      For i := 1 To Max Do  {Calcula as minusculas e as maiusculas e coloca as minusculas em 1º lugas no vector2}
          If ORD(Vector2[i]) in [97..122]
            Then
                Begin
                    Minusculas := Minusculas + 1;
                    Troca := Vector2[i];
                    Vector2[i] := Vector2[minusculas];
                    Vector2[minusculas] := Troca;
                End
            Else Maiusculas := Maiusculas + 1;

     
      If Minusculas <> 0  {Conjunto de instruções para ordenar 1º minusculas e 2º maiusculas}
        Then
            Begin                                                 
                  For i := 1 To Minusculas Do    {ordena as minusculas}
                    For j := 1 To i-1 Do
                        If ORD(Vector2[i]) <= ORD(Vector2[j])
                          Then
                              Begin
                                  troca := Vector2[i];

                                  For k := i-1 DownTo j Do
                                      Vector2[k+1] := Vector2[k];

                                  Vector2[j] := troca;
                              End;
 
                For i := Minusculas To Max Do    {ordena as maiusculas}
                  For j := minusculas + 1 To i-1 Do
                      If ORD(Vector2[i]) <= ORD(Vector2[j])
                        Then
                            Begin
                                  troca := Vector2[i];

                                  For k := i-1 DownTo j Do
                                    Vector2[k+1] := Vector2[k];

                                  Vector2[j] := troca;                   
                            End;
            End
        Else    {Caso não existam minusculas ordena as maiusculas apenas}
            For i := 2 To Max Do
                For j := 1 To i-1 Do
                  If ORD(Vector2[i]) <= ORD(Vector2[j])
                    Then
                        Begin
                              troca := Vector2[i];

                              For k := i-1 DownTo j Do
                                Vector2[k+1] := Vector2[k];

                              Vector2[j] := troca;
                        End;

      Writeln('Vector Original:');                 
      MostrarVector(VectorO);  {mostra o vector original}

      Writeln;
      Writeln;

      Writeln('Novo Vector:');
      MostrarVector(Vector2);  {mostra o vector2 (ordenado)}
                   
  End;

Procedure Maiusculas;  {Procedimento que transforma todas as letras do vector original em maiusculas e ordena}
  Var                   
    Vector2 : Vect;
    i, j, k : Byte;
    troca : Char;
  Begin
      For i := 1 To Max Do    {copia o vector original}
          Vector2[i] := Upcase(VectorO[i]);

      For i := 2 To Max Do    {ordena as letras}
          For j := 1 To i-1 Do
            If ORD(Vector2[i]) <= ORD(Vector2[j])
            Then
                Begin
                      troca := Vector2[i];

                      For k := i-1 DownTo j Do
                        Begin
                              Vector2[k+1] := Vector2[k];
                        End;

                      Vector2[j] := troca;
                     
                End;

      Writeln('Vector Original:');
      MostrarVector(VectorO);  {mostra o vector original e o vector2}
      Writeln;
      Writeln;

      Writeln('Novo Vector:');
      MostrarVector(Vector2);
  End;

Procedure Minusculas;    {Procedimento que transforma todas as letras do vector original em minusculas e ordena}
  Var
    Vector2 : Vect;
    i, j, k : Byte;
    troca : Char;
  Begin
      For i := 1 To Max Do  {copia o vector original e transforma as maiusculas em minusculas}
          Begin
              Vector2[i] := VectorO[i];
             
              If ORD(Vector2[i]) in [65..90]
                  Then Vector2[i] := CHR(ORD(Vector2[i]) + 32);
          End;

      For i := 2 To Max Do  {ordena as letras}
          For j := 1 To i-1 Do
            If ORD(Vector2[i]) <= ORD(Vector2[j])
            Then
                Begin
                      troca := Vector2[i];

                      For k := i-1 DownTo j Do
                        Begin
                              Vector2[k+1] := Vector2[k];
                        End;

                      Vector2[j] := troca;
                     
                End;

      Writeln('Vector Original');  {mostra o vector original e o vector2}
      MostrarVector(VectorO);

      Writeln;
      Writeln;

      Writeln('Novo Vector:');
      MostrarVector(Vector2);
  End;

Procedure VogaiseConsoantes;  {Procedimento que coloca as vogais em 1º lugar e as consoantes em 2º e ordena}
  Var
    Vector2 : Vect;
    i, j, k, Vogais, Consoantes : Byte;
    Troca : Char;
  Begin
      For i := 1 To Max Do      {copia o vector original}
          Vector2[i] := VectorO[i];

      Vogais := 0;          {inicialização das variaveis}
      Consoantes := 0;

      For i := 1 To Max Do      {conta as vogais e consoantes e coloca as vogais em 1º lugar}
          If ORD(Vector2[i]) in [97,101,105,111,117,65,69,73,79,85]
            Then
                Begin
                    Vogais := Vogais + 1;
                    Troca := Vector2[i];
                    Vector2[i] := Vector2[Vogais];
                    Vector2[Vogais] := Troca;
                End;   

      Writeln('Vector Original:');
      MostrarVector(VectorO);

      Writeln;
      Writeln;

      Writeln('Novo Vector:');
      MostrarVector(Vector2);
                   
  End;

Procedure DadosVector;
  Var
    i, Vogais, Minusculas, MenorL, MaiorL : Byte;
  Begin
      Vogais := 0;
      Minusculas := 0;

      MenorL := ORD(VectorO[1]);
      MaiorL := ORD(VectorO[1]);

      For i := 1 To Max Do
          Begin
              If ORD(VectorO[i]) in [97..122]
                Then Minusculas := minusculas + 1;

              If ORD(VectorO[i]) in [65,69,73,79,85,97,101,105,111,117]
                Then Vogais := Vogais + 1;

              If Upcase(VectorO[i]) < Upcase(CHR(MenorL))
                Then MenorL := ORD(VectorO[i]);

              If Upcase(VectorO[i]) > Upcase(CHR(MaiorL))
                Then MaiorL := ORD(VectorO[i]);
          End;

      MostrarVector(VectorO);

      Writeln;
      Writeln;

      Writeln('Vogais: ',Vogais,' | Consoantes: ',Max-Vogais);
      Writeln('Minúsculas: ',Minusculas,' | Maiúsculas: ',Max-Minusculas);
      Writeln('Menor Letra: ',CHR(MenorL),' | Maior Letra: ',CHR(MaiorL));
  End;

Procedure InserirVector;
  Var
    escolha : Char;
  Begin
      ClrScr;

      Writeln('1 - Inserir Vector Automático');
      Writeln('2 - Inserir Vector Manual');

      Repeat
            Escolha := ReadKey;
      Until escolha in ['1','2'];

      ClrScr;

      Case escolha Of
        '1' : InserirVectorA;
        '2' : InserirVectorM;
      End;
  End;

Procedure NovoVector;
  Var
    op2 : Char;
  Begin
      Writeln('Sub-Menu');
      Writeln;
      Writeln('Novo Vector Ordenado por:');
      Writeln('1 - Minúsculas e Depois Maiúsculas');
      Writeln('2 - Tudo em Maiúsculas');
      Writeln('3 - Tudo em Minúsculas');
      Writeln('4 - Vogais e Depois Consoantes');
      Writeln('0 - Voltar ao Menu');

      Repeat
            op2 := ReadKey;
      Until op2 in ['1','2','3','4','0'];

      ClrScr;

      Case op2 Of
        '1' : MinusculaseMaiusculas;
        '2' : Maiusculas;
        '3' : Minusculas;
        '4' : VogaiseConsoantes;
      End;

  End;

Procedure Autor;
  Begin
      GotoXY(20,9);
      Write('Autor do Programa:');
      GotoXY(20,11);
      Write('André Dias');
      GotoXY(20,13);
      Write('ESAP - 10ºH - 2006/2007');
  End;

Procedure Menu;
  Begin

      ClrScr;

      Writeln('Menu');
      Writeln;
      Writeln('1 - Inserir Novo Vector');
      Writeln('2 - Mostrar Vector');
      Writeln('3 - Alterar Elemento do vector');
      Writeln('4 - Gerar Novo Vector');
      Writeln('5 - Dados Sobre o Vector');
      Writeln('6 - Autor');
      Writeln('0 - Sair');

      Repeat
            op := readKey;
      Until op in ['1','2','3','4','5','6','0'];

      ClrScr;
  End;
 
Begin

    InserirVector;

    Repeat
          Menu;

          Case op Of
              '1' : InserirVector;
              '2' : MostrarVector(VectorO);
              '3' : AlterarElemento;
              '4' : NovoVector;
              '5' : DadosVector;
              '6' : Autor;
              '0' : DoneWinCrt;
            End;

            GotoXY(1,25);
            Write('Prima qualquer tecla para ir para o menu...');
            ReadKey;
    Until op = '0';

End.

Espero que estes programas sirvam para aumentar o vosso conhecimento de Pascal. Façam bom uso!
Cumps.


Última edição por em 12/1/2008, 11:17, editado 1 vez(es)

_viri_TT_
Moderator
Moderator

Número de Mensagens : 27
Idade : 33
Localização : De frente ao pc... -.-
Humor : Na companhia certa...
Data de inscrição : 21/11/2007

Ir para o topo Ir para baixo

[Info] Códigos-fonte de Programas variados Empty Re: [Info] Códigos-fonte de Programas variados

Mensagem por Hypr 12/1/2008, 12:20

lool ahahahahahh este ultimo deu muito k falar xD

Hypr
Professional
Professional

Número de Mensagens : 29
Localização : casa
Humor : isso agora
Data de inscrição : 12/01/2008

Ir para o topo Ir para baixo

[Info] Códigos-fonte de Programas variados Empty programa/jogo/pascal

Mensagem por Cardozo 14/1/2008, 05:24

muito bons estes teus programas Very Happy , estao muito completos....
tmbm ando agora a dar pascal....deixo aki um programa que e um jogo em que o computador escolhe um numero aleatorio e o utilizador rscolhe u numero de tentativas..nesse numero de tentativas tem se acertar nu numero escolhido pelo computador...

se quiserem acrescentar akels fico contente Laughing Smile

Código:
uses wincrt;

var
t : byte;
OP: char;




function pontosdados :integer;
begin

  randomize;

  pontosdados:=random(6)+1;
  end;



  procedure tentativas (var T1 :byte);
  begin
    repeat
      writeln('insira o numero de tantativas q pretende jogar');
      readln(T1);

      if T1<=0
        then writeln('valor invalido!!!');
        writeln;
        until T1>=1;
      T1:=t; 
        end;

     

    procedure  jogar;

    var x,y,k,p,nt :integer;

    begin

    x:=pontosdados;
    y:=pontosdados;

    k:=x+y;

    nt:=0;

    repeat

    writeln('insira o seu palpite..');
    readln(p);


    if k
      then writeln('o valor e menor que aquele q sugeriu!!');

    if k>p
      then writeln('o valor e maior que aquele que sugeriu!!');


      nt:=nt+1;

    until(p=k) or (nt=t);

    clrscr;

    if (p=K) AND (nt=t)
        then writeln ('Parabens!!acertou!!');
    if (nt
      then writeln('parabens!!acertou em',nt,' tentativas');
    if (nt=t) and (p<>k)
        then writeln('Esgotou as tentativas...');


    writeln('valor era...',k);

    end;
    procedure sair;
    begin
    write('TIAGO CARDOZO');
    readkey;
    donewincrt;
    end;

    begin
    clrscr;

    tentativas(t);
    jogar;
    sair;

    end.

Cardozo
Newbie
Newbie

Número de Mensagens : 1
Idade : 32
Localização : a minha mae pôs-me fora de casa.(debaixo da ponte)
Humor : depende dos dias
Data de inscrição : 14/01/2008

http://tiago20kardoso.hi5.com

Ir para o topo Ir para baixo

[Info] Códigos-fonte de Programas variados Empty Re: [Info] Códigos-fonte de Programas variados

Mensagem por _viri_TT_ 14/1/2008, 16:20

Cardozo escreveu:muito bons estes teus programas Very Happy , estao muito completos....
tmbm ando agora a dar pascal....deixo aki um programa que e um jogo em que o computador escolhe um numero aleatorio e o utilizador rscolhe u numero de tentativas..nesse numero de tentativas tem se acertar nu numero escolhido pelo computador...

se quiserem acrescentar akels fico contente Laughing Smile
Boas,
também tenho esse jogo lá em cima Very Happy
Se quiseres exprimentar estás à vontade Wink
Mas agradeço desde já a intenção lol!
Cumps.

_viri_TT_
Moderator
Moderator

Número de Mensagens : 27
Idade : 33
Localização : De frente ao pc... -.-
Humor : Na companhia certa...
Data de inscrição : 21/11/2007

Ir para o topo Ir para baixo

[Info] Códigos-fonte de Programas variados Empty Re: [Info] Códigos-fonte de Programas variados

Mensagem por Hypr 15/1/2008, 11:52

viri ja postavas para ai era o jogo do galo xD isso e k era de homem

Hypr
Professional
Professional

Número de Mensagens : 29
Localização : casa
Humor : isso agora
Data de inscrição : 12/01/2008

Ir para o topo Ir para baixo

[Info] Códigos-fonte de Programas variados Empty Re: [Info] Códigos-fonte de Programas variados

Mensagem por _viri_TT_ 15/1/2008, 13:44

Hypr escreveu:viri ja postavas para ai era o jogo do galo xD isso e k era de homem
O máximo que posso postar é o executável..Razz
O código fonte não cabe aqui todo porque o máximo por post são 500 linhas e o jogo tem 800 linhas sem comentários. Very Happy

Mais daque a pouco hosto o ficheiro num site e depois meto ai o link.
Cumps.

_viri_TT_
Moderator
Moderator

Número de Mensagens : 27
Idade : 33
Localização : De frente ao pc... -.-
Humor : Na companhia certa...
Data de inscrição : 21/11/2007

Ir para o topo Ir para baixo

[Info] Códigos-fonte de Programas variados Empty Re: [Info] Códigos-fonte de Programas variados

Mensagem por barreiru 15/1/2008, 16:45

_viri_TT_ escreveu:
Hypr escreveu:viri ja postavas para ai era o jogo do galo xD isso e k era de homem
O máximo que posso postar é o executável..Razz
O código fonte não cabe aqui todo porque o máximo por post são 500 linhas e o jogo tem 800 linhas sem comentários. Very Happy

Mais daque a pouco hosto o ficheiro num site e depois meto ai o link.
Cumps.


Ya isso é que era de homem... de H grande... xD
Hypr nada de ldizer que foste tu que fizeste... porque assim vais obrigar o Viri a registar o programa xD xD xD
Velhos tempos Pascal! =D

Cumprs

By Barreiru
barreiru
barreiru
Professional
Professional

Número de Mensagens : 25
Idade : 34
Localização : já não sei quem sou... o que faço aqui?!!!
Humor : Deus é pai de cada crlhu xD
Data de inscrição : 12/01/2008

http://hosted.filefront.com/barreiru

Ir para o topo Ir para baixo

[Info] Códigos-fonte de Programas variados Empty Re: [Info] Códigos-fonte de Programas variados

Mensagem por Dark_Shadow 23/1/2008, 09:47

brigado plos programs Viri...... vão dar um jeitaço......

PS: fico á espera do jogo do galo... lol!
Dark_Shadow
Dark_Shadow
Newbie
Newbie

Número de Mensagens : 1
Localização : Viva o Crasto...... lol
Humor : Apenas o necessário....
Data de inscrição : 23/01/2008

Ir para o topo Ir para baixo

[Info] Códigos-fonte de Programas variados Empty Re: [Info] Códigos-fonte de Programas variados

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos