Beste Möglichkeit C zu lernen

Und für alle die sich Fragen und was genau soll ich nun programmieren kann ich immer wieder https://projecteuler.net/ empfehlen. Das sind schöne kleine Aufgaben welche man nutzen kann um sich zumindest mit seiner Umgebung vertraut zu machen bevor man direkt eine Weltverbesserer-App schreibt ;)

Hallo,

Aufgaben sind einfach zu finden. Zum Beispiel wieviel Buchstaben hat das Wort Affenkäfig :-)
Oder was das Ergebnis von 7+ 7.
Das Problem finde ic die Umsetzung. Da sitze ich vor dem Rechner, habe ein gewöhlichen Editor, oder einen für Programmiersprachen, der arben benutzt oder nutze eine IDE.
Dann gebe ich ein '#include' ja was denn?? Vielleicht '#include stdio' Ist für alles gut?? Dann mache ich die Klammer auf '{' . die mit der Nase. Dann mache ich sie zu '}' und fertig ist ein 1. Programm? :-)) Nur was schreibe ich zwischen die Klammer auf und Klammer zu?? Was mußich tun umBeehle zu inden und was muß ich tun um etwas zu lernen?
Für den Affenkäfig müßte ich eine String-Variable erfinden. Dann müßte ich festlegen ob ganze Zahlen?? Für Zahlen kenne ich 'integer' Toll, für Buchstaben?? Auch Integer, weil Buchstaben auch als Zahlen ausgedrückt werden?
Mir geht esdarum wie man das überall machen würde: Eine Idee, aber wie wäre die Lösung zu finden? Liest man 50'000 Seiten um dann doch nicht die Lösung zu finden? Denn niemand will die Buchstaben zählen vom Affenkäfig. Aber für ähnliche müßte es Lösungswege geben. Wenn ich den hätte, wüßte ich vielleicht was ich die ganze Zeit übersehen haben muß. Ich habe ein Loch gegraben und finde die Leiter nicht.

Danke fürs lesen.
 
Vielleicht doch noch ein kleiner Tip: Im Falle eines Fehlers niemals mehr als eine Sache vor dem erneuten kompilieren und laufen lassen ändern. Schon bei 2-3 Änderungen komsmt du schnell ins schleudern was denn nun der Grund für den Fehler war.

Ich kann nicht programmieren, aber dazu fällt mir Pascal ein. Da gibts Procedure und man mit begin; und end; Blöcke schreiben und testen. Wie in BASIC mit gosub.
Mit manchen IDEs kann man in der Fehlermeldung auf die Zeile springen wo der Fehler sitzt. Eine IDE zu finden die einen hilft, ist deshalb auch nicht einfach. Bei manchen muß man noch den Compiler eintragen, der dann aufgerufen wird.
Manche meinen nur Compiler und Datei wäre besser. Aber wie sie da vorgehen schreiben sie nie. Sie rufen vielleicht 'gcc mein-pogramm-file.c' auf? Nur was soll da besser sein als in einer IDE?

Das sind Fragen die mich als Dauer-Anfänger immer wieder beschäftigen. Ich würde lieber '12' Stunden programmieren üben als 30 Minuten Fernsehn zu sehen. Programmieren wüerde Gehirn Jogging sein.
 
So, dann wollen wir mal wieder zurück zum Thema kommen. :belehren:
Also, wenn ich versuche, mich in eine x-beliebige Programmiersprache ein zuarbeiten. So ist, die erste Aktion, bei Google zu googln, ob es PDF-Dokumente zu der Sprache gibt. Das hilft einem, den ersten Eindruck von der Sprache zu bekommen. Wenn man dann noch die Beispiele, die erwähnt sind, so einigermaßen nach vollziehen kann, so ist der erste Anfangsschmerz gebannt.
Als nächstes such ich mir immer kleine Aufgaben, die ich versuche zu realisieren. Auch da helfen mir bestimmt die PDF-Dateien. Wenn ich aber bisher nicht aufgegeben habe, bzw. ich anfange zu denken: "Was mach ich eigentlich hier?" , dann wird es zeit, sich nach einer anderen Lernmethode um zusehen. dabei haben mir VHS-Kurse auch schon mal geholfen. Ok, sie sind Qualitative nicht gerade hochwertig, dafür stimmt aber auch der Preis, dh. Preis/Leistungsverhältnis ist gerechtfertigt. Der großer Vorteil ist, das ich mit gleich gesinnten zusammen komme.
So, das war jetzt mal meine unqualifizierte Meinung zu dem Thema. :grumble:
Die Jagt ist eröffnet.:D
 
Ein guter Texteditor geht dir nicht auf den Sack.



Aber leider, leider hindert dich daran irgendwer?


Das ich nicht weiß wie ich Befehle finde um sie zu nutzen. Bei C finde ich das besonders krass. Ich habe eine Idee zum Üben und will den 4. Buchstaben einfärben von einem Wort. Wie finde ich die Befehle dazu und wie die Header-Datei? Color? So dann red. Und dann 4. Stelle. Wie finde ich den Befehl für die 4. Stelle?
Wenn ich dann noch die Wörter eines Satzes zählen wollte - wie geht man da vor? Nur so als Übung. Manche oder viele sagen lies Bücher. Toll, aber das hilft nicht um zu verstehen wie ich die Lösung abpacken soll. Mir gehts darum wie finde ich Befehle um mit #include die Datei einzubinden um dann mit dem Befehl zu spielen.
Ich weiß einfach nicht wie ich nach Lösungen suchen muß? Alle die etwas programmieen können wissen das, haben mir das aber noch nie erklärt. Wenn ich den Weg kenne,kann ich das Muster für alle anderen 3000 Befehle anwenden. Aber sosize ich nur rumund weißnicht weiter. Sogeht mir das schon etwa 10 Jahre. Bei Pascal hatte ich die Hilfe bei er IDE oder das kleine bunt gestreifte Buch von Markt und Technik. Aber bei C weißich nicht wie ich den Befehl finde und das macht mich wütend. Irgendwann bin ich 20 Jahre älter und zu alt.

Das hindet mich daran.
 
Um ein Wort teilweise einzufärben, musst du erst mal wissen, wie ein Wort repräsentiert wird. (In der Regel durch ein Array von Buchstaben, ein String ist auch nichts nennenswert anderes als ein umetikettiertes char[].) Dafür brauchst du Programmiergrundlagen. Die stehen in Büchern. Wenn sie in deinem Buch nicht drinstehen, ist dein Buch schlecht.
 
Nun, du kannst C und Pascal nicht vergleichen. Pascal ist viel weiter "nach oben" standardisiert, da sind soweit ich weiß auch GUI Sachen mit in der Standard Library, bei C eben nicht. Ein Ansatzpunkt für dich können etwa die man-Pages zu den header-files sein. Es gibt auch zu vielen, wenn nicht allen, Standardfunktionen man-Pages die dir deren Verwendung erklären. Das nützt dir nur wahrscheinlich nichts, wenn du die zusammenhänge nicht verstehst. Das Standardwerk von Kernighan und Ritchie kann ich dir nur empfehlen, aber die Empfehlung hast du bestimmt schon mal bekommen. Ich habe hier die deutsche Version von 1990 - da ist auch hinten eine Liste an Funktionen der Standardbibliothek drin. Wenn du mehr brauchst, musst du es dir selbst schreiben oder Frameworks benutzen.
 
C ist praktisch nur eine Sprache. Der standardisierte Teil der Standard-Blibiothek ist sehr schlank und beschränkt sich per Design nur auf plattform- und architekturunabhängige Basisfunktionalität. Dinge wie das farbige Ausgeben von Buchstaben liegen damit gar nicht im Fokus, da dort mehrere unportable Dinge ins Spiel kommen. Es geht mit dem Zeichensatz und dessen Codierung los. ASCII, UTF-8, UTF-32 oder doch lieber Shift-JIS? Welches Terminal wird genutzt und auf welche Steuerzeichen reagiert es wie? Zur Abstraktion der Fähigkeiten des Terminal und der Steuerzeichen gibt es unter unixoiden Systemen zwei Systeme. Termcap und Terminfo, die die Anwendung nutzen kann. Natürlich führt es zur Frage, welches der beiden Systeme verfügbar ist. Und was passiert, wenn man kein unixoides System nutzt, stattdessen ein Windows oder ganz etwas anderes? Hinzu kommt, dass man die Cursor positionieren muss, was wiederum von der Größe des Terminals und einigen anderen Faktoren abhängig ist... Natürlich hatten schon andere Personen diese Probleme und sich Bibliotheken geschrieben, die sie lösen. Am Populärsten ist da sicher ncurses.

Was ich damit sagen will ist, dass man beim Programmieren in C nicht einfach eine Sprache lernen kann. Die Sprache selbst bringt einem so gut wie gar nichts. Man muss sich sehr tiefgehend mit der Plattform beschäftigen, auf der man entwickelt. Man kommt nicht umher viel Code selbst zu schreiben, oder sich Bibliotheken zu suchen und diese in das eigene Projekt einzubinden. Bei höheren Sprachen hingegen hat man oft eine deutlich umfassendere Bibliothek, durch die die zugrunde liegende Plattform abstrahiert wird. Das kann auf eher niedrigem Niveau geschehen, wie zum Beispiel bei C++. Java und C# liegen irgendwie im Mittelfeld. Die Kür ist Python, was praktisch zu allem ein Modul mitliefert.
 
Die Kür ist Python, was praktisch zu allem ein Modul mitliefert.
Nur mal als Zwischenfrage - gibt es denn irgendwelche Python-Programme, die hinreichend schnell laufen?
Ich verbinde mit Python immer furchtbar langsames und komplexes Zeug, was meist weder stabil noch schnell läuft. Das letzte war ein Lagerhaltungssystem, was ich mir damit angesehen hatte.
 
Hmm... Es stimmt, Python ist von Haus aus sehr langsam. Aber ob es einfach nur relativ hohe CPU-Last oder gleich Unbenutzbarkeit bedeutet, hängt sehr von den Fähigkeiten der Programmierer ab. Je einfacher eine Sprache wird, umso niedriger sind sie. Und Python ist sehr einfach. Das soll aber nicht heißen, dass jeder Python-Entwickler unfähig ist. Ein Beispiel für ein gutes Python-Programm ist das Zim Desktop-Wiki. Der Sonata MusicPD-Client war früher auch gut, aber das Projekt ist irgendwann überlebt gewesen.
 
Je einfacher eine Sprache wird, umso niedriger sind sie.
Da ist so nicht richtig. Lisp z.B. ist sehr einfach, und dennoch eine High-Level Sprache.

Das Problem mit Python ist neben der Verschwendung von Resourcen dass es nur 1 Paradigma unterstützt was m.E. für das Lernen von Programmierung schlecht ist. Heute gibt es besseren: Lua, Go, Lisp, C# etc pp.
 
Nur mal als Zwischenfrage - gibt es denn irgendwelche Python-Programme, die hinreichend schnell laufen?

Das normale Python ist verdammt langsam, ja. Aber wenn du nur normales Python schreibst und keine C-Bibliothekten einbinden willst, dann kannst du das Programm oft auch einfach mit pypy und Konsorten starten. Bei mir gingen so die Laufzeiten von Algorithmen von einer Minute auf 10 Sekunden runter. Das ist zwar immer noch 10x langsamer als die C++ Variante bei mir, aber schon eine Besserung.

Blender nutzt ja auch Python für seine Oberfläche. Finde ich recht gut, dass man dadurch frei Haus die gesamte GUI per Python-Skript steuern kann.

Ansonsten ist Python für mich ein *sh Ersatz weil ich die ganzen Shell-Skript Sprachen so absolut gar nicht leiden kann.
 
Als Shellscripting-Ersatz ist Perl doch die bessere Wahl. Python hat eine grauenhafte Syntax, Einzeiler zum Beispiel gehen nicht.
 
Als Shellscripting-Ersatz ist Perl doch die bessere Wahl. Python hat eine grauenhafte Syntax, Einzeiler zum Beispiel gehen nicht.

Naja, Syntax ist ja nun Geschmackssache. Mir geht es mehr darum, dass ich mich nicht mit Leer- und Sonderzeichen rumschlagen muss, wenn ich Batch-Verarbeitung machen will. Und dazu nehme ich halt dann Sprachen welche ich kenne. Nur dafür in Perl einarbeiten was ich sonst nirgendwo brauche wäre auch reichlich Zeitverschwendung.

Wenn ich einfach nur zwei Befehle aufrufen will nehme ich natürlich einfach die Shell. Nur alles komplexere wird dann per Python gemacht.
 
Dass das in Shell-Dialekt XYZ vllt. einfach geht mag ja sein, aber nehmen wir mal sh oder bash, dann wird das echt eklig. Aufpassen, dass man artig " benutzt hat... noch vorsichtiger sein wenn man Strings aufsplitten will...

Alleine schon, wenn du deine Festplatte nach Dateien durchsuchen willst und daraufhin irgendwas machen willst mit den Daten. Da musst du ja schon aufpassen, dass du von den 3000 möglichen Varianten die richtige nimmst. Nämlich find -print0 | xargs -0, weil dir das sonst bei irgendwelchen Sonderzeichen die Daten schreddert, je nachdem was man tun will. Und da hab ich dann zuweilen einfach keine Lust drauf, besonders wenn es dann noch mit Bedingungen usw. weiter geht.

Und da schließe ich die kleinen aber feinen Unterschiede zwischen dem BSD-Userland und dem GNU-Userland noch gar nicht mit rein. Dort ist es der Parameter -p, hier ist es der Parameter -u, das kann das BSD Variante nicht, das kann die GNU Variante nicht etc. pp.
 
Das ist in sh doch gar kein Problem. Das einzige was unangenehm ist sind Dateinamen mit \n.

Ich hatte damit massive Probleme. Nicht nur bei \n. Es ging z.B. einfach darum von jeder Datei auf dem Server eine Checksunme zu berechnen:
find /tank/ -type f | xargs shasum -a 512 -b >> ~/sum.sha512

ging schon mal nicht. Die Variante über find -exec war noch schneller hinüber.

Ich weiß nicht mehr was alles für Zeichen Stress gemacht haben, aber es war nicht nur \n. Hier muss man dann explizit -print 0 | xargs -0 nehmen, damit das alles klappt. Oder (nicht bei dem Beispiel) dass man irgendwie IFS korrekt setzen muss, damit Leerzeichen nicht dazu führt, dass es zwei Parameter werden usw. usw.

Sicherlich ist das für jemanden der schon massiv Erfahrung in Shell-Skripting hat alles kein Problem, aber ich bin dann doch lieber der string.split each do Typ :D
 
Kann sein dass es ein Bug war, kann sein, dass es doch irgend ein Steuerzeichen war. Ich kann das jetzt leider auch nicht mehr so ganz nachvollziehen, da ich vor einiger Zeit mittels Tool bzw. mehrere Tools über Pipes die Dateinamen "aufgeräumt" habe. Jedenfalls hatte ich da echt arge Probleme, bis ich endlich das mit -print0 | xargs -0 gefunden hatte. Also Probleme in der Hinsicht "File not found".

Ist ja auch nur ein Beispiel. Wenn man jetzt mittels Liste in einer Textdatei etwas machen will, dann ist das auch oft eine sehr lange Pipe-Kette je nach Datei. Wenn dann auch noch Bedingungen / Verzweigungen rein sollen.. puh... ne.. -> Python :D
 
Ich denke hier kommt es dann wieder zu der Stelle: "Jeder nimmt dass Werkzeug, welches IHN am schnellsten zu SEINEM Ziel führt" :)

Benutze Python auch für alles was dauerhaft laufen muss. Den Code kann ich nach Monaten noch sauber lesen und verstehen. Einmal vi sauber eingerichtet schlage ich mich weder mit Leerzeichen noch irgendwas anderem rum.

Performance reicht bisher für alles aus - Auswertungen laufen dann halt mal 30 Sekunden länger. Bei zeitkritischen Teilen könnte man dann entsprechend das "Werkzeug wechsel" oder Python mit C kombinieren.

Gruß
Markus
 
Zurück
Oben