• 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

VPS Starter Arubacloud
+2 głosów
888 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 573 wizyt
+1 głos
3 odpowiedzi 455 wizyt
pytanie zadane 3 stycznia 2016 w C i C++ przez CichoCiemny Początkujący (480 p.)
0 głosów
2 odpowiedzi 331 wizyt

92,455 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...