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

Prośba o ocenę kodu

Object Storage Arubacloud
0 głosów
231 wizyt
pytanie zadane 10 marca 2017 w C i C++ przez BinaryMan Stary wyjadacz (12,620 p.)

Witam !
Właśnie zaczynam uczyć się wskaźników i natrafiłem na takie zadanie:

"Napisz funkcję otrzymującą jako argumenty wskaźniki do dwóch
zmiennych typu int, która zwraca jako wartość mniejszą z liczb wskazywanych
przez argumenty."

Na dole wklejam kod który napisałem. Program działa, ale chciałbym się zapytać bardziej doświadczonych czy można go w jakiś sposób usprawnić :) 

 

#include <iostream>

using namespace std;



int compare(int *w1, int *w2)
{
	int c;

	if (*w1 < *w2)
	{
		c = *w1;
			//cout << c << endl;
	}
	else
		c = *w2;
		//cout << c << endl;

		return c;
}





int main()
{

	int number1;
	int number2;


	cout << "Enter a value number1: " << endl;
	cin >> number1;

	cout << "Enter a value number2: " << endl;
	cin >> number2;


	int *w1;
	w1 = &number1;

	int *w2;
	w2 = &number2;

	// cout << *w1 << endl;
	//cout << *w2 << endl;


	cout << "A smaller number is: " << compare(w1, w2);

	getchar();	getchar();

	return 0;
}

 

2 odpowiedzi

+4 głosów
odpowiedź 10 marca 2017 przez mokrowski Mędrzec (155,460 p.)

1. Nie pozostawiaj w kodzie programu fragmentów komentowanych przed publikacją lub zatwierdzeniem w repozytorium.

2. Stosuj sugestywną nazwę funkcji. Nazwa compare() sugeruje porównanie a nie zwrócenie wartości mniejszej z któregoś ze wskaźników. Lepsze było by min lub less... Z compare() ktoś spodziewał by się zwrócenia zestawu [-1, 0, 1] lub [true, false].

3. Twoje compare() można skrócić i podnieść jego czytelność. Oczywiście nie należy przesadzać z operatorem warunkowym ( ? ) ale tu wydaje się usprawiedliwiony.

int less(int* w1, int* w2) {
    return ( *w1 < *w2 ) ? *w1 : *w2;
}

4. Jeśli koniecznie musisz używać getchar() do prawidłowej pracy z IDE, proponuję zmienić, uaktualnić lub skonfigurować poprawnie zestaw narzędzi.

5. Na początku nauki proponuję trzymać się wykładni że zawsze kod z if otaczasz nawiasami klamrowymi. Nawet gdy jest tylko 1 linijka. To bardzo ułatwi znalezienie błędu.

komentarz 10 marca 2017 przez BinaryMan Stary wyjadacz (12,620 p.)

Okay dzięki za uwagi smiley

komentarz 10 marca 2017 przez niezalogowany
ad. 1: Dlaczego?
komentarz 10 marca 2017 przez mokrowski Mędrzec (155,460 p.)

Ponieważ zawsze pojawi się pytanie u czytelnika: "Co to jest i do czego służy?". Inna osoba niż twórca będzie bała się usunąć kod bo to może być ... "coś potrzebnego lub wariant algorytmu". Tak więc kod komentowany pozostaje a program się rozwija. Taka "staroć" zupełnie oddala się od obecnego przekazu i sposobu działania programu ale.... każdy boi się jej usunąć .... "bo może jest potrzebna.... do.... czegoś... " :-) W konsekwencji masz program i "zagadki" w komentarzach.

Jeśli jest to jakiś fragment kodu typu debug, diagnostyka itp, są inne metody niż komentarz by to wyrazić.

0 głosów
odpowiedź 10 marca 2017 przez tangarr Mędrzec (154,860 p.)

Jeżeli chcesz to możesz zaalokować zmienne na stercie.

int *number = new int();
cin >> *number;
// ...
delete number;
1
komentarz 10 marca 2017 przez draghan VIP (106,230 p.)

Jeżeli chcesz to możesz zaalokować zmienne na stercie.

Jakieś uzasadnienie?

Z mojej strony: ręczne zarządzanie pamięcią w kodzie nieodpowiedzialnym za zarządzanie zasobami jest antywzorcem i nie powinno być stosowane - chyba że w celach edukacyjnych.

Podobne pytania

0 głosów
2 odpowiedzi 234 wizyt
pytanie zadane 29 sierpnia 2017 w HTML i CSS przez DraveS Początkujący (300 p.)
0 głosów
1 odpowiedź 227 wizyt
pytanie zadane 20 sierpnia 2017 w PHP przez Smatix Obywatel (1,050 p.)
0 głosów
3 odpowiedzi 447 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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!

...