Ir ao conteúdo

Posts recomendados

Postado

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
Postado

@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
Postado

@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
Postado

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
Postado

@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

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!