Skocz do zawartości

Temat został przeniesiony do archiwum

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

helfire

[C++] Tablice, case'y

Rekomendowane odpowiedzi

Otóż mam program:

#include <iostream>
using namespace std;
int main()
{
while (true)
{


	int tab[100];
	int x;

	cout << endl << "------------------------------------------------------------" << endl;
	cout << "Menu:" << endl << endl;
	cout << "1.  Wypelnij tablice wartosciami losowymi [0-100]" << endl;
	cout << "2.  Wypelnij tablice wartosciami losowymi [50-100]" << endl;
	cout << "3.  Wypelnij tablice wartosciami losowymi [-1,1]" << endl;
	cout << "4.  Wyswietl wskazana tablice" << endl;
	cout << "5.  Wyznacz sume oraz srednia arytmetyczna elementow w tablicy" << endl;
	cout << "6.  Wyznacz sume elementow zapisanych na parzystych pozycjach w tablicy" << endl;
	cout << "7.  Posortuj wskazana tablice" << endl;
	cout << "8.  Odwroc wskazana tablice" << endl;
	cout << "9.  Przesun wszystkie elementy w tablicy o jedna pozycje w prawo" << endl;
	cout << "10. Przesun wszystkie elementy w tablicy o dwie pozycje w lewo" << endl;
	cout << "11. Wyznacz dwie najmniejsze wartosci w tablicy oraz ich indeksy" << endl;
	cout << "12. Wyznacz ktora wartosc pojawia sie w tablicach najczesciej i ile razy" << endl;
	cout << endl << "Wpisz 0 aby zakonczyc dzialanie programu" << endl;
	cout << "------------------------------------------------------------" << endl;
	cout << endl << "Wybierz opcje" << endl;

	cin >> x;

	switch (x)
	{
	case 1:

		for (int i = 0; i <= 100; i++)
		{
			tab[i] = std::rand() % 101;
		}
		cout << "Zrobione!";
		break;


	case 2:

		for (int i = 0; i < 100; i++)
		{
			tab[i] = std::rand() % 51 + 50;
		}
		cout << "Zrobione!";
		break;


	case 3:

		for (int i = 0; i < 100; i++)
		{
			tab[i] = std::rand() % 3 - 1;
		}
		cout << "Zrobione!";
		break;


	case 4:

		break;

	case 5:  break;
	case 6: break;
	case 7: break;
	case 8: break;
	case 9: break;
	case 10:break;
	case 11:break;
	case 12:break;
	case 0:exit(0); break;

	}

}

system("pause");
return 0;
}

 

W 4 case, muszę zrobić, aby program mi wyświetlił uzupełnioną wcześniej tablice

 

Jeśli zapisuję to tak

cout<<tab[i];

 

To nie działa, i nie mam pomysłu, jak to zrobić

 

Pomoże ktoś?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ale tak po prostu cout << tab, czy w pętli tak jak w innych przypadkach?

 

Co rozumiesz pod "nie działa"? Nic nie wypisuje, źle wypisuje, wywala się?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Taka mała uwaga - w case 1 wychodzisz poza zakres.... Dodatkowo Wypisane będą głupoty, bo w kolejnym przejściu pętli może być tab w innym miejscu pamięci.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Po prostu cout<<tab, wciskając case 4, muszę wyświetlić wcześniejszą tablice. Jednak gdy pisze tak jak pisze, visual wywala mi błąd, że nie zdefiniowano i.

 

Rzeczywiscie, w 1 jest też poza zakresem. Jak byłoby lepiej to zapisać?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

po pierwsze jak już wyżej napisano

 

int tab[100];

 

ma być przed while bo inaczej będzie prawdopodobnie źle działać (tab będzie tworzone i niszczone co przebieg pętli)

 

co do wyświetlania

 

               case 4:

                       for (int i = 0; i < 100; i++)
                       {
                               cout << tab[i] << " ";
                       }
                       cout << endl;
                       cout << "Zrobione!";
                       break;

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dzięki wielkie, tab przed whilem, i 4 w forze. Wszystko śmiga jak należy ;)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Po prostu cout<<tab, wciskając case 4, muszę wyświetlić wcześniejszą tablice. Jednak gdy pisze tak jak pisze, visual wywala mi błąd, że nie zdefiniowano i.

 

Rzeczywiscie, w 1 jest też poza zakresem. Jak byłoby lepiej to zapisać?

Bo nie zdefiniowano.

Jeżeli deklaracja zmiennej jest w bloku {}, to ona żyje tylko w tym bloku (for-a też to dotyczy).

Biorąc przykład:

               case 4:

                       for (int i = 0; i < 100; i++)
                       {
                               cout << tab[i] << " "; //tu i istnieje i można z tej zmiennej korzystać
                       }
                       //tu i już nie istnieje i użycie jej spowoduje błąd kompilacji
                       cout << endl;
                       cout << "Zrobione!";
                       break;

 

Żeby nie wychodzić poza zakres, to trzeba dać dobry warunek w pętli, czyli nie i<=100, a i<100.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

czyli w pierwszym wystarczy zmienić warunek w pętli z i<=100, na i<100?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Tak.

Jak nie wiesz czemu, to polecam zrobić krótki test:

for(int i=0;i<=10;++i) cout<<i<<endline;

A potem zrobić to samo ale z warunkiem <

 

Do tego warto pamiętać, że w C/C++ tablice indeksuje się od 0. Czyli dla 100-elementowej tablicy ostatni element jest pod indeksem 99.

Może się to wydawać nielogiczne, ale ma to uzasadnienie, bo tablica jest w zasadzie wskaźnikiem, a indeks to offset.

Taki mały przykładzik:

#include <stdio.h>

int main()
{
char tab[20]="Ala ma kota";
char *c="Ala ma kota";
printf("%c\n",c[4]);
printf("%c\n",tab[4]);

printf("%s\n",c+4);
printf("%s\n",tab+4);
}

 

Warto pamiętać o tych właściwościach tablicy zwłaszcza jak się używa jej jako argumentu funkcji. Można się przejechać jak nie pamięta się, że to wskaźnik i operacje na argumencie tablicowym wewnątrz funkcji mają wpływ na zewnątrz funkcji.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
' date='27 Listopad 2015 - 16:59' timestamp='1448639955' post='13762325']

[...]

Może się to wydawać nielogiczne, ale ma to uzasadnienie, bo tablica jest w zasadzie wskaźnikiem, a indeks to offset.

[...]

 

Warto pamiętać o tych właściwościach tablicy zwłaszcza jak się używa jej jako argumentu funkcji. Można się przejechać jak nie pamięta się, że to wskaźnik i operacje na argumencie tablicowym wewnątrz funkcji mają wpływ na zewnątrz funkcji.

Może uściśilć warto, bo taki skrót myslowy może namieszac niektórym w głowie i zrobią sobie krzywdę. Nazwa tablicy konwertuje sie na wskaźnik na pierwszy jej element (nie nie jest wskaźnikiem, bo na przykład tab++ zrobić Tobie nie wolno). I do funkcji przekazujemy wskaźnik, a nie tablicę (zazwyczaj, na upartego można przekazać tablicę, ale to nie będzie takie proste).

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

  • Tematy

  • Odpowiedzi

    • @Spl97 to znaczy że jak mam rachunki prognozowane a już zapłaciłem po starej wyższej cenie to teraz elektrownia odda mi pieniądze  Co to za państwo z kartonu gdzie z dnia na dzień takie rzeczy się dzieją  @Camis nie ma czegoś takiego jak lewy podpis Są jakieś konkrety co podpisali ? Jakie polecenia wydawali ? Bo np policja bez wymaganej ustawy nakładała mandaty karne na ludzi chodzących bez maski to za takie coś powinien wylecieć komendant główny i wszyscy wojewódzcy i powiatowi
    • Też doszedłem do takiego wniosku. 5950x i Fortis 3 😀 Tryb Turbo Boost daje duże skoki CPU V oraz MHz i podbija na chwile temperaturę. Czyli sposobem na skoki temperatury CPU (przyspieszanie i zwalnianie wentylatora podczas jakiegoś małego procesu)  jest tylko ustawienie opóźnienia w Fan control ?  Mówisz o max rpm ale na czym? ja mam tylko max RPM na obudowie, będę to zmieniał. Wentylatorem od CPU steruje płyta główna, tylko, że na opcji auto.... Nigdy nie korzystałem z Turbo Boosta, zawsze miałem wyłączony na innych CPU, bo korzystałem z OC a teraz OC na CPU już nie ma sensu. No tak, wykrywa wszystkie, ukryłem nieaktywne, zostawiłem tylko jeden i przypisałem do niego GPU. W sekcji speeds są dwa CPU i GPU wiec przypisałem GPU do tego o góry i ustawiłem krzywą, ale to już już dawno.  Na froncie mam jeden wentylator oraz jeden z tyłu tak jak jest oryginalnie w R5. Kiedyś myślałem nad dodaniem drugiego wentylatora na front tylko miałem wątpliwości bo skoro 2 wentyle wpuszczą tyle powietrza do budy to w jaki sposób ten na tyle ma to wszystko w tym samym czasie wyciągnąć, nie będzie się robił nadmiar ciepła w środku ? Ja nie wiedziałem, że 3 pinowe wentylatory można podłączyć pod 4 pinowe wejście na płycie głównej. podłączyłem teraz na chwilę ten frontowy Dynamic GP-14 140 mm. W zakładce speeds się nie pojawił, ale można było go dodać przez "No calibration" chciałem zobaczyć sterowanie manualne, to zaczęło sterować wentylatorem CPU zamiast Fun4. Jeśli kupie 4 pinowy, to jest jakaś przejściówka, żeby podłączyć, się pod kontroler Fractala? bo tam jest mniejsze gniazdo na max 3 pin (2).  
    • Jeżeli zaczną wchodzić strefy czystego transportu, to ludzie poruszający się starszymi autami sami będą chcieli udowodnić, że auto EURO 5 czy 6 też może syfić bardziej niż ich EURO 4 (czemu nie zaprzeczam, bo tak może być jak właśnie jest coś pokombinowane) więc sami mogą przypadkiem wymusić szybszą zmianę przepisów  
    • Odpowiednikiem dla RX 6600 jest RTX 2070 przynajmniej w 1080P  https://www.techpowerup.com/review/powercolor-radeon-rx-6600-fighter/31.html Ja sam siedzie na RX 6700 i daje radę swego czasu chodziły 750zł w wersji GPRO X080 od Sapphire
    • Silnik 8tys zł + rozrząd ORI + płyny + robocizna = 13tys zł  Tyle zapłacił znajomy za wymianę silnika w 5 letnim MK5. Robił mu miejscowy mechanik.  Skrzynia automat PS kompletny remont części+ robocizna ~14tys zł. DPF jest niezniszczalne w tym aucie. Wypala się nawet na biegu jałowym.
  • Aktywni użytkownicy

×
×
  • Dodaj nową pozycję...