Ir ao conteúdo
  • Cadastre-se

Pascal/Delphi Problemas com programa no ambiente pascal


Posts recomendados

Olá, estou com um problema ao fazer o seguinte código:

 

program B;

uses crt;

var
    vet: array[1..25] of integer;
    mat: array[1..5,1..5] of integer;
    j, M, N, aux, i: integer;
    
begin
    writeln('PROGRAMA PARA IMPRIMIR DEZ CARTELAS DE BINGO');
    
    randomize;
    
    for i:=1 to 10 do begin
        writeLn('CARTELA ',i);
            
            //SORTEAR VALORES E ATRIBUI-LOS A UM VETOR; VERIFICAR SE SÃO IGUAIS E, CASOS SEJAM, SUBSTITUI-LOS.
            
            for j:=1 to 25 do begin
                if j=1 then begin
                    vet[j]:= random(15)+1;
                        if vet[j]=vet[j+1] then
                            vet[j]:= random(15)+1;
                end;
                if j=6 then begin
                    vet[j]:= random(15)+16;
                        if vet[j]=vet[j+1] then
                            vet[j]:= random(15)+16;
                end;
                if j=11 then begin
                    vet[j]:= random(15)+31;
                        if vet[j]=vet[j+1] then
                            vet[j]:= random(15)+31;
                end;
                if j=16 then begin
                    vet[j]:= random(15)+46;
                        if vet[j]=vet[j+1] then
                            vet[j]:= random(15)+46;
                end;
                if j=21 then begin
                    vet[j]:= random(15)+61;
                        if vet[j]=vet[j+1] then
                            vet[j]:= random(15)+61;
                end;
            end;
            
            //COLOCAR VALORES EM ORDEM CRESCENTE;
            
            for j:=1 to 25 do
                if vet[j]>vet[j+1] then begin
                    aux:= vet[j];
                    vet[j]:= vet[j+1];
                    vet[j+1]:= aux;
                end;
            end;
    
    //TRANSFORMAR VETOR EM MATRIZ
    
    j:=0;
    
    for M:= 1 to 5 do
        for N:= 1 to 5 do begin
            j:= j+1;
            mat[M,N]:= vet[j];
        end;
        
    //IMPRIMIR A MATRIZ

    for M:= 1 to 5 do begin
            writeln('');
        for N:= 1 to 5 do begin
            writeln(mat[M,N],' ');
        end;
    end;

    readkey;
end.

 

É um código para criar 10 cartelas de bingo, em que os números não se repitam e fiquem em ordem crescente (os comentários estão todos no código).

 

Alguém poderia examina-lo e me ajudar?

  • Amei 1
Link para o comentário
Compartilhar em outros sites

@ArthurMelo777       seu código está bom , mas você está gerando números de hum até quinze e no vetor você está colocando 25 números , então haverá números repetidos ,   e os números não podem repetir na mesma cartela , mas em outra cartela pode ter o mesmo número ,  assim você pode gerar números de hum até 100 para preencher as dez cartelas ,   então seu código com algumas modificações pode ser assim  :

program Bingo;
uses crt;
var
  vet              : array[1..25]           of integer;
  mat              : array[1..10,1..25] of integer;
  j,aux,i,flag,w,f : integer;
begin
  writeln('PROGRAMA PARA IMPRIMIR DEZ CARTELAS DE BINGO');
  writeln;
  randomize;                      // para gerar números diferentes
  for i:=1 to 10 do               // serão dez cartelas
  begin
    j:=1;                                // primeira posição do vetor
    repeat                            // vai gerar vinte e cinco números
      repeat                          // se o número já existir no vetor
        flag:=0;                     // controle de número repetido
        vet[j]:= random(100)+ 1;  // gera hum número de hum até 100
        for f:=1 to 25 do       // as 25 posições do vetor
        begin
          if (vet[j]=vet[f]) and (j<>f) then  // compara número gerado com os do vetor e se não é ele mesmo
          begin
            flag:=1;                // se o número for repetido
            break;                  // termina o loop for
          end
        end;                                              
      until flag=0;               // se o número não for repetido
      j:=j+1;                        // próxima posição do vetor
    until j=26;                   // até gerar 25 números
    for f:=1 to 24 do         //colocando em ordem crescente
      for w:=f+1 to 25 do // próxima posição
        if vet[f] > vet[w] then   // se número anterior for maior que o próximo
        begin
          aux    := vet[f];       // armazena o número anterior
          vet[f] := vet[w];     // coloca o número menor antes
          vet[w] :=   aux ;    // coloca o número maior depois
        end;
    for f:=1 to 25 do         // uma cartela de  5 Linhas X 5 Colunas
      mat[i,f]:=vet[f];        // armazena na matriz os números gerados
  end;
  for f:=1 to 10 do          // imprimindo as dez cartelas
  begin
    writeln('  ------------------');
    if f<10 then writeln(' |    Cartela ',f,'     |')        // posiciona o texto na tela
    else writeln(' |    Cartela ',f,'    |');                     // posiciona o texto na tela
    writeln('  ------------------');    
    for w:=1 to 25 do     // imprime os números em blocos de 5 x 5
    begin
      if mat[f,w]<10 then write('   ',mat[f,w])          // posiciona as unidades em colunas
      else if mat[f,w]<100 then write('  ',mat[f,w])  // posiciona as dezenas  em colunas
      else write(' ',mat[f,w]);                                     // posiciona a  centena  em colunas
      if (w=5)or(w=10)or(w=15)or(w=20) then writeln();// quebra de linha 
    end;
    writeln;writeln;
  end;
  readkey();                 // espera pressionar alguma tecla
end.

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@devair1010  Certo, obrigado. Vou fazer apenas algumas modificações por causa das especificações do professor.

Na primeira coluna, os números devem ser de 1 até 15;

Na segunda coluna, os números devem ser de 16 até 30;

Na terceira coluna, os números devem ser de 31 até 45;

Na quarta coluna, os números devem ser de 46 até 60;

Na quinta coluna, os números devem ser de 61 até 75;

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Cara, tive que praticamente criar um novo algoritmo (alguns dos comandos que tu usou eu ainda não vi).

Pode analisar esse código e dizer o que há de errado?

 

program bingo;

uses crt;

var
   vet: array[1..25] of integer;
   mat: array[1..5,1..5] of integer;
   m, n, i, k, j, aux, v: integer;

begin
      writeln(' BINGO (10 CARTELAS)');

      randomize;

      //PRIMEIRA COLUNA
      
      for v:= 1 to 5 do
           vet[v]:= random(15)+1;
      
      //
      
      for k:= 1 to 5-1 do
           for j:=1+k to 5 do
           begin
                 if (vet[j]=vet[k]) then
                   readln(vet[j]);
           end;
      
      //
      
      for k:= 1 to 5-1 do
           for j:=1+k to 5 do
           begin
                 if (vet[j]<vet[k]) then
                 begin
                   aux:= vet[j];
                   vet[j]:= vet[k];
                   vet[k]:= aux;
                end;
           end;
      
      //
      
      i:= 0;
      for m:=1 to 1 do
           for n:=1 to 5 do
           begin
                i:= i+1;
                mat[n,m]:= vet[i];
           end;
      
      //SEGUNDA COLUNA
      
      for v:= 6 to 10 do
           vet[v]:= random(15)+16;
      
      //
      
      for k:= 6 to 10-1 do
           for j:=6+k to 10 do
           begin
                 if (vet[j]=vet[k]) then
                   readln(vet[j]);
           end;
      
      //
      
      for k:= 6 to 10-1 do
           for j:=6+k to 10 do
           begin
                 if (vet[j]<vet[k]) then
                 begin
                   aux:= vet[j];
                   vet[j]:= vet[k];
                   vet[k]:= aux;
                end;
           end;
      
      //
      
      for m:=2 to 2 do
           for n:=1 to 5 do
           begin
                i:= i+1;
                mat[n,m]:= vet[i];
           end;

      //TERCEIRA COLUNA
      
      for v:= 11 to 15 do
           vet[v]:= random(15)+31;
      
      //
      
      for k:= 11 to 15-1 do
           for j:=11+k to 15 do
           begin
                 if (vet[j]=vet[k]) then
                   readln(vet[j]);
           end;
      
      //
      
      for k:= 11 to 15-1 do
           for j:=11+k to 15 do
           begin
                 if (vet[j]<vet[k]) then
                 begin
                   aux:= vet[j];
                   vet[j]:= vet[k];
                   vet[k]:= aux;
                end;
           end;
      
      //
      
      for m:=3 to 3 do
           for n:=1 to 5 do
           begin
                i:= i+1;
                mat[n,m]:= vet[i];
           end;

      //QUARTA COLUNA
      
      for v:= 16 to 20 do
           vet[v]:= random(15)+46;
      
      //
      
      for k:= 16 to 20-1 do
           for j:=16+k to 20 do
           begin
                 if (vet[j]=vet[k]) then
                   readln(vet[j]);
           end;
      
      //
      
      for k:= 16 to 20-1 do
           for j:=16+k to 20 do
           begin
                 if (vet[j]<vet[k]) then
                 begin
                   aux:= vet[j];
                   vet[j]:= vet[k];
                   vet[k]:= aux;
                end;
           end;
      
      //
      
      for m:=4 to 4 do
           for n:=1 to 5 do
           begin
                i:= i+1;
                mat[n,m]:= vet[i];
           end;

      //QUINTA COLUNA
      
      for v:= 21 to 25 do
           vet[v]:= random(15)+61;
      
      //
      
      for k:= 21 to 25-1 do
           for j:=21+k to 25 do
           begin
                 if (vet[j]=vet[k]) then
                   readln(vet[j]);
           end;
      
      //
      
      for k:= 21 to 25-1 do
           for j:=21+k to 25 do
           begin
                 if (vet[j]<vet[k]) then
                 begin
                   aux:= vet[j];
                   vet[j]:= vet[k];
                   vet[k]:= aux;
                end;
           end;
      
      //
      
      for m:=5 to 5 do
           for n:=1 to 5 do
           begin
                i:= i+1;
                mat[n,m]:= vet[i];
           end;

      clrscr;

      //ESCREVER
      
      for m:=1 to 5 do begin
           writeln();
           for n:=1 to 5 do begin
                write(mat[m,n],' ')
           end;
      end;

   readkey;
end.

 

Em alguns casos os números se repetem e não aparecem na ordem.

  • Curtir 1
  • Amei 1
Link para o comentário
Compartilhar em outros sites

@ArthurMelo777       os números se repetem por que no seu código não tem nenhum comando ou função para verificar se já existe tal número no vetor / matriz ,  e você está repetindo partes do código que não precisa , pois você pode colocar esses comandos dentro de um laço de repetição que fará o mesmo efeito ,  tem muitas formas de se fazer um código , e essa é uma forma , então seu código com algumas modificações pode ser assim  :

program Bingo_4;
uses crt;
var
  dep     : array[1..40]          of integer;
  vet      : array[1..25]          of integer;
  mat     : array[1..10,1..25] of integer;
  j,aux,f : integer;
  i,flag   : integer;
  C,L,co,li,p,a : integer;
begin
  dep[ 1]:=248;dep[ 2]:=68 ;dep[ 3]:=68 ;dep[ 4]:=120;dep[ 5]:=68 ;dep[ 6]:=66 ;dep[ 7]:=68 ;dep[ 8]:=248;// B
  dep[ 9]:=254;dep[10]:=16 ;dep[11]:=16 ;dep[12]:=16 ;dep[13]:=16 ;dep[14]:=16 ;dep[15]:=16 ;dep[16]:=254;// I
  dep[17]:=194;dep[18]:=162;dep[19]:=162;dep[20]:=146;dep[21]:=146;dep[22]:=138;dep[23]:=138;dep[24]:=134;// N
  dep[25]:= 60;dep[26]:=66 ;dep[27]:=130;dep[28]:=128;dep[29]:=128;dep[30]:=142;dep[31]:=70 ;dep[32]:=58 ;// G
  dep[33]:= 56;dep[34]:=68 ;dep[35]:=130;dep[36]:=130;dep[37]:=130;dep[38]:=130;dep[39]:=68 ;dep[40]:=56 ;// O
  writeln;
  writeln('             PROGRAMA PARA IMPRIMIR DEZ CARTELAS DE BINGO');
  randomize;                       // para gerar números diferentes
  for i:=1 to 10 do               // serão dez cartelas
  begin
    for j:=1 to 25 do
      vet[j]:=0;                      //zerando o vetor
    aux:=1;
    for j:=1 to 25 do            // vai gerar vinte e cinco números
    begin
      for a:= 0 to 10000000 do    // se o número já existir no vetor
      begin
        flag:=0;                    // controle de número repetido
        vet[j]:= random(15)+aux;  // gera hum número de hum até 75
        for f:=1 to 25 do         // as 25 posições do vetor
        begin
          if (vet[j]=vet[f]) and (j<>f) then  // compara número gerado com os do vetor e se não é ele mesmo
          begin
            flag:=1;              // se o número for repetido
            break;                // termina o loop for
          end
        end;                                              
        if flag=0 then break;     // se o número não for repetido sai do loop
      end;                                 // próxima posição do vetor
      if (j=5) or (j=10) or (j=15) or (j=20) then aux:=aux+15;
    end;                                  // até gerar 25 números
    for f:=1 to 24 do              //colocando em ordem crescente
      for j:=f+1 to 25 do         // próxima posição
      begin
        if vet[f] > vet[j] then   // se número anterior for maior que o próximo
        begin
          aux    := vet[f];          // armazena o número anterior
          vet[f] := vet[j];          // coloca o número menor antes
          vet[j] :=   aux ;         // coloca o número maior depois
        end;
      end;
    a:=1;                               // pegar os números refrentes as colunas
    for f:=1 to 5 do              // 25 números de uma cartela de  5 Linhas X 5 Colunas
    begin
      for j:=1 to 5 do
      begin
        mat[j,f]:=vet[a];          // armazena na matriz em ordem crescente, os números gerados
        a:=a+1;
      end;
    end;
    writeln;                           // pula uma linha
    write(chr(201));              // imprimindo o cabeçalho da cartela
    for j:=1 to 16 do              // imprimindo o cabeçalho da cartela
      write(chr(205));            // imprimindo o cabeçalho da cartela
    writeln(chr(187));           // imprimindo o cabeçalho da cartela
    if i<10 then writeln(chr(186),'   Cartela ',i,'    ',chr(186))  // posiciona o texto na tela
    else writeln(chr(186),'  Cartela ',i,'    ',chr(186));          // posiciona o texto na tela
    write(chr(204));		     // imprimindo o cabeçalho da cartela
    for j:=1 to 16 do             // imprimindo o cabeçalho da cartela
      write(chr(205));            // imprimindo o cabeçalho da cartela
    write(chr(185));              // imprimindo o cabeçalho da cartela
    writeln;
    for aux:=1 to 5 do
    begin
      write(chr(186));      
      for j:=1 to 5 do
      begin
        if mat[aux,j]<10 then write('  ',mat[aux,j])
        else write(' ',mat[aux,j]);
      end;
      write(' ',chr(186));         
      writeln;
    end;
    write(chr(200));
  	for j:=1 to 16 do  
 	    write(chr(205));
    write(chr(188));
  end;
  f:=1;
  L:=10;
  C:=35;
  for p:=1 to 5 do
  begin
    li:=L;                         
    for i:=1 to 8 do
    begin
      a:=dep[f];
      co:=C;
      for j:=1 to 8 do
      begin
        gotoxy(co,li);
        if a mod 2 = 0 then write(' ')
        else write(chr(219));
        a:=a div 2;
        co:=co-1;
      end;                       // imprimiu uma linha do caractere Gigante
      f:=f+1;                    // próxima linha do caractere
      co:=C;                     // coluna de inicio do caractere
      li:=li+1;                  // linha de baixo do caractere
    end;                         // imprimiu o caractere Gigante 
    C:=C+8;                      // posição do próximo caractere
  end;                           // imprimiu os cinco caracteres
  gotoxy(67,18);
  write(chr(184));
  gotoxy(70,12);
  writeln('\\\\');
  gotoxy(70,13);
  writeln('(. .)');  
  gotoxy(70,14);
  writeln('  - ');  
  gotoxy(26,20);
  write(chr(201));
  for j:=1 to 40 do
    write(chr(205));
  write(chr(187));
  gotoxy(26,21);
  write(chr(200));
  for j:=1 to 40 do
    write(chr(205));
  write(chr(188));
  gotoxy(1,1);
  readkey();                     // espera pressionar alguma tecla
end.

 

  • Curtir 1
  • Amei 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...