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

Czy można w ten sposób skrócić kod?

Object Storage Arubacloud
+1 głos
629 wizyt
pytanie zadane 15 stycznia 2021 w C i C++ przez rain.deer Początkujący (430 p.)

Hej,

zaczęłam dziś przerabiać książkę C++ Primer, 5th ed. i jest tam zadanie 1.19, w którym chodzi o to, żeby użytkownik wpisał dwie liczby różniące się od siebie i następnie program ma wypisać uszeregowane od najmniejszej liczby, które znajdują się między tymi wypisanymi liczbami.

Stworzyłam taki kod jak poniżej i zastanawiam się, czy można, tak jak to zrobiłam, pozostawić "body" pętli if puste? Inaczej musiałabym wpisywać w nie tą pętlę while, co dałoby aż 2 jej wywołania w paru linijkach kodu. Program działa, przynajmniej u mnie. smiley

#include <iostream>

int main()
{
	int small = 0, big = 0;
	std::cout << "Please input 2 integers: ";
	std::cin >> small >> big;

	if (small < big) {
	
	}
	else {
		int temp = small;
		small = big;
		big = temp;
	}
		
	while (small <= big)
	{
		std::cout << small << std::endl;
		++small;
	}

		return 0;
}

 

komentarz 15 stycznia 2021 przez Tomek Sochacki Ekspert (227,510 p.)

a po co ten pusty blok if? Tego if można zapisac jako:

if (small >= big) {
    int temp = small;
    small = big;
    big = temp;
}

 

komentarz 15 stycznia 2021 przez rain.deer Początkujący (430 p.)

@Tomek Sochacki, faktycznie, wtedy cały kod diametralnie się upraszcza smiley

komentarz 15 stycznia 2021 przez NewEraOfPeace Gaduła (4,790 p.)
btw możesz tutaj użyć std::swap, lub z racji, że to liczby xor swap
komentarz 15 stycznia 2021 przez rain.deer Początkujący (430 p.)

Jeszcze nie znam tego sposobu. Pokombinuję.smiley

komentarz 15 stycznia 2021 przez VBService Ekspert (252,660 p.)
edycja 16 stycznia 2021 przez VBService

[ edit ]

#include <iostream>

int main() {
   ...
   if (small > big)
       std::swap(small, big);
   ...
}

 

1
komentarz 16 stycznia 2021 przez Milesq Nałogowiec (32,020 p.)

@rain.deer, pamiętaj, że if to nie pętla ;) Możesz powiedzieć "warunek" lub wyrażenie warunkowe, ale nie pętla

1
komentarz 16 stycznia 2021 przez NewEraOfPeace Gaduła (4,790 p.)

@VBService,

a te <bits/stdc++.h> to za jakie grzechy?

1
komentarz 16 stycznia 2021 przez VBService Ekspert (252,660 p.)

@NewEraOfPeace, ach słusznie, pisałem coś innego w między czasie i zostało w edytorze i bezmyślnie zaznaczyłem przy kopiowaniu. wink

1
komentarz 16 stycznia 2021 przez rain.deer Początkujący (430 p.)

@Milesq, to był taki niefortunny skrót myślowy. Faktycznie przecież w "if" nic się nie zapętla.

3 odpowiedzi

+2 głosów
odpowiedź 15 stycznia 2021 przez SzkolnyAdmin Szeryf (86,360 p.)

A nie lepiej zapytać się odwrotnie?

if (small > big) {
    int temp = small;
    small = big;
    big = temp;
 }

 

komentarz 15 stycznia 2021 przez rain.deer Początkujący (430 p.)

@SzkolnyAdmin, faktycznie lepiej.smiley

+1 głos
odpowiedź 15 stycznia 2021 przez VBService Ekspert (252,660 p.)
edycja 16 stycznia 2021 przez VBService

wink [ edit ]

@mokrowski

a ^= b ^= a ^= b;
...

    if (small > big) //swapping using bitwise operator
        small ^= big ^= small ^= big;

    while (small < big - 1)
        std::cout << ++small << std::endl;

...
...

    if (small > big)
        std::swap(small, big);

    while (small < big - 1)
        std::cout << ++small << std::endl;

...

 

komentarz 16 stycznia 2021 przez rain.deer Początkujący (430 p.)

Twoje rozwiązanie rewelacyjnie skraca kod. Dziękuję smiley

+1 głos
odpowiedź 16 stycznia 2021 przez mokrowski Mędrzec (155,460 p.)

A żeś się zafiksował na tym swapowaniu... Po co?

#include <iostream>
#include <algorithm>
 
int main()
{
    int a = 0, b = 0;
    std::cout << "Please input 2 integers: ";
    std::cin >> a >> b;
    for(auto i = std::min(a, b) + 1; i < std::max(a, b); ++i) {
	    std::cout << i << '\n';
    }
}

Poza tym...

a ^= b ^= a ^= b;

.. ma jeszcze krótszy kod zmiany wartości zmiennych. Niemniej jednak nie generuje to wydajnego kodu asemblera na większości platform.

Podobne pytania

+1 głos
1 odpowiedź 531 wizyt
pytanie zadane 7 kwietnia 2021 w C i C++ przez Mavimix Dyskutant (8,390 p.)
+1 głos
2 odpowiedzi 393 wizyt
+1 głos
2 odpowiedzi 195 wizyt

92,547 zapytań

141,388 odpowiedzi

319,506 komentarzy

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

...