GRY-Online.pl --> Archiwum Forum

Algorytmy, pomożecie?

09.10.2006
12:33
smile
[1]

Apocaliptiq [ Parapsychic Man ]

Algorytmy, pomożecie?

A więc mam następjący algorytm obliczający średnią:

1.Start
2.podaj a
3. podaj b
4. podaj c
5. podaj d
6. v:=(a+b+c+d):4
7. podaj v
8. Stop

Mam go przerobić w taki sposób aby sam sobie wyliczył z ilu liczb ma obliczać średnią.
(algorytm jest narysowany schematem blokowym ale obrazka nie dodam bo przy moim necie...ech:))

więc pomyślałem zeby dodać zmienną "podziel". Po wpisaniu dwóch liczb przez użytkownika było by pole wyboru "czy chcesz obliczyć średnią czy dodać liczbe"(czy cos w tym stylu). Jezeli chce obliczyć to oblicza, jezeli nie to pyta o kolejną liczbę dodając do wartości zmiennej "podziel" +1. Czy coś takiego będzie dobrze?(chce sie upewnić)

09.10.2006
12:43
[2]

M'q [ Schattenjäger ]

Zapętl algorytm pytaniem czy dodać kolejną liczbę, przy tak wracasz, przy nie obliczasz średnią.

09.10.2006
12:47
smile
[3]

Apocaliptiq [ Parapsychic Man ]

o tym właśnie myślałem ale nie napisałem wprost;) ale dzieki za odp.

09.10.2006
19:23
smile
[4]

Apocaliptiq [ Parapsychic Man ]

a jeszcze jedno pytanie.

No wiec jest pętla. Tylko jak później napisać że ma wziąć takie a nie inne zmienne. Bo jak sie dodaje to moze ich być np. tysiąc to jak to zrobić. Jakie działanie? jak określić te zmienne które ewentualnie mogłyby być dodane?

09.10.2006
19:25
[5]

nutkaaa [ Panna B. ]

hmm bym powiedziała, że chyba trza by tu skorzystać z tablic jak chcesz wybrać konkretne zmienne spośród podanych, ale to nie wiem jak rozrysować w C++ lepiej bym chyba wiedziała jak to zapisać ;)

09.10.2006
19:32
[6]

nagytow [ Firestarter ]

Tak na szybko:

1. start
2. licznik := 0
3. suma := 0
4. srednia := 0
5. wypisz: 'Podaj liczbe (0 konczy wprowadzanie): '
6. wczytaj liczba
7. jesli liczba = 0 skocz do 11.
8. suma := suma + liczba
9. licznik := licznik + 1
10. skocz do punktu 5.
11. jesli licznik != 0 to srednia := suma/licznik
12. wypisz: srednia

Mozna by to krocej zapisac w jakims jezyku programowania, ale tak chyba bedzie bardziej zrozumiale. Idea dzialania jest raczej oczywista, jednak jesli masz problemy to pisz :)

09.10.2006
19:35
[7]

alpha_omega [ Senator ]

No ja bym to zrobił właśnie na tablicach i wrzucił zmienną n, która przechowuje indeks danego elementu tj. gdy masz jedną liczbę - pokazuje 0, gdy dwie - 1, gdy trzy - 2 itd. Później przelatujesz przy wyświetlaniu w jakiejś pętli po całej tablicy sumując kolejne elementy i na koniec dzieląc całość przez n+1. I masz średnią.

Albo inaczej - zmienną 'suma' ustalasz na początku i przy każdym podaniu nowej liczby wpisujesz suma+=podana_liczba (albo: suma=suma+podana_liczba). Dodatkowo masz zmienną n, która wzrasta o jeden przy każdej nowo podanej liczbie, a więc trzyma aktualną ilość wpisanych już liczb. I dalej jak wyżej, gdy już nie dodajesz żadnych liczb, a chcesz wynik
dzielisz sumę przez n i wyświetlasz.

09.10.2006
19:36
[8]

techi [ Dębowy Przyjaciel Żubra ]

Start->licznik=0, suma=0, wynik=0->podaj liczbę(a)->suma=suma+a, licznik=licznik+1 _>Czy chcesz podać nastepna liczbe(tu robisz pętle przed podaj liczbę(Tak->wraca, Nie->dalej idzie)->wynik=suma/licznik->drukuj wynik->stop

Chyba tak;)

Chociaz nie zrozumiałem Twojego posta nr. 4;)

09.10.2006
20:32
smile
[9]

Apocaliptiq [ Parapsychic Man ]

heh no w Pascalu to bym to z dziesięć razy napisał ;). A tu nie mogłem wpaść na pomysł może dlatego ze mam innymi sprawami głowę zawaloną:)

15.10.2006
10:33
[10]

claudespeed18 [ zią ]

moze ktos mi napisac algorytm dla silni N! ????
to wazne i zeby szybko bylo mam na to 15 min
dzieks

15.10.2006
10:37
[11]

Regis [ ]

ale w czym? w C++ to bedzie tak (nie sprawdzalem, ale raczej sie nie machnalem):

----
int wynik = 1;

for(int i=2; i<=n; n++) ‹
wynik *= n;


cout << wynik;
----

gdzie n to rzecz jasna to samo N ktore stoi przy znaczku silni.

15.10.2006
13:15
[12]

alpha_omega [ Senator ]

Oj chyba się machnąłeś - ta pętla nigdy się nie skończy.

int wynik = 1;
int n = 0;
cout<<"Podaj n";
cin>>n;

for(int i=2; i<=n; i++)‹
wynik*=i;


cout << wynik;

Jakoś tak, o ilepamiętam komendy.

15.10.2006
13:20
[13]

umek [ Szczęśliwy ]

nie lepiej rekurencją?
int wynik;
if(a==1)‹
wynik=1;

else‹
wynik=silnia(a-1)*a;

return wynik;

15.10.2006
13:25
[14]

alpha_omega [ Senator ]

Ale po co rekurencja do takich obliczeń, tylko pamięć zżera.

15.10.2006
13:28
[15]

Regis [ ]

Oczywiscie, idiotyczny blad - zwiekszac sie mial iterator, a nie wartosc dana odgornie, to chyba oczywiste.

© 2000-2025 GRY-OnLine S.A.