Jump to content

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


Raimonds1
 Share

Recommended Posts

 

 

Vienīgais veids, kā apgūt manipulācijas ar atmiņu - stop thinking, start doing (ļoti populāra frāze, starp citu; un tas reāli strādā).

Vēl populārāks ir KISS (Keep It Stupid Simple) princips.

Uztaisi savu Zoli izmantojot to ko zini, aizmirstot par visādām bitu manipulācijām utt, toties galarezultātā iegūsti kautkādu darbojošos artifaktu. Kad taisīsi nākamo projektu ar jau pieredzi no iepriekšējā, tad tavs KISS jau būs līmeni augstāks. Pēc katra produkta tādā veidā progresējot. Kautko optimizēt var gadījumos, kad tas ir nepieciešams vai vispār ir optimizēšanas vērts.   

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

Nu lai nokļūtu līdz KISS, vispirms ir jātiek galā ar BDSD (jeb "beidz domāt, sāc darīt") :whistle2:


p.s. atzīšos - man pašam ar "beidz domāt, sāc darīt" reizēm ir problēmas :D Un tad nākas atcerēties teicienu "nekavējies - iedvesma nav siļķe, kuru var iesālīt uz daudziem gadiem" :D

Link to comment
Share on other sites

Raimonds1

 

 

Gads - tas ir pietiekoši ilgs laika posms, lai iemācītos uztaisīt pat vienkāršas spēlītes

Tas ir tad, ja mērķis ir uztaisīt kaut ko, kas apmēram darbojas un nav intereses par tiešām dziļu visa tā saprašanu reizē ar labu, plašu, maksimāli saprotamu skaidrojumu. 

 

 

 

Drīz būs gads apkārt kopš tēmas aizsākšanas.

 

Šo var apskatīt arī šādi - šajā laikā nekas jauns pointeru skaidrojumos latviski pieejamā informāciajs laukā klāt nav nācis, izņemot manu iepriekš vakar iievietoto koda paraugu, kas paredz visādas sākuma grūtības. 

 

 

 

Tā vietā, lai reāli sāktu kaut ko darīt, lai nokļūtu līdz tām manipulācijām ar atmiņu, tu te kaut ko filozofē un stāsti visiem, cik viss ir slikti un nepareizi, jo tev, redz, nav saprotams, kā tas vai šis ir uzrakstīts.

Tu pat nevari iedomāties, cik lieli biznesi balstās uz to, ka kaut kas sarežģīti skaidrots tiek izskaidrots vienkārši. Un ne aju tikai cilvēkiem ar īpašām vajadzibām, cilvēki ir dažādi, viens domā skaititļos, cits var ideāli savilkt loģisku algoritmu .

 

 

 

Pretējā gadījumā mēs būtu palikuši tur pat, kur šobrīd esi tu.
 

Es esmu drusku citur, kur sākumā bijāt Jūs un eju pa citu ceļu.

 

 

Un primārajam ir jābūt mērķim, nevis rīkam - vienalga, vai mērķis ir uztaisīt zoli, kalkulatoru, nokopēt failu ar kontrolētu ātrumu vai aizpildīt n baitu lielu atmiņas apgabalu ar skaitļiem no i līdz j.

Dažādu valodas rīku veidošana arī var būt kaut kas vērtīgs. Kas tad veido tos valodas rīkus, kur tagad jāraksta 10 rindiņas, bet pa vecam 200? 

 

 

Kamēr tikai skatās, kā citi to dara (youtubē vai tutoriāļos), tikmēr par iemācīšanos var nemaz nesapņot.

Ir labi, ja iepriekš kāds ir pateicis vai pats saklausījies, ko tad, ja nu reāli gadās tā vai šitā un tas reāli notiek un to var izmantot šeit un tagad. Mes te vienā tēmā diskutējām par auto automātisko vadību un tur bija video ar tiem sīkajiem un ragavām no stūra, kādam braucot pa pilsētu ziemā varbūt šis ataust atmiņā un kāja automātiski atlaiž gāzi un nomet ātrumu par 20km/h. Nevajag novērtēt arī tādu informāciju par zemu.

 

 

 

Uztaisi savu Zoli izmantojot to ko zini, aizmirstot par visādām bitu manipulācijām utt, toties galarezultātā iegūsti kautkādu darbojošos artifaktu. Kad taisīsi nākamo projektu ar jau pieredzi no iepriekšējā, tad tavs KISS jau būs līmeni augstāks. Pēc katra produkta tādā veidā progresējot. Kaut ko optimizēt var gadījumos, kad tas ir nepieciešams vai vispār ir optimizēšanas vērts.  
 

 

Tur ir zināma jēga, kaut kādu kodu es rakstu, bet tas pagaidām neizskatās smuki. 

Link to comment
Share on other sites

ieleja, pat ja galveno baudu sniedz ceļš uz mērķi - mērķim tāpat ir jābūt, pretējā gadījumā nav arī ceļa uz mērķa sasniegšanu.

 

Tas ir tad, ja mērķis ir uztaisīt kaut ko, kas apmēram darbojas un nav intereses par tiešām dziļu visa tā saprašanu reizē ar labu, plašu, maksimāli saprotamu skaidrojumu.

Nē, gada laika var arī no A līdz Z saprast, kas, kā un kāpēc tajā gara darbā strādā.

 

Tu pat nevari iedomāties, cik lieli biznesi balstās uz to, ka kaut kas sarežģīti skaidrots tiek izskaidrots vienkārši. Un ne aju tikai cilvēkiem ar īpašām vajadzibām, cilvēki ir dažādi, viens domā skaititļos, cits var ideāli savilkt loģisku algoritmu .

Es vispār nevaru iedomāties, cik lieli ir biznesi. Bet varu iedomāties, ka Latvija ir pārāk maza, lai varētu attīstīt lielu godīgu un ētisku biznesu, kura mērķauditorija būtu latviski runājošie.

 

Dažādu valodas rīku veidošana arī var būt kaut kas vērtīgs. Kas tad veido tos valodas rīkus, kur tagad jāraksta 10 rindiņas, bet pa vecam 200?

Šādus valodas rīkus veido cilvēki, kuri gana daudz ir atstrādājuši "pa vecam", darba gaitā veidojot izpratni par to, kā bija, kā ir un kā varētu būt. Labots - binary
Link to comment
Share on other sites

Raimonds1

Nu jā, tā uzbrukuma fronte uz mērķi, vai labāk, vairākiem mērķiem ir pārāk plaša, būs jāsašaurina.

 

Un vēl - nu nav domāšanai vienalga, KĀDĀ VEIDĀ to metodi mācās - vai vispirms bez dziļākas jēgšanas iekal standarta paņēmienus  un sintaksi, nu to visa kopā likšanu un algoritmisko domāšanu un datu organizaciju - ai, to kaut kad vēlāk, vai primāri uzstāda problēmas izpratni, tad paraugu un tad - nu jā, sintakse mums te ir tāda, tas jāzin jau būs.

Link to comment
Share on other sites

 

 

Es ticu pareizai pieejai programmēšanai.

Ja reiz C un C++ stiprā puse ir atmiņas menedžments, tad ar to arī jāsāk.

 

 

asm vispār visu menedžē kā vien grib, kamēr C/C++ nervozi pīpē maliņā.

ar asm var pat cpu reģistrus menedžēt. pie tam visādu bibliotēku-šmibliotēku mazāk, nekādu tur idiotiem paredzētu printf(), izpildāmie faili tik minimāli, cik vien var būt, pilna kontrole pār izpildāmo kodu, nekādu jūzerfriendly mājsaimniecēm paredzētu abstrakciju kā if() else(), switch(), un ja pastāsti, ka programmē asmā, tad ciemā pačots, visas meitenes tavējās un C programmētāji tev uzreiz klanās un alu pienes..  :smoke:

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

Inspektors Caps
Inspektors Caps, ko tu domā par Rust valodu?

Ar Rust neko darījis neesmu. Cik ir skatīta ziņkāres pēc, tad liekas, ka varētu būt jēdzīga. Mani gan mulsina viņu "no null pointers". Kas ir vietā un kā tad sanāk ar C, C++, ASM un galu galā hardware savietojamību? Bet jebkurā gadījumā, ja arī valoda izrādīsies veiksmīga, līdz plašam pielietojumam low-level paies ilgi gadi, jo C/C++ šajā ziņā piemīt īpašība "good enough". Godīgi sakot, arī man, lai vai gribētos C dažas lietas kā tur nav, tas nekādi nav vērā ņemams šķērslis radīt jebko, ko vajag vai vēlos.

 

Nepareizi, Javā viss ir pass-by-reference, neskaitot primitīvus.

OK, tad viens mīnuss mazāk. Varu gan uzdot nākošo jautājumu - kā tur galu galā ar struktūrām? Es nedomāju nezināma izmēra un izvietojuma menedžētus objektus, bet reālas precīzas datu struktūras, ko var izmantot par, piemēram, IPv4 paketes header. Nespēju piekļūt dzelžiem un kompilēt native kodu tas gan nekādi neatceļ, tā kā šīs valodas funkcionāli nekādi nevar būt vienādas...

 

@@usver, ļoti labs piemērs. Bez sarkasma, tiešām! Davai, objektīvi apkopojam to, kas mums pa abiem ir sanācis. Visi mūsu varianti ir bitu bīdīšanas cikla bāzēti un Tavā ASM piemērā redzam, ka tā cikla apkalpošana prasa 4 instrukcijas. Atliek paanalizēt cikla iterācijas "saturu" un pieskaitīt šo konstanti.

  1.     Tavs optimizētais ASM. 2 vienkāršas instrukcijas + cikla 4 = 6.
  2.     Mans normālais C. 4 vienkāršas instrukcijas + cikla 4 = 8.
  3.     Tavs "čerez ž" deoptimizētais C. Tu tur izmanto pow(), kas ir izvirzījuma rinda jeb cikls ar katrā iterācijā vismaz saskaitīšanu, divām reizināšanām dalīšanu - 4 instrukcijas. Teiksim, ciklā ir desmit iterācijas - 40. Tā kā tās ir float (patiesībā pat double) instrukcijas un tur ir arī dalīšana, tad tas jau būs vismaz 10reiz lēnāk - 400 analoģisku vienkāršo instrukciju laiks. Tad vēl pow() Tu esi pamanījies izsaukt divreiz un ir vēl citi sīkumi, kas kopā, rupji rēķinot, būs jau ~1000.

Paņemsim manu variantu par 100%. Redzam, ka Tavs ASM ir par 25% ātrāks. Super, man ar to problēmu nav! Daudz kur šāds uzlabojums nebūs būtisks, bet priekš kritiskām vietām tas ir saprātīgi ieguldīts vairāk darba, kas ir devis būtisku uzlabojumu. Un tagad paskatāmies uz Tavu "čerez ž" C. Tas ir tikai "nieka" 125 reizes jeb 12500% lēnāks! Vienkārši WTF? Bet tas vēl nav viss un te mēs nonākam pie galvenā - tas kods priekš sava uzdevuma ir arī nevajadzīgi sarežģīts un sabakstīts no stulbām operācijām. T.i. tas ir algoritmiski idiotisks. Pretstatā mans piemērs ir supervienkāršs. Tajā ir vismazāk koda teksta, vismazāk jādomā un tas ir visātrāk uzrakstāmais. Ja uzdevums ir apmainīt vietām bitus, tad pirmais, kas ienāk prātā normālam programmētājam, ir.. pārbīdīt bitus! Galvenā runa nav par tā piemēra dumjo kodu, bet gan par prātā notiekošajiem procesiem, kas tādu kodu rada! Ir jābūt pamatīgi sačakarētai domāšanai, lai ienāktu prātā tāds kāpināšanu murgs, kā Tu uzrakstīji. Tādēļ šis piemērs tikai lieliski apstiprina manu pausto tēzi, ka Java un vispār high-level ilgtermiņā atrofē domāšanu.

 

Dzelža definīciju studijā.

Datortehnikas perifērijas izpratnē dzelzis ir elektroniska ierīce ar elektroniskiem reģistriem, kuros procesors var ierakstīt vērtības. Attiecīgi dzelžu programmēšana ir šo reģistru vērtību mainīšana. Vēl par dzelžu programmēšanu var uzskatīt "runāšanu" ar draiveriem vai kādu zema līmeņa bibliotēku, kas implementē tieši šo reģistru funkcijas. Savukārt, augsta līmeņa bibliotēkas jau implementē pavisam citādākas funkcijas.

 

Tas, ka vairāk standarta veikalā nopērkamiem produktiem neesi redzējis, nenozīmē, kad tagad esi baigais eksperts. Vēlreiz uzveru, ka cilvēks, kurš nekad programmēšanas kantorī pat degunu iebāzis, pat teorētiski nevar saukt citus par debiliem. Nu nav tu programmētājs, bet fanātisks tips un apsēsts ar cilvēku apkakāšanu. Acīmredzot atejā par ilgu sēdējis.

Teica čeku printeru un kodu skeneru pa COM portu pavēlnieks... Manā pasaulē programmējamie objekti ir no 1 Mhz 8-bit Atmel līdz Intel Xeon, kamēr Tavā līdz tam pašam, bet sākas tikai no 1 GHz 32-bit Atom. Bet vispār skatos, ka esi izpratis sevi. :) Viens jautājums - vai tiesības apmelot un kakāt uz galvas tiem, kuri perfekto lielvadoni atļaujas arī kritizēt, dod būšana par administratoru?

Labots - Inspektors Caps
Link to comment
Share on other sites

Raimonds1

Varbūt tas ir naivi, bet varbūt kādam pēc ši topika uzrodas interese laiku pa laikam uzrakstit kādu NEEFEKTĪVU, PAT DUBLĒTU kodu, kas toties būtu noderīgs iesācējiem. Varbūt kādam rodas interese uzlabot tieši savas tēmas skaidrošanas prasmes.

 

 

 

asm vispār visu menedžē kā vien grib, kamēr C/C++ nervozi pīpē maliņā. ar asm var pat cpu reģistrus menedžēt. pie tam visādu bibliotēku-šmibliotēku mazāk, nekādu tur idiotiem paredzētu printf(), izpildāmie faili tik minimāli, cik vien var būt, pilna kontrole pār izpildāmo kodu, nekādu jūzerfriendly mājsaimniecēm paredzētu abstrakciju kā if() else(), switch(),

 

Par to tiek domāts.


Ar vādu neefektīvs kods tiek saprasts kods, kas strādā, bet nav pārāk īss vai garš vai tā nooptimizēts, ka nespeciālists tur ilgi var meklet to briljanto ideju un skaistumu. Derīgs būtu kods, kas  SECĪGI ATAINO programmētāja domašanu, izvēles, kāpēc tā un ne šitā un to visu attēlo koda rindās un to skaidrojumos un turpat vienā pierakstā blakus.

Link to comment
Share on other sites

Inspektors Caps
Redzi, laiki ir citi un dzelži ir citi. Tie laiki, kad ZX (48 Kb, 2,5 MHz) bija sapņu virsotne, ir pagājuši. Pat 8086 (640 Kb, 8MHz) laiki, par kuru Bils izteicās, ka vairāk atmiņas nebūs vajadzīgs nekad, arī ir prom.

Nekas nekur nav prom, mainās tikai forma, jo pielietojums vienmēr ir visam jaudas spektram.

https://en.wikipedia.org/wiki/Atmel_AVR_ATtiny_comparison_chart

https://en.wikipedia.org/wiki/STM32#STM32_F0

 

Tu domā, ka modernā OS tie skaitļi ir reāli?

Lai arī OSā tās nav reālas adreses dzelža līmenī, tās var uzskatīt par it kā reālām konkrētas user space programmas kontekstā.

 

Jā jā, sinhronizācija ir piņķerīga. Par paralēli izpildāmu MapReduce esi dzirdējis ? Ja ir gana daudz ievades datu, tad tas viss atmaksājas.

Savukārt Tu par context switch un cache esi dzirdējis? Un paskaties (tabā "Features") cik taktis tas aizņem pat mazam RTOS, plus cik vispār aizņem OS lietas tabos "Performance" un "Memory Requirements".

https://www.arm.com/products/tools/software-tools/mdk-arm/middleware-libraries/rtx-real-time-operating-system.php

 

no reālas programmēšanas viņam ir patālu
Es pa gabalu varu pateikt, kurš var fiziski to darīt

:D Vienīgais, ko Tu vari, ir pa gabalu dēļ admina tiesībām citiem taisīt uz galvas tēmā, kurā pats nedarbojies (low-level) un ne s*da nejēdz. Reālajā dzīvē jau sen būtu atrāvis pa tablo.

Labots - Inspektors Caps
Link to comment
Share on other sites

Raimonds1

 

 

Paņemsim manu variantu par 100%. Redzam, ka Tavs ASM ir par 25% ātrāks. Super, man ar to problēmu nav! Daudz kur šāds uzlabojums nebūs būtisks, bet priekš kritiskām vietām tas ir saprātīgi ieguldīts vairāk darba, kas ir devis būtisku uzlabojumu. Un tagad paskatāmies uz Tavu "čerez ž" C. Tas ir tikai "nieka" 125 reizes jeb 12500% lēnāks! Vienkārši WTF? Bet tas vēl nav viss un te mēs nonākam pie galvenā - tas kods priekš sava uzdevuma ir arī nevajadzīgi sarežģīts un sabakstīts no stulbām operācijām. T.i. tas ir algoritmiski idiotisks. Pretstatā mans piemērs ir supervienkāršs. Tajā ir vismazāk koda teksta, vismazāk jādomā un tas ir visātrāk uzrakstāmais. Ja uzdevums ir apmainīt vietām bitus, tad pirmais, kas ienāk prātā normālam programmētājam, ir.. pārbīdīt bitus! Galvenā runa nav par tā piemēra dumjo kodu, bet gan par prātā notiekošajiem procesiem, kas tādu kodu rada! Ir jābūt pamatīgi sačakarētai domāšanai, lai ienāktu prātā tāds kāpināšanu murgs, kā Tu uzrakstīji. Tādēļ šis piemērs tikai lieliski apstiprina manu pausto tēzi, ka Java un vispār high-level ilgtermiņā atrofē domāšanu

 

Te varētu palidzēt atcerēšanās, kad tikai pieņemts lēmums vispār pāriet uz C/C++ vai vēl austāka līmeņa valodām vai kādas bija problēmas ASM, kuras tā gribējas risinat ātrāk. Un tad jau arī notika tas domāšanas veida pagrieziens uz to sarežģījumus radošo pusi. Nekā perosniska, tikai pedagoģiska interese, ja izpratīsi, pašam būs labums.


 

 

nekādu jūzerfriendly mājsaimniecēm paredzētu abstrakciju kā if() else(), switch()

 

Aizdomājos par darbu dalīšanu, ko varētu iemācīt mājsaimniecēm, lai tās atvieglo darbu pamata programmētājam.

Link to comment
Share on other sites

datu struktūras, ko var izmantot par, piemēram, IPv4 paketes header.

 

primitīvie datu tipi + palīgklases to ērtākai sapakošanai, piemēram, ByteBuffer [~dinamisks char*]. 

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html 

int (cerams, nav jāskaidro, ar ko tas atšķiras no Integer), byte (cerams, nejaukts ar Byte klasi), short, utml.

 

https://android.googlesource.com/platform/frameworks/base/+/56a2301/core/java/android/net/dhcp/DhcpPacket.java#245

Labots - usver
Link to comment
Share on other sites

 

 

reālas precīzas datu struktūras
 

 

javā nekā tāda nav,  tur pat unsigned int nav.    Erlangā gan ir "bitstring"

Link to comment
Share on other sites

Raimim vajadzētu mest pie malas pointerus un sākt beidzot nodarboties ar kaut ko nopietnāku. Tāds ražīgs treša ģenerators varētu tikt pielietots gadījumos, kur lieto Lorem Ipsum vai vēl labāk e-pasta sarakstēs ar mērķi iznest oponentam smadzenes. :suicide2:

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

nevertell

 

 

Savukārt Tu par context switch un cache esi dzirdējis? Un paskaties (tabā "Features") cik taktis tas aizņem pat mazam RTOS, plus cik vispār aizņem OS lietas tabos "Performance" un "Memory Requirements".

Paklau, tukšpirdi, zini, kas ir futeksi ? Jebšu, jūzerspeisā implementēti muteksi ? Ja veicam darbības ar 
Un jā, protams, ja mēs lietojam vairāk thread'us, kā mums ir kodoli, nevis izdalam darbu priekš katra kodola, tad thread'ings nav vajadzīgs.

Bet kāpēc lai kāds darītu ko tamlīdzīgu ? 

 

Protams, ka multi-thread'ots kods, ko rakstījis bezpoņas Vaņa būs lēnāks, kā pirmkursnieka vienkodolnieks. 

Tikai tāpēc, ka tev nav izpratnes par to, kā lietot vairākus kodolus un paralelizēt kodu, tas nenozīmē, ka to izdarīt nevar.

Un protams nav vērts paralelizēt ciklu, ja cikls tiek izpildīts ~100 reizes un ciklā izpilda ~10 instrukcijas. 

Link to comment
Share on other sites

Raimonds1
#include<stdio.h>
#include<iostream>
using namespace std;


main() //ievadiisim skaitlus pasi, jaaieklauj paipildus biblioteka
{
    int a20,a22,a24;
       cout<<"Ievadiet jebkurus 3 skaitlus:\n";
       cout<<"Peec katra skaitla ievades nospiediet ENTER:\n"; //EDIT piemirsu 2 strīpas
       cin>>a20;
       cin>>a22; 
       cin>>a24;

printf ("adress of a20 is %u \n", &a20) ;
printf ("adress of a22 is %u \n", &a22) ;
printf ("adress of a24 is %u \n", &a24) ;

int*p20  =  &a20;
int*p22  =  &a22;
int*p24  =  &a24;

printf  (" p20 veertiiba ir %u", p20  ) ;
printf  (" a20 veertiiba ir %d",*p20  ) ;

printf  (" p22 veertiiba ir %u", p22  ) ;
printf  (" a22 veertiiba ir %d",*p22  ) ;

printf  (" p24 veertiiba ir %u", p24  ) ;
printf  (" a24 veertiiba ir %d",*p24  ) ;


printf  (" a20, a22 un a24 summa ir %d", a20 + a22 + a24 ) ;
printf  (" a20, a22 un a24 summa, atrodot tos atminas adresee ir %d",*p20 + *p22 + *p24) ;



    
       

Pēc programmas palaišanas, pieprasa ievadīt 3 skaitļus, pēc katra spiest enter, izvada summu un pirms tam skaitļu adreses.

 

Pedagoģiska dilemma, kādā secībā labāk mācīties/mācīt - vai vispirms parādīt(pašam iemācīties, kā), ka iespējama skaitļu ievade no klaviatūras un tam vēl piepīt kaut kādus if else nosacījumus, vai arī turpināt ar atmiņas tēmu un ievadīt un noteikt atmiņas vietas citiem datiem. array, string, malloc virziens vai arī standarta darbības ar skaitļiem. Varbūt if else kombinēt ar pointeriem. Varbūt vajag tagad ciklus? Varbūt to visu teorētiski pārspriest kā būtisku izvēles punktu, kas var noteikt tālākos paradumus?!

#include<stdio.h>
#include<iostream>

main() //ievadiisim array tipa datus

{
     int iar1[12] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
     int iar2[12] = {23,24,25,26,27,28,29,30,31,32,33,34};// EDIT izlabots 1 par 2

     printf ("iar1 adrese ir %u \n", $iar1);
     printf ("iar2 adrese ir %u \n", $iar2);

     if (iar1==iar2)
        printf ("taas ir vienaadas");//taas ir vienkarshi vienaadas 
       else // taas salīdzinot un elsee -taas nav vienaadas, vienkaarshi saliidzinot
        printf ("taas nav vienaadas   ");//paeksperimentee ar sho attaalumu no vienaadas 

     if (&iar1==&iar2)
        printf ("taas ir vienaadas, samekleejot dotajaas adresees");//izmantojot pointeri 
       else  // un atrodot taas , kur taas paglabaatas
        printf ("taas nav vienaadas, samekleejot dotajaas adresees");//tas pats - izmantojot pointeri....
} // buutibaa tas ir rakstiits koda saprashanai, viena un taa pati darbiiba tiek veiikta divos veidos

PIRMS MAIN VAJAG int. Tātad int main

Labots - Raimonds1
Link to comment
Share on other sites

int iar1[12] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};int iar1[12] = {23,24,25,26,27,28,29,30,31,32,33,34};
Tu mēģini to visu kādreiz arī nokompilēt, vai arī tikai programmē vien - pisaķeļ, a ņe čitaķeļ?

 

cout<<"Ievadiet jebkurus 3 skaitlus:\n";

cout<<"Peec katra skaitla ievades nospiediet ENTER

cin>>a20;

ko šitais izvada? tev vispār kompilators kāds ir uzinstalēts?

printf ("iar1 adrese ir %u \n", $iar1);

tu ar php5apache2.dll savu kodu izpildi?

 

Un stdio ir C bibliotēka, kamēr iostream ir C++ piederīga. nevajag izmantot abus kopā, ja vien nav īpaša vajadzība to darīt. cout pats sapratīs, kā mainīgais jāparāda.

C++ stila datu izvadīšana:

cout <<"kaut kāds teksts " << dajebkads_mainigais << "tekstu turpinām " << vel_viens_mainigais << endl; 

// endl ir "\n" simbola aizvietotājs jeb "endline"
Labots - usver
  • Patīk 1
Link to comment
Share on other sites

Raimonds1

Protams. DevC++

Viss notiek. EDIT - biju piemirsis 2 strīpas pārrakstot


Pirmajā es tikai nosaku, vai abi array ir vienādi - salīdzinot pa tiešo un salīdzinot, izmantojot pointerus.

Iznākums 

adress of iar1 is 342949292

adress of iar2 is 342947589

 taas nav vienaadas  taas nav vienaadas EDIT atrodot taas atminas adresee


Otrajā to arī izvada - ievadiet jebkurus 3 skaitlus

Peec katra skaitla ievades nospiediet ENTER


Ievadam 3 skaitlus, viņš tos arī saskaita.

Pirms tam izvada arī šo skaitļu adreses.


main() //ievadiisim skaitlus pasi, jaaieklauj papildus biblioteka- arri 2 striipas
{ // un rindas nobeigumu kolu, striipu, n un peedinas
    int a20,a22,a24;
       cout<<"Ievadiet jebkurus 3 skaitlus:\n";
       cout<<"Peec katra skaitla ievades nospiediet ENTER:\n"; //EDIT piemirsu 2 strīpas

Es tur skatījos no dažādiem resursiem un liku kopā, tāpēc tā sanāca. 


 

 

Un stdio ir C bibliotēka, kamēr iostream ir C++ piederīga. nevajag izmantot abus kopā, ja vien nav īpaša vajadzība to darīt. cout pats sapratīs, kā mainīgais jāparāda. C++ stila datu izvadīšana:
  Labots - Raimonds1
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

A kapēc šie ir vienādi?

if (*(iar1 + 21)) == 9[iar2])
{
    printf ("taas ir vienaadas, samekleejot dotajaas adresees\n");
}      	
else
{
    printf ("taas nav vienaadas, samekleejot dotajaas adresees\n");
}	
Labots - AndrisBB
Link to comment
Share on other sites

Raimonds1

Tā ir kļūda, kuru var ielaist arī speciali, lai mazākzinoši kā Jūs to pamana.

Es pārrakstīju ar roku kodu , nevis kopēju nokompilētu kodu.

Tadas kļūdas man pagaidāmšad tad gadās.

 

Jā tur jābūt iar1 un iar2.

 

 

 

Un stdio ir C bibliotēka, kamēr iostream ir C++ piederīga. nevajag izmantot abus kopā, ja vien nav īpaša vajadzība to darīt. cout pats sapratīs, kā mainīgais jāparāda. C++ stila datu izvadīšana:
 

 

Usver, negribi savu skaidrojošo koda gabalu, kas seko pēc šī teikuma, kaut kā sadalīt, citādi tas čakarē visu lapas performanci?


Ja pieņem, ka pirmās 2 nodarbības ir notikusas, trešajā esmu iecerejis pastāvīgu darbu ar literatūru internetā, personīgi atrodot un piekabinot jau gatavajiem kodiem kaut kādu jaunu funkcionalitāti - kaut vai eksperimentus ar parieziem un nepareiziem identifikatoriem, datu tipiem un to ievadīšanu tajos pierakstos ar skaitļa 10 pakāpēm, kaut kādu konstanšu deklarēšanu un to paglabāšanu zināmās, rezervētās adresēs un izsaukšanu ar pointeri pēc vajadzības.

 

Var paņemties ar char (simbola literālis) kas apzīmē vienu rakstuzīmi burtu, ciparu vai simbolu tā dāžādajas izpausmēs, kamēr kļūst skaidrs, kad tas char ir skaitlis, kad burts.


Var arī veikt kaut kādus aritmētiskus aprēķinus, obligāti izmantojot pointerus un atrodot piemerus, kad tas tiešām ir vajadzīgs.


Un pāri visam - tas viss atmiņas veidošanas, glabāšanas un izsaukšanas fonā. Tur vēl var kādu if else vai ko citu piekabināt. 

 

Jebkurš var nokopēt tos koda gabalus, satasīt katram 20 kopijas un tad mainīt visu ko un saglabāt starprezultātus, lai ir ko pēc tam apskatīt un atcerēties, kā tika pie tā vai citā jēdziena sapratnes.

Link to comment
Share on other sites

Indigo bērns, ja Tu gribi vispirms apgūt visas iespējamās kļūdas, tad Tu neko derīgu neuzprogrammēsi nekad. Vienkārši laika nepietiks, uz zārka vāka no iekšpuses turpināsi pointerus skribelēt :D

Te ir arī atbilde uz Tavu jautājumu, kāpēc nav Tev saprotamu mācību līdzekļu. Da nafig nevienam nevajag tādus, kā Tu gribi. Tu esi vienīgais dīvainītis, kas tādā veidā mācās "programmēt".

Man, piemēram, pirms kāda laika parādījās hobijs - Atmel kontrolieri. OK, man arī viss nepielec tik ātri kā reiz jaunībā :D. Bet, ja es ņemtos Tavā stilā, tad pirmo LEDu varētu sākt midžināt (ja davilktu :D ) kaut kur ap 2030-to gadu :D

 

Ej labāk šodien ierauj kādu aliņu (vārda svētkos, ja tas ir Tavs īstais vārds) un par meitenēm padomā.

Labots - Jurkins
Link to comment
Share on other sites

Raimonds1

Kā jau teicu, mācību metodika arī var būt produkts.

Paldies par apsveikumu, ja tas tā bija domāts.

 

Programmēšanas pamatu zināšana, ja arī nekas vairāk nesanāks, arī var noderēt, lai saprastu, kādus citu veidotus izstrādājumus pasūtīt.

 

Mana pieeja - sākt ar pointeriem pirmajā nodarbībā ar gatavu kopētu piemēru, pārējo pielasot pēc tam, lai ņemšanās ar sintakses problēmām un koda lasāmību neaizēno galveno uzdevumu.

 

Nākamais koncepts dienaskārtībā

array is a pointer    http://www.cplusplus.com/forum/articles/10/

https://www.le.ac.uk/users/rjm1/cotter/page_59.htm

 


Tad šis http://www.cprogrammingexpert.com/C/Tutorial/dynamic_memmory_allocation/malloc.aspx

Labots - Raimonds1
Link to comment
Share on other sites

Mezavecis

Kam tā metodika domāta? Pilnīgi un noteikti ne programmētājiem vai kas par tādiem taisās kļūt. 

 

 

mācību metodika arī var būt produkts
 

Un paskaiti cik simtiem vai tūkstošiem cilvēku uzkakājis? Tad, kad būsi kaut ko praktisku uzprogrammējis un tiešām parādījis, ka tas dzīvē darbojas, tad parunāsim par to, kurš jēdz vairāk. Ej labāk uz tvnetu, kur tev padodas ar liberastiem bezjēdzīgi karot. Nu jau gūglē var ievadīt tavus citātus un uzreiz atrast, kur un kādos laikos esi atzīmējies. 

 

 

Vienīgais, ko Tu vari, ir pa gabalu dēļ admina tiesībām citiem taisīt uz galvas tēmā, kurā pats nedarbojies (low-level) un ne s*da nejēdz. Reālajā dzīvē jau sen būtu atrāvis pa tablo.
 
Link to comment
Share on other sites

Mezavecis

Mūsdienās jau vairāk neko nevajag - izlasīt teoriju un būt kā Caps, kas visus var gudri kakāt uz galvas mācīt 

Link to comment
Share on other sites

Raimonds1

Es domāju, ka arī nezinātājam tie piemēri ieskatu jēdzienos dod gan.

 

Sākumā saprast, kurš ir pointeris, kura ir adrese un kura ir saglabātā vērtība uzskatāmā veidā ir gana labs pasākums.

 

Tur viss ir redzams - te ir 3 vērtības, te trīs adreses un te trīs pointeri, kas uz to norāda.

 

Redzēs, cik viegli ies ar malloc, realloc, pointers are arrays un vēl pāris jēdzieniem.


 

 

programmēšanas pedagogs, kas nemāk programmēt un nav programmējis
 

 

Ja es saprotu, es protu arī izskaidrot. 

Labots - Raimonds1
Link to comment
Share on other sites

Mezavecis

Re kur ir 100x100px attēls. Lūk uztaisi šim te metodiku ar saviem pointeriem, lai iegūtu kvalitatīvu dither ar 1 krāsu. Drīkst izdomāt savu algoritmu un neizmantot nevienu no esošiem. Var pat nerakstīt kodu, bet uzrakstīt kā tu to darīsi :)

photo-thumb-68042.png

Link to comment
Share on other sites

Inspektors Caps

 

 

primitīvie datu tipi + palīgklases to ērtākai sapakošanai, piemēram, ByteBuffer [~dinamisks char*].

Nepūderē smadzenes, tas ir vienkārši dinamisks masīvs. :) Tas, ka Java tam ir "view buffers" skati uz to kā cita primitīvā tipa masīvu, put/get metodes un vēl kaut kas, ir bullšits, kas C principiāli nav vajadzīgs, jo jebkuru pointeri var cast'ot par pointeri uz jebko citu.

 

 

 

javā nekā tāda nav, tur pat unsigned int nav.

Ar šo pietiek, lai secinātu, ka konkrētā valoda principā nav lietojama dzelžiem, kur reģistros dažādu izmēru unsigned integeri ir uz katra soļa. Ar to arī ir skaidri pierādīts, ka valodas, piemēram C un Java, funkcionāli nav ar vienādām iespējām.

 

 

 

Paklau, tukšpirdi, zini

Kaut kāds ar nerviem slimo klubiņš šeit. :D Aizrādīju par context switch konrētās Raimonda "idejas" sakarā, bet šis jau aizdemagoģējās pavisam citur. Var tikai jautāt - vai Tu spēj sekot tēmai? Lasi:

 

 

ja kāda info ir nevis 32 vai 64 bitu liela, bet īsāka, piemēram, 8 bitu, vai tiek kodoli var paņemt no tā garā 64 bitu blāķa katrs savu posmu un reizē apstrādāt

Raimonds runāja par integeru dalīšanu baitos vai pat bitos, nevis par lielu datu blāķu apstrādi! Un to gan usver jau uzreiz nolika pie vietas, gan es Tev vēlāk atgādināju. Seko, par ko vispār ir runa!

 

 

 

Un jā, protams, ja mēs lietojam vairāk thread'us, kā mums ir kodoli, nevis izdalam darbu priekš katra kodola, tad thread'ings nav vajadzīgs. Bet kāpēc lai kāds darītu ko tamlīdzīgu ?

Uzreiz redzams, ka neesi izstrādājis nevienu labu programmu ar GUI, perifērijas, failu u.c. lietu paralēlu un sinhronizētu izmantošanu. Redzi, thread'us lieto ne tikai priekš CPU intensīvas datu apstrādes, bet arī paralelizācijai. Gribi piemēru? Konkrēti Windows API programma - viens thread's priekš programmas message loop, otrs griež COM porta datu saņemšanu un trešais Direct3D renderēšanu. Tiem ir dažādas prioritātes, neviens no tiem nenoslogo pat atsevišķu kodolu uz 100% un visi kopā arī pat ne tuvu. Varbūt Tavuprāt šai programmai uz divkodolu procesora nav jēgas no thread'iem? Lai, piemēram, kamēr notiek jauna kadra renderēšana, viss pārējais GUI un COM ports iefrīzo. Uz vienkodola procesoriem tad vispār nevienai programmai nevajadzēja thread'us? Un mikrokontrolieros, kur gandrīz vienmēr ir tikai viens kodols un tikai viena programma, tad vispār OS nemaz nevajag? T.i. visa pasaule ir sarakstījusi neskaitāmus RTOS, bet izrādās, ka tie ir nevajadzīgi. Labi gan, ka Tu mūs, dumiķīšus, apgaismoji! Kaut ko minēji par tukšpiržiem...

 

 

 

Tad, kad būsi kaut ko praktisku uzprogrammējis un tiešām parādījis, ka tas dzīvē darbojas, tad parunāsim par to, kurš jēdz vairāk.

Visi pārējie jau ir parādījuši? Tu esi parādījis? Kur?

Link to comment
Share on other sites

Raimonds1

 

 

Raimonds1, 29 Apr 2016 - 23:57, teica: pointers are arrays   ja tu ko tādu raksti...
 

 

http://eli.thegreenplace.net/2009/10/21/are-pointers-and-arrays-equivalent-in-c

http://stackoverflow.com/questions/4607128/in-c-are-arrays-pointers-or-used-as-pointers

https://www.le.ac.uk/users/rjm1/cotter/page_59.htm

http://www.cplusplus.com/forum/articles/10/

 

Kungi, ja tas ir iespējams, šo konceptu iesācējiem saprotami, kur kopīgais, kur atšķirīgais.


http://www.tutorialspoint.com/cprogramming/c_pointer_to_an_array.htm

http://www.panix.com/~elflord/cpp/gotchas/index.shtml

http://www.tutorialspoint.com/cplusplus/cpp_pointers_vs_arrays.htm

https://www.ibiblio.org/pub/languages/fortran/append-c.html

The K&R method of reducing arrays to pointers


http://icecube.wisc.edu/~dglo/c_class/array_ptr.html

    • n
  • Pointers are not, however, the same as arrays
  • This is one of the most confusing parts of C, so here are three different ways of stating the difference between an array a and a pointer p which points to the first element of a :
    • The technical explanation: arrays are accessed using direct addressing, pointers are accessed using indirect addressing
    • The less technical explanation: a is an address, p is an address which holds the address of a
    • The extremely wordy explanation: to retrieve value from a[n], the computer starts at address a, moves n past it and fetches value from there; to retrieve value from p[n], the computer starts at address p, fetches the address stored there and adds n to it, then fetches value from the resulting address
  • Most of the time, however, pointer and array accesses can be treated as acting the same, the major exceptions being:
    • the sizeof operator
      • sizeof(array) returns the amount of memory used by all elements in array
      • sizeof(pointer) only returns the amount of memory used by the pointer variable itself
    • the & operator
      • &array is an alias for &array[0] and returns the address of the first element in array
      • &pointer returns the address of pointer
    • a string literal initialization of a character array
      • char array[] = "abc" sets the first four elements in array to 'a', 'b', 'c', and '\0'
      • char *pointer = "abc" sets pointer to the address of the "abc" string (which may be stored in read-only memory and thus unchangeable)
  • Additionally, an array cannot be resized or reassigned
Link to comment
Share on other sites

Inspektors Caps

Runājot par pedagoģisko pusi, nevar nepieminēt mērķauditoriju. Kāda tā ir? Studenti, vidusskola, pamatskola? Piemērs ar 11 printf(), kur dara vienu un to pašu velk drīzāk uz bērnudārzu! Studentiem jāpietiek ar apmēram šādu piemēru:

#include <stdio.h>

int main(void)
{
    int x, *px;
    
    x = 3;
    px = &x;
    printf("  x = %d   &x = 0x08%X\n",   x, &x);
    printf("*px = %d   px = 0x08%X\n", *px, px);
    return 0;
}

P.S. Plus tajā bērnudārza piemērā pēdējais mainīgais bija bool datu tipa, kāda C valodā nemaz nav! C failiem paplašinājums ir ".c", bet C++ ir ".cpp". Ja nomainīsi to, tad arī kompilators kodu kompilēs kā attiecīgās valodas.

Labots - Inspektors Caps
Link to comment
Share on other sites

Raimonds1

Auditorija varētu būt skolēni, kuriem ieskaidro, ka spīdīgie bling bling risinājumi tikai labi izskatās, iemāca arī elektronikas un fizikas pamatus, C un C++ pamatus, kā arī citu diskusiju pieredzi, nekā tajos priekšmetos, kur viņi aizstāv jebkādu viedokli paša diskutēšanas procesa pēc, lai tik būtu jautri.

 

Tikpat labi pieauguši cilvēki arī var izdomāt, ka grib saprast, kā tas viss darbojas zemākā līmenī un tas viņiem var noderēt.

 

Man pašam savā mācību procesā ir tāda divēja situācija - no vienas puses - varēju tam visam pievērsties daudz agrāk, no otras, tagad ir pieejamas visādas lekcijas, kur visāda kalibra džeki stāsta, kā vajag un kā noteikti nevajag lietot pointerus un atmiņu, kas ir labs stils, kas ir ātrs process un kas ne un tamlīdzīgi. Tā kā es jau sakumā varu paklausīties ko tādu un izlemt - nē, šitā es šo problēmu nerisināšu, sameklēšu ko labāku.

 

youtube.com/watch?v=sWgDk-o-6ZE  19.46 sek  cik kas aizņem laiku

youtube.com/watch?v=CSVRA4_xOkw


 

 

Plus tajā bērnudārza piemērā pēdējais mainīgais bija bool datu tipa, kāda C valodā nemaz nav! C failiem paplašinājums ir ".c", bet C++ ir ".cpp". Ja nomainīsi to, tad arī kompilators kodu kompilēs kā attiecīgās valodas.

 

Problēma ir tur, ka es, meklējot labāko skaidrojumu un piemērojot to viszemākajam sākuma izpratnes līmenim, reizēm to atrodu C un reizēm C++ valodas jūtūba video, tutoriāļos vai forumu diskusijās.

Tad nu, liekot to visu kopā, sanāk sakombinēt gan C gan C++. 

 

Man izprast traucē nevis tas, ka es nesaprastu ideju, bet gan īsās sintakses formas un iemaņu trūkums simbolos to visu saskatīt.

 

Tāpēc atkārtotās rindas ar vienu un to pašu, nomainot tik mainīgos.

Labots - Raimonds1
Link to comment
Share on other sites

 

 

Man izprast traucē nevis tas, ka es nesaprastu ideju, bet gan īsās sintakses formas un iemaņu trūkums simbolos to visu saskatīt.

Sliktam dejotājam olas traucē.

Pavisam sliktam... svešas.

 

Ja kaut kādā fantastiskā veidā par Tavu mērķauditoriju kļūdu skolēns - mans bērns, es Tevi nošautu :D, ņefig bojāt bērniem smadzenes.

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

Ar kaķeni pa olām - viegli miesas bojājumi :D:D:D

 

Man aizvien vairāk šķiet, ka šis tomēr nav īsti vesels ar galvu. Nē, nu ok, ja čakarētu sevi pats priekš sevis, bet, ja sākas runas par pedagoģiju un mērķauditoriju, tad šis var kļut sabiedrībai bīstams :D.

Link to comment
Share on other sites

Raimonds1
(labots)

Palasi tās lekcijas, kur džeki stāsta, kā nevajag programmēt, apieties ar pointeriem, atmiņu un algoritmu implementāciju.

Es tās lekcijas klausos un ņemu vērā, kad izvēlos, kam pievērst uzmanību jau pašā savu mācību sākumā.

 


Kad būs, tad būs  kaut kāds materiālu apkopojums, tad tā būs maza vai ne tik maza grāmatiņa vai kaut kāds datu blāķis internetā, tipa, kā es mācījos programmēt vai sākuma pamati un grūtības C/C++ apgūšanā, klātienē nevienu mācīt netaisos.

 

Ar ko, lūdzu ir slikta pieeja kā pirmo pasākumu izvēleties gatavu piemēru ar pointeriem un pārējo skaidrojumu pēc tam, sevišķi izvairoties to pārlieku ātras "gatavu projektu" veidošanas, pirms apgūtas svarīgas pamatzināšanas. Šajā gadījumā - pirms lietosim tos kaut kā veidošanai, apgūsim ka nu to pointers are arrays konceptu - kad tie ir viens un tas pats un kad nav. Ar praktiskiem piemēriem un kļūdu analīzi.

 

Tur augstāk ir pāris adreses adreses par tēmu - arrays is a pointers or not. Neesmu pārliecināts, ka tur viss ir saprotams gan man, gan 99% foruma auditorijas.

Par tēmu, ja var.

Labots - Raimonds1
Link to comment
Share on other sites

(labots)

Te ir grāmatu sērija For Dummies.

Izskatās, ka tu gribi rakstīt For Idiots.

Labots - camel
Link to comment
Share on other sites

Jurkins

 

 

tad tā būs maza vai ne tik maza grāmatiņa vai kaut kāds datu blāķis internetā

Grāmatiņa??? Jā, nu pašvērtējums Tev ir līmenī. Ja nemaldos te bija tādi, kuri solīja savu OS uzrakstīt. Nu nav jau labi par smagi slimu cilvēku smieties, pedagogs nedataisītais! Bet blāķis internetā gan var sanākt. Par to nav šaubu. Internets lēni bet pamatīgi pārvēršas par miskasti. Pateicoties tādiem speciālistiem un pedagogiem kā Tev. Klātienē Tu nemaz nevarētu mācīt. Ja nu vienīgi kādā reliģiskā sektā vai attiecīgā palātā.

 

 

Neesmu pārliecināts, ka tur viss ir saprotams gan man, gan 99% foruma auditorijas.

Es gan esmu pārliecināts, ka Tu esi vienīgais no 100% auditorijas, kuram kaut kas nepielec. Tev pat vēl nav pielecis (gada laikā!!!), nafig tos pointerus vispār vajag. Nu nav pielecis!

 

 

Izskatās, ka tu gribi rakstīt For Idiots.

For Raimonds only especially! :D

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...