Hotu sem povedati, da te pascal bolj sili v grde resitve kot C.Roman napisal/-a:In v vsakem programskem jeziku se da pisati nagravžno grdo. .azi napisal/-a:...osebno mi pa Pascal iz vec razlogov NI vsec (grda koda, omejitve........).
Programiranje v Pascalu
Borlandov Turbo Pascal 7 je res treba zakrpati, ampak potem dela tudi v XP. Free Pascal nima problemov, Delphi, ki je nadgradnja Pascala, pa sploh ne.AlexUS napisal/-a:Tako da sploh ne vem če bi delal Pascal v windows Xp.
Kaj je to, kar naštevaš? Morda pa se take stvari v Pascalu (ali raje v Delphiju) delajo drugače.azi napisal/-a:Pascal nima VLA-jev, struct initializerjev, kazalcne aritmetike
Zakaj jih potrebuješ?- Variable Argument List za funkcije,
Kaj je narobe s temi funkcijami?- Vsak char predstavlja (castan v integer) ASCII vrednost (no more ord() , chr() crap),
Ima.- preprocesorske direktive (#define,#ifdef, #pragma....),
Zakaj bi potreboval drugačne?- v pascalu smes za for loope uporabljat samo "smiselne" spremenljivke
in prav je tako.prav tako nesmes manipulirati krmilne spremenjivke v samem loopu (vsaj v fpc-ju),
Ne potrebuješ kontrole nad njim?- izredno zmogljiv casting,
Zakaj?Bi pa pripomnil , da je preglednost pri vecjih projektih gotovo slabsa v pascalu
Če se prav spomnim, je bila ravno prenosljivost osnovni razlog za nastanek Cja. Pascal takrat še zdaleč ni bil tako mobi.Dvomim da so se Unix-asi zanimali za portabilnost v 70-80 letih Pa tudi pisci operacijskih sistemov (predsem Microsoftovi) bi pomojem uporabljali pascal, ce bi slo tukaj le za portabilnostne razloge
S čim? Menda ne z omejitvami?Hotu sem povedati, da te pascal bolj sili v grde resitve kot C.
Struct initialziers :Roman napisal/-a:Kaj je to, kar naštevaš? Morda pa se take stvari v Pascalu (ali raje v Delphiju) delajo drugače.azi napisal/-a:Pascal nima VLA-jev, struct initializerjev, kazalcne aritmetike
Koda: Izberi vse
struct foo {
int a;
char b;
} bar[10] = {};
http://gcc.gnu.org/onlinedocs/gcc-4.0.2 ... ated-Inits
VLA's :
Koda: Izberi vse
static void foo(int i) {
int tab[i];
printf("%d\n" , sizeof(tab)) ;
}
int main() {
int i;
for (i = 1; i < 100; i++)
foo(i);
}
Sploh ni bilo govora o temu, da nudi C nekaj kar se v Pascalu neda realizirati(poglej malo vise kaj sem napisal),oz nekaj kar NUJNO potrebujes, gre se za to, da se nekatere stvari da lepse izpeljati v C-ju.Zakaj jih potrebuješ?- Variable Argument List za funkcije,
Vsaka funkcija porabi brezveze CPU cas,(loadanje argumentov na stack, klic funkcije,popanje argumentov iz stacka... vrnitev vrednosti itd....) tiste, od vas (zacetniki, lame coderji..) to nebo motilo, zame pa je to znak slabe implementacije.Kaj je narobe s temi funkcijami?- Vsak char predstavlja (castan v integer) ASCII vrednost (no more ord() , chr() crap),
Zato ker prickajujem od programskega jezika da mam povsod odprte moznosti, ne pa da me compiler (oz jezik sam) limitira.Zakaj bi potreboval drugačne?- v pascalu smes za for loope uporabljat samo "smiselne" spremenljivke
Zakaj je to prav ? Kaj pa ce morem v samem lopu preskakovat po 2 mesti ob dolocenem pogoju oz po 3 ce je neka drug pogoj izpolnjen? Like :in prav je tako.prav tako nesmes manipulirati krmilne spremenjivke v samem loopu (vsaj v fpc-ju),
Koda: Izberi vse
for (i = 0 ; i < 1000 ; ) {
......
if (foo)
i += 3;
else
i += 2;
.........
}
Definirajmo grdo kodo prvo :S čim? Menda ne z omejitvami?Hotu sem povedati, da te pascal bolj sili v grde resitve kot C.
Zame je programiranje umetnost. Tako kot je umetnost izbrati najboljso kombinacijo barv,odtenkov, ujeti pravi motiv in ustvarit lepo sliko je zame programiranje umetnost pri kateri se trudis napisat kodo, ki porabi cimanj CPU casa, je HITRA,ucinkovita, fleksibilina, KRATKA.... Ce te sam compiler pri tem omejuje (glej zgoraj) je taksno koda tezje izvedljiva...
Predstavlji si slikarja kateremu prodajalec ne zeli prodati zelene barve..
Sicer nevem zakaj se petelinis glede Pascala, ce je ocitno da C-ja ( oz programiranja?) ne obvladas dovolj?
azi napisal/-a:Se nebi strinjal
Pascal nima VLA-jev..
Če pogledava Delphi pascal boš videl da VLA-je podpira že od verzije 2 naprej, torej celh 10 let.
Seveda podpira tudi večino (za vse ne vem) ostalih funkcij, ki si jih naštel kot so recimo, kazalcna aritmetika, preprocesorske direktive, casting itd..
Mimogrede:
C ne pozna set-ov.
Konec koncev je C++ in Delphi naredila ista firma in so vse nove lastnosti bile zelo hitro izenačene v obeh prevajalnikih.
Lep dan želim..
Aha, to je v Pascalu record.azi napisal/-a:Struct initialziers
Misliš rekurzivnost? Pascal to ima.VLA's
S kazalci se da marsikaj početi, a da se temu reče kazalčna aritmetika, tega pa res nisem vedel.Neves kaj je kazalcna aritmetika ?
Hm, odvisno od tega, če prevajalnik prepozna konstanten argument.Vsaka funkcija porabi brezveze CPU cas...
Hm. Pri današnjih računalniških zmogljivostih je večji problem čitljiva izvorna koda (ki jo je mogoče enostavno vzdrževati) kot pa ročno optimizirana izvršilna koda. So seveda tudi izjeme.tiste, od vas (zacetniki, lame coderji..) to nebo motilo, zame pa je to znak slabe implementacije.
Koda: Izberi vse
for (i = 0 ; i < 1000 ; ) {
......
if (foo)
i += 3;
else
i += 2;
.........
}
Koda: Izberi vse
i:=0;
while i<1000 do
begin
......
if foo then
i:=i+3 {ali tudi Inc(i,3)}
else
i:=i+2
......
i:=i+1 {lahko tudi Inc(i)}
end
Do neke mere res.Zame je programiranje umetnost.
Načelno da, toda, kot sem že zapisal, je strojna optimizacija pogosto učinkovitejša od ročne. Koristno je tudi, če te compiler čimbolj omejuje pri pisanju grde kode.je zame programiranje umetnost pri kateri se trudis napisat kodo, ki porabi cimanj CPU casa, je HITRA,ucinkovita, fleksibilina, KRATKA.... Ce te sam compiler pri tem omejuje (glej zgoraj) je taksno koda tezje izvedljiva...
No, kar se petelinjenja tiče, pristanem na arbitražo. Cja res ne obvladam, se pa zanesem na mnenja poznavalcev, da je mogoče v njem pisati dosti hujšo (nekorektno) kodo kot v Pascalu.Sicer nevem zakaj se petelinis glede Pascala, ce je ocitno da C-ja ( oz programiranja?) ne obvladas dovolj?
Ma vse se da prevesti v moderni pascal..
Delphi ima zelo dobro podprto delo s kazalci..
Poznam pascal in C jezik in vem da temu ni tako.
Nič, prav nič dela s stack-om..
oziroma v memonik..
Je pa to grd način pisanja programov..
Lep dan želim še naprej..
No v pascalu to izgleda recimo takole..azi napisal/-a: Struct initialziers :To je seveda najpreprostejsi primer, kompleksne primere (kjer lahko vnaprej dolocis vrednost a in b-ja itd...Koda: Izberi vse
struct foo { int a; char b; } bar[10] = {};
Koda: Izberi vse
procedure foo (a: integer = 10; b:integer = 20);
Pa sej si 10 let za časom..azi napisal/-a:VLA's :Koda: Izberi vse
static void foo(int i) { int tab[i]; printf("%d\n" , sizeof(tab)) ; } ...
Koda: Izberi vse
var
tab: array of integer;
...
procedure foo(i: integer);
begin
SetLength(tab, i);
...
end;
No pa še en primerček kazalčne aritmetike..azi napisal/-a:Neves kaj je kazalcna aritmetika ?
Koda: Izberi vse
procedure foo(var a: integer);
var
p: ^integer;
begin
p := @a;
inc(p, 10);
end;
Dej, dej..azi napisal/-a:Sploh ni bilo govora o temu, da nudi C nekaj kar se v Pascalu neda realizirati(poglej malo vise kaj sem napisal),oz nekaj kar NUJNO potrebujes, gre se za to, da se nekatere stvari da lepse izpeljati v C-ju.
Poznam pascal in C jezik in vem da temu ni tako.
Dej poglej si kako delujejo moderni prevajalniki in videl boš, da ni nič res kar govoriš..azi napisal/-a:Vsaka funkcija porabi brezveze CPU cas,(loadanje argumentov na stack, klic funkcije,popanje argumentov iz stacka... vrnitev vrednosti itd....) tiste, od vas (zacetniki, lame coderji..) to nebo motilo, zame pa je to znak slabe implementacije.
Nič, prav nič dela s stack-om..
Koda: Izberi vse
var
i:integer;
begin
i := ord('A');
// se prevede enako kot ..
i := 65;
Koda: Izberi vse
mov eax, 65
Za Delphi pascal to ne velja..in prav je tako.prav tako nesmes manipulirati krmilne spremenjivke v samem loopu (vsaj v fpc-ju),
Je pa to grd način pisanja programov..
Žal ni res..Hotu sem povedati, da te pascal bolj sili v grde resitve kot C.
Več kot očitno je, da poznaš le eno stran in misliš da veš vse..Sicer nevem zakaj se petelinis glede Pascala, ce je ocitno da C-ja ( oz programiranja?) ne obvladas dovolj?
Lep dan želim še naprej..
struct initializer je struct initializer, struct je struct (record).Roman napisal/-a:Aha, to je v Pascalu record.azi napisal/-a:Struct initialziers
Rekurzivnost , me hecas ?Misliš rekurzivnost? Pascal to ima.
Zakaj pa ne imeti oboje (berljivost ucinkovitost)? Bos rekel daPri današnjih računalniških zmogljivostih je večji problem čitljiva izvorna koda (ki jo je mogoče enostavno vzdrževati) kot pa ročno optimizirana izvršilna koda. So seveda tudi izjeme.
Koda: Izberi vse
int x = 65;
printf("%c\n" , (char) x) ;
Koda: Izberi vse
for (i = 0 ; i < 1000 ; ) {
......
if (foo)
i += 3;
else
i += 2;
.........
}
Koda: Izberi vse
i:=0;
while i<1000 do
begin
......
if foo then
i:=i+3 {ali tudi Inc(i,3)}
else
i:=i+2
......
i:=i+1 {lahko tudi Inc(i)}
end
Do neke mere res.Zame je programiranje umetnost.
Prodajalec smatra da zelena barva ne "pase" na moji sliki in mi je ne proda? Dobro platno naredi lepo sliko?je zame programiranje umetnost pri kateri se trudis napisat kodo, ki porabi cimanj CPU casa, je HITRA,ucinkovita, fleksibilina, KRATKA.... Ce te sam compiler pri tem omejuje (glej zgoraj) je taksno koda tezje izvedljiva...
Načelno da, toda, kot sem že zapisal, je strojna optimizacija pogosto učinkovitejša od ročne. Koristno je tudi, če te compiler čimbolj omejuje pri pisanju grde kode.
No, kar se petelinjenja tiče, pristanem na arbitražo. Cja res ne obvladam, se pa zanesem na mnenja poznavalcev, da je mogoče v njem pisati dosti hujšo (nekorektno) kodo kot v Pascalu.Sicer nevem zakaj se petelinis glede Pascala, ce je ocitno da C-ja ( oz programiranja?) ne obvladas dovolj?
Klasicni rek (ki mi gre na zivce ko mi ga kdo izrece) : " Ce se poznavalec vrze skozi okno , se tudi ti ?" <- hec malo
Ucasih ko se kaj ne odvija po mojem misljenju postanem zelo nesramen in "aroganten" upam da moji posti ne zgledajo tako hudi, in da nebo zamer
Povej mi kje sm trdil nasprotno!GJ napisal/-a:Ma vse se da prevesti v moderni pascal..
Pokazi mi (iz zanimivosti, ne ker bi rad kaj dokazoval) kako nastavim eno polje struktur (recimo 100 struktur z elementi a (integer), b float, in c string, tako da je prvih 15 elementov z vrednostmi : a = 13, b = 3.3 , c = "HELLO" , ostali pa na b = 99, b = 33.22 , c = "WORLD".No v pascalu to izgleda recimo takole..Koda: Izberi vse
procedure foo (a: integer = 10; b:integer = 20);
Procedura?
Pa sej si 10 let za časom..Koda: Izberi vse
var tab: array of integer; ... procedure foo(i: integer); begin SetLength(tab, i); ...
Spet iz zanimivosti, ce kazalec A kaze na zacetek niza, kazalec B pa na konec niza, bo njihova razlika (B-A) dolzina niza?No pa še en primerček kazalčne aritmetike..Delphi ima zelo dobro podprto delo s kazalci..Koda: Izberi vse
procedure foo(var a: integer); var p: ^integer; begin p := @a; inc(p, 10); end;
Zanimivo ! Kako se pa prevede???Dej, dej..
Poznam pascal in C jezik in vem da temu ni tako.
Dej poglej si kako delujejo moderni prevajalniki in videl boš, da ni nič res kar govoriš.. Nič, prav nič dela s stack-om..
oziroma v memonik..Koda: Izberi vse
var i:integer; begin i := ord('A'); // se prevede enako kot .. i := 65;
Koda: Izberi vse
mov eax, 65
Koda: Izberi vse
var j : Integer;
i : Char;
begin
j := 0;
readln(i);
for i downto 'A' do
inc(j, ord(i));
end;
Res, je, pascal obravnavam le toliko (in na sreco nic vec ) kot me to siljo v srednji soli (2 leti), moje znanje pascala je torej omejeno, a zal zadostno da vidim "pomankljivosti"Več kot očitno je, da poznaš le eno stran in misliš da veš vse..Sicer nevem zakaj se petelinis glede Pascala, ce je ocitno da C-ja ( oz programiranja?) ne obvladas dovolj?
No potem je vse uredu..azi napisal/-a:Povej mi kje sm trdil nasprotno!GJ napisal/-a:Ma vse se da prevesti v moderni pascal..
Obstaja kar nekaj načinov izvedbe..Pokazi mi (iz zanimivosti, ne ker bi rad kaj dokazoval) kako nastavim eno polje struktur (recimo 100 struktur z elementi a (integer), b float, in c string, tako da je prvih 15 elementov z vrednostmi : a = 13, b = 3.3 , c = "HELLO" , ostali pa na b = 99, b = 33.22 , c = "WORLD".
Pač odvisno kako se stvari lotiš..
Ne, temveč je variabla tab je deklarirana kot dinamični array.Procedura?Koda: Izberi vse
var tab: array of integer; ... procedure foo(i: integer); begin SetLength(tab, i); ...
Tako je.Spet iz zanimivosti, ce kazalec A kaze na zacetek niza, kazalec B pa na konec niza, bo njihova razlika (B-A) dolzina niza?
Res, je, pascal obravnavam le toliko (in na sreco nic vec ) kot me to siljo v srednji soli (2 leti), moje znanje pascala je torej omejeno, a zal zadostno da vidim "pomankljivosti"
Delphi pascal nima bistvenih pomankljivosti.. Zato je poleg Cja najbolj razširjen programski jezik. In to verjetno ne brez razloga.
Je pa seveda C še vendo 'number one' in to bo verjetno tudi ostal vsaj za programerje.
Ampak kljub Cju še vedno včasih pišem določene dele direktno v memoniku, kar Delphi pascal dopušča..
Koda: Izberi vse
begin
asm
push esi
mov esi,offset tab
xor eax, eax
cld
mov ecx, 100
rep stosd
pop esi
end;
end;
Lep pozdrav..
Pohvalno, da se te svoje poteze zavedaš, ampak za nesramnost nimaš niti najmanjšega razloga. Kar se mene tiče, prenesem marsikaj, me pa nihče ne sili v pogovor, če mi ni všeč.azi napisal/-a:Ucasih ko se kaj ne odvija po mojem misljenju postanem zelo nesramen in "aroganten" upam da moji posti ne zgledajo tako hudi, in da nebo zamer
Osebno obvladam Fortran, Basic in C/C++ (Pascal sem - verjetno to GJ-ju ni v veselje - samo povohal v srednji šoli).timj010 napisal/-a:Sej ste mi vsi dovolj pomagala v zacetnih postih tako da hvala vsem. Mogoce bi se samo prosil ce pozna kdo kaksne strani s dobrimi tutoriali za delphi pascal in C, ter kaksna je razlika med C in C++.
Osebno mislim, da če nekdo osvoji osnovno logiko programiranja v nekem jeziku, potem mu te logike ni težko prenesti na druge jezike.
O C/C++ ti lahko dam naslednje informacije:
Literatura:
Brian W. Kernighan, Dennis M. Ritchie, The C Programming Language, 2.ed, Prnt.Hall, 1988
Goran Bervar, C++ na kolenih, ŠOU – Študentska založba, 1998
Bjarne Stroustrup, The C++ Programming Language, Third edition, Addison-Wesley, 1997
Bruce Eckel, Thinking in C++ I in II, Prentice Hall, 2000, 2002
Jarrod Hollingworth, C++ Builder 5 Developers Guide, Sams Publishing, 2001
Linki na proizvajalce razvojnih okolij/compilerjev:
Borland http://www.borland.com/cbuilder
DevCpp http://www.bloodshed.net/
GNU http://www.gnu.org
Djgpp http://www.delorie.com/djgpp
Sdcc http://sdcc.sourceforge.net/
Python http://www.python.org/
C/C++ tutoriali, knjige in pomoč na internetu:
Thinking in C++ http://www.mindview.net/Books Bruce Eckel books
Programming in C http://www.cs.cf.ac.uk/Dave/C Dave Marshall – programiranje v C
Steve Summit http://www.eskimo.com/~scs programiranje v C, tečaj, članki, faq
Learn C/C++ Today http://www.cyberdiem.com/vin seznam spletnih povezav na tutoriale
The bits http://www.thebits.org UK Borland (Builder) User Group
ProgrammersHeaven http://www.programmersheaven.com/zone3 C/C++ programi, pomoč
TheTemporalDoorway http://www.temporaldoorway.com/programming/cbuilder pomoč za C++Builder
Zgodovina C/C++:
• Nastanek jezika C: Dennis Ritchie 1972 Bell Laboratories
• Referenčna knjiga za C: 1978, 1988
– Brian W. Kernighan, Dennis M. Ritchie, The C Programming Language
• Standardizacija jezika: 83 – 88
• Standard za C: leta 1990 ANSI/ISO 9899:1990
• Nastanek jezika C++: Bjarne Stroustrup 1980 AT&T
• C++ doda C-ju elemente objektno orientiranega programiranja (OOP)
• Referenčna knjiga za C++: 1997 3. edicija
– Bjarne Stroustrup, The C++ Programming Language
Značilnosti jezika C:
Sestavljen je iz dveh delov:
• jedra jezika
• dodatnih knjižnic
V nasprotju z ostalimi (visokonivojskimi jeziki) je C srednjenivojski jezik. D. Ritchie ga je napisal z namenom, da bi bil primeren za pisanje operacijskih sistemov (Ritchie je s C-jem napisal različico UNIX-a).
C++:
- nadgradnja jezika C
- olajša ponovno uporabo kode
- objektni programi so bolj pregledni in lažje razumljivi
- objektne programe je lažje pisati, dopolnjevati in vzdrževati
- nov tip spremenljivke: razred (class)
No odvisnio kaj rabiš..azi napisal/-a:@Gj
V C-ju ima VLA staticen size..
Deklaracija:
Koda: Izberi vse
var
tab: array of integer;
Deklaracija..
Koda: Izberi vse
type
TTab = array[0..MaxInt] of integer;
PTab = ^TTab;
No C je še vedno zakon..shrink napisal/-a:Osebno obvladam Fortran, Basic in C/C++ (Pascal sem - verjetno to GJ-ju ni v veselje - samo povohal v srednji šoli).
Vendar ga zadnjih nekaj let skoraj ne uporabljam..
Na win okolju mi povsem zadostuje Delphi. Časovno gledano, torej čas, ki ga potrebuješ za razvoj neke aplikacije je Delphi še vedno najhitrejše razvojno okolje.
Če pa pišem programček za kakšen mikrokontroller, pa ponavadi zgolj koristim C knjižnice. Simulacijo naredim v Delphiju in jo nato latnoročno prevedem, torej polinkam ukaze iz C knjižnic direktno v memoniku. Nadzorno jedro programa pa tako ali tako ponavadi ni možno narediti zadovoljivo niti v Cju, temveč direktno v memoniku.
Lep dan želim..