Jump to content

Kā konkrēti izpaužas C++ valodas tuvums "dzelžiem".


Raimonds1
 Share

Recommended Posts

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

Raimonds1

#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

Erm... :shok:

 

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?

  • Patīk 2
Link to comment
Share on other sites

Raimonds1
(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 - Raimonds1
Link to comment
Share on other sites

 

 

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

~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? :D


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

Jurkins
(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 :D. 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 - Jurkins
Link to comment
Share on other sites

 

 

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

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

Jurkins

 

 

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

Raimonds1

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

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

Raimonds1
(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 - Raimonds1
Link to comment
Share on other sites

Mezavecis

Viss jau būtu labi, ja 50% koda nesastādītu output teksts ar komentāriem :D

Link to comment
Share on other sites

binary

 

 

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

Raimonds1
(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 - Raimonds1
Link to comment
Share on other sites

Mezavecis

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. 

  • Patīk 1
Link to comment
Share on other sites

Raimonds1

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

AndrisBB

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

Jurkins

 

 

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

binary

 

 

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

AndrisBB
(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 - AndrisBB
Link to comment
Share on other sites

binary

AndrisBB, nu vispār ar foo[] bar[] variantu arī GCC nevajadzētu taupīt atmiņu. IMHO.

Link to comment
Share on other sites

Jurkins

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

binary
(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" :whistle2: 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 - binary
Link to comment
Share on other sites

Jurkins
(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 :D

 

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 - Jurkins
Link to comment
Share on other sites

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

Raimonds1
(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 - Raimonds1
Link to comment
Share on other sites

Raimonds1
(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 - Raimonds1
Link to comment
Share on other sites

AndrisBB

Tik es kautkā neredzu nevienu pašu pointeri tavā programā :D

Kad mēģinu atbildēt Ievadiet bloka platumu milimetros un rakstu "divpadsmit" tad nokaras visa programma. 

  • Patīk 1
Link to comment
Share on other sites

Jurkins

Ievadam "ļoti noderīgajā" un visādi citādi ļoti pārskatāmu rezultātu parādošajā programmā :D :

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 :D 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

Raimonds1
(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 - Raimonds1
Link to comment
Share on other sites

Jurkins

 

 

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 :D :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 :D :D Tak tās rindiņas ir vienādas kā izstāstitas jāņogas.

Link to comment
Share on other sites

AndrisBB

 

 

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

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 kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...