Dzielniki całkowite

0

Witam! mom do napisania taki program i kompletnie nie wiem jak to zrobic ;/ mialem dwa zajecia z programowania i ogarniam tylko polecenia writeln readln i nie do konca petle a zadnie musi byc zrobione, serdecznie prosze o pomoc.
a oto zadanie:

Napisz program wypisujacy w jednej linii Twoje imie i nazwisko oraz numer indeksu.
Nastepnie wyliczy wszystkie dzielniki całkowite Twojego numeru indeksu oraz zapisze je do
tablicy.
Nastepnie poprosi uzytkownika o liczbe dzielników m, które chciałby on wypisac.
Nastepnie w petli m razy zapyta uzytkownika o numer dzielnika n i dla kazdej podanej liczby
wypisze n-ty dzielnik numeru indeksu lub napis ’Mój indeks nie ma tylu dzielników!’ jezeli
n przekroczy dostepna liczba dzielników (zakładamy, ze uzytkownik nie moze wpisac liczby
mniejszej niz 1).

Temat wątku powinien w sposób sensowny i w miarę wyczerpujący opisywać Twój problem. Tak, aby potem wyszukiwarki nie miały kłopotu ze znalezieniem szukanego tekstu. Wątki opatrzone jednowyrazowym tematem, lub zdaniem nie opisującym zupełnie problemu, będą usuwane.

Następny temat w rodzaju "pomocy" od razu poleci do kosza...
</span></dfn>

0

Proponuję zacząć od przeczytania jakiegoś kursu z podstawami pascala, np.: http://www.pascal.eu.org/
Potem uzupełnij swoją wiedzę o podstawy w delphi: Kompendium

0

A ja mam pytanie: co robiłeś(aś) od września października ?
zadane.pl

0

coś tam wymyśliłem i no nie bardzo mi to wychodzi mam część i jakbym to wkleił to mogę liczyć na pomoc we we wskazaniu błędów ewentualnym rozwiązaniu problemów?
To napisałem i niby nie ma błędów ale nic mi się nie wyświetla

program Project3;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const
nr=362708;
var
   tablica:array[1..1000] of longint;
   m,i:longint;
Begin
   writeln ('Adam Augustyniak ' , nr);
   i:=m;
   for m:=1 to nr do
      begin
      if ((nr mod m) = 0) then
         tablica[i]:=m
            else Writeln (' ');
      end;
   writeln ('podaj liczbę dzielników');
   readln;
end.

PATRYK a powiem Ci ze studiuje i dopiero od drugiego semestru mam programowanie jestem na matmie i nas mecza informatyką a informatyków matmą

0
Napisz program wypisujacy w jednej linii Twoje imie i nazwisko oraz numer indeksu.
Nastepnie wyliczy wszystkie dzielniki całkowite Twojego numeru indeksu oraz zapisze je do tablicy.

co to ma być:

  1. i:=m; - co to ma robić?
  2. tablica[i]:=m - gdziekolwiek ustawiasz to i czy tak się z powietrza bierze?
  3. else Writeln (' '); - a po co to?

jak dojdziesz co to ma być, może pójdziemy dalej...

0

no własnie ja nie mam pojecia jak mam wstawic do tablicy te dane ;o kombinuje na wszystkie strony...

0

To nie kombinuj, tylko myśl. I naprawdę polecam kursy, które podałem... Nie podam gotowca, ale...

  1. zamiast bzdurnej linii i := m; zapisz do i jedynkę
  2. jeśli liczba jest dzielnikiem, to po zapisie jej do tablicy zwiększ wartość i o jeden

Myśl dalej :D

BTW: nie uczyli was co to są tablice dynamiczne? Rozdział 2 - warto przeczytać...

0

Jeżeli nr indeksu mieści się w 32 bitach (<4294967296) to nie ma więcej niż 1920 dzielników naturalnych.

0

Ale to nie powód, żeby na sztywno wyznaczać wielkość tablicy - tablice dynamiczne też musieli przerabiać.

Zobacz też: Znajdz wszystkie dzielniki naturalne

0

dzieki wielkie! teraz to co mam mi dziala i no bede dalej MYŚLEĆ ;p i dam znac czy wyszło.

0
program Project3;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const
nr=362708;
var
tablica:array[1..2000] of longint;
m,i,l,n,k:longint;
Begin
  writeln ('Adam Augustyniak ' , nr);
  i:=1;
  for m:=1 to nr do
  begin
    if ((nr mod m) = 0) then

    tablica[i+1]:=m;
  end;

  begin
    writeln ('podaj liczbę dzielników');
    readln(l);
  
  end;

  for k:=1 to l do
  begin
    writeln ('podaj numer dzielnika');
    readln (n);

    if (n<=i) then writeln (tablica[i])
    else
    writeln ('Mój indeks nie ma tyle dzielników')
  end;


  readln;

end.
 

to tyle co zdołałem wypocić ale jak sądzę znów powiecie mi ze nie myśle i pewnie ta tablice tez sparałem co?

0

Miałeś zwiększyć zmienną i
tablica[i+1]:=m;
nie zwiększa tej zmiennej.

0

czyli petla ma wyglądać tak?

for m:=1 to nr do
  begin
    if ((nr mod m) = 0) then

    tablica[i]:=m;
    i:=i+1;
  end; 
0

Oczywiście że nie.
Zwiększać zmienną i trzeba tylko jeżeli dodajesz do tablicy, a ty zwiększasz za każdym razem.

0

Kiedy po "if" albo "do", chcemy aby wkonała się wiecej niż jedna instrukcja to należy ująć kod w begin i end;
Czyli tu "kłaniają się" podstawy, ktore pytający poznałby już dawno zaczynając lekturę chociażby kursu na 4p.

0
 for m:=1 to nr do
begin

if ((nr mod m) = 0) then
 begin
tablica[i]:=m;
i:=i+1;  end;
 end;

tak? bo nie ma sensu zebym myslał nad dalsza czescia jesli ti jest zle ;/

0

Nie śledziłem dokładnie wątku, ale o ile zrozumiałem to po "if ((nr mod m) = 0) then" chcesz mieć wykonaną dwie instrukcje, a poza warunkiem w tej pętli już później nic więcej, jeżeli tak to jest dobrze, ale polecam formatować porządnie kod, jeżeli tego nie umiesz to wspomóż się programem z: http://www.mediafire.com/file/80zkrt8absx60cv/delfor_changed_by_olesio.rar (link nie wygaśnie).

0
augusto007 napisał(a)
 for m:=1 to nr do
begin

if ((nr mod m) = 0) then
 begin
tablica[i]:=m;
i:=i+1;  end;
 end;

tak? bo nie ma sensu zebym myslał nad dalsza czescia jesli ti jest zle ;/

Przede wszystkim naucz się formatować kod, zobacz:

for m := 1 to nr do
   begin
   if ((nr mod m) = 0) then
      begin
      tablica[i]:=m;
      i := i + 1;
      end;
   end;

tak od razu widać, gdzie się zaczyna blok kodu a gdzi kończy. Instrukcje o jednakowym wcięciu należą do jednego bloku kodu.

Wcięciami rozgraniczasz sobie wewnętrzne bloki kodu. W każdym języku podobne zasady ułatwiają czytanie...

1 użytkowników online, w tym zalogowanych: 0, gości: 1