Jump to content

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


Raimonds1
 Share

Recommended Posts

visi hārdkodētie šifti izskatījās nesmuki, bet lookup tabulas - garlaicīgas.

Link to comment
Share on other sites

Pie kaut kāda bitu skaita hardkodētie šifti un hardkodētas maskas kļūst nesalīdzināmi labāki par ciklu. Un tas ir daudz interesantāk nekā "naivais variants" ar ciklu, kuru var uzrakstīt gandrīz jebkurš.

Link to comment
Share on other sites

protams, taču mēs te mērījāmies ar cpu ciklu ietaupīšanu tieši 2 baitiem :)

Labots - usver
Link to comment
Share on other sites

Nē, tieši 2 baitus izvēlējies tu pēc tam, kad nespēji izpildīt zemāk citēto ;)

 

 

usver, tagad pēc tā garā pentera uzraksti piemēru, kā 256 bitu lielā mainīgajā (pieņemsim, ka tas ir 256 bitu integeris) samainīt vietām bitus. Tā, lai pirmais būtu pēdējais, otrais - pirmspēdējais utt.
Link to comment
Share on other sites

Dārgie skatītāji, ēterā "visi l.ohi, nekā nemāk" 10493. sērija "Intedžeri - mutanti". Spraigi notikumu pavērsieni, jaunu datu tipu meklēšana, pakaļdzīšanās un intriga - vai kompilators tam piekritīs? Palieciet pie ekrāniem lai uzzinātu notikumu atrisinājumu!

 

brutāls variants - ielasīt max reģistrā ietilpstošo porciju un atkārtot (4x) to pašu. rakstot porcijas citur atmiņā, sākot no pēdējās.

labāks variants, kas pie 256 varētu sākt atmaksāties pie retinātiem bitiem - meklēt ar bsf. vai arī lietot hārdkodētus šiftus un maskas.

Labots - usver
Link to comment
Share on other sites

Izlien tak no kastes.

 

Jā, zinies, ikdienā šad tad sanāk pastrādāt arī ar lielākiem skaitļiem - nevis 16bit vai 32bit un pat ne ar 64bit, bet, piemēram, ar 128bit, 1024bit, 2048bit, 4096bit u.c. Jā, protams, tie nav gluži "natīvie skaitļi" - tās ir lielo skaitļu reprezentācijas ar kaut kādu nebūt libu palīdzību, kur libs prot arī reizināt tos skaitļus, dalīt, saskaitīt, xorot, shiftot, kāpināt utt utjp.

 

Šādā vidē jau tie ir nevis "intedžeri - mutanti", bet visparastākie integeri, kur "integer" nozīmē "a number that can be written without a fractional component", nevis "a numbe that can fit into CPU register".

 

Tādam 4096bit integerim jau ir "mazliet svarīgi", vai viņu shiftos 4k reižu (un ne tikai viņu, bet arī visu pārējo, kas tur pa starpu aprēķinos tiek izmantots), vai darīs kaut ko "mazliet optimālāku". Bet nu jā - javas kastē jau līdz tādam līmenim nav nepieciešams aizdomāties, tur visi tik aizņemti, ka optimālos straightforward risinājumus atstāj neko nezinošajiem un neprotošajiem :whistle2:

Link to comment
Share on other sites

Mezavecis

Dzelža definīciju studijā. Man dzelzis ir tas, kas dara tam paredzētās darbības, līdz ar to kompis, mikrene vai kāds cits verķis, kas sūta komandas, pieder pie dzelša integrētā vai neintegrētā varianti. 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.

 

Mežaveci, sūtīt pa COM portu komandas vai komandēt iekārtu caur gatavu bibliotēku nav dzelžu programmēšana, bet gan koda bibliotēku izmantošana.
Link to comment
Share on other sites

3 variantus pieminēju - tāpat www.vissirslikti.lv :)


 

 

ikdienā šad tad sanāk pastrādāt arī ar lielākiem skaitļiem - nevis 16bit vai 32bit un pat ne ar 64bit, bet, piemēram, ar 128bit, 1024bit, 2048bit, 4096bit u.c

malacis, super, man prieks par Tevi!  :thumbsup:  

Link to comment
Share on other sites

Raimonds1

Nedaudz koda par pointeriem, kā tie būtu jāmāca. Vispirms - visi tie īsie piemēri, kur 4. adrese aptinusies ap mainīgo pieci ir jāmaina uz ko šādu. Vispirms apstāsta, ka viss ir skaitļi, lieli un mazi un dažādu tipu un no reāla datora izdabū viņu adreses.

#include<stdio.h>

main()
{
int a;
unsigned int b;
short int c;
unsigned short d;
long int e;
unsigned long int f;
float g;
double h;
char i;
unsigned char j;
bool k;


printf("adress of a is %u \n", &a);
printf("adress of b is %u \n", &b);
printf("adress of c is %u \n", &c);
printf("adress of d is %u \n", &d);
printf("adress of e is %u \n", &e);
printf("adress of f is %u \n", &f);
printf("adress of g is %u \n", &g);
printf("adress of h is %u \n", &h);
printf("adress of i is %u \n", &i);
printf("adress of j is %u \n", &j);
printf("adress of k is %u \n", &k);

}

Tātad - vispirms izplājam visus iespējamos datu tipus un dabūjam REĀLU  atminas adresi, kur tie tiks glabāti.


Dabūjam atbildi

Adress of a = 11278545

Adress of b = 11276859

un tā tālāk, saprotam, ka mēs esam to atmiņas gabalu rezervējuši

Iegūstam reālus, lielus skaitlus, nevis kaut kādus izdomātus.


Līdzīgas rindiņas viena pie otras pasargā iesācēju no tā, ka tur sākumā ir visādi char, ej nu sazini, cipars vai simbols, amperrsandi - &, 1 un 2 kas ir viens ap otru aptinušies un nav skaidrs, kurš no kura izriet.


Tad ar kādam 10 starprezultātu lapām, kuras visas saglabā, nonāk pie šitā


#include<stdio.h>
main()
{
int a= 56; // veerts izmeginaat ar un bez inicializaacijas vert pieskirasanas
int a2= 28;//lai nejauktu galvu, a2 atbilstigs pointerim p2
float g= 4.65;

printf("adress of a is %u \n", &a);
printf("adress of a2 is %u \n", &a2);// te var speciali atstaat a1 lai kompilatros pasaka, ka taads nav dekalreets
printf("adress of g is %u \n", &g);

int *p1;
p1 = &a;

int*p2 = &a2;

float*p3 = &g;


printf (" p1 veertiiba ir %u", p1);
printf (" a veertiiba ir %d", *p1);


printf (" p2 veertiiba ir %u", p2);
printf (" a2 veertiiba ir %d", *p2);


printf (" p3 veertiiba ir %u", p3);
printf (" g veertiiba ir %d", *p3);
}

Un vēlāk - pie šitā


#include<stdio.h>
main()// izgatavots balstoties uz juutuba watch?v=TFTpRjPcoUs
{
int a= 56; // veerts izmeginaat ar un bez inicializaacijasvert pieskirasanas
int a2= 28;//lai nejauktu galvu, a2 atbilstigs pointerim p2
float g= 4.65;

printf("adress of a is %u \n", &a);
printf("adress of a2 is %u \n", &a2);// te var speciali atstaat a1 lai kompilatros pasaka, ka taads nav dekalreets
printf("adress of g is %u \n", &g);

int *p1;
p1 = &a;

int*p2 = &a2;

float*p3 = &g;


printf (" p1 veertiiba ir %u", p1 );
printf (" a veertiiba ir %d", *p1 );


printf (" p2 veertiiba ir %u", p2 );
printf (" a2 veertiiba ir %d", *p2 );


printf (" p3 veertiiba ir %u", p3 );
printf (" g veertiiba ir %d", *p3 );

printf ( " a un a2 summa ir %d", a + a2 );//nekaadugbetcarvaireturn0nevajag 11min43sek

printf ( " a un a2 summa ir %d", *p1 + *p2 );



}

Pa vidu tam visam var izeksperimentēties, ko kompilē kompilators un ko ne, kas ir , ja sataisa 1 simbola atstarpes starp iekavām un citiem simboliem, konstatē, ka ar parauga getchar beigās nekas nenoptiek, ar return 0 notiek un bez return 0 arī. Lāa rī to, ja speciāli ielaiž kļūdas pointera aprakstā vai mainigā simbolā, ko reāli izdrukā uz ekrāna. Kā arī parleicinās, ka var atstat nevaajdzigu materiālu programa un pec ta aizvākšanas programma veic to pašu darbu. Protams, pieļauj visas sākuma kļūdas, aizmirstos ; un ".

 

Iedvesmu ieguvu no šiem diviem 1 2

 

youtube.com/watch?v=TFTpRjPcoUs

 

 

youtube.com/watch?v=Rxvv9krECNw#t=2324.338175

Labots - Raimonds1
Link to comment
Share on other sites

labaak

// start the thing - initialize variables
mov ax, given 
mov cx, 10h
xor bx, bx 


cont:
shr ax, 1 ; rotate left by X places
rcl bx
dec cx
jnz cont

mov result, bx ; save the result in variable
// better restore the state

 

 

ieminējos par multitredotu aplikāciju (ne)ieguvumiem no reģistru operācijām.
 

 

pastāsti mums arī par to.    kādi tie ieguvumi ir?

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

Lūdzu!

un te.

 

dažos vārdos - sinhronizācija ir pārāk piņķerīga lieta lai gaidītu, kad asinhroni tredi beidzot savāksies vienkopus un varēs sakombinēt baitus un beidzot izpildīt kādu darbību, (ah + al XOR bh + bl), ietaupot komandas.

ieguvums no 1 ietaupītas darbības nav tās gaidīšanas un sinhronizācijas vērts.

un tredi katrs savu kodolu, visticamāk, izmanto, tāpēc mēģināt kaut ko sakombinēt kopīgu pamatkomandu līmenī nav vērts. labāk loģiski sadalīt uzdevumu tā, lai katrs kodols (vai pat node distribūtētā sistēmā) dara savu lietu, sadalot slodzi.

Labots - usver
Link to comment
Share on other sites

nevertell
Iegūstam reālus, lielus skaitlus, nevis kaut kādus izdomātus.

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

 

 

 

dažos vārdos - sinhronizācija ir pārāk piņķerīga lieta lai gaidītu, kad asinhroni tredi beidzot savāksies vienkopus un varēs sakombinēt baitus un beidzot izpildīt kādu darbību, (ah + al XOR bh + bl), ietaupot komandas.
 

 

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.

Labots - nevertell
Link to comment
Share on other sites

par xor bx, bx un kauntera inicializāciju - paldies, vēl mazliet vienkāršāk sanāk.

Link to comment
Share on other sites

Raimonds1

Es domāju par iesācēja ērtumu, kuram 10 kvadrātcentimetros ekrāna ir 6 dažādi simboli un visādi mazi skaitļi, kurus vienu ar otru viegli sajaukt.

Par uztveri es domāju.


 

 

Raimonds1, 27 Apr 2016 - 16:10, teica: Iegūstam reālus, lielus skaitlus, nevis kaut kādus izdomātus. Tu domā, ka modernā OS tie skaitļi ir reāli?
Link to comment
Share on other sites

nevertell: komentārus pašus izlasīji arī?

un tiešām tredi organizēti gaidīs rindā pie dīka procesora, lai tikai vienu reģistru piepildītu pilnu kā autobusu un tikai tad būs brīv pildīt darbību?

Link to comment
Share on other sites

nevertell

 

 

Es domāju par iesācēja ērtumu, kuram 10 kvadrātcentimetros ekrāna ir 6 dažādi simboli un visādi mazi skaitļi, kurus vienu ar otru viegli sajaukt.
 

Tu vispār pārlasi, ko tu uzraksti ?

Link to comment
Share on other sites

Raimonds1

Man šis nedaudz žilbina

int * p1, * p2;
int * p1, p2;	

Bet šis ievieš kaut kādu skaidrību


printf (" p1 veertiiba ir %u", p1 );
printf (" a veertiiba ir %d", *p1 );


printf (" p2 veertiiba ir %u", p2 );
printf (" a2 veertiiba ir %d", *p2 );


printf (" p3 veertiiba ir %u", p3 );
printf (" g veertiiba ir %d", *p3 );

printf ( " a un a2 summa ir %d", a + a2 );

printf ( " a un a2 summa ir %d", *p1 + *p2 );

}

Jo viena un tā pati darbība atkārtojas un beigās summa tiek iegūta divos dažādos veidos - pa tiešo saskaitot mainīgos un izsaucot tos ar pointeriem un tad sasakaitot.


printf ( " a un a2 summa ir %d", a + a2 );

Šī rinda programmai kā tādai ir pilnīgi lieka, bet izpratnei man - vajadzīga. Tagad.

Labots - Raimonds1
Link to comment
Share on other sites

Raimonds1

Pavisam uzskatāmi.

Ja vēl 5 rindas viena zem otras - jo labāk.


14.minūte 30 -tā sekunde - 17- tā minūte  - kā to padarīt uzskatāmu?

Labots - Raimonds1
Link to comment
Share on other sites

Ja tiešām vēlies mācīties programmēt, beidz jāties ar atmiņas meneģmentu un potenciālajiem memorylīkiem! Uztaisu kaut ko reālu! Atmiņas meneģments, vairāki diegi (kas nenoliedzami, ir svarīgas tēmas, un šo es ļoti labi pārzinu visai daudzās valodās) - tas ir jāmācās pēc tam kad jau saproti kas vispār ir programmēšana!

 

Pašlaik izskat'as, ka vēlies kļūt par teorētiķi, kurš NEKAD nebūs programmētājs.

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

Raimonds1

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.

Labots - Raimonds1
Link to comment
Share on other sites

:this: Lai nu ko, bet šitādu apsēstību ar sviestu redzu pirmo reizi...

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

Mezavecis

Tad tev ar Capu ir pa ceļam - viņam patīk visu darīt ne tikai pareizi, bet ideāli. Tas ir piedodami, jo no reālas programmēšanas viņam ir patālu. Par reālu uzskatu to, kas tapis priekš klienta, nevis priekš sevis kaut kur kādā smirdīgā ūķī.

 

 

Es ticu pareizai pieejai programmēšanai.
 
Link to comment
Share on other sites

Raimonds1

Es domāju, ka tās divas adreses man loti palīdzēja saprast, kas ir kaut kāda skaitliska vērtība, kas ir tā skaitliskā adrese un kas ir tās adreses nosaukums.

Blokshēmiski es varu iedomāties arī tos jauninājumu pointeru pieleitojumus, bet jāmeklē labi piemēri, kā tas tiek realizēts sintaksē un kas tiek panākts, salidzinot ar veco pieeju.


Man primāri ir pats algoritms, tad datu organizācija un tikai tad sintakse.

Link to comment
Share on other sites

Es nelamājos, vienkārši redzi ka esi auzās :)

 

Klau, programmēšana pirmkārt ir algoritmiskā domāšana. Viss pārējais ir detaļas, kuras pārsvarā palīdz risināt konkrētie kompilatori,

 

Ja tiešām gribi ņemties ar atmiņu + konkrētā CPU instrukcijas, tad tikai ASM ir way to go(kaut vai Turbo ASM). Ja kas, arī es sāku ar ASM vēl laikos, kad tikko parādījās DOS(printeru draiveri, kad parādījās Win NT, arī nultā riņķa servisi un video draiveri, visādi citi dzelžu draiveri). Pēc tam pārlecu uz dosīgo Fox, sapratu, ka tā ir draza. Tālāk bija visādi C un arī Pascal varianti, kuri palīdz risināt problēmu, nevis iespringt uz to kā un kas tiek meneģēts ASM līmenī.

 

Domā par algoritmisko domāšanu, pārējais PĒC TAM.

 

Ok, ja gribi būt guru, kurš zin, kā datu tipi reprezentējas atmiņā un kā tos apstrādāt - tad ASM. Un nejauc tur C.

 

Bet OK, uzraksti kāds ir Tavs mērķis programmēšanā, tad varbūt arī sapratīšu to, ka es iesaku nepareizi :)

Labots - rubb
Link to comment
Share on other sites

Raimonds1

Tas džeks no augšminētās otras adreses vienā citā lekcijā izsakās par tēmu - kas ir galvenais programmēšanā, pēc viņa domām tā esot datu organizācija.

Link to comment
Share on other sites

Pameklē vēl, noteikti būs arī tādi, kas saka, ka tikai tīrs ASM ir way to go, un nekādā gadījumā ne TurboASM vai kādi citi rīki, kuri palīdz.

Link to comment
Share on other sites

Raimonds1

Pats zināji, kā tas viss attīstīsies? Varbūt labākais, kas sanāks, būs lietojami sākuma līmena materiāli, kur viss maksimāli pielāgots sākuma uztverei.

Varbūt jauna tipa uzlabojumi koda lasāmībai un kāds kompileris, kur p* vietā ir tādi simbloli vai apakšptogramma, kur pointeris adresē, kas glabā pointera adresi, kurā ir vēl krustu šķērsu 5 pointerus adresu pointeru vērtības ir viss skaidrs, kā bāreņa asara.

 

Varbūt kaut ko lēnām programmēšu pēc gadiem 3-5 ? Es nezinu.

Labots - Raimonds1
Link to comment
Share on other sites

Es tikai varu piebilst ka windows gui aplikāciju taisīt asamblerā ir tīrs mazohisms, jo tā vai tā 90% koda sastāv no funkciju izsaukumiem 

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

Raimond, neprogrammēsi. Ja šādi turpināsi, noteikti nē. Algoritmiskā domāšana - tas ir tas ar ko jāsāk.

 

Uzstādi mēŗki - izstrādāt konkrētu aplikāciju, vienalga kādā valodā. Uztaisi to. Tas arī viss. Ok, vari provēt uzcept "Hello world" iekš ASM. Tomēr stipri šaubos, ka ar to panāksi labāku rezultātu kā ar C++. Uztaisi hello world ar Win API izsaukumiem no tīra ASM, un tad salīdzini to pašu, ko iegūsi no C++ vai kaut vai Delphi. Nu nebūs tur liela atškirība ASM kodā. Nebūs. Protams, ja pareizi mācēsi pielietot kompilatorus :) Tur arī ir visa sāls. Mācēt lietot par ASM augstāka līmeņa rīkus. Bet ņemties ar atmiņu - tas bija aktuāli daaaaaaaaudzus gadus atpakaļ. Tagad to dara praktiski jebkuras valodas kompilatori. Nerunāju par .net, tas ir īpašs stāsts :)

 

P.S. šis viss attiecas tikai uz gadījumu, ja tiešām vēlies iemācīties programmēt.

Labots - rubb
Link to comment
Share on other sites

Mezavecis

No tevis sanāks tikai projvads vai kāds sistēmanalītiķis labākajā gadījumā, bet noteikti ne programmētājs. Priekš sevi neskaitās. Es pa gabalu varu pateikt, kurš var fiziski to darīt :) Filozofs nekad nekādos apstākļos nespēs koncentrēties uz mērķi.

 

Varbūt kaut ko lēnām programmēšu pēc gadiem 3-5 ? Es nezinu.
  • Patīk 2
Link to comment
Share on other sites

Raimonds1

C apmācības lielākā problēma vai tik nebūs tas pats Hello, world!

Atnāk jauns censonis, šim pastāsta kādus pamatus un sākas visa ņemšanās ar sintaksi un parastiem uzdevumiem, kur kaut kas ir jāievada, jāizvada uz ekrāna un jaaprēķina, iekļaujot gatavas bibliotēkas.

 

Kāpēc nevar sākt ar to pašu manis iepostēto piemēru ar pointeriem. Nokopē gaatvu programmu, kompilē un skaities, kas notiek, ja mainigos tikai inicializē, kas - ja piešķir vērtības, kas - ja pārkopē copy paste, pamaina mainīgos no abcde uz jklmn un kļūdas kādā simbolā tipa aimirst a nomainīt ar j, kuru adresi tad parāda, visas 20-30 starprezultātus saglabā, lai varētu pārskatīt, kas un kā. Un tad pamazām tam vienam konceptam vāc apkart citus saistītus un veido to jēgu.

Link to comment
Share on other sites

Mezavecis

ieleja

Par smirdīgu ūķi tiek uzskatīta vieta, kur tapis viss kods, turpat viņš testēts un nekur ārpus šīs telpas neviens cits nav redzējis ne kodu, ne arī rezultātu. Bet pats uzskata par goda lieta lielīties ar megapieredzi.

Link to comment
Share on other sites

Raimonds1

Pārāk paļaujioties uz citu novērtējumu arī var iebraukt auzās.

Daudz kas ir vērtība par sevi tikai sev, šis tas var tikt padarīts vērtīgs arī citiem vai pat komercializēts, ko citi nevar iedomāties.

Labots - Raimonds1
Link to comment
Share on other sites

nevertell

 

 

No tevis sanāks tikai projvads vai kāds sistēmanalītiķis labākajā gadījumā, bet noteikti ne programmētājs.

Gribās uzlabot pašnāvību statistiku, ja jau tu novēli kādam šitādu projvadu ? 

 

Ko tu tur skaties uz atmiņas adresēm kā tāda gaišreģe kafijas biezumos ? 

Jā, viena vērtība - norāda uz vietu, kur procesa virtuālajā atmiņas apgabalā tava vērtība tiek glabāta, bet re, otrs printf() izprintē vērtību.

WOW. wow. 

Ja šitas tev jau liekas gana interesanti, pagaidi vēl, kad tu uzināsi par casting. Tad varēsi neskaitāmas stundas skatīties un brīnīties,

lasot datus no vienas un tās pašas addreses, vienā printf ir cipars, otrā - burts. Cipars - burts. Cipars - burts.

Link to comment
Share on other sites

 

 

Ja šitas tev jau liekas gana interesanti, pagaidi vēl, kad tu uzināsi par casting. Tad varēsi neskaitāmas stundas skatīties un brīnīties

Njā, pagaidi vēl un paskaties par Javu un Android, tur vispār jumtu var noraut, kādi brīnumi tur notiek. Un tas attiecās par tēmu, tur pamats ir C/C++

Link to comment
Share on other sites

Raimonds1

Jūs esat tiktāl progresējuši savā programmēšanā un praktiskajā pielietojumā, ka nekādas sākuma uztveres grūtības nemaz neatceraties, kā tas ir, ka aizmirsās, ka klaviatūrai nav angļu iestatījumi un nekāda programmēšana nesanāk, vai arī atkal sanāca aizmirst semikolu, vai sākumā nesaproti, kad tad sāksies izslavētā manipulācija ar atmiņu. Un sākums nekāds dižais nav, izdevās kaut ko paglabāt atmiņā, izsaukt divus tādus un saskaitīt.

 

Metodika arī var būt produkts un ja reiz projekts un tā vadīšana, tad tagad meklēju speciāli iesācējiem dizainētus paraugus, kā no parastu mainīgo glabāšanas pāriet pie kaut kāda jēgpilna piemēra, kas būtu pietiekami vienkāršs iesācējam un tajā pašā laikā veiktu  kaut kādu daudz būtiskāku darbību pa tēmu - manipulācija ar atmiņu.

 

Tā kā neko daudz no tā nejēdzu, piekasīšos baigi.

 

---------------------

Līdzšinējā metodika - ātri apstāstīt, ka visi dati ir skaitļi vai simboli, ir dažādi, parādīt, kā ar gatavu piemēru atrast to glabāšanas  adreses, dabūt to skaitlisko aprakstu, kā nosaukt tas adreses un kā izdabūt ārā adreses glabātos skaitļus un kaut ko izdarīt ar tiem pointeru līmenī. 

Pārejās atziņas - saglabā starprezultātus, kaut vai 20 vai 50, ja vajag, veikt copy-paste no piemēra uz piemēru un tikai tad mainīt programmu, kopējot nomainīt mainīgos abcdefg uz jklmn un paskatities, kas notiek, ja vienā vai otrā vietā aizmirsies to a atstāt, ko dara programma, kuru atmiņas adresi izvada. Tad vēl tur pāris atziņas, ko vēlams izmēģināt, lai saprastu, ko dara kompileris un ko dara programma, ja tajā atstāj rindiņas, kas neko nedara, bet netraucē programmai vai arī vienlaikus paralēli izvadit gan a+b summu gan to pašu summu, kas iegūta, izmantojot pointerus, kas no gatavas programmas viedokļa ir muļķīgi, bet no izpratnes viedokļa derīgi, ka tur blakus abi tie rezultāti ir un sakrīt. Tad vēl pāris apsvērumi, ko teikt priekšā, kur tikai norādīt un kur, lai meklē paši.

Kontrolēt dembelismu, tipa - kā es čakarējos, lai to visu apgūtu, lai viņi arī pačakarējas. Visu laiku piedomāt, ka šie visi skaidrojumi konkure ar spīdīgajiem bling-bling risinājumiem.

Link to comment
Share on other sites

 

 

Jūs esat tiktāl progresējuši savā programmēšanā un praktiskajā pielietojumā, ka nekādas sākuma uztveres grūtības nemaz neatceraties, kā tas ir, (..)

Drīz būs gads apkārt kopš tēmas aizsākšanas. Noteikti ir pagājis krietni ilgāks laika posms kopš tu sāki domāt par programmēšanu un ievākt kaut kādu info. Gads - tas ir pietiekoši ilgs laika posms, lai iemācītos uztaisīt pat vienkāršas spēlītes, kur jāpielieto gan manipulāciju ar atmiņu, gan algoritmus jādomā, gan uz ekrāna kaut ko jākustina, gan lietotāja inputu jāspēj saņemt un apstrādāt. Ar gadu pietiek pat tādā gadījumā, ja pirms tam nav pilnīgi nekādu zināšanu par to visu.

 

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.

 

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ā). Kamēr tu tikai spriedelēsi par un ap, tikmēr tu tikai zināsi, ka ir kaut kādi pointeri. Lai iemācītos paņemt grožus savās rokās un sāktu kontrolēt tās atmiņas lietas, ir nevis jālasa par to, bet to jādara. Un jā - tieši to arī mēs, pārējie, darījām pirms daudziem gadiem - darījām, nevis sūkstījāmies. Pretējā gadījumā mēs būtu palikuši tur pat, kur šobrīd esi tu.

 

Nevajag aizmirst, ka darbs ar atmiņu - tas ir rīks, nevis mērķis. Tas ir rīks, kā sasniegt mērķi. 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. Kamēr tev nebūs kaut kāda mērķa, uz kuru tu sāksi virzīties, tikmēr tu nevarēsi pilnvērtīgi apgūt rīkus, ar kuriem šos mērķus var sasniegt. Ar velo taču arī braukt iemācās tikai tad, kad reāli uzsēžas uz tā velo un sāk braukt. Kamēr tikai skatās, kā citi to dara (youtubē vai tutoriāļos), tikmēr par iemācīšanos var nemaz nesapņot.


That said, ir divu veidu cilvēki - tādi, kas vēlas iemācīties, un tādi, kas nevēlas iemācīties. Līdz šim izskatās, ka tu vairāk tā kā pie tiem otrajiem piederi.

Link to comment
Share on other sites

Paldies, indigo bērns, par rīta jautrību! Izsaku Tev dziļu līdzjūtību par to skumjo faktu, ka klaviatūrai nav angļu iestatījumu.

 

p.s. man bišķi sirdsapziņa tā kā izsaka pārmetumus - varbūt Raimis ir cilvēks ar īpašajām vajadzībām garīgajā plānā, kurš vēlas socializēties.

  • Patīk 2
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...