LPC Maijs 1, 2016 Share Maijs 1, 2016 Tā kā autors tutoriāļus tulko uz latviešu valodu ar google translate - es piedāvāju noteikti arī viņa grāmatiņu izdot angliski (protams, pārtulkojot uz eng izmantojot google translate!) Link to comment Share on other sites More sharing options...
Raimonds1 Maijs 1, 2016 Author Share Maijs 1, 2016 #include<stdio.h> #include<iostream> using namespace std;//biju aizmirsis un nekompileejaas main()// bloki { int Platums;//milimetros tos blokus meera int Garums; int Augstums; int Biezums; int laukumsAG,laukumsAP,laukumsGP; int kv;//kvadraatmetra laukums 1000000kvadraatmilimetru float BK1=Augstums*Garums; float BK2=Augstums*Platums; float BK3=Platums*Garums; float cenaKubam,cenaPaletei,cenaBlokam;//lielaisK un nekompileejas float cenakvadraatmetramAG; float cenakvadraatmetramAP; float cenakvadraatmetramGP; float kvadraatmetrikubaaAG; float kvadraatmetrikubaaAP; float kvadraatmetrikubaaGP; float blokikvmetraaBiezumsirPlatums; float blokikvmetraaBiezumsirAugstums; float blokikvmetraaBiezumsirGarums; printf(" B L O K I :\n"); printf(" Peec katra skaitla ievades nospiediet ENTER :\n"); printf(" Ievadiet bloka augstumu milimetros:\n"); cin>>Augstums; printf(" Ievadiet bloka garumu milimetros:\n"); cin>>Garums; printf(" Ievadiet bloka platumu milimetros:\n"); cin>>Platums; printf( " ja nezinaat cenas, ievadiet 100 ,varees rekinaat procentus:\n"); printf(" Ievadiet cenu kubam eiro, tad punkts, tad centi:\n"); cin>>cenaKubam; printf(" visiem 5 skaitliem jaabuut ievadiitiem:\n"); printf(" Ievadiet cenu paletei eiro,tad punkts, tad centi:\n"); cin>>cenaPaletei; printf ( " Sis laukums ir tas, peec kura reekina bloku skaitu kvadratmetraa:\n"); printf ( " Kvadraatmetraa ir 1000 reiz 1000 ir 1000000 kvadraatmilimetru: \n"); printf ( " Ja sienas biezumu nosaka bloka platums, tad lietojam laukumsAG ieguuto skaitli: \n"); printf ( " Ja sienas biezumu nosaka bloka augstums, tad lietojam laukumsGP ieguuto skaitli: \n"); printf ( " Ja sienas biezumu nosaka bloka garums, tad lietojam laukumsAP ieguuto skaitli: \n"); printf ( " Ja Augstums ir 200mm, Garums 500mm, laukums ir 100000 kvadraamilimetri : \n"); printf ( " Tad kvadraatmetraa = 1000000/10000 = 100 bloki : \n"); printf ( " laukumsAG ir %u \n", Augstums*Garums ); printf ( " laukumsAP ir %u \n", Augstums*Platums); printf ( " laukumsGP ir %u \n", Garums*Platums); printf ( " Bloki kvadraatmetra, ja BIEZUMS IR PLATUMS %u \n",BK1=kv/Augstums*Garums); printf ( " Bloki kvadraatmetra, ja BIEZUMS IR AUGSTUMS %u \n",BK2=kv/Garums*Platums); printf ( " Bloki kvadraatmetra, ja BIEZUMS IR GARUMS %u \n", BK3=kv/Augstums*Platums); printf ( " Parasti bloka garumi viens aiz otra rindaa nosaka sienas garumu:\n"); printf ( " Parasti bloka augstumi viens virs otra nosaka sienas augstumu:\n"); printf ( " Tad sienas biezums ir taads pats, kaa bloka platums:\n"); printf ( " Kaa Juus buuveesiet sienu, vai sienas biezums jums buus:\n"); printf ( " bloka Platums, Augstums vai Garums?: \n"); } Programmiņa vienam vecim, kas gribēja rēķināt bloku izmaksas, ja būvēs sienu, liekot blokus dažādos veidos. Nav pabeigta. Mainīgie savadīti, laukumu blokam rēķina 3 variantos. Kur kļūda, ka nerēķina bloku skaitu kvadrātmetrā sienas. Speciāls jautājums Jurkinam, kurs te ir aktīvākais pēdējo pāris dienu laikā. http://prof.lv/lv/buvmateriali/buvmateriali/bloki/keramzita-bloki-fibo-bloki Platums 100 150 190 200 250 300 350 365 Garums 200 244 480 490 510 Augstums 185 190 195 200 250 milimetros Te ir grāmatu sērija For Dummies. Izskatās, ka tu gribi rakstīt For Idiots. Tas sākuma ieinteresēšanai, lai pat tādi var nokopēt simbolus, pamainīt kādu un apskatīties, ko saka kompilators, ko dara programma un ko un kādā secībā izvada, ja pamaina kaut printf vietu. Vēlāk jau vajadzēs domāt, ko kur rakstīt un kā organizēt datus. Link to comment Share on other sites More sharing options...
LPC Maijs 1, 2016 Share Maijs 1, 2016 Erm... Topiks tika aizsākts pirms 9 mēnešiem. Piepļūtītas neskaitāmas lapas, tai skaitā - par pedagoģiju un problēmām Tekošais uzdevums - programma atbilst universitātes/tehnikuma 1. kursa 1. (!!!!) laboratorijas darbam. Uzdevums nav izpildīts. Varbūt tomēr ir vērts apdomāt iespēju pievērsties kam citam, nevis programmēšanai vai nedod dievs, pedagoģijai? 2 Link to comment Share on other sites More sharing options...
Raimonds1 Maijs 1, 2016 Author Share Maijs 1, 2016 (labots) Tas nav jautājums Tev. Iemetu to koda gabalu tādā stāvoklī, kādā tas bija vienā no pedagoģiskos nolūkos saglabātiem 23 variantiem. Ej un zīlē - nupat pabeidzu to, ko ieliku vai pirms mēneša. Reālā kodā tie visi gari pierakstītie mainīgie ir aizstāti ar burtiem. Tur ir attēlots process, kā var aizmirst iekļaut kādu bibliotēku vai nepareizā vietā ielikt printf vai cik un kā tas izskatās, ka programmu palaiž. universitātes/tehnikuma 1. kursa 1. (!!!!) laboratorijas darbam. Nu. nu.. Labots Maijs 1, 2016 - Raimonds1 Link to comment Share on other sites More sharing options...
LPC Maijs 1, 2016 Share Maijs 1, 2016 Iemetu to koda gabalu tādā stāvoklī, kādā tas bija vienā no pedagoģiskos nolūkos saglabātiem 23 variantiem. Ej un zīlē - nupat pabeidzu to, ko ieliku vai pirms mēneša. Pirms veidot kļūdainus 23 variantus "pedagoģiskiem nolūkiem" varbūt uztaisi 1 pareizu variantu, kurš strādā. Reālā kodā tie visi gari pierakstītie mainīgie ir aizstāti ar burtiem.Tur ir attēlots process, kā var aizmirst iekļaut kādu bibliotēku vai nepareizā vietā ielikt printf vai cik un kā tas izskatās, ka programmu palaiž. Atkārtošos. Šis ir pirmā kursa 1. laboratorijas darba līmenis. Bet apsveicu, 9 mēnešu laikā tu vismaz esi sācis mēģināt rakstīt reālu kodu. Un es nešaubos, lai gan neesi ticis galā ar uzdevumu, kuru studenti risina 2. nodarbībā, tas netraucēs turpināt izplūst garos palagos par taviem pedagoģiskajiem mērķiem un "jaunatni" kuru tu vēlies vest uz tavuprāt pareizā ceļa. Link to comment Share on other sites More sharing options...
usver Maijs 1, 2016 Share Maijs 1, 2016 ~tādu piemēru rādīja pirmajā lekcijā, pirms vispār kāds sāka rakstīt kādu kodu vai praktiskos. mainīgo definēšana + reizināšana + teksta izvadīšana ar aprēķinu rezultātu. šeit ciklu nav, objektu nav .. kas ir principiāli atšķirīgi? Galvas lauzīšana bija tikai pirmajā dienā, kad pasniedzējs rādīja piemēru riņķa līnijas laukuma aprēķinam.. Ilgi lūrēju uz piemēru un nesapratu, kāpēc datu tips ir "double" - tur būs jāreizina ar 2, vai? kods riņķa līnijai pieejams, klikojot citāta labajā augšējā stūrī, aizejot uz oriģinālo tekstu, ja kāds ar šādu foruma fīču vēl nav iepazinies. Link to comment Share on other sites More sharing options...
Jurkins Maijs 1, 2016 Share Maijs 1, 2016 (labots) Kur kļūda, ka nerēķina bloku skaitu kvadrātmetrā sienas. Speciāls jautājums Jurkinam, kurs te ir aktīvākais pēdējo pāris dienu laikā. Es C sāku mācīties programmēt vēlāk par Tevi . Precīzāk C Atmel mikrokontrolieriem. Tu jau te ar pedagoģiju biji neskaitāmus palagus piekakājis... Nu redz, tas ir mans hobijs. Nekur nesteidzos. Lietoju pointerus, nepavisam neapgalvoju, ka zinu par šiem visu, gluži otrādi - zinu ļoti maz. Bet tas man netraucē šos lietot un mācīties. Un, galvenais, ka rezultātā tie kontrolierīši dara to, ko es gribu. (kā man nav vēl ienācis prātā grāmatu rakstīt ) Piedod, Raimi, bet būtu pēdējais laiks pašam ar kaut ko tikt galā. Savos palagos acis vari mežģīt pats. Ja Tev pēc gada filozofēšanas ir problēmas ar šādu programmiņu... nezinu, kurā kursā un kurā nodarbībā šādus uzdevumus dod, bet mēs ķieģeļu skaitu sienā rēķinājām beisikā uz "Ahāta" 9. vai 10. klasē (tas bija 1985. vai 1986. gadā, pirms tam vienkārši datoru un beisika mūsu apkārtnē nebija). Tas vecis būs jau paspējis nomirt, kamēr Tu ar saviem pedagoģiskajiem vikrutasiem viņam programmiņu uzrakstīsi . Labots Maijs 1, 2016 - Jurkins Link to comment Share on other sites More sharing options...
Salmo Maijs 1, 2016 Share Maijs 1, 2016 Kur kļūda, ka nerēķina bloku skaitu kvadrātmetrā sienas int kv;//kvadraatmetra laukums 1000000kvadraatmilimetru Raimond, Tu neesi piešķīris mainīgajam kv vērtību. Būtu jābūt: const int kv = 1000000; const mainīgā tipa priekšā norāda, ka mainīgais būs konstante, kas programmas darbības laikā netiek mainīts. Bet labāk mainīgajam dod tādu nosaukumu, lai jebkuram būtu skaidrs, kas tajā tiek glabāts. Piem. mm2_in_m2 Konstantes bieži vien definē ar #define preprocesora direktīvu. #define MM2_IN_M2 1000000 Link to comment Share on other sites More sharing options...
rubb Maijs 1, 2016 Share Maijs 1, 2016 Un šāda elementāra kļūda pēc cik mēnešu mēģinājumiem? Raimond, ceru, ka sapratīsi, ko tas nozīmē... Ja nē. Moderi, lūdzu, slēdziet šo tēmu. Link to comment Share on other sites More sharing options...
Jurkins Maijs 1, 2016 Share Maijs 1, 2016 Ja nē. Moderi, lūdzu, slēdziet šo tēmu Trakākais jau ir tieši tas, ka šādi tiek piemēslots nets. Kāds nopietni meklēs infu par pointeriem, a bet tur Raimonda palagi. Link to comment Share on other sites More sharing options...
Raimonds1 Maijs 1, 2016 Author Share Maijs 1, 2016 Tas bija piemērs Jurkinam, kurš tā arī neatbildēja. No iesācēja viedokļa te ir iespēja saprast, ka dalot tos blokus, tur nebūs veseli skaitļi, piekombinēt klāt to, ka būs jāiestāda rezultātam precizitāte kaut vai 2 zīmes aiz komata. Par pointeriem pēc manis iepostētajam adresēm, ir tie vai nav arrays tā arī nekāda saruna nesanāca. Apgalvojums, ka par tiem kāds zina visu ir sviests pēc definīcijas, jo lekcijās un literatūrā pointeru izmantošana skaitās viens no efektīvākajiem pasākumiem, tajā pašā laikā visādās konferencēs šad un tad atgādina par to pareizu lietošanu, jo tas ir arī veins no lielākajiem programmas darbības traucējumu cēloņiem http://programmers.stackexchange.com/questions/56935/why-are-pointers-not-recommended-when-coding-with-c http://www.byte-notes.com/pointers-c%2B%2B http://www.tutorialspoint.com/cplusplus/cpp_null_pointers.htm Link to comment Share on other sites More sharing options...
M_J Maijs 1, 2016 Share Maijs 1, 2016 Es nesaprotu kas te tagad notiek? Raimonds mēģina mūs mācīt, kā pareizi rakstāma programma "Hello World!", pardon, ķieģeļu daudzuma aprēķināšanai, un ir nemierā, ka Jurkins ar sajūsmu un pateicību nepieņem šo upuri un neizrāda nekādu interesi? Nu nevajag viņam tos ķieģeļus! Nevajag! Viņš uz Atmeļiem jau ir uztaisījis nopietnākas un interesantākas lietas. Un arī man nevajag. Ja vajadzēs izrēķināšu, nepiespamojot forumu. Link to comment Share on other sites More sharing options...
Raimonds1 Maijs 2, 2016 Author Share Maijs 2, 2016 (labots) Ja nu gadījumā kādam ir izdevies kādus citus pārliecināt, ka es neprotu lietot konstantes. //BLOKI #include <stdio.h> #include <iostream> #include <math.h> using namespace std;//kvadraatmetra laukums 1000000kvadraatmilimetru int main () { int Platums;//milimetros tos blokus meera int Garums; int Augstums; int Biezums; int laukumsAG,laukumsAP,laukumsGP; const int mm2_m2 = 1000000; cout<<"______________________________________\n"; cout<<" B L O K I \n"; cout<<"__________________________\n"; cout<<" Peec katra skaitla ievades nospiediet ENTER\n"; cout<<"__________________________\n"; cout<<" Ievadiet bloka augstumu milimetros\n"; cin>>(Augstums); cout<<"Ievadiet bloka garumu milimetros\n"; cin>>(Garums); cout<<"Ievadiet bloka platumu milimetros\n"; cin>>(Platums); cout<<"__________________________\n"; cout<<"_______________________________________________________________________________\n"; cout <<" Parasti bloka garumi viens aiz otra rindaa nosaka sienas garumu:\n"; cout <<" Parasti bloka augstumi viens virs otra nosaka sienas augstumu:\n"; cout <<" Tad sienas biezums ir taads pats, kaa bloka platums:\n"; cout<<"__________________________\n"; laukumsAG =(Augstums*Garums); laukumsAP =(Augstums*Platums); laukumsGP =( Garums*Platums); cout<<"__________________________\n"; cout<< " laukumsAG,laukumsAP, un laukumsGP ir tas, peec kura reekina bloku skaitu kvadratmetraa:\n"; cout << " Kvadraatmetraa ir 1000 reiz 1000 ir 1000000 kvadraatmilimetru: \n"; cout<<"__________________________\n"; cout << " Ja sienas biezumu nosaka bloka platums, tad lietojam laukumsAG ieguuto skaitli: \n"; cout << " Ja sienas biezumu nosaka bloka augstums, tad lietojam laukumsGP ieguuto skaitli: \n"; cout << " Ja sienas biezumu nosaka bloka garums, tad lietojam laukumsAP ieguuto skaitli: \n"; cout<<"__________________________\n"; cout <<" Piemeers.Ja Augstums ir 200mm, Garums 500mm, laukums ir 100000 kvadraamilimetri : \n"; cout<< " Jo sienas biezums ir tas pats, kas bloka platums\n"; cout<< " Taatad, tas neveido to laukumu, no kura veidojas tas kvadraatmetrs\n"; cout <<" Tad kvadraatmetraa = 1000000/10000 = 100 bloki \n"; cout<<"__________________________\n"; cout <<"laukumsAG = "<<laukumsAG; cout<<"__________________________\n"; cout <<"laukumsAP = "<<laukumsAP; cout<<"__________________________\n"; cout <<"laukumsGP = "<<laukumsGP; cout<<"__________________________\n"; cout <<"Bloki kvadraatmetra,ja BIEZUMS IR PLATUMS = "<<mm2_m2/laukumsAG; cout<<"__________________________\n"; cout <<"Bloki kvadraatmetra,ja BIEZUMS IR AUGSTUMS = "<<mm2_m2/laukumsGP; cout<<"__________________________\n"; cout <<"Bloki kvadraatmetra,ja BIEZUMS IR GARUMS = "<<mm2_m2/laukumsAP; cout<<"__________________________\n"; return 0; } Labots Maijs 17, 2016 - Raimonds1 Link to comment Share on other sites More sharing options...
Mezavecis Maijs 2, 2016 Share Maijs 2, 2016 Viss jau būtu labi, ja 50% koda nesastādītu output teksts ar komentāriem Link to comment Share on other sites More sharing options...
binary Maijs 2, 2016 Share Maijs 2, 2016 Eu, Raimi, paskaidro man kā neprogrammistam, kādas pedagoģijas pēc jāpārbauda, vai diviem tikko nodefinētiem mainīgajiem ir vienādas adreses? Nodefinē trīs, četrus, piecus u.t.t. un pārbaudi divas reizes drošības pēc. Pirmo reizi uzreiz, otro pēc kāda laiciņa. Mainīgie tak nav čigānu tabors, kas vienā čumā dzīvo. Tiešām neprogrammists…char* foo = "foo bar"; char* bar = "foo bar"; printf("adreses %s vienaadas\n", foo == bar ? "ir" : "nav");Iedomājies - izdrukājas, ka adreses IR vienādas! Tas gan nenozīmē, ka adreses būs vienādas arī tad, ja "char* xxx" abās vietās nomainīs uz "char xxx[]". Nu tas tā, lai dzīve interesantāka tiem, kas vēl tikai mācās Raimond, Tu neesi piešķīris mainīgajam kv vērtību.Būtu jābūt:const int kv = 1000000; Sāksim ar to, ka būtu jābūt normāliem kompilatora argumentiem, kas izmestu warningu par neinicalizētu vērtību izmantošanu. Vēl labāk būtu, ja tam papildus visi warningi tiktu traktēti kā errori. Konstantes bieži vien definē ar #define preprocesora direktīvu. Labāk jau nu tomēr constus lietot, vismaz C++. Vai vēl labāk - static const. Link to comment Share on other sites More sharing options...
Raimonds1 Maijs 2, 2016 Author Share Maijs 2, 2016 (labots) Jo tas ir domāts pilnīgiem iesācējiem, kā te viens izteicās, varbūt pat idiotiem. Es pat pieļauju, ka cilvēki ar vieglu idiotijas pakāpi pat varētu pēc šī materiāla pamanīt kādu sintakses kļūdu vai pamainīt pāris ievades parametrus. Viss jau būtu labi, ja 50% koda nesastādītu output teksts ar komentāriem Iesācējiem nav pašā sākumā jāčakarējas ar sintakses un uztveres problēmām un pārlieku jāsapriecājas, kad izdevies beidzot izlaist cauri kompilatoram programmu, kas strādā, ne tikai tiek cauri, viņiem jau sākotnēji jākoncentrējas uz augstākām lietām. Piemēram, ko tas vecis lekcijā teica par raw pointers, kas tie tādi, kur piemēri un kad tos nelietot. Labots Maijs 2, 2016 - Raimonds1 Link to comment Share on other sites More sharing options...
Mezavecis Maijs 2, 2016 Share Maijs 2, 2016 Tāpēc, lai nebūtu problēmas ar uztveri, kodā nav jābūt nekam liekam un visiem palagiem jābūt kā komentāriem, nevis konsolē gāzt memuārus. 1 Link to comment Share on other sites More sharing options...
Raimonds1 Maijs 2, 2016 Author Share Maijs 2, 2016 Tas pašā sākumā trenē prasmi saprast, kad izvada tekstu, kad tekstu ar atbildi. Pie tam te ir nevis printf , ka pirmajā bloku piemērā, bet gan cout, tas abos piemēros parāda atšķirības. Produkts ir maksimāla saprotamība un atkārtojamība, katras rindas saprašana jau sākumā. Komentārus atmetīs pēc tam, kad automātismi jau būs iestrādāti. Link to comment Share on other sites More sharing options...
AndrisBB Maijs 2, 2016 Share Maijs 2, 2016 Tad kas tas ir C vai C++? Jo C tāds kods nedarbojas sākot jau ar 3. rindu. Link to comment Share on other sites More sharing options...
Jurkins Maijs 2, 2016 Share Maijs 2, 2016 Tiešām neprogrammists… char* foo = "foo bar"; char* bar = "foo bar"; printf("adreses %s vienaadas\n", foo == bar ? "ir" : "nav"); Iedomājies - izdrukājas, ka adreses IR vienādas! Tas gan nenozīmē, ka adreses būs vienādas arī tad, ja "char* xxx" abās vietās nomainīs uz "char xxx[]". Nu tas tā, lai dzīve interesantāka tiem, kas vēl tikai mācās Izrādās, ka arī šajā tēmā rodās kaut kas noderīgs, kas iesācējam sasprindzina prātu . Bet te jau mainīgais ir tikai viens, un uz šo norāda divi pointeri? Tad jau loģiski, ka adrese būs tā pati. Link to comment Share on other sites More sharing options...
binary Maijs 2, 2016 Share Maijs 2, 2016 Bet te jau mainīgais ir tikai viens, un uz šo norāda divi pointeri? Tad jau loģiski, ka adrese būs tā pati. Nu ja tev skaidrojums ir TĀDS, tad kā tu paskaidrosi, ka šajā gadījumā adreses NAV vienādas? char foo[] = "foo bar"; char bar[] = "foo bar"; printf("adreses %s vienaadas\n", foo == bar ? "ir" : "nav"); It kā viss loģiski, jā Link to comment Share on other sites More sharing options...
AndrisBB Maijs 2, 2016 Share Maijs 2, 2016 (labots) Atkarīgs no kompiliera, gcc ieliks ka adreses ir vienādas, lai ietaupītu atmiņu, ja vien neteiksi lai tā nedara. Citi var arī tā nedarīt pa defaulto un izveidot divus atsevišķus stringus. Labots Maijs 2, 2016 - AndrisBB Link to comment Share on other sites More sharing options...
binary Maijs 2, 2016 Share Maijs 2, 2016 AndrisBB, nu vispār ar foo[] bar[] variantu arī GCC nevajadzētu taupīt atmiņu. IMHO. Link to comment Share on other sites More sharing options...
AndrisBB Maijs 2, 2016 Share Maijs 2, 2016 Es par pirmo variantu Link to comment Share on other sites More sharing options...
Jurkins Maijs 2, 2016 Share Maijs 2, 2016 Es vēlreiz saku, ka C esmu galīgs iesācējs, pie tam pagaidām netaisos to mācīties "akadēmiski". Par kompilatoru darbību un atšķirībām un optimizācijas iespējām pašreiz nezinu neko. Mācos procesā. Vai tas ir pareizi vai nē? HVZ. Visticamāk jau profesionāli nekad neprogrammēšu ne C ne citā valodā. Bet Tavos piemēros atšķirība ir acīm redzama. Droši vien, ka izteikšos programmētājnekorekti, bet pirmajā gadījumā tiek definēti divi char tipa pointeri, kuri norāda uz vienu un to pašu mainīgo, otrajā gadījumā tiek definēti divi char tipa masīvi. Tas ir divi mainīgie. Kāpēc lai šiem būtu vienādas adreses? Link to comment Share on other sites More sharing options...
binary Maijs 2, 2016 Share Maijs 2, 2016 (labots) @@AndrisBB, nu ja par pirmo, tad ok, piekrītu, atkarīgs no kompilatora un tā argumentiem. @@Jurkins, jā, iesācējs. Un iesācējam būt nav slikti. Da kaut sit mani nost - es pats esmu viens mega "iesācējs ar pieredzi" Bet nu tas tavs komentārs #571 bija uzrakstīts tādā "tonī", ka tā vien prasījās dot piemēru, kas pierādītu pretējo. Tajā piemērā "foo bar" (tas, kurš 8 baitus liels un ar pēdiņām; jā, tieši 8 baitus, nevis 7) nav mainīgais, tā ir vērtība. Mainīgie ir "foo" un "bar" (bez pēdiņām). Un tas tā ir abos piemēros. Labots Maijs 2, 2016 - binary Link to comment Share on other sites More sharing options...
Jurkins Maijs 2, 2016 Share Maijs 2, 2016 (labots) OK, bet mans "tonis" bija par to, ka nodefinē divus mainīgos un tad pārbauda šo adreses. Vai ir vienādas vai nav. Kāda oposuma pēc? Tikpat labi jau var mēģināt divus objektus (gāzbetona klučus) vienlaicīgi iebakstīt trīsdimensiju telpas vienās un tajās pašās koordinātēs. Bez ceturtās dimensijas nekādi neiztiks Nu jā, es jau teicu, ka droši vien būs nekorekts izteikums. Nu jā tā ir vērtība. Bet pirmajā gadījumā šie mainīgie foo un bar taču ir pointeri, kuri norāda uz vienu adresi, sākot ar kuru tā vērtība ir ierakstīta atmiņā , bet otrajā gadījumā šie ir prasti char masīvi katrs ar savu adresi. Vai ne tā? (pilnīgi nopietni jautāju, bez kāda "toņa") 8 baiti tāpēc, ka galā 0x00? Labots Maijs 2, 2016 - Jurkins Link to comment Share on other sites More sharing options...
usver Maijs 2, 2016 Share Maijs 2, 2016 binary piemērā gan ar char, gan masīviem brīdinājumi ģenerējas: warning: conversion from string literal to 'char *' is deprecated [-Wc++11-compat-deprecated-writable-strings] char* foo = "foo bar"; ^ warning: conversion from string literal to 'char *' is deprecated [-Wc++11-compat-deprecated-writable-strings] char* bar = "foo bar"; ^ opt.cpp:10:43: warning: array comparison always evaluates to false [-Wtautological-compare] Link to comment Share on other sites More sharing options...
AndrisBB Maijs 2, 2016 Share Maijs 2, 2016 Izskatās šur tur tas tiek izmantots http://0pointer.net/blog/projects/string-pools.html Link to comment Share on other sites More sharing options...
Jurkins Maijs 2, 2016 Share Maijs 2, 2016 Es šeit šad tad spēlējos: http://www.tutorialspoint.com/compile_c_online.php It kā ņem pretī abus piemērus. Link to comment Share on other sites More sharing options...
Raimonds1 Maijs 3, 2016 Author Share Maijs 3, 2016 (labots) par pointeriem palasījos labus rakstus Sanāk tāda situācija No vienas puses - jāmācās un jāzina, jo ļoti svarīgi principi, iespējas un iemaņas. No otras puses - rekomendē parastos pointerus vispār daudz kur nelietot un lietot smart pointerus. programmers.stackexchange.com/questions/286226/what-is-the-type-of-data-that-pointers-hold-in-the-c-language?rq=1 cs.stackexchange.com/questions/56888/how-can-i-explain-to-my-parents-that-i-study-programming-languages-soft-questi reddit.com/r/programming/comments/20q34w/pdf_c_dont_use_fcking_pointers/ programmers.stackexchange.com/tags/pointers/hot programmers.stackexchange.com/questions/105902/do-the-young-minds-need-to-learn-the-pointer-concepts?lq=1 programmers.stackexchange.com/questions/17898/whats-a-nice-explanation-for-pointers?rq=1 Labots Maijs 3, 2016 - Raimonds1 Link to comment Share on other sites More sharing options...
MarisO Maijs 3, 2016 Share Maijs 3, 2016 lietot smart pointerus tas ir iekš C++, kas ir atšķirīgs no C, īpaši pēdējās revīzijas , kur ir closures un lambdas http://en.cppreference.com/w/cpp/language/lambda Link to comment Share on other sites More sharing options...
Raimonds1 Maijs 4, 2016 Author Share Maijs 4, 2016 (labots) Nu jā, bet sanāk tā, ka C++ lai saprastu jēdzienus, tie parastie pointeri ir jāsaprot, taču lietot tos daudz kur nedrīkst un tas šo to maina, kā tagad tos vajadzētu mācīties, jo bez pointeriem tā izpratne tik laba nebūs. Tā nu tas ir. Būtu kādi labi piemēri - agrāk ar parastajiem pointeriem darīja tā, tas radīja šādus te drošības riskus, tagad ar smart pointeriem dara šitā. Te tā programmiņa par tiem blokiem uzlabotā variantā. Praktiska. Kompilējas te http://cpp.sh //BLOKI #include <stdio.h> #include <iostream> #include <math.h> using namespace std;//kvadraatmetra laukums 1000000kvadraatmilimetru int main () { int Platums,Augstums,Garums,laukumsAG,laukumsGP,laukumsAP,P,A,G; int P100,A100,G100,blokaTilpums,blokiKUBAA; int kbmcena,smtKVcenaP,smtKVcenaA,smtKVcenaG; const int mm2_m2 = 1000000; const int simts = 100; const int desmittk= 10000; const int mm3_m3=1000000000; cout<<"______________________________________\n"; cout<<" B L O K I \n"; cout<<"__________________________\n"; cout<<" Peec katra skaitla ievades nospiediet ENTER\n"; cout<<"__________________________\n"; cout<<" Ievadiet bloka platumu milimetros\n";//EDIT atrodiet, kurus jasamaina vietaam cin>>(Augstums); cout<<" Ievadiet bloka augstumu milimetros\n";//lai rezultaati buutu pareizi cin>>(Garums); cout<<" Ievadiet bloka garumu milimetros\n"; cin>>(Platums); cout<<"Ievadiet kubikmetra cenu eiro, bez centiem\n"; cin>>(kbmcena); cout<<"__________________________\n"; cout<<"_______________________________________________________________________________\n"; cout <<" Parasti bloka garumi viens aiz otra rindaa nosaka sienas garumu.\n"; cout <<" Parasti bloka augstumi viens virs otra nosaka sienas augstumu.\n"; cout <<" Tad sienas biezums ir taads pats, kaa bloka platums.\n"; cout<<"__________________________\n"; laukumsAG =(Augstums*Garums); laukumsGP =(Garums*Platums); laukumsAP =( Augstums*Platums); P=mm2_m2/laukumsAG;// EDIT varbuut te kaut kas jaamaina A=mm2_m2/laukumsGP; G=mm2_m2/laukumsAP; P100=mm2_m2*simts/laukumsAG; A100=mm2_m2*simts/laukumsGP; G100=mm2_m2*simts/laukumsAP; blokaTilpums=Platums*laukumsAG; blokiKUBAA = mm3_m3/blokaTilpums; smtKVcenaP=desmittk*blokiKUBAA/P100; smtKVcenaA=desmittk*blokiKUBAA/A100; smtKVcenaG=desmittk*blokiKUBAA/G100; cout<<"__________________________\n"; cout<< " laukumsAG,laukumsAP un laukumsGP ir tas, peec kura reekina. \n"; cout<< " bloku skaitu kvadratmetraa:\n"; cout << " Kvadraatmetraa ir 1000 reiz 1000 ir 1000000 kvadraatmilimetru.\n"; cout<<"__________________________\n"; cout << " Ja sienas biezumu nosaka bloka platums, tad lietojam laukumsAG ieguuto skaitli. \n"; cout << " Ja sienas biezumu nosaka bloka augstums,tad lietojam laukumsGP ieguuto skaitli. \n"; cout << " Ja sienas biezumu nosaka bloka garums, tad lietojam laukumsAP ieguuto skaitli. \n"; cout<<"__________________________\n"; cout <<" Piemeers.Ja Augstums ir 200mm, Garums 500mm, laukums ir 100000 kvadraamilimetri.\n"; cout<< " Jo sienas biezums ir tas pats, kas bloka platums\n"; cout<< " Taatad, tas neveido to laukumu, no kura veidojas tas kvadraatmetrs\n"; cout <<" Tad kvadraatmetraa = 1000000/10000 = 100 bloki \n"; cout<<"__________________________\n"; cout <<"laukumsAG = "<<laukumsAG; cout<<"___kvadraatmilimetru_______________________\n"; cout <<"laukumsGP = "<<laukumsGP; cout<<"___kvadraatmilimetru_______________________\n"; cout <<"laukumsAP = "<<laukumsAP; cout<<"___kvadraatmilimetru_______________________\n"; cout <<"Bloki kvadraatmetra,ja BIEZUMS IR PLATUMS = "<< P; cout<<"__________________________\n"; cout <<"Bloki kvadraatmetra,ja BIEZUMS IR AUGSTUMS = "<< A; cout<<"__________________________\n"; cout <<"Bloki kvadraatmetra,ja BIEZUMS IR GARUMS = "<< G; cout<<"__________________________\n"; cout <<"Bloki 100 kvadraatmetros,ja BIEZUMS IR PLATUMS = "<< P100; cout<<"__________________________\n"; cout <<"Bloki 100 kvadraatmetros,ja BIEZUMS IR AUGSTUMS = "<< A100; cout<<"__________________________\n"; cout <<"Bloki 100 kvadraatmetros,ja BIEZUMS IR GARUMS = "<< G100; cout<<"__________________________\n"; cout<<"Bloku daljas netiek reekinaatas, taapeec var buut neatbilstiiba\n"; cout<<"__________________________\n"; cout <<"Simts kvadraatmetri sienas,ja BIEZUMS IR PLATUMS, maksaa = "<< smtKVcenaP; cout<<"__________________________\n"; cout <<"Simts kvadraatmetri sienas,ja BIEZUMS IR AUGSTUMS, maksaa = "<< smtKVcenaA; cout<<"__________________________\n"; cout <<"Simts kvadraatmetri sienas,ja BIEZUMS IR GARUMS, maksaa = "<< smtKVcenaG; cout<<"__________________________\n"; cout<<"Veikalaa bloki kubikmetraa ir "<<blokiKUBAA; cout<<"__________________________\n"; } Nav nekas liels, bet strādā un jebkurš celtnieks to var izmantot un dažs var šo to pamainīt pēc nelielas pamatinformācijas saņemšanas. Ļoti noder uzmanībai un sintaksei pašā sākumā, mainot parametrus, konstantes, izvadāmo info vai pielagojot pavisam kā cita rēķināšanai.. Labots Maijs 4, 2016 - Raimonds1 Link to comment Share on other sites More sharing options...
AndrisBB Maijs 4, 2016 Share Maijs 4, 2016 Tik es kautkā neredzu nevienu pašu pointeri tavā programā Kad mēģinu atbildēt Ievadiet bloka platumu milimetros un rakstu "divpadsmit" tad nokaras visa programma. 1 Link to comment Share on other sites More sharing options...
Jurkins Maijs 4, 2016 Share Maijs 4, 2016 Ievadam "ļoti noderīgajā" un visādi citādi ļoti pārskatāmu rezultātu parādošajā programmā : platums... 300 augstums...200 garums...600 Dabūjam: Bloki kvadraatmetra,ja BIEZUMS IR PLATUMS = 16__________________________ Bloki kvadraatmetra,ja BIEZUMS IR AUGSTUMS = 8__________________________ Bloki kvadraatmetra,ja BIEZUMS IR GARUMS = 5__________________________ WOW!!! Ja būvējam 600mm biezu sienu, vajag uz 1 m2 tikai 5 blokus Ohujiķeļno noderīgi jebkuram celtniekam. Bet mēs esam piekasīgi un paņemam kalkulatoru: 1/(0.2*0.3) = 16.66...67 kas pēc loģikas atbilstu pirmajai rinadiņai, bet, pat ja tas "jebkurš celtnieks" sapratīs, ka brīnumbērns Raimonds ir "nenozīmīgi" kļūdījies (sajaucis mainīgos) aizbrauks uz veikalu un nopirks 16 blokus, tad pēc tam dabūs 3.14zdi no brigadiera un brauks vēlreiz uz veikalu. Pēc gada tukšas piršanas par pointeriem Tev nav kauns kaut ko šādu publicēt, cienījamais pedagog, grāmatu rakstītāj? p.s. lai gan turpini vien. Te no programmēšanas vecmeistaru kašķēšanās reizēm var kaut ko derīgu iegūt. Un no rīta palasot šo tēmu jautrība ir nodrošināta. Nu jā, bet sanāk tā, ka C++ lai saprastu jēdzienus, tie parastie pointeri ir jāsaprot, taču lietot tos daudz kur nedrīkst un tas šo to maina, kā tagad tos vajadzētu mācīties, jo bez pointeriem tā izpratne tik laba nebūs. Pateicoties šim es šorīt gandrīz ar sviestmaizi aizrijos. Link to comment Share on other sites More sharing options...
Raimonds1 Maijs 4, 2016 Author Share Maijs 4, 2016 (labots) Kam negadās kļūdīties. Lai vai kā, no šitā var mācīties, ka starprezultāti kaut kur jāpieraksta, citādi var apmaldīties. Tik es kautkā neredzu nevienu pašu pointeri tavā programā Pointeri šajā tēmā tika pieminēti, pati sākuma programmiņa to lietošanai uzrakstīta un kaut kā neviens neteica, ka visādās konferences C++ parastos pointerus mudina nelietot, jo esot visādi riski un to visu tagad dara ar smart pointeriem. Taču, lai apjēgtu smart pointerus, būs jāsaprot parastie. Tomēr situācija sanāk tāda - mācies, mācies tos pointerus, lietot tu viņus tāpat nevarēsi visur, kur iedomājies un visur, kur līdz šim tos plaši lietoja, jo ir atklāti visādi riski un visādas problēmas. 2016. gadā jau varēji mācīties valodu, kas nav veca un rezultātā pilna ar tuftu. Ir taču Rust un Go. Un es ceru, ka C++ mācies tikai C++14 un C++17 standartus, nevis kautko aizvēsturisku. Nu paskatījos tos jaunos standartus, varbūt par tiem jauno pointeru sakarā? Piemērus, kad pa vecam var uzrakstīit labu programmu ar pointeriem, bet augšminētie riski ir novērsti vai samazināti. Klau, esi arī ko praktisku uztaisījis? Nu kaut vai Hello world, ar ko visi sāk Jeb tikai teoretizē Žēl, ka tu tā arī neesi pamanījis - topika autors nav 9 mēnešu laikā nav uzrakstījis un arī negrasās uzrakstīt nevienu rindiņu koda mērķis tak ir pavisam cits - spriedelēt par C++ tuvumu dzelžiem, C++ tutoriāļu trūkumu, izglītības sistēmas un jauniešu motivācijas problēmām. Uzrakstīju pāris simtu rindiņas, atkal viss ir slikti com. Labots Maijs 4, 2016 - Raimonds1 Link to comment Share on other sites More sharing options...
Jurkins Maijs 4, 2016 Share Maijs 4, 2016 Taču, lai apjēgtu smart pointerus, būs jāsaprot parastie. Tomēr situācija sanāk tāda - mācies, mācies tos pointerus, lietot tu viņus tāpat nevarēsi visur, kur iedomājies un visur, kur līdz šim tos plaši lietoja, jo ir atklāti visādi riski un visādas problēmas. Tas ir vāks! :D Es atzīšos, es jau sāku gaidīt Raimja postus. Tā kā kādreiz jaunas anekdotes par Čapajevu un Petjku. Uzrakstīju pāris simtu rindiņas, atkal viss ir slikti com. :D Tak tās rindiņas ir vienādas kā izstāstitas jāņogas. Link to comment Share on other sites More sharing options...
AndrisBB Maijs 4, 2016 Share Maijs 4, 2016 Atrisini kaut vienu uzdevumu no šis lapas un parādi rezultātu. https://www.hackerrank.com/domains/cpp/introduction/difficulty/easy/page/1 Link to comment Share on other sites More sharing options...
MarisO Maijs 4, 2016 Share Maijs 4, 2016 var jau lietot tikai C, nelienot uzreiz C++ https://www.quora.com/What-are-the-advantages-of-using-C-over-C-1 Link to comment Share on other sites More sharing options...
AndrisBB Maijs 4, 2016 Share Maijs 4, 2016 var jau lietot tikai C, nelienot uzreiz C++ Es gandrīz vispār neizmantoju C++, pārsvarā C. Priekš desktop programmām pārlecu uzreiz uz C# vai tagad biežāk JavaScript (Node.js, Electron) Link to comment Share on other sites More sharing options...
Recommended Posts
Izveido kontu, vai pieraksties esošajā, lai komentētu
Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas
Izveidot jaunu kontu
Piereģistrējies un izveido jaunu kontu, tas būs viegli!
Reģistrēt jaunu kontuPierakstīties
Jums jau ir konts? Pierakstieties tajā šeit!
Pierakstīties tagad!