Jak określić przedział liczbowy w C++ builder 6


(system) #1

Witam

Program działa ale zamiast liczb 1,2,3,4 chciałbym wpisać przedział np od 1 do 10.

{

int a=StrToInt(Edit1->Text);

switch (a)

  {

  case 1:Application->MessageBoxA("ale jestes młody","uwaga",0); break;

  case 2:Application->MessageBoxA("czas do szkoły","uwaga",0); break;

  case 3:Application->MessageBoxA("ach ta praca i praca...","uwaga",0); break;

  case 4:Application->MessageBoxA("Po ciężkiej pracy czas na emeryturę","uwaga",0); break;

  default :Application->MessageBoxA("Idź do okulisty","uwaga",0);

  }

}

Program jak widać prosty jak budowa cepa, jednak nie mogę dojść jak zapisać przedział ... wiem że w delphi to by wyglądało [1..10] ale tutaj nie mam bladego pojęcia ...

Będę wdzięczny za pomoc


(Cieplok) #2

Może lepiej te przedziały na ifach:

if (a>=0 && a<=7) {

Application->MessageBoxA("ale jestes młody","uwaga",0); break; }

else if (a > 7 && a <= 24) {

Application->MessageBoxA("czas do szkoły","uwaga",0); break; }

.

.

.

else {

Application->MessageBoxA("Idź do okulisty","uwaga",0);

}

Na switchu byłoby wiecej pisania.


(system) #3

no to rozwiązanie z ifami to ja znam , ale sęk w tym że ten program będzie jeszcze dłuższy ( będzie trochę tych przedziałów ) i wolałbym jednak rozwiązanie ze switch :?


(somekind) #4

Z tego co wiem switch nie daje opcji zakresu. W case'ach trzeba podawać konkretne wartości.

Można też zrobić tak:

switch (a)

  {

  case 1:

  case 2:

  case 3:

  case 4: Application->MessageBoxA("ale jestes młody","uwaga",0); break; 

  default :Application->MessageBoxA("Idź do okulisty","uwaga",0);

  }

Ale to jest jeszcze dłuższe.

Zrób to na ifach, tak jak radzi cieplok


(system) #5

Czyli jednak zrobię to z ifami ... dzięki za pomoc


(Marek Ciarkowski) #6

chyba jako jedyny nie bardzo rozumiem o co Ci chodzi :roll: chcesz żeby program wyświetlił rekordy 1-10 potem 11-20 itd czy co ? jak tak to zrób to za pomocą pętli jakiejś


(system) #7

Program jest na tyle prosty że tu nie bardzo jest co rozumieć ... w okienku edit 1 wpisujesz jakąś tam liczbę ( wiek ) po przyciśnięciu w button1 program sprawdza w jakim się przedziale znajduje i w zależności od tego wyświetla okienko z odpowiednim tekstem ... dzisiaj zapytałem psora od programowania i powiedział to co somekind ... funkcja switch nie działa z przedziałami. Nie mam wyboru, po prostu zrobię ten program z if.


(Marek Ciarkowski) #8

prosty nie prosty ja C++ nie znam choć jest podobny do ActionScript flasha - zrobiłem coś takiego

opis = new Array()

	opis[0] = "ffd"

	opis[1] = "1 opis"

	opis[2] = "2 opis"

	opis[3] = "3 opis"

	opis[4] = "4 opis"

	opis[5] = "5 opis"

	opis[6] = "6 opis"

	opis[7] = "7 opis"

	opis[8] = "8 opis"

	opis[9] = "9 opis"

	opis[10] = "już powinieneś nie żyć ;p"


	tab = new Array()

	this.onEnterFrame = function(){

	for(var i:Number =0; i<=10; i++){

	tab[i]=10*i

	if(dd.text>tab[i]){ 

			odpisz.text = opis[i];

		} 

		}//koniec pętli

	}// koniec funkcji

gdzie "dd" to nazwa pola do którego wpisuję tekst a "odpisz" to pole wyświetlające komunikat. Opisy wczytywane są z tablicy a druga tablica z przedziałami co 10 jest robiona za pomocą pętli

klik


(Cieplok) #9

A co jeśli przedziały nie są regularne?? A tak chyba jest w programie który chciał napisać tabcin.


(Marek Ciarkowski) #10

to wtedy pozostaje chyba tylko ręcznie zdefiniować tablicę z wartościami. W pętli się nie da bo niby według jakiej reguły :roll: a mój przykład pozwala tylko na zmianę co 5 albo 15 itp. a w przypadku różnych wartości podzieliłbym pierwszą tablicę na dwie wartości za pomocą split np:

opis[1]="18|osiemnastka ;p "

jedna tablica, ładny kod i mało edycji a co do if-ów to jestem na nie


(Cieplok) #11

punkomuzykant podsunął mi pomysł jak to można zrobić dla różnych przedziałów a nie w ifach więc na szybko walnąłem takie cuś:

#include 

#include 

#include 


using namespace std;


int main()

{

    const int ilosc = 6;

    int przedzial[ilosc] = { 0, 7, 25, 40, 55, 80};

    string opis[ilosc] = { "niemowlak",

                    "uczen", 

                    "stazysta :P",

                    "pracownik",

                    "emeryt",

                    "jeszcze zyjesz?" };


    int wiek;

    cout << "Podaj wiek: " << endl;        

    cin >> wiek;


    for (int i = 0; i < ilosc-1; i++)

    {

       if (wiek >= przedzial[i] && wiek <= przedzial[i+1])

       {

          cout << opis[i] << endl;

          break;

       }

    }      


    if (wiek > przedzial[ilosc-1])

       cout << opis[ilosc-1] << endl;


    system("PAUSE");                

    return 0;

}

Działa dobrze wystarczy zdefiniować opisy i przedziały dla nich.


(Marek Ciarkowski) #12

o dokładnie kolego to miałem na myśli :slight_smile:


(system) #13

Jednak wolę to zrobić w ifach .... z tego przykładu nie wiele rozumię, i wolę tego psorowi nie pokazywać ... Dziękuję za pomoc, a temat uważam za zamknięty, gdyż program już napisałem z pomocą instrukcji IF.


(Marek Ciarkowski) #14

no to spaliłeś :stuck_out_tongue: jeśli miałeś to na ocenkę to Twoja strata bo wersja na pętlach jest zwyczajnie prawidłowa.