DANrulz81 stellt sich vor
DANrulz81 stellt sich vor
Hallo zusammen,
mein Name ist Dennis. Ich bin 30 Jahre alt, verheiratet und hab auch noch einen 5 jährigen Sohn. Wenn ich mal Zeit für mich finde, versuche ich grad die Programmiersprach C zu lernen. Angefangen hatte damals alles mit einem Amstrad PC mit sagenhaften 128 KB Arbeitsspeicher und einer 25 MB Festplatte.
Mit 9 Jahren habe ich angefangen, Basic zu lernen, und muss sagen, dass ich das bis heute mitgeschleppt habe, da ich das auch nie wirklich richtig gut gelernt habe. Ich konnte irgendwie immer alles mit FOR - Schleifen oder IF THEN ELSE lösen, was nie sehr elegant war. Hätte ich bloß früher mit C angefangen. Das ist eine sehr elegenate und inspirierende Sprache. Zwischen drin kamen auch mal Anflüge von Pascal und Assembler.
Ich versuch mein Bestes zu geben, da ich aber Familiär und Beruflich immer sehr eingespannt werde, kann ich nur langsame Fortschritte machen.
In diesem Sinne:
Happy Progging.
mein Name ist Dennis. Ich bin 30 Jahre alt, verheiratet und hab auch noch einen 5 jährigen Sohn. Wenn ich mal Zeit für mich finde, versuche ich grad die Programmiersprach C zu lernen. Angefangen hatte damals alles mit einem Amstrad PC mit sagenhaften 128 KB Arbeitsspeicher und einer 25 MB Festplatte.
Mit 9 Jahren habe ich angefangen, Basic zu lernen, und muss sagen, dass ich das bis heute mitgeschleppt habe, da ich das auch nie wirklich richtig gut gelernt habe. Ich konnte irgendwie immer alles mit FOR - Schleifen oder IF THEN ELSE lösen, was nie sehr elegant war. Hätte ich bloß früher mit C angefangen. Das ist eine sehr elegenate und inspirierende Sprache. Zwischen drin kamen auch mal Anflüge von Pascal und Assembler.
Ich versuch mein Bestes zu geben, da ich aber Familiär und Beruflich immer sehr eingespannt werde, kann ich nur langsame Fortschritte machen.
In diesem Sinne:
Happy Progging.
- Xin
- nur zu Besuch hier
- Beiträge: 8861
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: DANrulz81 stellt sich vor
Hohoho
Ich selbst habe die recht typische C64->C128->Amiga-Karriere hinter mir.
Was ist Dein Ziel beim Programmieren lernen und wie bist Du auf diese Seite gestoßen?
Ich schreibe den C-Kurs und er ist noch nicht fertig, (auch kritisches) Feedback ist erwünscht.
Ich wünsche Dir viel Erfolg und wenn er ausbleibt, keine Scheu nachzufragen.
C ist immernoch Maß aller Dinge in der Programmierung. Ansonsten kenne ich den Amstrad auch noch, aber ich glaube, die hatten ein Kassettenlaufwerk. ^^DANrulz81 hat geschrieben:mein Name ist Dennis. Ich bin 30 Jahre alt, verheiratet und hab auch noch einen 5 jährigen Sohn. Wenn ich mal Zeit für mich finde, versuche ich grad die Programmiersprach C zu lernen. Angefangen hatte damals alles mit einem Amstrad PC mit sagenhaften 128 KB Arbeitsspeicher und einer 25 MB Festplatte.
Ich selbst habe die recht typische C64->C128->Amiga-Karriere hinter mir.
Pascal ist inzwischen nicht nur tot, sondern verwest. Basic lebt vom zweifelhaften Ruf eine Einsteigersprache zu sein, aber müffelt schon ganz gewaltig. Hier würde ich keine Energie mehr investieren. Assembler wird nie totzukriegen sein, aber ist für die meisten Menschen nicht mehr nützlich.DANrulz81 hat geschrieben:Mit 9 Jahren habe ich angefangen, Basic zu lernen, und muss sagen, dass ich das bis heute mitgeschleppt habe, da ich das auch nie wirklich richtig gut gelernt habe. Ich konnte irgendwie immer alles mit FOR - Schleifen oder IF THEN ELSE lösen, was nie sehr elegant war. Hätte ich bloß früher mit C angefangen. Das ist eine sehr elegenate und inspirierende Sprache. Zwischen drin kamen auch mal Anflüge von Pascal und Assembler.
Was ist Dein Ziel beim Programmieren lernen und wie bist Du auf diese Seite gestoßen?
Auch wenn Jugendliche schneller lernen, dürftest Du mit 30 einer Vorahnung von Programmierung keine nennenswerten Probleme haben. Du dürftest deutlich fokussierter lernen.DANrulz81 hat geschrieben:Ich versuch mein Bestes zu geben, da ich aber Familiär und Beruflich immer sehr eingespannt werde, kann ich nur langsame Fortschritte machen.
Ich schreibe den C-Kurs und er ist noch nicht fertig, (auch kritisches) Feedback ist erwünscht.
Ich wünsche Dir viel Erfolg und wenn er ausbleibt, keine Scheu nachzufragen.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: DANrulz81 stellt sich vor
Das ich mich persönlich weiter entwickle, Probleme systematisch angehe und meinen Code ständig verbessere. Mir habens beispielsweise die Rekursionen angetan. Da bin ich immernoch beeindruckt, wie man mit einfachem Code große Wirkung erziehlen kann. Da möchte ich mal hin. Des Weiteren möchte ich mit C Mikrocontroller programmieren, da ich dort näher an der Hardware bin als mit Bascom, aber doch gewohnte Programmierstrukturen anwenden kann als wie zum Beispiel beim Assembler.Was ist Dein Ziel beim Programmieren lernen und wie bist Du auf diese Seite gestoßen?
Auf die Seite bin ich durch ein anderes Forum gestoßen, leider weiß ich nicht mehr, woher genau.
Ich habe beispielsweise einen Binärumrechner geschrieben:
Code: Alles auswählen
#include <math.h>
#include <stdio.h>
int main()
{
double y;
int x=0, i=0, rest=0, uebertrag=0, zaehler=0;
printf("\nBitte eine Zahl eingeben: ");
scanf("%i",&x);
y = log(x)/log(2); /*Länge der binären Zahl ermitteln*/
y=y+0.0001;
printf("\n\nBin\x84re L\x84nge: %lf , also ist sie %1.lf Bits lang\n\n\n", y, ceil(y));
i=ceil(y);
int bin[i];
for(i=ceil(y); i>0; i--){
rest=x%2;
bin[i]=rest;
uebertrag=x/2;
i--;
rest=uebertrag%2;
bin[i]=rest;
x=uebertrag/2;
};
for(zaehler=1; zaehler<ceil(y)+1; zaehler++)
{
printf("%i ",bin[zaehler]);
};
printf("\n\n");
return 0;
}
Und heraus kam dann das:
Code: Alles auswählen
#include <stdio.h>
void binprint(unsigned x) {
if(x > 1) {
binprint(x / 2);
}
putchar(x % 2 + '0');
}
int main(void) {
unsigned x;
scanf("%u", &x);
binprint(x);
putchar('\n');
return 0;
}
- Xin
- nur zu Besuch hier
- Beiträge: 8861
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: DANrulz81 stellt sich vor
Reine Übungssache.DANrulz81 hat geschrieben:Das ich mich persönlich weiter entwickle, Probleme systematisch angehe und meinen Code ständig verbessere. Mir habens beispielsweise die Rekursionen angetan. Da bin ich immernoch beeindruckt, wie man mit einfachem Code große Wirkung erziehlen kann. Da möchte ich mal hin.Was ist Dein Ziel beim Programmieren lernen und wie bist Du auf diese Seite gestoßen?
Rekursion ist klasse, wenn man einen Stack bracht - man nimmt eben den Stack der Funktionen... aber das kostet. Siehe unten.
Bist Du firm in Assembler?DANrulz81 hat geschrieben:Des Weiteren möchte ich mit C Mikrocontroller programmieren, da ich dort näher an der Hardware bin als mit Bascom, aber doch gewohnte Programmierstrukturen anwenden kann als wie zum Beispiel beim Assembler.
Der Code ist recht typisch für einen Einsteiger. Probleme werden Schritt für Schritt irgendwie gelöst und die Schritte dann hintereinandergepackt.DANrulz81 hat geschrieben:Ich habe beispielsweise einen Binärumrechner geschrieben:
...
Den hab ich dann in einem Forum gepostet, dass man mir mal sagt, wie ich mich denn geschlagen habe. Antwort war z.B.: "Das geht auch eleganter"
Dieser Algorithmus ist eine Art "Standard" als Beispiel für "Eleganz". Du darfst also davon ausgehen, dass derjenige, der ihn gepostet hat ihn auch nur mal irgendwo gelesen hat und ihn nicht selbst entwickelt hat.DANrulz81 hat geschrieben:Und heraus kam dann das:
Da war ich mal wieder sehr erstaunt und geplättet, da ich darauf nie gekommen wäre.Code: Alles auswählen
#include <stdio.h> void binprint(unsigned x) { if(x > 1) { binprint(x / 2); } putchar(x % 2 + '0'); }
Sieht hübsch aus, hat aber einen großen Nachteil: er ist rekursiv und Rekursion ist teuer. Rekursiv ist er, weil er zuerst rechnet (die Rekursion), und dann erst die Ergebnisse (putchar) liefert.
Nehmen wir das ganze ohne Rekursion:
Code: Alles auswählen
void binprint( unsigned int x )
{
for( ;x; x>>=1 )
putchar( (x&1) + '0' );
}
Dann sieht das ganze so aus:
Code: Alles auswählen
void binprint( unsigned int x )
{
char stack[33];
unsigned int stackPtr = 32;
stack[ stackPtr ] = '\0'; // Nullbyte
for( ;x; x>>=1 )
stack[ --stackPtr ] = (x&1) + '0';
puts( &stack[stackPtr] );
}
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: DANrulz81 stellt sich vor
Naja, es geht so. Es kommt auch drauf an, was für einen. mit dem für X86 habich noch nie was gemacht. Nur für den 8051 und für AVR.Bist Du firm in Assembler?
Und wegen den Rekursionen: Dein Code muss ich mir mal genauer anschauen, so ganz bin ich noch nicht dahinter gekommen. Mir erscheint C teilweise immer noch sehr kryptisch, als alter Basic Programmierer muss ich mich da erst nach und nach durcharbeiten.
Was mir noch aufgefallen ist: Leider lässt sich dein Code nicht compilieren, ich bekomme immer diese Fehlermeldung:
Code: Alles auswählen
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\libmingw32.a(main.o):main.c|| undefined reference to `WinMain@16'|
Was ich an diesem Code auch nicht verstehe: Wo ist denn da die Schleife? Klingt jetzt vielleicht etwas komisch, aber:
Code: Alles auswählen
void binprint(unsigned x) {
if(x > 1) {
binprint(x / 2);
}
putchar(x % 2 + '0');
}
int main(void) {
unsigned x;
scanf("%u", &x);
binprint(x);
putchar('\n');
return 0;
}
- cloidnerux
- Moderator
- Beiträge: 3123
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: DANrulz81 stellt sich vor
Hi und ein herzliches Willkommen im Forum auch von mir.
MfG cloidnerux.
Nein, es liegt daran, das keine main-Funktion vorhanden ist, der bei jedem C/C++ Programm den Einstiegspunkt definiert.Liegt das an C++?
AVR ist mir Sympathisch^^Naja, es geht so. Es kommt auch drauf an, was für einen. mit dem für X86 habich noch nie was gemacht. Nur für den 8051 und für AVR.
MfG cloidnerux.
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
- Xin
- nur zu Besuch hier
- Beiträge: 8861
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: DANrulz81 stellt sich vor
AVR ist ja auch nicht schlecht.DANrulz81 hat geschrieben:Naja, es geht so. Es kommt auch drauf an, was für einen. mit dem für X86 habich noch nie was gemacht. Nur für den 8051 und für AVR.Bist Du firm in Assembler?
Nicht unbedingt, was ich jetzt brauche, aber ich glaube cloidnerux sabbert schon ;-D
Ich habe auch mit Basic angefangen und kann da heute nur noch von abraten, weil man lernt in Blöcken zu arbeiten, während moderne Programmiersprachen geschachtelt werden können. Ausdrücke und Konstrukture können ineinander geschachtelt werden. Hat man sich einmal Strategien zurecht gelegt, in Blöcken zu denken, dann macht man sich teils das Leben schwer, weil man die einfachen Lösungen als zu kryptisch ansieht. Das muss man üben - wie gesagt: Ich habe auch jahrelang Basic programmiert, bevor ich über ASM nach C kam.DANrulz81 hat geschrieben:Und wegen den Rekursionen: Dein Code muss ich mir mal genauer anschauen, so ganz bin ich noch nicht dahinter gekommen. Mir erscheint C teilweise immer noch sehr kryptisch, als alter Basic Programmierer muss ich mich da erst nach und nach durcharbeiten.
Nein, das ist normales C. Du kannst die rekursive Fassung mit meiner austauschen, musst aber die main-Funktion behalten.DANrulz81 hat geschrieben: Was mir noch aufgefallen ist: Leider lässt sich dein Code nicht compilieren, ich bekomme immer diese Fehlermeldung:Liegt das an C++?Code: Alles auswählen
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\libmingw32.a(main.o):main.c|| undefined reference to `WinMain@16'|
If ist eine Bedingung, keine Schleife.DANrulz81 hat geschrieben: Was ich an diesem Code auch nicht verstehe: Wo ist denn da die Schleife? Klingt jetzt vielleicht etwas komisch, aber:
die einzige Schleife, die ich dort finde, ist das "if". Oder bleibt das Programm so lange darin, wie x>1 ist?Code: Alles auswählen
void binprint(unsigned x) { if(x > 1) { binprint(x / 2); } putchar(x % 2 + '0'); }
Die Schleife entsteht dadruch, dass sich binprint() selbst aufruft und zwar mit der Hälfte des vorherigen x ( x/2 entspricht x >> 1 in meinem Code). Der Trick dabei ist, dass durch die Rekursion erst die am tiefsten verschachtete Funktion als erstes zu putchar() kommt. Das letzte errechnete wird also als erstes ausgegeben. Damit löst sich das Problem der Reihenfolge in Luft auf, weil sich so die richtige Ausgabereihenfolge ergibt.
Rekursion verstehst Du am besten, wenn Du das Beispiel von Hand auf Papier durchrechnest. Nimm eine einfache Zahl, wie 5 ( binär 101 ) und rechne das halt mal durch.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: DANrulz81 stellt sich vor
Das stimmt. Da liegt warscheinlich auch mein Problem. Momentan bin ich auch mit dem AVR auf Basic unterwegs (BASCOM), da das für mich etwas einfacher ist weil ich eben diese Blockarbeitsweise drin habe. Deshalb ist es mir auch immer schwer gefallen, mit Assembler zu arbeiten, weil ich dort auch keine direkten IF THEN ELSE Anweisungen verwenden kann, sondern nur schauen, ob ein Bit gesetzt ist und es dann weiter geht im Programm. Hinzu kommt noch, dass ich durch das damalige Lehrbuch gelernt habe, viel mit GOTO zu arbeiten, was meinen Code nie sehr schön aussehen ließ. Und das habe ich irgendwie nie ganz los bekommen, was ich jetzt bereuhe.Ich habe auch mit Basic angefangen und kann da heute nur noch von abraten, weil man lernt in Blöcken zu arbeiten, während moderne Programmiersprachen geschachtelt werden können. Ausdrücke und Konstrukture können ineinander geschachtelt werden. Hat man sich einmal Strategien zurecht gelegt, in Blöcken zu denken, dann macht man sich teils das Leben schwer, weil man die einfachen Lösungen als zu kryptisch ansieht. Das muss man üben - wie gesagt: Ich habe auch jahrelang Basic programmiert, bevor ich über ASM nach C kam.
Aber nichts desto trotz versuche ich jetzt, meine Basic Vergangenheit hinter mir zu lassen, auch wenn es schwer ist, nochmal von vorne anzufangen.