• 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

Object Storage Arubacloud
+2 głosów
918 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 632 wizyt
+1 głos
3 odpowiedzi 465 wizyt
pytanie zadane 3 stycznia 2016 w C i C++ przez CichoCiemny Początkujący (480 p.)
0 głosów
2 odpowiedzi 352 wizyt

92,568 zapytań

141,422 odpowiedzi

319,637 komentarzy

61,957 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...