praegune kellaaeg 15.08.2025 17:11:15
|
Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
Ho Ho
HV Guru

liitunud: 16.02.2002
|
28.01.2012 22:05:39
|
|
|
C's on stringide võrdluseks strncmp funktsioon ning sääraselt staatilisse massiivi scanf'iga lugemine lõppeb heal juhul vajalike andmete üle kirjutamisega, halvemal programmi crashimisega.
Sama asi c++'s oeks oluliselt töökindlam implementeerida. Prindid std::cout'iga, loed std::cin'iga ning ka võrdlusi saad teha otse =='ga eeldusel, et char*'i asemel kasutad std::string'i.
Kinda-OT'ish:
C++ on tegelikult üks pagana võimas asi ning üks töö- ja lollikindlamaid keeli üldse kui kasutada standardteeki + smart pointereid ning exceptioneid. C++11'ga tuleb veel kamaluga ülifancyt nänni juurde ning mul tekib juba vägisi soov ka oma koduleht php/pythoni asemel selles kirjutada
_________________ Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity" |
|
Kommentaarid: 106 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
86 |
|
tagasi üles |
|
 |
estplayer
HV kasutaja
liitunud: 15.10.2008
|
30.01.2012 22:03:09
|
|
|
Suur aitäh teie kõigi abi eest! Te olete kindlasti juba tüdinud minu algaja lihtsatest probleemidest, kuid äkki suudate veel natuke aidata. Kuidas lisada C++'s komakohti? C's ma seda oskasin, C++ kohta ei tea. Näide siis selline:
int main()
{
int P;
std::string Y;
int V;
std::cout << "Sisestage pikkus meetrites: \n";
std::cin >> P;
std::cout << "Sisestage uue ühiku kood (alj, ver, kyn, toll, jalg, jard, lii): \n";
std::cin >> Y;
if (Y == "alj")
{
V = (P * 5572);
std::cout << P << "m = " << V << " alj \n";
}
|
Tahaksin nüüd, et V ilmuks 2 kohta peale koma.
|
|
Kommentaarid: 30 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
26 |
|
tagasi üles |
|
 |
Ho Ho
HV Guru

liitunud: 16.02.2002
|
30.01.2012 22:04:50
|
|
|
http://www.cplusplus.com/reference/iostream/manipulators/setprecision/
Seal lehel on üldse palju head infot.
_________________ Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity" |
|
Kommentaarid: 106 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
86 |
|
tagasi üles |
|
 |
estplayer
HV kasutaja
liitunud: 15.10.2008
|
31.01.2012 01:16:57
|
|
|
Nii, järgmine probleem. Pean arvutama kasutaja isikukoodi põhjal tema soo ja vanuse. Praegult on nii palju tehtud:
#include<iostream>
#include<string>
int main()
{
std::string I;
std::cout << "Sisestage isikukood: \n";
std::cin >> I;
std::cout << "Isikukoodi " << I << " andmed: \n";
std::string str1;
str1 = I.substr (0, 1);
str1.c_str();
int sugu = atoi(str1.c_str());
if(sugu == 1 || sugu == 3 || sugu == 5)
{
std::cout << "*mees \n";
}
else if(sugu == 2 || sugu == 4 || sugu == 6)
{
std::cout << "*naine \n";
}
std::string str2;
str2 = I.substr (1, 7);
str2.c_str();
int p2ev = atoi(str2.c_str());
std::string str3;
str3 = I.substr (1, 5);
str3.c_str();
int kuu = atoi(str3.c_str());
std::string str4;
str4 = I.substr (1, 3);
str4.c_str();
int aasta = atoi(str4.c_str());
if(p2ev == 01 - 31 || kuu == 01 - 12 || aasta == 00 - 99)
{
std::cout << "s[ndis " << p2ev << "." << kuu << "." << aasta << "\n";
}
system("pause");
return 0;
}
|
Saan aru, et selle päeva, kuu ja aasta koha peal on midagi väga valesti. Praegult ütleb mulle ainult, kas on mees või naine.
|
|
Kommentaarid: 30 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
26 |
|
tagasi üles |
|
 |
Ho Ho
HV Guru

liitunud: 16.02.2002
|
31.01.2012 01:38:29
|
|
|
Probleem on, et sa ei saa sedasi vahemikke võrrelda. Näiteks p2ev == 01 - 31 tõlgendub seal kui 1-31 ehk võrreldakse, kas p2ev muutujas on väärtus -30
Pead võrdlema eraldi nii alumist kui ülemist otsa, a'la suurem-võrde 1'st ja väiksem-võrdne 31'st
_________________ Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity" |
|
Kommentaarid: 106 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
86 |
|
tagasi üles |
|
 |
estplayer
HV kasutaja
liitunud: 15.10.2008
|
21.03.2012 22:56:09
|
|
|
Tere! On järjekordne probleem. On selline programm:
#include<iostream>
using namespace std;
int main()
{
int P, N = 2;
cout << "Sisestage arv: \n";
cin >> P;
for (N = 2; N <= P - 1; N++)
{
if (P % N == 0)
{
cout << P << " ei ole algarv. \n";
break;
}
}
if (N == P)
{
cout << P << " on algarv \n";
}
system("pause");
return 0;
}
|
Nüüd oleks vaja see edasi teha selleks, et kui arv ei ole algarv, siis ütleks kõik selle arvu jagajad (peale 1 ja arvu iseenda). Endal kahjuks pole aimugi kuidas seda teha
|
|
Kommentaarid: 30 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
26 |
|
tagasi üles |
|
 |
Ho Ho
HV Guru

liitunud: 16.02.2002
|
21.03.2012 23:31:59
|
|
|
No siis lihtsalt selle asemel, et välja kirjutada et pole algarv kirjutad järjest välja kõik nood arvud millega ta jagub.
Muidu kui natuke viitsid nuputada on võimalik su algarvude otsimise algoritmi röögatult palju kiiremaks teha mõningase lisa mälukulu arvelt. Omal ajal panin Pascalis vana P1@188MHz otsima kõik arvud 2-1000000 mõne sekundiga vs sinu stiilis otsing mis võttis 2-100k puhul juba mitu minutit
_________________ Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity" |
|
Kommentaarid: 106 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
86 |
|
tagasi üles |
|
 |
estplayer
HV kasutaja
liitunud: 15.10.2008
|
07.04.2012 23:22:53
|
|
|
Nüüd siis vaja selline programm teha, mis küsib kasutajalt arvu ning genereerib kõigepealt nii mitu juhuslikku arvu (vahemikus 1 kuni miljon) kui kasutaja sisestas ning seejärel paneb need kasvavasse järjeokrda. For example:
input: 5.
output:
Juhuslik jada:
1276, 305, 7, 28, 2000.
Järjestatud jada:
7, 28, 305, 1276, 2000.
Praegult on nii palju tehtud:
#include <stdlib.h>
#include <iostream>
using namespace std;
int main()
{
const int MAX_SIZE = 100;
int numbers[MAX_SIZE];
int numElements;
cout << "Enter number: \n";
cin >> numElements;
srand(static_cast<unsigned int>(time(0)));
int array[numElements];
cout << "Random numbers: \n";
for(int i = 0; i < numElements; i++){
array[i] = (rand()%1000000) + 1;
cout << array[i] << ",";
if(i == numElements){
cout << "i";
}
}
system("pause");
return 0;
}
|
Nüüd ma ei tea ainult kuidas seda kasvavasse järjekorda panna. Bubble sort oleks vist kõige lihtsam viis, aga ei oska seda kasutada hästi.
|
|
Kommentaarid: 30 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
26 |
|
tagasi üles |
|
 |
Ho Ho
HV Guru

liitunud: 16.02.2002
|
08.04.2012 12:07:18
|
|
|
std::sort
Samuti on sul koodi treppimine kergelt öeldes katki
_________________ Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity" |
|
Kommentaarid: 106 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
86 |
|
tagasi üles |
|
 |
estplayer
HV kasutaja
liitunud: 15.10.2008
|
08.04.2012 16:23:59
|
|
|
Ho Ho kirjutas: |
std::sort
Samuti on sul koodi treppimine kergelt öeldes katki |
Jah, koodi treppimine on katki, kuid millegipärast soovitati koodi kirjutamisel kasutada Dev-C++ ning see teebki koodi selliseks. Ise avastasin alles hiljuti Microsoft Visual C++, sellega hulga mõnusam kirjutada.
Aga sortimiseks peame kasutama ühte neist: Insertion · Selection · Bubble · Shell · Merge · Heap · Quick · Quick3
Bubble pidi vist kõige lihtsam olema, aga ei oska seda implementida sinna.
|
|
Kommentaarid: 30 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
26 |
|
tagasi üles |
|
 |
Fukiku
Kreisi kasutaja

liitunud: 06.11.2003
|
08.04.2012 17:11:55
|
|
|
Mida sa oled teinud selleks, et mullitamist realiseerida? Wikis on pseudokoodis näited olemas - ei ole väga keeruline seda C-sse ju tõlkida. Kui sa kuskilt otsast pihta ei hakka, ega ta siis valmis ka ei saa. Seega näita senitehtu välja ja räägi oma probleemidest.
_________________ Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist. |
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
 |
estplayer
HV kasutaja
liitunud: 15.10.2008
|
08.04.2012 18:08:24
|
|
|
Proovisin siis kuidagi mullsorti kasutada.
#include <stdlib.h>
#include <iostream>
using namespace std;
int main()
{
const int MAX_SIZE = 100;
int numbers[MAX_SIZE];
int numElements;
cout << "Enter number: \n";
cin >> numElements;
numElements <= MAX_SIZE;
srand(static_cast<unsigned int>(time(0)));
cout << "Random numbers: \n";
for(int i = 0; i < numElements; i++){
numbers[i] = (rand()%1000000) + 1;
cout << numbers[i] << ",";
if(i == numElements){
cout << "i";
}
}
int exchanges;
int temp;
cout << "\nSorted numbers: \n";
for(int i = 0; i < numElements; i++){
if(numbers[i] > numbers[i + 1]){
temp = numbers[i];
numbers[i] = numbers[i +1];
numbers[i + 1] = temp;
exchanges++;
cout << temp << ",";
}
}
system("pause");
return 0;
}
|
Ei tulnud just väga hästi välja. Kuid ise ei taipa ka päris hästi, mis siin viga on.
|
|
Kommentaarid: 30 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
26 |
|
tagasi üles |
|
 |
Fukiku
Kreisi kasutaja

liitunud: 06.11.2003
|
08.04.2012 18:19:51
|
|
|
Põhimõtteliselt teeb su kood praegu mullisordis ühe iteratsiooni. Korrektses mullisordis on kaks tsüklit - sisemine ja välimine. Sul on hetkel olemas ainult sisemine, mis kõnnib mööda massiivi ja vahetab vastavalt vajadusele elemente omavahel - see on täitsa õige, aga ühe korra massiivist üle käies saame halvima stsenaariumi korral täpselt ühe elemendi õigesse kohta paika.
Lisaks peab olema ka välimine tsükkel, mis sisemist tsüklit kordab senikaua, kuni ühtegi kohavahetust enam massiivis ei tehtud (järelikult on siis kõik juba õiges järjekorras). Selle üle arvepidamiseks oled sa juba muutuja exchanges loonud, kuid ei tee sinna kogutud infoga hetkel midagi.
Seega mine loe wikit uuesti, vaata minu kommentaari ja nuputa edasi.
PS. sorteerimise ajal massiivi elementide väljatrükkimine vist suurt tulu ei anna .. mõistlik oleks lõpus massiiv välja sülitada, kui ta juba sorditud on.
PPS. code tag on postituses hea, syntax on parem.
_________________ Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist. |
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
 |
estplayer
HV kasutaja
liitunud: 15.10.2008
|
09.04.2012 00:06:18
|
|
|
Suur tänu, sain selle korda Läheksin nüüd korraks tagasi ühe teise programmi juurde.
c++:
|
#include<iostream> using namespace std; int main() { int P, i = 2; cout << "Sisestage number: \n"; cin >> P; for (i = 2; i <= P; i++) { if(i == P) { goto END; } if (P % i == 0) { goto THEEND; } } THEEND: cout << P << " jagub arvudega: " << P << ","; for (i = 2; i <= P; i++) { if(P % i == 0) { cout << P / i << ","; } } END: if(i == P) { cout << "Algarv\n"; } system("pause"); return 0; }
|
Küsimus oleks, kuidas ma saan teha nii, et pärast viimast numbrit prindib "." mitte ",".
|
|
Kommentaarid: 30 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
26 |
|
tagasi üles |
|
 |
Ho Ho
HV Guru

liitunud: 16.02.2002
|
09.04.2012 01:07:06
|
|
|
Tüüpiliselt sellistel puhkudel olen ma kirjutanud esimese väljnudi tsükli väliselt ning tsükli sees eraldusmärke (sinu puhul komad) väljundist enne (ehk siis sul cout << ", " << p/i; ) ja peale tsükli lõppemist siis lõpumärgi, kui seda vaja on. Standardvahenditega seda koma seal lõpus "üle kirjutada" ei saa.
Muidu noist goto'dest saaks seal vägagi lihtsa vaevaga lahti. Kui veel pisut lisamälu tarbida ning kõik prinditavad väärtused kusagil alles hoida enne väljastust saaks ka koodi hulga vähemalt 2x lühemaks ning lihtsamini jälgitavaks
_________________ Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity" |
|
Kommentaarid: 106 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
86 |
|
tagasi üles |
|
 |
estplayer
HV kasutaja
liitunud: 15.10.2008
|
06.05.2012 23:33:29
|
|
|
Aitäh abi eest Nüüd uus programm juba. Kuidas ma saaksin teha nii, et programmi käivitades näitab viite esimest raamatut, kui kasutaja vajutab "j" tähte, näitab viite järgmist, kui vajutab "e" tähte, näitab viite eelmist ning kui vajutab "v" tähte, siis väljub programmist?
c++:
|
#include<iostream> #include<string> using namespace std; int main() { struct BOOK { string NAME; int YEAR; int PAGES; string FIRSTNAME; string LASTNAME; string LANGUAGE; bool READ; int SCORE; }; BOOK lotr1, hobbit, EG, LS, HP, Time, GOT, EotW, GH, SR, Dragon, Dune, Game, Eragon, Eldest, Brisingr; lotr1.NAME = "Fellowship of the ring"; lotr1.YEAR = 1954; lotr1.PAGES = 531; lotr1.FIRSTNAME = "John Ronald Reuel"; lotr1.LASTNAME = "Tolkien"; lotr1.LANGUAGE = "eng"; lotr1.READ = true; lotr1.SCORE = 10; hobbit.NAME = "Hobbit"; hobbit.YEAR = 1937; hobbit.PAGES = 310; hobbit.FIRSTNAME = "John Ronald Reuel"; hobbit.LASTNAME = "Tolkien"; hobbit.LANGUAGE = "eng"; hobbit.READ = true; hobbit.SCORE = 10; EG.NAME = "Ender's Game"; EG.YEAR = 1985; EG.PAGES = 357; EG.FIRSTNAME = "Orson Scott"; EG.LASTNAME = "Card"; EG.LANGUAGE = "eng"; EG.READ = true; EG.SCORE = 10; LS.NAME = "Lost Symbol"; LS.YEAR = 2009; LS.PAGES = 639; LS.FIRSTNAME = "Dan"; LS.LASTNAME = "Brown"; LS.LANGUAGE = "eng"; LS.READ = true; LS.SCORE = 8; HP.NAME = "Harry Potter and the Philosopher's Stone"; HP.YEAR = 1997; HP.PAGES = 309; HP.FIRSTNAME = "Joanne"; HP.LASTNAME = "Rowling"; HP.LANGUAGE = "eng"; HP.READ = true; HP.SCORE = 9; Time.NAME = "A brief history of time"; Time.YEAR = 1988; Time.PAGES = 256; Time.FIRSTNAME = "Stephen"; Time.LASTNAME = "Hawking"; Time.LANGUAGE = "eng"; Time.READ = true; Time.SCORE = 10; GOT.NAME = "Game of thrones"; GOT.YEAR = 1996; GOT.PAGES = 672; GOT.FIRSTNAME = "George Raymond Richard"; GOT.LASTNAME = "Martin"; GOT.LANGUAGE = "eng"; GOT.READ = true; GOT.SCORE = 8; EotW.NAME = "Eye of the world"; EotW.YEAR = 1990; EotW.PAGES = 688; EotW.FIRSTNAME = "Robert"; EotW.LASTNAME = "Jordan"; EotW.LANGUAGE = "eng"; EotW.READ = true; EotW.SCORE = 10; GH.NAME = "The Great Hunt"; GH.YEAR = 1990; GH.PAGES = 660; GH.FIRSTNAME = "Robert"; GH.LASTNAME = "Jordan"; GH.LANGUAGE = "eng"; GH.READ = true; GH.SCORE = 8; Dragon.NAME = "The Dragon Reborn"; Dragon.YEAR = 1991; Dragon.PAGES = 628; Dragon.FIRSTNAME = "Robert"; Dragon.LASTNAME = "Jordan"; Dragon.LANGUAGE = "eng"; Dragon.READ = true; Dragon.SCORE = 9; SR.NAME = "The Shadow Rising"; SR.YEAR = 1992; SR.PAGES = 1001; SR.FIRSTNAME = "Robert"; SR.LASTNAME = "Jordan"; SR.LANGUAGE = "eng"; SR.READ = true; SR.SCORE = 10; Dune.NAME = "Dune"; Dune.YEAR = 1965; Dune.PAGES = 412; Dune.FIRSTNAME = "Frank"; Dune.LASTNAME = "Herbert"; Dune.LANGUAGE = "eng"; Dune.READ = true; Dune.SCORE = 9; Game.NAME = "Beginning C++ through game programming, third edition"; Game.YEAR = 2011; Game.PAGES = 410; Game.FIRSTNAME = "Michael"; Game.LASTNAME = "Dawson"; Game.LANGUAGE = "eng"; Game.READ = true; Game.SCORE = 10; Eragon.NAME = "Eragon"; Eragon.YEAR = 2002; Eragon.PAGES = 509; Eragon.FIRSTNAME = "Christopher"; Eragon.LASTNAME = "Paolini"; Eragon.LANGUAGE = "eng"; Eragon.READ = true; Eragon.SCORE = 7; Eldest.NAME = "Eldest"; Eldest.YEAR = 2005; Eldest.PAGES = 668; Eldest.FIRSTNAME = "Christopher"; Eldest.LASTNAME = "Paolini"; Eldest.LANGUAGE = "eng"; Eldest.READ = true; Eldest.SCORE = 6; Brisingr.NAME = "Brisingr"; Brisingr.YEAR = 2008; Brisingr.PAGES = 748; Brisingr.FIRSTNAME = "Christopher"; Brisingr.LASTNAME = "Paolini"; Brisingr.LANGUAGE = "eng"; Brisingr.READ = true; Brisingr.SCORE = 7; FILE *Library; Library = fopen("BOOK", "r"); cin.ignore(); return 0; }
|
Ma arvan, et pean mingit moodi kasutama seda FILE vist, kuid ei tea kuidas.
|
|
Kommentaarid: 30 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
26 |
|
tagasi üles |
|
 |
Ho Ho
HV Guru

liitunud: 16.02.2002
|
07.05.2012 11:29:44
|
|
|
gah. Loodan sügavalt, et mõtlesid sellise raamatuinfo koodis kasutamise välja iseeseisvalt ja ei võtnud mingist õpetusest. Kui võtsid siis viska see kiirelt minema ja otsi midagi normaalset.
Esiteks tee selgeks funktsioonid kuhu näiteks söödad sisse structi reference'i ning parameetrite soovitud väärtused ning too kopeerib sinna reference'i muutujatesse nood parameetrid. Või veel "õigem" oleks seda teha klassidega. Saab ka structile constructorit kirjutada kuid see ei pruugi mõnele väga meeldida stiili poolest.
See tehtud siis võta uuri välja mida kujutavad endast ette konteinerid. Ideaalis lahendaksin säärase ülesande vektoritega kuid saaks ka massiividega hakkama, ehkki tulemus poleks nii "puhas" ning oleks mõnevõrra keerukam.
Neid kaht kombineerides saad selle rakenduse tehtud max ~35 koodireaga ning saadav kood on ka reaalselt kasutatav kuna ei pea manageerima eri nimega muutujaid vaid saad lihtsalt konteineri indeksi järgi hetke asukohta arvestada ning konteineris edasi-tagasi liikuda.
(CSV) failist võid ka muidugi seda infot lugeda kuid iseenesest pole see antud funktsionaalsuse vajaduste juures väga oluline kuidas täpselt teed.
Üks asi mida pead silmas pidama on, et standardvahendeid kasutades pead kasutama sisestamiseks ka enterit, lihtsalt j'i vajutades ei jõua kusagile ning tuleb vajutada j+enter.
_________________ Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity" |
|
Kommentaarid: 106 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
86 |
|
tagasi üles |
|
 |
estplayer
HV kasutaja
liitunud: 15.10.2008
|
21.05.2012 21:14:45
|
|
|
Nii mässasin natuke vektorite ja konteineritega ja sain sellise tulemuse:
c++:
|
#include <iostream> #include <string> #include <vector> using namespace std; struct BOOK { string NAME; int YEAR; int PAGES; string FIRSTNAME; string LASTNAME; string LANGUAGE; bool READ; int SCORE; // constructor BOOK( const string name, int year, int pages, string firstname, string lastname, string language, bool read, int score ) : NAME(name), YEAR( year ), PAGES( pages ), FIRSTNAME( firstname ), LASTNAME( lastname ), LANGUAGE( language ), READ( read ), SCORE( score ) {} }; int main() { vector <BOOK> container; container.push_back( BOOK( "Eragon", 2002, 509, "Christopher", "Paolini", "eng", true, 7 ) ); container.push_back( BOOK( "Eldest", 2005, 668, "Christopher", "Paolini", "eng", true, 6 ) ); container.push_back( BOOK( "Brisingr", 2008, 748, "Christopher", "Paolini", "eng", true, 7 ) ); container.push_back( BOOK( "Fellowship Of The Ring", 1954, 531, "John Ronald Reuel", "Tolkien", "eng", true, 10 ) ); container.push_back( BOOK( "The Hobbit", 1937, 310, "John Ronald Reuel", "Tolkien", "eng", true, 10 ) ); container.push_back( BOOK( "Ender's Game", 1985, 357, "Orson Scott", "Card", "eng", true, 10 ) ); container.push_back( BOOK( "The Lost Symbol", 2009, 639, "Dan", "Brown", "eng", true, 8 ) ); container.push_back( BOOK( "Harry Potter and the Philosopher's Stone", 1997, 309, "Joanne", "Rowling", "eng", true, 8 ) ); container.push_back( BOOK( "A Brief History of Time", 1988, 256, "Stephen", "Hawking", "eng", true, 10 ) ); container.push_back( BOOK( "Game of Thrones", 1996, 672, "George Raymond Richard", "Martin", "eng", true, 8 ) ); container.push_back( BOOK( "Eye of the World", 1990, 688, "Robert", "Jordan", "eng", true, 10 ) ); container.push_back( BOOK( "The Great Hunt", 1990, 660, "Robert", "Jordan", "eng", true, 8 ) ); container.push_back( BOOK( "The Dragon Reborn", 1991, 628, "Robert", "Jordan", "eng", true, 9 ) ); container.push_back( BOOK( "The Shadow Rising", 1992, 1001, "Robert", "Jordan", "eng", true, 10 ) ); container.push_back( BOOK( "Dune", 1965, 412, "Frank", "Herbert", "eng", true, 9 ) ); container.push_back( BOOK( "Beginning C++ Through Game Programming, 3rd Edition", 2011, 410, "Michael", "Dawson", "eng", true, 10 ) ); for( size_t i = 0; i < container.size(); ++i ) { BOOK &book = container[i]; cout << "Book Name : " << book.NAME<< "\nPublished : " << book.YEAR << "\nPages : " << book.PAGES << "\nAuthor : " << book.FIRSTNAME << " " << book.LASTNAME << "\nLanguage : " << book.LANGUAGE << "\nRank : " << book.SCORE << "/10"; cout << "\nOn Shelf : "; if ( book.READ == true) cout << "Read\n\n"; else cout << "Not read\n\n"; X: if((i+1)%5==0) { cout << "Vajuta "j", et näha viite järgmist raamatut, "e" et näha viite eelmist raamatut ja "v", et väljuda programmist.\n"; string g; cin >> g; if(g == "j") { i++; if(i>5) { goto X; } } else if (g == "e") { i--; if(i>5) { goto X; } } else if (g == "v") { goto Y; } cin.ignore(); } } Y: return 0; }
|
Nüüd probleem selline, et "j", "e" ja "v" vajutamisel ei toimi soovitud tegevused. Aitäh!
|
|
Kommentaarid: 30 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
26 |
|
tagasi üles |
|
 |
Ho Ho
HV Guru

liitunud: 16.02.2002
|
21.05.2012 21:44:53
|
|
|
Never ever ei tohiks tsüklimuutuja väärtust muuta kusagil mujal kui tsükli päises.
Samuti for tsükkel ei kõlba säärase voojuhtimise jaoks. Pigem tee miski lõpmatu tsükkel (while (true)) ning sinna sisse sisendi küsimine ning sellele vastavalt käitumine. Tsüklist saad break'iga välja. Ei mingeid goto'sid pole seal juures samuti tarvis.
_________________ Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity" |
|
Kommentaarid: 106 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
86 |
|
tagasi üles |
|
 |
neros
HV Guru

liitunud: 26.11.2003
|
22.05.2012 07:58:12
|
|
|
Nõustun eelkõneleja seisukohaga. Kuna juba C++'i kasutada, siis miks mitte juba OOP teed minna. Kõigepealt soovitaks tekitada näiteks BookCollection klassi, kus on funktsioon Add, mis võtab parameetriteks samad väärtused mis su structi constructor. Saaks ära jätta inetud container.push_back(BOOK(...)); read ning asendada näiteks Books.Add(...);
Teiseks, while loop. Use it. Love it.
Kolmandaks, funktsioonid. Use them. Love them. Üldiselt on reegel selline, et "funktsioon peaks tegema ühte asja" ilma naeruväärseks mineva abstraheerimiseta. Klassid peaks tegema väga konkreetseid asju. Kusagil oli isegi videoloeng selle kohta, üritan tänase päeva jooksul üles leida... kui õnnestub.
Poolikult pole mõtet programmerimist õppida - hiljem kahetsed. Pigem natuke rohkem vaeva näha alguses ja õppida korralikku koodi kirjutama kui pärast spagetist pannkooke teha.
_________________ GitHub
.NET Core & Azure baasil lahendused ja arhitektuur - kontakt. |
|
Kommentaarid: 48 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
40 |
|
tagasi üles |
|
 |
Ho Ho
HV Guru

liitunud: 16.02.2002
|
22.05.2012 09:04:35
|
|
|
tsitaat: |
Kõigepealt soovitaks tekitada näiteks BookCollection klassi, kus on funktsioon Add, mis võtab parameetriteks samad väärtused mis su structi constructor. Saaks ära jätta inetud container.push_back(BOOK(...)); read ning asendada näiteks Books.Add(...); |
Antud olukorras ei pea säärast mõttetu lisakihi tegemist eriti mõttekaks. Saaks veel aru, kui tolle konteineri otsas tehtaks miskit keerukamat kui lisamine-väljastus kuid hetkel seda ei ole ning kogu asi taanduks sisuliselt add(...) vs push_back(...) peale kus mõlemal on praktiliselt samad parameetrid. Spetskonteineri puhul saaks veel küll raamatu constructori sinna add'i sisse ära peita kuid isiklikult ei näe sel erilist mõtet.
Eks niisama näpuharjutuse mõttes see halba ei teeks kuid kindlasti tuleb silmas pidada, et liigne abstraktsioon ei ole sugugi mitte hea.
Muus osas nõustun, eriti funktsioonide ning korralikult asjade selgeks tegemise koha pealt. Miski üldise koodi vorminduse standardi võiksid ka omale selgeks teha ning seda kasutada. Säärased allcaps structide-muutujate nimed c++ koodis tahavad silmi peast kratsima panna.
_________________ Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity" |
|
Kommentaarid: 106 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
86 |
|
tagasi üles |
|
 |
neros
HV Guru

liitunud: 26.11.2003
|
22.05.2012 09:22:59
|
|
|
Näpuharjutuse jaoks ma mõtlesingi Kui mul on mingi programm mis üle ühe faili ei nõua et loetav püsida, ei hakka ka abiklasse ehitama, pole lihtsalt mõtet kui kiirelt midagi tarvis meisterdada, vähemalt C++'ga. C#'ga oleks vastasel juhul liiga palju staticuid vaja ja staticute nägemine mujal kui extensionmethodites ajab lihtsalt segadusse (on erandeid muidugi). Ning jällegi abstraheerimise poole pealt - liiga palju head asja on paha küll, aga alustajale on sobilik just seetõttu, et saab vähemalt asja natuke selgemaks.
As for all-caps nimetused... esimest korda koodist üle lastes tekkis koheselt küsimus "oot, mis konstandikasutus see selline on" aga uuesti vaadates tuli välja et hoopis structi construct
_________________ GitHub
.NET Core & Azure baasil lahendused ja arhitektuur - kontakt. |
|
Kommentaarid: 48 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
40 |
|
tagasi üles |
|
 |
estplayer
HV kasutaja
liitunud: 15.10.2008
|
11.06.2012 23:20:09
|
|
|
Aitäh abi eest! Nüüd tahaksin teha programmi, mis loob 3 4*4 massiivi ja täidab need naturaalarvudega 0 kuni 100. Siis väljastada kõik 3 massiivi ekraanile ning seejärel leida, milline neist on elementide väärtuselt suurim ning siis ka see eraldi väljastada. Omal jõul jõudsin ma kuni 3 massiivi väljastamiseni, elementide summat eriti ei oska arvutada. Samuti sooviks teada, kas seda kõike saab kuidagi lühemalt ka kirja panna? Praegult tundub mul kõik väga laialt välja kirjutatud.
c++:
|
#include<iostream> #include<ctime> using namespace std; #define maxN 4 #define maxM 4 #define maxX 4 #define maxY 4 #define maksa 4 #define maxB 4 int t[maxM][maxN]; int u[maxX][maxY]; int s[maksa][maxB]; int n, m, x, y, a, b; void input(){ n = 4; m = 4; for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) { t[i][j] = rand() % 100; } } void input2(){ x = 4; y = 4; for ( int i = 0; i < x; i++) { for (int j = 0; j < y; j++) { u[i][j] = rand() % 100; } } } void input3(){ a = 4; b = 4; for (int i = 0; i < a; i++) { for (int j = 0; j < b; j++) { s[i][j] = rand() % 100; } } } void output(){ for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { cout << t[i][j] << " "; } cout << endl; } } void output2(){ for (int i = 0; i < x; i++) { for (int j = 0; j < y; j++) { cout << u[i][j] << " "; } cout << endl; } } void output3(){ for (int i = 0; i < a; i++) { for (int j = 0; j < b; j++) { cout << s[i][j] << " "; } cout << endl; } } int main() { srand((unsigned)time(0)); input(); input2(); input3(); cout << "First matrix: \n"; output(); cout << "\n"; cout << "Second matrix: \n"; output2(); cout << "\n"; cout << "Third matrix: \n"; output3(); return 0; }
|
|
|
Kommentaarid: 30 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
26 |
|
tagasi üles |
|
 |
Ho Ho
HV Guru

liitunud: 16.02.2002
|
11.06.2012 23:27:21
|
|
|
Tee omale funktsiooniparameetrid selgeks
Käigult kirjuatud kood, ei pruugi kompileerida kuid idee peaks enam-vähem edasi andma.
c++:
|
typedef int[4][4] matrix; void input(matrix &data) { for ( int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { data[i][j] = rand() % 100; } } } ... matrix d1, d2; input(d1) input(d2)
|
Asja saaks kõvasti ilusamaks, kui kasutada STL'i konteinereid/templatesid ja <algorithm> headerit kuid see on vist hetkel õige pisut kaugema tuleviku teema
Säärane massiivi typedef'imine ning funktsiooni sees otse julmalt nelja kasutamine on tegelikult suht karm häkk ning reaalses koodis sedasi ei tohiks teha.
Kui koodis on miskeid tundmatuid märksõnu siis googelda ja/või küsi. Algatuseks oleks siis märksõnadeks typedef ning reference, rääkimata siis tollest samast funktsioonile input ja output parameetrite andmist.
_________________ Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity" |
|
Kommentaarid: 106 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
86 |
|
tagasi üles |
|
 |
neros
HV Guru

liitunud: 26.11.2003
|
12.06.2012 08:36:54
|
|
|
Tegelikult saaks vähem häkiliselt kui 4 asendada igal pool nt konstandiga MAX.
Lisaks mis masiivi typedefimisel viga? typedefe kasutatakse kõikjal, ei näe põhjust, miks ka siin ei võiks
E: kuigi vectoritega saaks ilmselt funktsionaalsema koodi
_________________ GitHub
.NET Core & Azure baasil lahendused ja arhitektuur - kontakt.
viimati muutis neros 12.06.2012 08:54:59, muudetud 1 kord |
|
Kommentaarid: 48 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
40 |
|
tagasi üles |
|
 |
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|
Hinnavaatlus ei vastuta foorumis tehtud postituste eest.
|