English
English
Slovensky
Slovensky
Česky
Česky
Šarišsky
Šarišsky
 
Category: Source in Pascal (KMP)

Author: Ján Mojžiš
Program: Postupnost.pas
File exe: Postupnost.exe
Zostavte program, kt. bude vo vzostupnom poradi vytvarat 100 najmensich cisel v mnozine M, ak je M definovana nasledujuco:
i) cislo 1 je z M
ii) ak cislo x je z M, tak aj cisla 2x +1 a 3x +1 su z M
iii) ziadne ine cisla, nez tie, ktore vzniknu pomocou pravidiel i) alebo ii), nepatria do M.
Na ukazku uvedieme prvych sedem prvkov mnoziny M: 1,3,4,7,9,10,13,...

Postupnost: vzorec:
predosle je na zaciatku 1
  1) cislo a = (predosle X 2) + 1
  2) cislo b = (predosle X 3) + 1

cislo a a cislo b su pridane do zoznamu, ak tam este niesu (nieje). potom je predosle.

Vtip je v tom, ze je treba nasledujuce predosle updatovat. Ale ako? Jednoducho pole[index], kde index je samostatny, a posuva sa len vtedy ked su vygenerovane nove cislo a a cislo b (na konci smycky repeat). Teda predosle = pole[index].
Views: 65x


{  ==============                                                              }
{  KSP 15. rocnik        115: Postupnost              Copyright (c) Jan Mojzis }
{  ==============                                                              }
{  Zadanie:                                                                    }
{  Zostavte program, kt. bude vo vzostupnom poradi vytvarat 100 najmensich     }
{  cisel v mnozine M, ak je M definovana nasledujuco:                          }
{  i) cislo 1 je z M                                                           }
{  ii) ak cislo x je z M, tak aj cisla 2x +1 a 3x +1 su z M                    }
{  iii) ziadne ine cisla, nez tie, ktore vzniknu pomocou pravidiel i) alebo ii),}
{  nepatria do M.                                                              }
{  Na ukazku uvedieme prvych sedem prvkov mnoziny M: 1,3,4,7,9,10,13,...       }
{  ----------------------------------------------------------------------------}
{  Postupnost: vzorec:                                                         }
{          predosle je na zaciatku 1                                           }
{                  1) cislo a = (predosle X 2) + 1                             }
{                  2) cislo b = (predosle X 3) + 1                             }
{                                                                              }
{          cislo a a cislo b su pridane do zoznamu, ak tam este niesu (nieje). }
{          potom je predosle.                                                  }
{          Vtip je v tom, ze je treba nasledujuce predosle updatovat. Ale ako? }
{          Jednoducho pole[index], kde index je samostatny, a posuva sa len vtedy}
{          ked su vygenerovane nove cislo a a cislo b (na konci smycky repeat).}
{          Teda predosle = pole[index].                                        }
{                                                                              }
{  Author: (c) 2007 Jan Mojzis                                                 }
{  Date  : 06.07.2008                                     http://www.trsek.com }
 
program postupnost;
 
var i,p,q : integer;
     generovane,generovane2 : integer;
     najdene,zapisuj : boolean;
     M : array[1..100] of integer;
     M_i : integer;
     cislo : integer;
     temp : integer;
 
 procedure zatried(var pole : array of integer);         { Zatriedenie na koniec }
 var p,q, pom,pom2 : integer;
 begin
          for p := 1 to 100 do begin
              for q := 100 downto p do begin
                                    if M[p] > M[q] then begin
                                      pom:=M[p]; pom2:=M[q];
                                      M[q]:=pom; M[p]:=pom2;
                                    end;
           end;
      end;
 end;
begin
     generovane:=1; generovane2:=1;
     M_i := 1;
                                      { kazde cislo ktore vygenerujeme,                }
                                      { musime znovugenerovat cez obidva        }
     najdene :=false;                 { vzorce 2xCislo[index] + 1 a                }
     M[1]:=1;                         {  3xCislo[index] + 1 a az                }
     cislo:=1;                        { (pozn.autor) na zaciatku je cislo        }
     temp:=0;                         { nastavene na 1.                                }
     repeat
          zapisuj:=true;
          generovane:= (2 * cislo) + 1;
          generovane2:= ( 3 * cislo) + 1;
           for i := 1 to 100 do            { jednotku uz v poli nechceme, uz ju mame }
              if (M[i] = generovane) or (M[i] = generovane2) then
                 zapisuj:=false;
              if zapisuj then begin
                      inc(M_i);
                      if(M_i) = 100 then begin M_i:=100;
                                                  najdene:=true; M[M_i]:=generovane
                                          end
                      else begin
                               M[M_i]:=generovane;
{                         write(',',generovane); }
                               inc(M_i);
                               if(M_i) = 100 then begin
                                                         M_i:=100; najdene:=true; M[M_i]:=generovane2;
                                                 end
                               else begin
                               M[M_i]:=generovane2;
{                         write(',',generovane2); }
                              end;
                      end;
              end;
           inc(temp);
           cislo:=M[temp];            { inkrement indexu matice s              }
     until najdene;                   { generovanymi cislami, pre vyrobu       }
                                      { novych gen. cisel                      }
 
 zatried(M);                          { USETRIME CAS, KED TO SPRAVIME AZ NA KONCI }
 
write('Cisla : ',M[1]);
for i := 2 to 100 do
   write(',',M[i]);        { potom je index+1,... }
    writeln;
    writeln('..To vse, pocet cisel: ', high(M));
 
   readln;
 
end.
 
 

[Run] [Save] [Print] [Send e-mail]