Rakstīt ziņojumu 
 
Pavediena vērtējums:
  • 0 balsis - 0 vidējais
  • 1
  • 2
  • 3
  • 4
  • 5
Atkal es ar vajadzību pēc basic helpa C++ :D
Autors Ziņa
Trac3 Atslēdzies
Junior Member
**

Ziņojumi: 31
Pievienojās: Sep 2008
Reputācija: 0
Ziņojums: #1
Smile Atkal es ar vajadzību pēc basic helpa C++ :D
Tātad mani interesē pāris lietiņas..
Kods:
#include <iostream>
#include <limits>
using namespace std;

int main()
{
    int i;
    while (true) {
        cout << "Enter integer: ";
        cin >> i;
        if(!cin){
                      cin.clear();
                      std::cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
                      }
        else {
             cin.ignore(numeric_limits<int>::max(), '\n');
             if (cin.gcount() == 1) break;
             }          
        cout << "Not an integer" << endl;
}
    cout << "You entered integer " << i << endl;
    system("pause");
    return 0;
}
No šī koda mani interesē šī daļa..

std::cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
}
else {
cin.ignore(numeric_limits<int>::max(), '\n');
if (cin.gcount() == 1) break;
}

Kura ir iekrāsota ar bold..Ko viņa dara un kā darbojas..
Skatījos google bet neatradu..

Tad mans skripts pirmais c++
Kods:
/********************************************************
Ervīns Jekovičs, ej08046
A23. Izveidot programmu, kas nosaka vai divi dotie
naturālie skaitļi ir savstarpēji pirmskaitļi.
Programma izveidota: 2008/09/XX
********************************************************/
#include <iostream>  // Bibliotēka, kas ļauj izmantot cin un cout jeb basic input/output..                                    
#include <math.h>    // Bibliotēka, kas ļauj izmantot matematiskās funkcijas kā ceil()..

using namespace std;

int main () // Funkcijas nosaukums un tās sākums!
{
    long double fnumCheck = 0;  // Pirmais pārbaudes mainigais..
    long double snumCheck = 0;  // Otrais pārbaudes mainigais..
    unsigned long int fnum = 0; // Pirmais skaitlis..
    unsigned long int snum = 0; // Otrais skaitlis..
    int dnum = 0;         // Mazākais skaitlis starp abiem..
    int procstart = 0;    // Skaitlis ar kuru sāks rēķināt procentus..
    float fres = 0;       // Pirmā skaitļa pārbaudes rezultāts..
    float sres = 0;       // Otra skaitļa parbaudes rezultāts..
    int fcheck = 0;       // Pārbaudes vērtība pirmajam skaitlim..
    int scheck = 0;       // Pārbaudes vērtība otrajam skaitlim..
    float proc = 0;       // Procenti, par to, kāda varbūtība, ka tie ir savstarpēji pirmskaitļi..
    long double againCheck = 0; // Jautajuma, atbildes pārbaudes vērtība
    int again = 0;        // Jautajuma rezultats, vai meklet velreiz..
    long double optionCheck = 0;     // Jautajuma, atbildes pārbaudes vērtība
    int option = 0;       // Atbilde uz jautajumu, vai rādīt pārbaudes gaitu..
    // Izvada īsu informācija par programmu!
    cout << "//*************************************************************\\\\\n";
    cout << "        Programma, kas parbauda divus ievaditos skaitlus\n";
    cout << "          un nosaka, vai tie ir savstarpeji pirmskaitli!\n";
    cout << "               Abi skaitli nedrikst but vienadi..\n\n";
    cout << "                     //** OPTIONS **\\\\\n\n";
    cout << "       1 = Radis parbaudes gaitu (Skaitli no 2 lidz 50000)\n";
    cout << "    0 = Neradis parbaudes gaitu (Skaitli no 2 lidz 4294967295)\n";
    cout << "\\\\*************************************************************//\n\n";
    // Nosaka, vai radīt visu procesa gaitu ar procentiem..
    cout << "Vai radit parbaudes gaitu: ";
    cin >> option;
    optionCheck = (int)option; // Parveido option vertibu par skaitli..
    // Pārbauda, vai mainigais option ir ievadits 1, vai 0, neļauj ierakstīt burtus..
    while( (option > 1) || (option < 0) || (!cin) || (option != optionCheck) ){
           cin.clear(); // Izdzēš ievadīto option vertību
           cin.ignore(10000, '\n');
           cout << "\nTev jaievada 1(JA) vai 0(NE), lai turpinatu..\n\n";
           cout << "Vai radit parbaudes gaitu: ";
           cin >> option;
           optionCheck = (int)option;
    }
    cout << "\nIevadi pirmo skaitli: ";
    cin >> fnum; // Lietotājs ievada pirmo skaitli..
    fnumCheck = (int)fnum; // Parveido fnum vertibu par skaitli..
    // Atiecīgi lietotāja norādītajam izvades veidam, nosaka nepieciešamos ierobežojumus..
    if(option){
    /*
    Pārbauda, vai pirmais skaitlis ietilpst skaitļu robežās no 1 līdz 50000,
    ja lietotājs ievadijis 1 pie jautājuma par to vai rādīt detalizēti procesu!
    */
        while((fnum <= 1) || (50000 < fnum) || (!cin) || (fnum != fnumCheck)){
        cin.clear(); // Izdzēš ievadīto fnum vertību
        cin.ignore(10000, '\n');
        cout << "\nSkaitlis neatbilsts dotajiem ierobezojumiem!\n\n";
        cout << "Ievadi pirmo skaitli: ";
        cin >> fnum;
        fnumCheck = (int)fnum; // Parveido fnum vertibu par skaitli..
    }
    }else{
    /*
    Pārbauda, vai pirmais skaitlis ietilpst skaitļu robežās no 1 līdz 4294967295,
    ja lietotājs ievadijis 0 pie jautājuma par to vai rādīt detalizēti procesu!
    */
        while((fnum <= 1) || (4294967295 < fnum) || (!cin) || (fnum != fnumCheck)){
        cin.clear(); // Izdzēš ievadīto fnum vertību
        cin.ignore(10000, '\n');
        cout << "\nSkaitlis neatbilsts dotajiem ierobezojumiem!\n\n";
        cout << "Ievadi pirmo skaitli: ";
        cin >> fnum;
        fnumCheck = (int)fnum; // Parveido fnum vertibu par skaitli..
    }
    }
    cout << "\nIevadi otro skaitli: ";
    cin >> snum; // Lietotājs ievada otro skaitli..
    snumCheck = (int)snum;
    // Atiecīgi lietotāja norādītajam izvades veidam, nosaka nepieciešamos ierobežojumus..
    if(option){
    /*
    Pārbauda, vai otrais skaitlis ietilpst skaitļu robežās,
    ja lietotājs ievadijis 1 pie jautājuma par to vai rādīt
    detalizēti procesu un, vai tas nav vienāds ar pirmo skaitli..
    */
        while( (snum <= 1) || (50000 < snum) || (snum == fnum) || (!cin) || (snum != snumCheck) ){
            cin.clear(); // Izdzēš ievadīto snum vertību
            cin.ignore(10000, '\n');
            cout << "\nSkaitlis neatbilsts dotajiem ierobezojumiem!\n\n";
            cout << "Ievadi otro skaitli: ";
            cin >> snum;  
            snumCheck = (int)snum;
        }
    }else{
    /*
    Pārbauda, vai otrais skaitlis ietilpst skaitļu robežās no 1 līdz 4294967295,
    ja lietotājs ievadijis 0 pie jautājuma par to, vai rādīt detalizēti procesu
    un, vai tas nav vienāds ar pirmo skaitli!
    */
        while( (snum <= 1) || (4294967295 < snum) || (snum == fnum) || (!cin) || (snum != snumCheck) ){
            cin.clear(); // Izdzēš ievadīto snum vertību
            cin.ignore(10000, '\n');
            cout << "\nSkaitlis neatbilsts dotajiem ierobezojumiem!\n\n";
            cout << "Ievadi otro skaitli: ";
            cin >> snum;
            snumCheck = (int)snum;  
        }
    }
    // Pārbauda, kurš no skaitļiem ir mazāks, lai cikls būtu īsāks
    // un saglabā mazāko vērtību ar mainīgo dnum..
    if(fnum < snum){
        dnum = fnum;      
    }else{
        dnum = snum;
    }
    // Saglabā mainīgo dnum kā procstart, lai ciklā šī vērtība nemainītos..
    procstart = dnum;
    while(dnum >= 1){ // Sākas cikls, kas turpinās kamēr dnum vērtība ir lielāka vai vienāda ar 1!
        // Dala skaitlus un pievieno dalijuma vertibas mainigajiem..
        fres = (float)fnum / dnum;
        sres = (float)snum / dnum;
        // noapaļo dalijuma vertibas uz leju..
        fcheck = (int)floor(fres);
        scheck = (int)floor(sres);
        /*
        Galvenā pārbaude - Nosaka vai skaitlis ir pirmskaitlis salīdzinot
        dalijuma vertibu ar noapaļoto dalijumu.. Ja abas vērtības ir veseli
        skaitļi tad tie nav savstarpēji pirmskaitļi.. Ja dnum vertiba ir 1,
        lai pabeigtu pēdējo cikla daļu..
        */
        if( (fcheck != fres) || (scheck != sres) || (dnum == 1) ){
        // Atiecīgi lietotāja norādītajam izvades veidam, tas parada darbibas procesu kā procentu izvadi..
            if(option){
            proc = (float)dnum / procstart * 100; // Izrēķina procentus..
            proc = 100 - proc; // Apgriež procentus..
            // Izvada procentus..
            cout << "Veiksmiga rezultata varbutiba ir:  ";
            cout << proc;
            cout << "%\n";
            }

            dnum = dnum - 1; // Samazina dnum vertību, lai nebūtu bezgalīgs cikls..
            /*
            Pabeidz ciklu, kad dnum vērtība ir sasniegusi 1 un izvada rezultātus..
            */
            if(dnum == 1){
                 if(option){
            // Atiecīgi lietotāja norādītajam izvades veidam, tas darbibas procesu pēdējo reizi..
                 proc = (float)dnum / procstart * 100;
                 proc = 100 - proc;
                 cout << "Veiksmiga rezultata varbutiba ir:  ";
                 cout << proc;
                 cout << "%\n";
                 cout << "Veiksmiga rezultata varbutiba ir:  100%\n";
                 }
                 cout << "\n\nApsveicu, tu esi atradis savstarpejus pirmskaitlus!\n";
                 cout << "Skaitli ir: ";
                 cout << fnum;
                 cout << " un ";
                 cout << snum;
                 break;
            }
        /*
        Ja galvenā pārbaude izpildās negatīvi, tad izvada kļūdas paziņojumu, ka
        abi skaitļi nav savstarpēji pirmskaitļi un pārtrauc ciklu, izvadot rezultātus..
        */
        }else{
        // Atiecīgi lietotāja norādītajam izvades veidam, tas darbibas procesu pēdējo reizi..
        if(option){
            cout << "Veiksmiga rezultata varbutiba ir:  0%\n";
            }
            cout << "\n\nSTOP! Sie skaitli nav savstarpeji pirmskaitli!\n";          
            cout << "\n\nDiemzel tev nepaveicas, atrastie skaitli nav savstarpeji pirmskaitli!\n";
            cout << "Nepareizie skaitli bija: ";
            cout << fnum;
            cout << " un ";
            cout << snum;
            cout << "\nKopigais dalitajs bija: ";
            cout << dnum;
            break;
        }
    }
    /*
    Kad cikls ir pabeigts, programma piedāvā to atkārtot.. Ja izvēlas "Ja" vērtību 1,
    tad funkcija main() atkārtojas, ja Ne jeb 0 tad programma aizveras..
    */
    cout << "\n\nPaldies, ka izmantojat manu programmaturu!\n";
    cout << "\nGribi meklet velreiz?\n";
    cout << "Ja = 1 , Ne = 0\n";
    cout << "Izvele: ";
    cin >> again;
    againCheck = (int)again;
    /*
    Pārbauda vai ievadīts nepieciešamais skaitlis (1 vai 0), ja nē, tad šis cikls
    atkārtojas, līdz tiek pasniegta īstā vērtība..
    */
    while( (again > 1) || (again < 0) || (!cin) || (again != againCheck) ){
         cin.clear();
         cin.ignore(10000, '\n');
         cout << "\nNedriksti izmantot citus skaitlus..\n";
         cout << "Ja = 1 , Ne = 0\n";
         cout << "Izvele: ";
         cin >> again;
         againCheck = (int)again;    
    }
    /*
    Pārbauda, kāda vērtība ievadīta un pēc tās nosaka turpmāko ceļu, vai nu pozitīvā
    gadijumā atkārto main() funkciju veidojot atkāpi, vai pabeidz programmu aizverot to..
    */
    if(again){
          system("cls");
          main();        
    }else{
          return 0;    
    }
} // Funkcijas beigas!
Interesē tas, kāpēc var ievadīt decimālskaitļus..
Paskatieties varbūt vēl citas nepilnības un kā kko realizēt labākā kompaktākā veidā..
Zinu ka daudz kommentāri Very Happy es vnk nekad nerakstiju kommentārus bet nododot darbus, vinjus vajadzēja tāpēc pārcentos.. Very Happy
17.09.2008 15:28
Atrast visus šī lietotāja rakstītos ziņojumus Citēt šo ziņu atbildē
Cirvis Atslēdzies
pēc būtības

Ziņojumi: 142
Pievienojās: Feb 2008
Ziņojums: #2
RE: Atkal es ar vajadzību pēc basic helpa C++ :D
jesus crist Laughing

cik tev tur komentāri Very Happy

tu esi baigi pārcenties Very Happy

un ko nozīmē "savstarpēji pirmskaitļi"?

tu paties esi pārcenties

es nezinu.... paskaidro, kāpēc šādi Very Happy
unsigned long int fnum = 0; // Pirmais skaitlis..
unsigned long int snum = 0; // Otrais skaitlis..

unsigned?
17.09.2008 17:42
Atrast visus šī lietotāja rakstītos ziņojumus Citēt šo ziņu atbildē
Uģis Lazdiņš Atslēdzies
Emulators pēc pieprasījuma
***

Ziņojumi: 222
Pievienojās: Sep 2008
Reputācija: 8
Ziņojums: #3
RE: Atkal es ar vajadzību pēc basic helpa C++ :D
Unsigned droši vien izmantots vietas taupības nolūkus, jo, pieņemu, ka netiks apskatīti negatīvi skaitļi.

Bet tu točna pārcenties Very Happy
17.09.2008 17:46
Atrast visus šī lietotāja rakstītos ziņojumus Citēt šo ziņu atbildē
PeterB Atslēdzies
(._.)
****

Ziņojumi: 287
Pievienojās: Sep 2008
Reputācija: 10
Ziņojums: #4
RE: Atkal es ar vajadzību pēc basic helpa C++ :D
Kods:
while (a!=b) if (a>b) a-=b; else b-=a;
cout << "Ievadītie skaitļi " << (a==1 ? "ir" : "nav") << " savstarpēji pirmskaitļi";
Rolling Eyes
17.09.2008 18:17
Apskatīt lietotāja interneta adresi Atrast visus šī lietotāja rakstītos ziņojumus Citēt šo ziņu atbildē
Trac3 Atslēdzies
Junior Member
**

Ziņojumi: 31
Pievienojās: Sep 2008
Reputācija: 0
Ziņojums: #5
RE: Atkal es ar vajadzību pēc basic helpa C++ :D
unsigned long int tāpēc ka netiek izmantoti negatīvie skaitļi..
jā mums šito teorēmu vai kas tas tāds ir iemācija aizvakar.. shitais kods tapa pirms tam, tākā tikko sāku c++ tad neiznāju vēl sintaksi, bet darbs bija japabeidz un rakstīju kā māku, galvenais ka viss strādā izņemot lieta ar decimālskaitļiem..
17.09.2008 19:22
Atrast visus šī lietotāja rakstītos ziņojumus Citēt šo ziņu atbildē
Cirvis Atslēdzies
pēc būtības

Ziņojumi: 142
Pievienojās: Feb 2008
Ziņojums: #6
RE: Atkal es ar vajadzību pēc basic helpa C++ :D
Trac3 rakstīja:unsigned long int tāpēc ka netiek izmantoti negatīvie skaitļi..
jā mums šito teorēmu vai kas tas tāds ir iemācija aizvakar..
tā teikt, mani tas "interesē", lai es zinātu, nevis lietotu Laughing

neredzu jēgu tērēt pāris sekundes rakstot to vārdu Very Happy


un kāpēc vispār rādīt, kas notiek?
tas notiks tik ātri, ka tik un tā nesapratīsi, kas tieši tur notiek

priekš debug info tas der... bet ta pat... o_O
17.09.2008 20:27
Atrast visus šī lietotāja rakstītos ziņojumus Citēt šo ziņu atbildē
Trac3 Atslēdzies
Junior Member
**

Ziņojumi: 31
Pievienojās: Sep 2008
Reputācija: 0
Ziņojums: #7
RE: Atkal es ar vajadzību pēc basic helpa C++ :D
man pasham personigi tas patik.. nonem ierobezojumus un ieraksti loti lielus skaitlus tad redzesi aks notiek Smile man gaja apm 1h kamer izgaja cauri procentiem tapec uzliku lai ir ierobezojumi Very Happy kads paskaidros kodu kuru es nesaprotu?
17.09.2008 21:31
Atrast visus šī lietotāja rakstītos ziņojumus Citēt šo ziņu atbildē
PeterB Atslēdzies
(._.)
****

Ziņojumi: 287
Pievienojās: Sep 2008
Reputācija: 10
Ziņojums: #8
RE: Atkal es ar vajadzību pēc basic helpa C++ :D
http://www.cplusplus.com/reference/iostr...gnore.html
http://www.cplusplus.com/reference/iostr...count.html
17.09.2008 21:35
Apskatīt lietotāja interneta adresi Atrast visus šī lietotāja rakstītos ziņojumus Citēt šo ziņu atbildē
jg07025 Atslēdzies
Junior Member
**

Ziņojumi: 9
Pievienojās: Aug 2008
Reputācija: 0
Ziņojums: #9
RE: Atkal es ar vajadzību pēc basic helpa C++ :D
daudzi jau neprot pirms sākt,bet tāpēc drukāt kaut ko tādu...a programmer who never met a languege he didin't like...Very Happy
17.09.2008 23:34
Atrast visus šī lietotāja rakstītos ziņojumus Citēt šo ziņu atbildē
Unknown_Guy Atslēdzies
Atturībnieks
****

Ziņojumi: 306
Pievienojās: Aug 2006
Reputācija: 2
Ziņojums: #10
RE: Atkal es ar vajadzību pēc basic helpa C++ :D
Kods:
cin.ignore(numeric_limits<streamsize>::max(),'\n');
Iztīra visu cin buferi (tas std:: tur nav vajadzīgs)
Kods:
cin.ignore(numeric_limits<int>::max(), '\n');
Iztīra cin buferi max int garumā
Kods:
if (cin.gcount() == 1) break;
ja buferī bijis ints, tad pēc iztīrīšanas tur jabūt vairs tikai '\n', ko ignore būs izmetis, līdz ar to gcount atgriezīs 1.

+/- vajadzētu būt Very Happy
18.09.2008 00:13
Apskatīt lietotāja interneta adresi Atrast visus šī lietotāja rakstītos ziņojumus Citēt šo ziņu atbildē
Trac3 Atslēdzies
Junior Member
**

Ziņojumi: 31
Pievienojās: Sep 2008
Reputācija: 0
Ziņojums: #11
RE: Atkal es ar vajadzību pēc basic helpa C++ :D
hmmm okzi Smile tgd jataisa kas bik interesantaks par shito Very Happy bet ar liekas ka vnk, vienigi bus jaie4eko kā masivus pierakstit c++ Smile
18.09.2008 17:41
Atrast visus šī lietotāja rakstītos ziņojumus Citēt šo ziņu atbildē
Rakstīt ziņojumu 


Lēciens uz forumu:



Kontaktifizmati.lvAtgriezties uz augšuAtgriezties pie saturaArhīva skatsRSS sindikācija