• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Mój program znajdujący liczbę najliższą sredniej z 5-ciu podanych

+2 głosów
1,115 wizyt
pytanie zadane 23 czerwca 2016 w C i C++ przez xjakubekx Obywatel (1,280 p.)
edycja 23 czerwca 2016 przez xjakubekx
Właśnie skończyłem rozwiązywać zadanie które zadał Mirosław w swoim 11 odcinku: "Kurs C++ odc. 11: Znajdowanie największej liczby "

Brzmi ono tak:
Napisz program znajdujący liczbę najbliższą średniej z 5-ciu podanych liczb.

Tak wygląda moje rozwiązanie zadania, działa w kazdym z 4 przypadków które kazał sprawdzić p.Mirosław, męczyłem się nad nim z 3h! http://wklej.org/id/2617678/
 

Da się go jakoś krócej napisać, czy muszę coś w nim poprawić?

2 odpowiedzi

+1 głos
odpowiedź 23 czerwca 2016 przez Radfler VIP (101,030 p.)
wybrane 24 czerwca 2016 przez xjakubekx
 
Najlepsza

Można go skrócić poprzez:

  • Wykorzystanie tablic zamiast pojedynczych zmiennych,
  • Podzielenie kodu na funkcje (zwiększysz też czytelność, bo póki co jest ona prawie zerowa),
  • Zmianę tego drzewa ifów na jedną, prostą pętlę.

I według mnie ten kod nie jest sexy. Jest strasznie nieczytelny :/

komentarz 23 czerwca 2016 przez xjakubekx Obywatel (1,280 p.)
NO masz racje, myslałem że wprowadzenie tablicy nie skróci kodu, ale teraz widzę że mogę zamienic ify na pętle dzięki temu :D!
zaraz wyślę poprawioną wersję
komentarz 23 czerwca 2016 przez xjakubekx Obywatel (1,280 p.)
http://wklej.org/id/2617829/
No dobra, teraz jest o 100x czytelniejszy

Podzielic program na funkcje ?
1
komentarz 23 czerwca 2016 przez Radfler VIP (101,030 p.)

Teraz jest bardziej czytelny, jednak:

  • Tablica ma rozmiar 4, a ty w linijce 13 odwołujesz się do czwartego, nieistniejącego elementu. IMO tablica powinna mieć rozmiar 5, jak wcześniej,
  • To:
    cin >>x[0]>>x[1]>>x[2]>>x[3]>>x[4];

    Można Zmienić na to:

    for(int i = 0; i < 5; ++i) {
      cin >> x[i];
    }
  • Nadaj zmiennym jakieś sensowniejsze nazwy.
0 głosów
odpowiedź 23 czerwca 2016 przez p0m0 Obywatel (1,190 p.)

Proponuję użyć pętli w tym kodzie, aby ominąć ifologię. Coś tego typu:

#include<iostream>
#include<algorithm>
using namespace std;
const int N=5;
long long tab[N];
int main(){
	long long sum=0, out=0, help;
	for(int i=0;i<N;i++){
		cin >> tab[i];
		sum+=tab[i];
		tab[i]*=N;
	}
	help=max(tab[0]-sum, sum-tab[0]);
	for(int i=1;i<N;i++){
		if(help>max(tab[i]-sum, sum-tab[i])){
			out=i;
			help=max(tab[i]-sum, sum-tab[i]);
		}
	}
	cout << tab[out]/N << '\n';
	return 0;
}

Podobne pytania

0 głosów
3 odpowiedzi 1,092 wizyt
+1 głos
3 odpowiedzi 589 wizyt
pytanie zadane 3 stycznia 2016 w C i C++ przez CichoCiemny Początkujący (480 p.)
0 głosów
2 odpowiedzi 529 wizyt

93,425 zapytań

142,421 odpowiedzi

322,646 komentarzy

62,785 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...