Jump to content

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


Raimonds1
 Share

Recommended Posts

Raimonds1, zinu vienu - tu pilnīgi noteikti neesi atšķirīgs. Tādu kā tu ir pilna pasaule. Tādu, nevis mācās un dara, bet filozofē un sūkstās par to, cik dzīve ir netaisna pret viņiem.

Link to comment
Share on other sites

Raimonds1

 

 

Tev patīk no konteksta izraut kaut kādu situāciju un tad censties to abstrahēt, modelēt un zīmēt visādus bezjēdzīgus procesus. Tu uzzīmē procesu (kāršu spēli u.c.) no paša sākuma līdz pašām beigām, nevis kaut kur no vidus ignorējot 1000 ieejas datus.  Arī iepriekšējās situācijas ar bitiem un baitiem bija kaut kāds starpposms nr.124 nevis pats sākums. 

 

Jā, es sadalu lielāku uzdevumu mazākos. Tad, kad viens jautājums ir aprakstīts, tad var ķerties pie nākamā. Tanī izpētes procesā visu laiku parādās visādi starprezultāti, arī tādi, kad par sākuma procesu pilnīgi zaudē interesi un sāk interesēties par pavisam ko citu.


Es nesūkstos par netaisnību, es tikai ierosināju parunāt par C pointeriem un, ja iespējams, man un varbūt citiem interesentiem viņus paskaidrot sīkāk.

Un, ja saruna par tiem neizvērtīsies, es taču nesākšu žēloties, cik pasaule netaisna un par to, ka kungiem labpatīk runāt par visu ko citu.

Kā ir, tā ir.

Link to comment
Share on other sites

Ka mācās kodēt no rīta Pascal, pusdienlaikā C, pēcpusdienā C++, tad = nekad.

Tak vienu ! paņem ( labāk ne Pascal) un ņemies vismaz nedēļu, nedomājot ne par ko citu. Citādi nekodēs nekad.

Link to comment
Share on other sites

 

 

Es nesūkstos par netaisnību, es tikai ierosināju parunāt par C pointeriem un, ja iespējams, man un varbūt citiem interesentiem viņus paskaidrot sīkāk.

Nē, tu sūksties par netaisnību. Nevis šodien, bet vismaz kopš vasaras vidus. Un, visticamāk, daudz senāk un ne tikai šā topika vai vispār foruma ietvaros. Jā, tādu cilvēku netrūkst…

Neesot, redziet, tāda apmācības veida, kas viņam visu pasniegtu viņam saprotamā veidā… Nekā citādi kā par sūkstīšanos to nevar nosaukt.

Link to comment
Share on other sites

Raimonds1

 

 

Ka mācās kodēt no rīta Pascal, pusdienlaikā C, pēcpusdienā C++, tad = nekad.

Ņemšu C pointerus. Būs labi.

 

 

 

Nē, tu sūksties par netaisnību. Nevis šodien, bet vismaz kopš vasaras vidus. Un, visticamāk, daudz senāk un ne tikai šā topika vai vispār foruma ietvaros. Jā, tādu cilvēku netrūkst… Neesot, redziet, tāda apmācības veida, kas viņam visu pasniegtu viņam saprotamā veidā… Nekā citādi kā par sūkstīšanos to nevar nosaukt.

 

kaut kā nosaukšana kaut kā atrisina cita veida problēmas - var ignorēt tas, ko šī komunikācija ir pacēlusi.

Uzraksti labāk kaut ko par C pointeriem. Tiešam būs jāmeklē pasniedzejs un par naudu jāpērk konsultācijas C valodā par pointeriem?

Link to comment
Share on other sites

ā, es sadalu lielāku uzdevumu mazākos. Tad, kad viens jautājums ir aprakstīts, tad var ķerties pie nākamā. Tanī izpētes procesā visu laiku parādās visādi starprezultāti, arī tādi, kad par sākuma procesu pilnīgi zaudē interesi un sāk interesēties par pavisam ko citu.

 

Jauka diskusija :). Raimond, kāds ta ir lielākais uzdevums? :) izskatās ka Raimonds grib uzrakstīt kaut ko vismaz tikpat ģeniālu kā Šekspīrs, un pilnīgi loģiski viņš sāk ar angļu - latviešu vārdnīcas lasīšanu - apgūšanu.  

Link to comment
Share on other sites

Tak paņem tutorialu, piemēru un kodē, skaties kā iet. Liec koda gabalu, prasi ko nesaproti utt.

Nevis C vs C++ vai valsts, tīņi utt.

Tikai vismaz kaut ko uztaisi ka darbojas, tad atrādi un ņem sarežģītāku, taisi, ja neiet, skaties kāpēc, domā. Tad arī palīdzēs. Diskusijas linux vs win vai C vs C++ visiem visos forumos ir līdz lampočkai piegriezušās ( ne tikai LV forumos vien).

 

Vēl viena lieta - tēmas tags neatbilst tēmai, C# nav C++. Grib kodēt, vajag būt uzmanīgam, vērīgam.

Labots - b25
Link to comment
Share on other sites

 

 

Uzraksti labāk kaut ko par C pointeriem. Tiešam būs jāmeklē pasniedzejs un par naudu jāpērk konsultācijas C valodā par pointeriem?
 

savulaik vidusskolā trenējos karatē. bija Stabu ielā ļoti pievilcīgs veikaliņš ar dažādu inventāru un grāmatām - man tur reiz uzdāvināja mazu grāmatiņu par cīņas sportu, kuru nebiju pat dzirdējis, bet ļoti interesants.

  Pirms gada iegāju paskatīties, kas tur jauns pēc daudziem gadiem. Prasīju - kur grāmatas palikušas? Atbildēja pārdevēja, ka mūsdienās ar internetu vairs neesot rentabli. Jo visiem ir jūtūbes, e-buki, forumi, saiti, visas iespējamās filmas un kas tik vēl ne.

 

Tev interneta nav lai paskatītos kādu piemēru, iepeistotu kodu iekš IDE, paeksperimentētu un saprastu, ar ko to ēd? Vai arī ir konkrētāki jautājumi?


teiksim - prasīji par c/c++ pointeriem. vai noskaidroji jau, ar ko tie atšķiras?

Link to comment
Share on other sites

Grāmata jau forša lieta joprojām. Bet nu ne šahu spēlēt, ne kādu cīņu neapgūt nedarot! Filozofiju pat nē. Lasot grāmatas nē, tāpat nākas izvirzīt tēzes un aizstāvēt. Kodēt ar toč nevarēs nedarot neko, tikai lasot grāmatas, tutoriāļus.

Link to comment
Share on other sites

Ir tāds salīdzinājums - mēģinājums tikai pa gabalu izprast kādu konkrētu pievilcīgu lietu, bet to neizdzīvojot pašam, nepielietojot, nepieņemot - tas ir kā laizīt medus burku no ārpuses. Nez kāpēc atmiņā atausa šis salīdzinājums :)

Link to comment
Share on other sites

Tā jau arī ir. Ta ne kādu cīņu, ne tenisu vai šahu neapgūt bez pretinieka. Var taisīt fizo, lasīt grāmatas par šahu, boksu. Bez darīšanas nekā nesāks. Tāpat ēst uztaisīt ko krutāku lasot grāmatu liekas easy, bet pamēģinot sapratīs atšķirību, kad pirmoreiz, kad simto reizi taisīsi to recepti.

Link to comment
Share on other sites

 

 

Uzraksti labāk kaut ko par C pointeriem. Tiešam būs jāmeklē pasniedzejs un par naudu jāpērk konsultācijas C valodā par pointeriem?

Par C pointeriem viss jau ir uzrakstīts tūkstošiem reižu. Priekš kam to visu atkārtot?

 

 

 

tas ir kā laizīt medus burku no ārpuses

Ja laiza no iekšpuses, tad nav forši - baigi ķipīga padarīšana. Bet jā, nav rožu bez ērkšķiem - gribi medu, samierinies ar ķipīgumu. Ja vēl iemācās ne tikai samierināties, bet vēl arī izbaudīt šo ķipīgumu - pavisam izcili. Bet jā, lai to izdarītu, uz burku nevis jāskatās, bet jālaiza… No iekšpuses…

Link to comment
Share on other sites

nevertell

 

 

Es vienkārši mēģinu piestartēties tai C un C++ no citas puses, nevis Hello world un eglītes zīmēšanas!

Lūdzu nekad neraksti kodu. 

Link to comment
Share on other sites

Parunājam par pointeriem C valodā ... pēc tam - ar ko C++ pointeri labāki

Uzraksti labāk kaut ko par C pointeriem.

un tā čīkstēšana #289. postā.

 

Vajadzētu sākumā noskaidrot kāda atšķirība ir starp 16 bitu, 32 bitu un 64 bitu arhitektūrām. Kāda ir tavai operētājsistēmai? Un tad gudrot kuri pointeri ir labāki. C un C++ var atšķirties sintakse, bet nav tādu labāko pointeru.

 

Vispār sāc ar pašiem pamatiem. Ja nepatīk sausa teorija un saproti krievu val., tad šeit ir vissaprotamāk uzrakstīts. Izlasi, apdomā, padarbojies.

 

 

Однажды студент по имени Дениска Ричи сел изучать абсолютно новый для него язык программирования. Первое, что он сделал - написал программу "Hello, World", и, что самое удивительное, она у него заработала. Когда же он перелистнул следующую страницу своей умной книжки, то ни черта не понял. То есть задним умом своей головы он, конечно же, понимал, что большинство известных ему программ умеют намного больше, чем тупо приветствовать мир, однако понять, каким это извращенным образом такие здоровские штуки можно запрограммировать, он не мог.

http://wasm.ru/article/122

http://wasm.ru/article/117

Uzliec DOS emulatoru un aiziet šito:

http://wasm.ru/article/118

Te vari noskaidrot, kuri pointeri ir labāki:

http://wasm.ru/article/123

http://wasm.ru/article/63

 

Sākumam vajadzētu pietikt, bet kaut kas man liek domāt, ka arī tas tev būs par grūtu. Dažiem vienkārši nesanāk. Un labi vien ir, ka nesanāk.

 

Šis ir vienīgais veids, kā tu varētu uzzināt atbildi uz tēmas galveno jautājumu - Kas es esmu? Kā konkrēti izpaužas C++ valodas tuvums "dzelžiem"?

Citi veidi, tādi kā studijas augstskolā, būs vēl grūtāki, ja jau nav pa spēkam sagremot piecus rakstus.

Link to comment
Share on other sites

Raimonds1

Es te nedaudz patulkoju to C tutoriāli. Palaboju google tulkotāju. Viss notiek.

 

Rādītājs deklarācijā izskatās šādi:

<variable_type> * <nosaukums>;

Piemēram, jūs varētu pazīt rādītāju ( pointeri ), kas saglabā adresi veselam skaitlim ar šādu sintaksi:

int * points_to_integer;

Paziņojuma izmantošana *. Tas ir galvenais, lai deklarētu, ka rādītāju; ja jūs pievienojat to tieši pirms mainīgā nosaukuma, tas deklarē mainīgo kā rādītāju ( pointeri ).  ja jūs deklarējat pazustu vairākas norādes uz vienas līnijas, jums ir pirms katras no tām jāraksta zvaigznīte:

/ * Viens rādītājs, vienu regulāru int * /

int * pointer1, nonpointer1;

 

/ * Divas norādes * /

int * pointer1, * pointer2;

Kā jau minēju, ir divi veidi, kā izmantot rādītāju, lai piekļūtu informācijai: tas ir iespējams ir tas dod faktisko adresi, uz citu mainīgo. Lai to izdarītu, vienkārši izmantojiet nosaukumu - rādītājs bez *. Tomēr, lai piekļūtu faktiskajām atmiņas vietām un vērtībām, kas tur glabājas, izmantojiet *. Tehniskais nosaukums tam ir - dereferencing rādītājs; būtībā, jūs lietojat atsauci uz kādu atmiņas adresi un pēc tā, lai ielādētu faktisko vērtību. Tas var būt grūti, lai sekotu, kad jums vajadzētu pievienot to zvaigznīti. Atcerieties, ka rādītāju dabiskā izmantošana ir saglabāt atmiņas adresi; tad, kad jūs izmantojat rādītāju:

call_to_function_expecting_memory_address (rādītājs);

tad tas novērtē to adresi. Jums ir jāpievieno kaut ko papildus, zvaigznīte, lai norādītu uz ielādētu vērtību, kas glabājas adresē. Jūs, iespējams to darīsiet, ļoti daudz. Tomēr rādītājs pats ir paredzēts uzglabāt adresi, tad, kad jūs izmantojat tukšu rādītāju, jūs saņemsiet šo adresi atpakaļ.

 

Lai dabūtu rādītāju faktiski norāda uz citu mainīgo - tas ir nepieciešams, lai būtu gan atmiņas adrese, gan arī mainīgo adrese. Lai iegūtu atmiņas adresi mainīgo (tā atrašanās vietu atmiņā), ielieciet un pierakstiet pie mainīgā nosaukuma. Tas iedod tam tā adresi. To sauc par adresi-operatoru, jo tas atgriež atmiņas adresi. Ērti, gan ??Ampersand un adrese, no sākuma ar; tas ir noderīgs veids, kā atcerēties, kā izmantot un iegūt mainīgo adresi.

Piemēram:

# Include <stdio.h>

 

int main ()

{

    int x; / * Normāls skaitlis * /

    int * p; / * Rādītājs līdz veselam skaitlim ("* p" ir vesels skaitlis, tāpēc p

                       jābūt norādei uz veselu skaitlim) * /

 

    p = & x; / * Izlasi to, "piešķirt adresi x P" * /

    scanf ("% d", un x); / * Liec vērtību x, mēs varētu arī izmantot p šeit * /

    printf ("% d \ n", * p); / * Piezīme zvaigznītes izmantošanai *, lai iegūtu vērtību * /

    getchar ();

}

Printf izejas vērtība glabājas x. Kāpēc ir tā? Nu, apskatīsim kodu. Skaitli sauc x. Rādītājs ( Pointers ) šim veselam skaitlim tiek definēts kā p. Tad tas saglabā atmiņas vietu X rādītāju, izmantojot adresi operatoru (&), lai iegūtu mainīgā adresi.

Izmantojot aizvieto & zīmes ir līdzīgi kā apskatīt etiķetes uz kastes, lai redzētu tās numuru, nevis meklē kastē, lai saņemtu to, kas tajā ir.

Tad lietotājs ievada numuru, kas tiek glabāta mainīgajā x; atcerieties, tā ir tā pati vieta, kas norādīta ar p. Faktiski, tā kā mēs izmantojam aizvieto & zīmes nodot vērtību scanf, ir jābūt skaidram, ka scanf liek vērtību adresē, ko norādīja p. (Patiesībā, scanf darbojas dēļ norādes!)

 

Nākamais rindā tad iet * p into printf. * p veic "dereferencing" operāciju p; tas meklē adresi, kas glabājas p, iet uz šo adresi un atgriež vērtību. Tas ir līdzīgi, kā skatotīties seifā tikai, lai atrastu tā numuru (un, iespējams, atslēgu) citai kastei, kuru atrastu jau pēc tam.

 

Ievērojiet, ka iepriekšējā piemērā, rādītājs ir inicializēts norādīt uz konkrētu atmiņas adresi, pirms tā tiek izmantota. Ja tas nav noticis, tas norāda uz kaut ko citu. Tas var novest pie ļoti nepatīkamām sekām ar šo programmu. Piemēram, operētājsistēmai būs iespēja novērst jūs no atmiņas, tā kā tā zina, ka tā nepieder jūsu programmai: tas radīs jūsu programmā traucējumus, apstāšanos. Ja tas ļauj izmantot atmiņu, jūs varētu sajaukt ar atmiņu jebkuras darbības programmu - piemēram, ja jums bija atvērts dokuments programmā Word, jūs varētu mainīt tekstu! Par laimi, Windows un citas mūsdienu operētājsistēmas pārtrauks jums piekļuvi šai atmiņai un izraisīs jūsu programmā apstāšanos. Lai izvairītos no savu programmu apstāšanās, jums vienmēr vajadzētu inicializēt pointerus ( norādes ), pirms tos izmantot.

 

Tāpat ir iespējams, lai sāktu ( inicializētu ) norādes, izmanto brīvo atmiņu. Tas ļauj atmiņu dinamiski sadalīt. Tas ir noderīgi, lai izveidotu struktūras, piemēram, kas ir saistītas sarakstos vai ar datu kokiem, kur jums nav precīzi jāzina, cik daudz atmiņas būs vajadzīgs kompilēšanas laikā, tāpēc jūs dabūsiet šo ( papildus ) atmiņu programmas izpildes laikā. Mēs apskatīsim šo konstrukciju vēlāk, bet tagad, mēs vienkārši pārbaudīsim, kā pieprasīt no atmiņas un piešķirt atmiņu operētājsistēmai.

 

Funkcija malloc, ko satur stdlib.h header fails, tiek izmantota, lai sāktu norādes ( inicializētu pointerus ) ar brīvo atmiņu (atmiņas sadaļu, kas pieejama visām programmām). malloc darbojas tāpat kā jebkuras citas funkcijas izsaukšana. Arguments par malloc ir atmiņas summa, kas pieprasīta (baitos), un malloc saņem minētā lieluma atmiņas bloku un pēc tam atgriež rādītāju ( pointeri ),  kas šim atmiņas blokam piešķirts.

 

Tā kā dažādiem mainīgo veidiem ir dažādas atmiņas prasības, mums ir jādabū atmiņas izmērs, lai varētu dabūt malloc. Tāpēc mums ir nepieciešams zināt, kā iegūt lielumu dažādu mainīgo tipiem. To var izdarīt, izmantojot atslēgvārdu sizeof, kas ņem izteiksmi un atgriež tās lielumu. Piemēram, sizeof (int) varētu atgriezties to bitu skaitu, kas nepieciešams, lai uzglabātu veselu skaitli.

# include <stdlib.h>

int * ptr = malloc (sizeof (int));

Šis kods komplekts ptr norāda uz atmiņas adreses izmēru int. Atmiņa, uz kuru ir norādīts, kļūst nepieejama citām malloc programmām. Tas nozīmē, ka uzmanīgam koderim vajadzētu atbrīvot šo atmiņu tās lietošanas beigās, jo citādi atmiņa operētājsistēmai pazūd programmas darbības laikā (to bieži vien sauc par atmiņas noplūdi, jo programma neseko visai tās atmiņai).

 

Jāņem vērā, ka tas ir nedaudz glītāk? rakstīt malloc pārskatus, ņemot lielumu mainīgo norādīja, nekā izmantot rādītāju ( pointeri ) tieši:

int * ptr = malloc (sizeof (* ptr));

Kas notiek šeit? sizeof (* ptr) izvērtēs izmēru par ko mēs varētu saņemt atpakaļ no dereferencing ptr; jo ptr ir pointeris, lai int * ptr dotu mums int, tāpēc sizeof (* ptr) atgriezīs lielumu veselam skaitlim.

Tātad, kāpēc tas ir tā ? Nu, ja mēs vēlāk pārrakstīt deklarāciju ptr turpmāk, tad mums būtu tikai jāpārraksta tā pirmā daļa:

float * ptr = malloc (sizeof (* ptr));

Mums nav jādodas atpakaļ un jālabot malloc aicinājumu izmantot sizeof (float). Tā ptr būtu norādot uz float, * ptr būtu float, tāpēc sizeof (* ptr) joprojām dod pareizo izmēru!

malloc

Tas kļūst vēl noderīgi, ja jūs galu galā, piešķirot atmiņā mainīgo tālu aiz brīdī jums paziņo, ka tā:

float * ptr;

/ * Simtiem rindas kodu * /

ptr = malloc (sizeof (* ptr));

 

 

free funkcija atgriež operētājsistēmai atmiņu.

free (ptr);

Pēc pointera atbrīvošanas, tā ir laba ideja, lai atjaunotu to, lai norādītu uz 0. Kad pointerim piešķir 0 , rādītājs kļūst par nulles rādītāju, citiem vārdiem sakot, tas nenorāda uz neko. To darot, kad jūs kaut ko darat muļķīgu ar rādītāju (tas notiek daudz, pat ar pieredzējušiem programmētājiem), jūs uzzināt to uzreiz, nevis vēlāk, kad jūs esat nodarījuši ievērojamus zaudējumus.

No nulles rādītāju koncepcija tiek bieži izmantota kā veids, kas norāda uz problēmu - piemēram, malloc atgriež 0, kad tā nevar pareizi piešķirt atmiņu. Jūs vēlaties būt pārliecināti, lai apstrādātu šo pareizi - dažkārt jūsu operētājsistēma tiešām var pietrūkt atmiņas un sniegt jums šo vērtību!

 

Norādes ( pointeri ) var likt justies ļoti mulsinoši tēmas sākumā, bet es domāju, ka ikviens var sākt novērtēt un izprast tās. Ja jums nav sajūta, ka visu saprotat, lasiet atkārtoti. Jums nevajadzētu justies kā jūs esat pilnībā sapratis katru niansi, kad un kāpēc jums ir nepieciešams izmantot norādes, ja jums ir kāda ideja par kādu no saviem galvenajiem mērķiem.

Labots - Raimonds1
Link to comment
Share on other sites

Sorry par offtopic, bet es lasu šito tēmu un rēcu. Pēdējais Raimja posts vienkārši iespārda. Sevišķi pēdējais teikums.

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

Mezavecis

Ja šitā tiek mācīts C++ ar google translate palīdzību, tas es saprotu, no kurienes tāds ķīselis galvā :) 

 

 

Norādes ( pointeri ) var likt justies ļoti mulsinoši tēmas sākumā, bet es domāju, ka ikviens var sākt novērtēt un izprast tās. Ja jums nav sajūta, ka visu saprotat, lasiet atkārtoti. Jums nevajadzētu justies kā jūs esat pilnībā sapratis katru niansi, kad un kāpēc jums ir nepieciešams izmantot norādes, ja jums ir kāda ideja par kādu no saviem galvenajiem mērķiem.
 
Link to comment
Share on other sites

Raimonds1

Tas bija piemērs, kādi teksti par tēmu ir pieejami un kas ir jāizlasa, lai saprastu, kas šis ir labāks. 

http://pw1.netcom.com/~tjensen/ptr/pointers.htm

Intereses pēc ierakstiet google - pointeri C valodā

 

te ir pointeru demonstrācijas piemērs

http://programiz.com/c-programming/c-pointers

Ir vēl kādas adreses, kur redzams, kā tās pointeru iespējas tiek jau izmantotas reāli strādājošā programmā, kas tomēr ir gana vienkārša, lai to varētu uztvert iesācējs? Nu tādā, kas priekš tā arī rakstīta, lai demonstrētu iespējas un pielietojumu, nevis tikai izvadītu atmiņas adresi, kur tas mainīgais glabājas.

Labots - Raimonds1
Link to comment
Share on other sites

Raimonds1, kas būs nākamais, pēc pointeriem? Vai tās būs references?

Link to comment
Share on other sites

Raimonds1

Es tā saprotu, ka pointeri ir ļoti svarīgi C valodā. Ka var tieši pieķļūt atmiņai, ka tas padara to kodu ātru, ka atmiņas noteikšana ietaupa vietu. Ka ar to var daudz ko izdarīt.

Tad nu es tagad meklēju piemērus, kur ir redzams, kā to var izdarīt, vēlams, aprakstīts pakāpeniski no vienkāršā uz sarezģīto.

Link to comment
Share on other sites

Pointeri ir svarīgi, taču ne tāpēc, ka "var tieši piekļūt atmiņai" vai ka tas padarītu kodu ātru. Arī vietu tas īsti neietaupa. Toties, kā runā, pointeru lietošana nereti rezultējas dažādās programmētāja pieļautās kļūdās.

 

Izpildāmais fails tipiski nav gluži tāds pats kā kods pirms kompilēšanas. T.i., izpildāmajā failā atšķiras darbību secība, "izmantotie mainīgie" utt. Piemēram, ja dari kaut ko ar 8bit mainīgajiem, tad kompilators optimizāciju rezultātā var darbības sagrupēt un reāli strādāt nevis ar 4 dažādiem 8bit mainīgajiem, bet ar vienu 32bit mainīgo. Ja uzraksti ciklu, kompilators var to ciklu "atrullēt" un izpildīt darbības secīgi, bez cikla.

 

Viens no populārākajiem pointeru pielietošanas veidiem C ir masīvi. Šo konceptu gan ir vērts apgūt.

Link to comment
Share on other sites

Nu ko var ciklēties uz pointeriem, ja interesē optimizācijas un dzelži?

Mācies par visām jaunākajām cpu cache tehnoloģijām, ko kura dara un kā no kuras kurš cpu tiek klāt. Mācies par branch prediction. Mācies par to, kas tik nenotiek jaunākajos CPU, ja gribi priekš tiem kaut ko rakstīt.

Un, lai to izmantotu savā labā, nav vajadzīgs C.

Šeku reku projekts, kurš izmanto visus knifus un hako optimālus (priekš dzelžiem) algoritmus no capa iemīļotā Thompson kunga, capa nīstajā javā: https://github.com/real-logic/Agrona

Un tamlīdzīgi...

Link to comment
Share on other sites

Reiz man viens gudrs cilvēks būvniecības jomā teica: "nav svarīgi, kādas programmēšanas valodas tu zini. Ir svarīgi, lai tavas metodes un pieeja risinājumam būtu tāda - ja būvniecības inženieris un programmētājs, programmē tādus instrumentus, kas nav citu būvniecības inženieru kompetencē". Sapratu, ka vecajiem bukiem ir bail no jaunajiem.

Īss secinājums. Vari būt no plūsmas, bet, ja nav attīstības scenārijs, perspektīvas un inovācijas, tad nav nākotnes. Kā pilnveidoties nozarē, kurā strādā, ir jādomā pašam.

No pieredzes varu teikt, ka boot foruma veco biedru kolektīvs ir ļoti laba bāze zināšanu papildināšanai trūkstošajās jomās, vismaz datortehnikā un programēšanā noteikti!

Lai gan Mežavecis reizēm par ar būvniecību saistītām lietām stāsta aplami :) Viņam var piedot :)

Laimīgu biedriem Jauno 2016. gadu!

Link to comment
Share on other sites

Diezgan svarīgi, vai kaukādu aprēķinu programmu taisīsi Pascal vai C# vai Java. Nav nesvarīgi. Pascalī taisīto nez, kura firma gribēs?

Mani šausmināja, ka te ņēmās no rīta Pascal, pusdienlaikā C, pēc pusstundas C++. Ta vienu kādu laiku apgūt un ne ķīsēli.

Būvniecībā varētu būt, par inženieriem maz vispār zinu, bet arhitekti toč konkurentus negaida ne ārzemēs, ne te, atplestām rokām un par pensiju ar nedomā, kamēr var pastrādāt.

Programmēšanā, jā, ļoti jauki un bezgala iecietīgi cilvēki forumos, reizēm šo pacietību apbrīnoju.

 

Laimīgu visiem Jauno 2016. gadu!

Link to comment
Share on other sites

Nenāk miegs pa naktīm tapēc uzrakstīšu priekš Raimonda piemēru, kurš būs:

  • tuvs "dzelžiem"
  • izmanto pointerus
  • bitu manipulācija
  • praktisks

 

Piemērs būs no NXP LPC1768 microkontroliera, lietotāja instrukcija te (zinu ka Raimondam patīk tādas). Jāskatās 131. lpp, kurā ir redzamas adreses, uz GPIO portu reģistriem. Kā redzams GPIO0 porta sākumadrese ir 0x2009 C000, GPIO1 - 0x2009 C010, GPIO2 - 0x2009 C020 utt. Sākuma adrese sakrīt ar porta DIR reģistru, pārējie portu reģitri ir nobīde no sākumadresēm.

 

1. Tātad defininējam tās sākumadreses:

#define LPC_GPIO0_BASE            0x2009C000
#define LPC_GPIO1_BASE            0x2009C020
#define LPC_GPIO2_BASE            0x2009C040
#define LPC_GPIO3_BASE            0x2009C060
#define LPC_GPIO4_BASE            0x2009C080

2. Definējam struktūru:

typedef struct 
{   
    __IO uint32_t DIR;                   /*!< Offset 0x0000: GPIO Port Direction control register */
    uint32_t RESERVED0[3];
    __IO uint32_t MASK;               /*!< Offset 0x0010: GPIO Mask register */
    __IO uint32_t PIN;                   /*!< Offset 0x0014: Pin value register using FIOMASK */
    __IO uint32_t SET;                  /*!< Offset 0x0018: Output Set register using FIOMASK */
    __O  uint32_t CLR;                  /*!< Offset 0x001C: Output Clear register using FIOMASK */
} LPC_GPIO_T;

3. Lai nebūtu daudz jāraksta, izveidojam nākamo " define'u ", kurš tiks aizvietots ar vajadzīgās struktūras pointeri uz vajadzīgo adresi

#define LPC_GPIO                  ((LPC_GPIO_T             *) LPC_GPIO0_BASE)
#define LPC_GPIO1                 ((LPC_GPIO_T             *) LPC_GPIO1_BASE)
#define LPC_GPIO2                 ((LPC_GPIO_T             *) LPC_GPIO2_BASE)
#define LPC_GPIO3                 ((LPC_GPIO_T             *) LPC_GPIO3_BASE)
#define LPC_GPIO4                 ((LPC_GPIO_T             *) LPC_GPIO4_BASE)

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

Kad pienāk reize un tu vēlies iestatīt pirmā porta trešo pinu "high" tad raksti

LPC_GPIO1->DIR |= (1 << 3);
LPC_GPIO1->SET |= (1<<3);

Kods ir copy/paste no LPCOpen bibliotēkas

Labots - AndrisBB
Link to comment
Share on other sites

Raimonds1

Paldies. Tas ir noderīgi. Kaut kā tā arī jāskaidro.

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

Maza piezīme par to, ko var gribēt, ko var darīt un kas sanāk.

Mana attieksme ir tāda, ka kaut ko darot, diezgan bieži sākuma mērķis uz laiku pazūd un parādās visādas tādas informācijas, kas ļauj saprast visādas citādas iespējas, problēmas un risinājumus.

 

Šajā tēmā ir redzama ne tikai mana nezināšana, daudzreiz nepiemērotie jautājumi un visādas ekspektācijas ( kuras es esmu atmetis par 90%), ka varēs kaut kā sakonektēt manas zināšanas par mikroshēmām ar C vai C++ valodu. No tā, kas vēl te redzams es politkorekti izvairīšos, jo tad seko visādi emocionāli teksti, bet es aicinu nolaisties no saviem augstumiem un kopīgi to C valodu bez savstarpējiem aizskārumiem lēnam un pamatīgi publiski pieejami 2-3-5-10 gadu laikā apgūt tādā līmenī, lai tā tiešām kļūtu par reālu darbarīku. Paralēli var bīdīt vismaz 2 mērķus - pašam apgūt un iemācīties komunicēt un skaidrot tiem, kuri vēl tik daudz nezin un izprast tos  iztēles mehānismus un pedagoģijas smalkumus. Kā arī veidot labus materiālus, kur programma ir speciāli rakstīta apmācībai un pakāpenībai. Ar paskaidrojumiem, kvadrātiņiem ar bultiņām, video un vēl visu ko katrai koda rindai.

 

Tādējādi, sākotnējais priekšstats, ka es te kaut ko ne tā, varbūt mainīsies uz to, ka te var redzēt veselu kaudzi problēmu, kas ir ar C valodas zināšanām Latvijā un kas ir jārisina. Normāls mērķis!  

 

igauņi pa to laiku - c-keeles programmeerimine, c keel google

leiši - c kalba programavimas, c kalba funkcijos google

somi - c kieli google

Labots - Raimonds1
Link to comment
Share on other sites

Tad tā arī nepaskatījies Raspberry Pi lai sensorus un C kopā izmantotu?

Link to comment
Share on other sites

Un pa vidu starp igauņu un lietuviešu lasīšanu Zuteru arī atradi?

Link to comment
Share on other sites

  • 3 months later...
Raimonds1

 

 

Paralēli var bīdīt vismaz 2 mērķus - pašam apgūt un iemācīties komunicēt un skaidrot tiem, kuri vēl tik daudz nezin un izprast tos  iztēles mehānismus un pedagoģijas smalkumus. Kā arī veidot labus materiālus, kur programma ir speciāli rakstīta apmācībai un pakāpenībai. Ar paskaidrojumiem, kvadrātiņiem ar bultiņām, video un vēl visu ko katrai koda rindai.   Tādējādi, sākotnējais priekšstats, ka es te kaut ko ne tā, varbūt mainīsies uz to, ka te var redzēt veselu kaudzi problēmu, kas ir ar C valodas zināšanām Latvijā un kas ir jārisina. Normāls mērķis!     igauņi pa to laiku - c-keeles programmeerimine, c keel google leiši - c kalba programavimas, c kalba funkcijos google somi - c kieli google

 

 Tagad google uz C++ programmēšanas valoda dod vairākas adreses LATVIEŠU VALODĀ

http://home.lu.lv/~janiszu/courses/ecpp/cpp01.introduction.pdf

http://home.lu.lv/~janiszu/courses/eprg/eprg.all.pdf

https://www.gamedev.lv/article/c_pamati

https://sites.google.com/site/fizikasportals/home/C/sakums

 

https://www.youtube.com/watch?v=WiNiu-qhtfs

Link to comment
Share on other sites

Pievienots 29 July 2015 - 13:26

Man tāds jautājums - kā konkrēti izpaužas C++ valodas tuvums "dzelžiem".

saturās - drīz būs gads apkārt!

Link to comment
Share on other sites

Raimonds1

Viss notiek, mācos C++ un Pascāli uzreiz kopā paralēli no sākuma. Kaut kur pie masīviem pašlaik esmu.

Man Pascal liekas ir vienkāršāks un C++ sarežģītāks dēļ sintakses. Pascal latviski daudz vairāk materiālu.

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