else if czy samo if w programie?

0

Jaka jest różnica między tymi 2 programami, chodzi mi o to czy lepiej używać składni takiej jak w 1 programie, czy w takim jak w 2 programie, polepsza to szybkość programu w przypadku 1 ?

1 program:

#include <iostream>
using namespace std;

int main()
{
	int tablica[5],i;
	int *czerwony = &tablica[3], *zielony;

	cout << "Mamy piecielementowa tablica\nWskaznik czerwony pokazuje na element o indeksie 3\n"
	      	"Na ktory element ma pokazywac wskaznik zielony ? (0 - 4): ";
	cin >> i;

	if(i < 0 || i > 4) cout << "Nie ma takiego element w tej tablicy !";
	else
	{
		zielony = &tablica[i];
		cout << "Z przeprowadzonego porownania skaznikow\nczerwonego z zielonym wynika, ze:\n";
		
		if(czerwony > zielony) cout << "zielony pokazuje na element blizej poczatku tablicy";
		
		else if(czerwony < zielony) cout << "zielony pokazuje na element o wyzszym indeksie";
		
		else cout << "zielony i czerwony pokazuja na to samo";
	}

	return 0;
} 

2 program:

 #include <iostream>
using namespace std;

int main()
{
	int tablica[5],i;
	int *czerwony = &tablica[3], *zielony;

	cout << "Mamy piecielementowa tablica\nWskaznik czerwony pokazuje na element o indeksie 3\n"
	      	"Na ktory element ma pokazywac wskaznik zielony ? (0 - 4): ";
	cin >> i;

	if(i < 0 || i > 4) cout << "Nie ma takiego element w tej tablicy !";
	else
	{
		zielony = &tablica[i];
		cout << "Z przeprowadzonego porownania skaznikow\nczerwonego z zielonym wynika, ze:\n";
		
		if(czerwony > zielony) cout << "zielony pokazuje na element blizej poczatku tablicy";
		
		if(czerwony < zielony) cout << "zielony pokazuje na element o wyzszym indeksie";
		
		if (czerwony == zielony) cout << "zielony i czerwony pokazuja na to samo";
	}

	return 0;
}
1

Bez różnicy, dobry kompilator powinien to zoptymalizować w ten sam kod.
Spróbuj na http://assembly.ynh.io/
PS. różnica jest, ale nieistotna, z jakiejś tajemniczej przyczyny GCC raz stosuje cmp, a raz test.

2

Tutaj żadna, ponieważ Twoje wyrażenia się wzajemnie wykluczają.

Różnica będzie gdy powyższe zdanie nie będzie prawdziwe. Np.

int a = getint();
if(a > 3) cout << "a > 3" << endl;
if(a > 5) cout << "a > 5" << endl;

wypisze dla a = 6```code> wypisze dla a = 6``a > 3
a > 5

ponieważ każdy warunek będzie sprawdzony i wykonany osobno.

Natomiast w strukturze `if`/`else` kolejne przestają być wykonywane po pierwszym, do którego wejdziesz, czyli
```cpp
int a = getint();
if(a > 3) cout << "a > 3" << endl;
else if(a > 5) cout << "a > 5" << endl;

dla a = 6 wypisze a > 3po czym drugiego warunku nawet nie sprawdzi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1