aAgAtKaaxD
aAgAtKaaxD
  15 grudnia 2009 (pierwszy post)

Mam zadanie na informatykę(napisać program w pascalu) , a niestety nie umiem sobie z nim poradzić;/ Napisz program znajdujący najmniejszy podzielnik danej liczby całkowitej, poza liczbą 1. Błagam o pomoc!

felix2k
Posty: 38 (po ~224 znaków)
Reputacja: 0 | BluzgometrTM: 4
felix2k
  15 grudnia 2009
A czy cos Ci to pomoże, że wklepie Ci gotowy kod, którego nie zrozumiesz?
ja bym zrobił to tak: najpierw wczytujesz liczbe z klawiatury, a potem w pętli od dwójki do tej liczby sprawdzasz czy kazda kolejna liczba jest dzielnikiem tej podanej z klawiatury.
liczba jest dzielnikem, jesli reszta z dzielenia daje 0.
mniej wiecej cos takiego (przepraszam za ewentualne błędy, dawno nie pisalem nic w pascalu)
for i:=2 to n do
begin
if a mod i=0
begin
writeln("dzielnik to ",i);
i:=n;
end
else i:=i+1;
end;
felix2k
Posty: 38 (po ~224 znaków)
Reputacja: 0 | BluzgometrTM: 4
felix2k
  15 grudnia 2009

oczywiscie to nie jest caly kod, tylko sama pętla sprawdzajaca i to nie wiem czy dobrze dzialajaca:D pisze na wszelki wypadek, gdybys probowala to kompilowac i przy okazji na mnie bluzgac;D

dede9
dede9
  15 grudnia 2009

Algorytm
1. Wczytujesz liczbe - naprzyklad a.
2. Jesli a jest mniejsza od 0, a rowna sie a*(-1).
3. Jesli a jest rowna 0 - komunikat brak dzielnikow.
4. Jesli a jest rowna 1 - komunikat dzielnik to 1.
5. Jesli a jest wieksza badz rowne 2 to:
6. Od 2 do a+1 wykonuj (for b:=2 to a+1 do)
7. Jesli a mod b = 0 wyswietl ('dzielnik = ',b) readln i halt (wylacza program)
8. Jesli nie b:=b+1; (jak robilem to teraz to bez tego dzialalo dobrze a z tym zle - nie wiem dlaczego wrazie czego usun ta linijke bo mi dodawalo +2.

I tyle potem wyswietl wynik, masz tu na liczby ujemne, dodatnie, 0 i 1 wiec wszystkie calkowite a nie tylko dodatnie :D

jak co to pisz :)

aAgAtKaaxD
aAgAtKaaxD
  15 grudnia 2009

dzięki;P Ale jeśli ktoś mógłby mi jednak napisać ten program, a ja go sobie obczaje, co? Bo sama nie dam rady;/

szato85
szato85
  15 grudnia 2009
dede9
dede9: 8. Jesli nie b:=b+1; (jak robilem to teraz to bez tego dzialalo dobrze a z tym zle - nie wiem dlaczego wrazie czego usun ta linijke bo mi dodawalo +2.


dodawało dwójkę ponieważ "b" jest podwójnie inkrementowane przez pętle for i przez ciebie

dla przyspieszenia działania powinno się osobno na początku sprawdzić czy liczba jest podzielna przez dwa a potem w pętli lecieć tylko po liczbach nieparzystych. dwukrotne mniej obliczeń.
Dyskusja na ten temat została zakończona lub też od 30 dni nikt nie brał udziału w dyskusji w tym wątku.