/* Ime in priimek:Franc Vrbančič Datum:marec 2006 BESEDILO NALOGE:Načrtuj, testiraj, kodiraj in dokumentiraj rešitev naloge: Uporabnik poda N števil v intervalu od -100 do 200. Izpiši vsa števila. Najdi in izpiši največje ter najmanjše število. Program mora preveriti pravilnost in interval vnosa števil. Izpiši števila in rezultate. Opisni načrt naloge je priložen v dokumentu resitev_nalogemarec2006.doc DOBRO JE VEDETI!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1 FINTA 0:Opis delovanja pravilnost vnosa input- podatek v obliki stringa, ki bi naj predstavljal stevilo output-ce je podatek, stevilo je izhod true, drugace false Delovanje: tekstovni podatek znak po znak preverjam glede na lego zanka v ASCII tabeli. Števila zasedajo mesta od 48(cifra 0) do 57 (cifra 9). Ce določen znak ni v teh mejah postavim pogoj na false. Preverim vse znake. Ce so vsi znaki dovoljeni vrnem true, kar pomeni, da je podani niz znakov število, drugace vrnem false, kar pomeni, da je v nizu znakov vsaj en znak, ki ni cifra. PAZI:pri negativnih številih je na prvem mestu znak minus'-', ki ga preskočimo. FINTA 00: pretvorba znakovnega tipa v številski Če znakovni tip odatkov vsebuje znake '-', '1', '2', ..., '9' ga lahko pertvorim v številski tip. Princip pretvorbe je naslednji. Jemljem znak po znak, ga pretvorim v cifro ter cifro dodam k številu. Če je prvi znak '-' ga preskočim in na koncu tevilo pomnožimo z vrednostjo -1. Pretvorba znaka v cifro lahko poteka s pomočjo ASCII tabele ali s pomočjo switch strukture. Ko obvladamo princip preverjanja števil si lahko pomagamo tudi z vgrajenimi ukazi. Primer: Imamo znakovni podatek "147" in ga bomo pretvorili v število 147 stevilo=0;//celoštevilčni tip za shranjevanje števila vzamem '1' in ga pretvorim v cifro 1. dodam cifro ena k stevilu : stevilo*10 +cifra=0*10+1=1, 1 shranim v stevilo vzamem '4' in ga pretvorim v cifro 4. dodam cifro ena k stevilu : stevilo*10 +cifra=1*10+4=10+4=14, 14 shranim v stevilo vzamem '7' in ga pretvorim v cifro 7. dodam cifro ena k stevilu : stevilo*10 +cifra=¸14*10+7=140+7=147, 147 shranim v stevilo V osnovi ponavljamo ukaze:vzami en znak iz podatkov, pretvori znak v cifro, dodaj cifro k ševilu, shrani rezultat. FINTA 1: ukaz ime_niza.length() Dolžino niza podatkov ugotavljam s pomočjo ukaza IME_NIZA.length(). Ukaz vrne dolžino niza z imenom IME_NIZA kot celoštevilčno vrednost. input: spremenljivka znakovnega tipa output: številski tip, ki pomeni število znakov v podanem znakovnem tipu Primer: string jahoo; jahoo="12356ab" short dolzina; dolzina=jahoo.length(); cout< // vhodno-izhodni ukazi #include //standardni ukazi #include // za lazje delo z nizi, veljavno le v C++ in ne v C# using namespace std; // uporaba imenskega prostora ni treba pisati std::ukaz // GLOBALNA deklaracija const short Nmax=20;// največ toliko števil dovolim const short Nmin=0;// pod to ne grem, vsaj eno število hočem const long Imax=200;// nad to ne grem s ševili const long Imin=-100;// pod to ne grem s števili int main() { string Nbeseda;//število števil v obliki znakov, ki ga podauporabnik short n;// število števil, ki ga bomo dobili iz Nbeseda pri pretvorbi bool napaka;//za preverjanje pravilnosti vnosa short indeks;// Ütevec zanke int cifra; // ko znak pretvorim v številsko vrednost, ga shranim tukaj //********** KORAK 1************************************************ do //preverjanje intervala števila N { do // citam in preverjam pravilnost vnosa Nbeseda { napaka=true;//predvidevam, da so v podani besedi vsi znaki dovoljeni cout<<"Podaj koliko števil bomo čitali. Dovoljeno je od 0 do "<57))napaka=false;// Ŕe znak ni v mejah, zadeva ni Ütevilo indeks=indeks+1;//naslednji znak }; if(false==napaka) {// če ni pravilen vnos to javim z dodatnimi navodili cout<<"Mislim, da rabiš rahlo pomoč, ker ne ločiš med števili in znaki."; cout<<" Število je sestavljeno iz cifer 0, 1, 2, ..., 9, vse ostalo"; cout<< " ni dovoljeno v številu. Štekaš???"<Nmax)or(n<=Nmin)) {// če ni pravilen interval javim z dodatnimi navodili cout<<"Mislim, da rabiš rahlo pomoč, ker ne upoštevaš intervala."; cout<<" Te bom vrnil nazaj na ponovni vnos. Pazi, da se spet ne bereva."; if(n>Nmax) cout<< " Število je bilo preveliko. Štekaš???"<Nmax)or(n<=Nmin) ); //********** KORAK 2************************************************ int stevila[Nmax];//za podana števila short stevec;//katero število smo trenutno včitali stevec=0;//nobenega števila še nisem včital, moram pa včitati N števil do//čitanje N števil v polje stevila { do //preverjanje intervala podanega števila { do // citam in preverjam pravilnost vnosa števila { napaka=true;//predvidevam, da so v podani besedi vsi znaki dovoljeni cout<<"Podaj "<57))napaka=false;// Ŕe znak ni v mejah, zadeva ni Ütevilo indeks=indeks+1;//naslednji znak }; if(false==napaka) {// če ni pravilen vnos to javim z dodatnimi navodili cout<<"Mislim, da rabiš rahlo pomoč, ker ne ločiš med števili in znaki."; cout<<" Število je sestavljeno iz cifer 0, 1, 2, ..., 9, vse ostalo"; cout<< " ni dovoljeno v številu. Štekaš???"<Imax)or(stevila[stevec]Imax) cout<< " Število je bilo preveliko. Štekaš???"<Imax)or(stevila[stevec]max_st) //novo število je večje -> zapomni si ga { max_st=stevila[stevec]; legamax=stevec; }; //lega novega števila if (stevila[stevec] zapomni si ga { min_st=stevila[stevec]; legamin=stevec; }; //lega novega števila stevec=stevec+1;//naslednje število }; //********** KORAK 4************************************************ stevec=0;//prvi element polja cout<<"Vseh števil je bilo "<