Hey Leute,
ich suche nach einer oder mehreren Seiten wo man gute Übungen zur C
Programmierung findet (kein Embeded C für Mikrocontroller).
Gerne auch Mathematisch/Numerisch angehaucht!
Falls jemand eine Buchempfehlung hat, würde ich mich auch freuen.
Tutorials usw habe ich bereits durch, suche explizit
Übungsaufgaben/Projekte um mein Wissen anzuwenden und zu vertiefen :)
Wie habt ihr euer können gesteigert?
(Kleine Info : Ich bin Studentin 20, im 1. Semester Elektrotechnik)
Ich danke euch schonmal für eure Tipps!
Anwendungen bei denen ich viel gelernt habe war die Aufbereitung von
Messdaten.
Entweder per Pipe oder Datei in das Programm. Ergebnisse wieder in Datei
oder Pipe.
Sortieren, filtern, min, max , median u.s.w.
Daten in Klassen sortieren. Statistik.
Im K&R2 sind sehr viele Übungen. Genauso in dem Buch "C als erste
Programmiersprache". Beide solltest du in der Bib finden. Online gibt es
jede Menge "Rätselseiten" wie "Train your Programmer" oder "Projekt
Euler".
Gruß
Dennis
Nina schrieb:> Wie habt ihr euer können gesteigert?
Ich habe mir zum Anfang ein Übungsprojekt ausgedacht, ein C-Buch gekauft
und losgelegt. Ich konnte damals aber schon Pascal, und meine
Hauptfragestellung war "wie sage ich das jetzt in C".
Du könntest ja für den Anfang ein Damespiel schreiben, mit
Computergegner. Das Spiel an sich ist zwar quasi gelöst, jedenfalls in
der amerikanischen Variante, aber zu Übungszwecken wäre es ein nettes
Projekt.
Das Buch war "Programmiersprache C". Von wem, weiß ich nicht mehr.
Besonders gut war es nicht, hat aber seinen Zweck erfüllt.
Nina schrieb:> Wie habt ihr euer können gesteigert?
Fremden Code anschauen und verstehen
Fehler in fremdem Code finden
Erweiterungen und Verbesserungen in fremdem Code vornehmen
Open Source projekte ansehen
Also mit C würde ich nicht unbedingt anfangen. Was mir Anfangs oft
passiert ist, waren Fehler bzgl. Arraygrenzenüberschreitung. In vielen
Programmiersprachen (Rust, Java, Go, Python, C#, etc.) bekommst du hier
eine Fehlermeldung wenn so etwas passiert, in der auch drinsteht, in
welcher Programmzeile das ganze passiert ist. In C/C++ stürzt entweder
das Programm ab oder du bekommst keine Fehlermeldung und einfach ein
falsches Ergebnis. Auch das mit der dynamischen Speicherverwaltung
(Memory Leaks) ist ein Problem.
In meinen Augen ist C nicht mehr wirklich zukunftsfähig. Es gibt bereits
Alternativen wie z.B. Rust. Rust kommt ohne Garbage Collection und
Laufzeitumgebung aus, bietet aber trotzdem Schutz vor Memory Leaks,
Overflows, Dangling Pointer, etc. (ist also sicher). Man könnte damit
theoretisch also auch Mikrocontroller programmieren (Rust hat ein LLVM
Backend). Rust wäre also auch zum Einstieg empfehlenswert. Hier gibts
halt auch schon ein in die Sprache integriertes Framework zur
Dokumentation, Testen, Benchmarks, Modularität, etc.
Also wenn es wirklich nur ums prinzipelle programmieren lernen und
Algorithmen geht, dann würde ich eine andere Sprache als C empfehlen!
Tasg schrieb:> In meinen Augen ist C nicht mehr wirklich zukunftsfähig.
Das ist natürlich Blödsinn, da eine Zukunftsfähigkeit doch von sehr viel
mehr Faktoren abhängt.
Nina schrieb:> kein Embeded C für Mikrocontroller
Schade, denn gerade Ablaufsteuerungen sind sehr interessant und schulen
einen, die vielen parallelen Aufgaben sinnvoll in einzelne Tasks zu
unterteilen.
Außerdem schulen sie, fehlertolerant und sorgfältig zu programmieren.
Bei ner Steuerung gibt es keinen, der Strg^C drücken kann und neu
startet. Die muß von selber aus jedem Fehlerzustand rausfinden.
PC-Programme sind dagegen nur langweilig: Eingeben - Verarbeiten -
Ausgeben - Fertig. Da lernt man nicht viel, alles nur der Reihe nach
hintereinander klatschen. Echtzeitanforderungen, nie gehört.
@ Peter: Bevor man sich mit Steuerungen und Echtzeit herumschlägt,
sollte man schon überhaupt erstmal C an sich lernen, als Handwerkzeug.
Zumal man auf dem PC weitaus besser debuggen kann. Das ergibt schon Sinn
so, wie der OP das vorhat.
Tasg schrieb:> Also mit C würde ich nicht unbedingt anfangen. Was mir Anfangs oft> passiert ist, waren Fehler bzgl. Arraygrenzenüberschreitung. In vielen> Programmiersprachen (Rust, Java, Go, Python, C#, etc.) bekommst du hier> eine Fehlermeldung wenn so etwas passiert, in der auch drinsteht, in> welcher Programmzeile das ganze passiert ist. In C/C++ stürzt entweder> das Programm ab oder du bekommst keine Fehlermeldung und einfach ein> falsches Ergebnis.
Dafür gibt es tools, die doch einigermassen brauchbar sind. Ich finde,
wenn man ein paar Stunden Geisterfehler zurückverfolgen muss,
hinterlässt das einen viel grösseren Eindruck als wenn man gleich die
Fehlermeldung bekommt. Dann hat man nachher nicht einfach nebenbei ein
Array um eins vergrössert und vergisst das wieder, sondern weiss ganz
genau was passiert ist. Und dann werden diese Fehler schnell selten.
> Auch das mit der dynamischen Speicherverwaltung (Memory Leaks) ist ein Problem.
Das Problem haben auch sprachen mit garbage collection. Bei denen muss
jede referenz unzugreifbar/gelöscht sein, je nach komplexität des gc.
Wenn man nur eine Referenz vergisst auf null zu setzen (kann auch
implizit sein), bläht sich das Ding auf. Und dann muss der gc bei vielen
neuen und verworfenen Objekten auchnoch mithalten können. Und dann diese
Unterbrücke und Performanceverschwendung durch den gc... Bei C und C++
ist das doch viel besser: man kann den speicher so verwalten, wie es
sinvoll ist, ohne nichtdeterministische Speicherfreigaben, zufällige
unterbrüche, und unnütze heapverschwendung.
Hallo, ich bin sehr offt Unterwegs, und wollte Programmieren lernen, da
die Zeit offt fehlte musste sich was ändern mag jetzt wie Werbung
klingen aber ich habe mir Sololearn angeschaut ist zwar in Englisch aber
du kannst am Smartphone lernen wo du bist mann kann sogar das Ganze
Paket für Offline lernen runterladen, wenn du mal keine
Internetverbindung hast. Habe dadurch c# und c++ sattelfest gelernt,
weil es wirklich die Basics Idotensicher erklärt und nicht wie die
ganzen anderen Tutorials penetrant mit Fachsprache umsichwerfen.
Wichtig:
-Definiere dein Ziel
-Was benötigst du um dein Ziel zu erreichen, dass kannst du von
Fachkundigen beantworten lassen, formuliere aber die Frage so dass das
Ziel nicht die Antwort ist, weil du weist ja schon dein Ziel.
- Lass dich nicht vom Weg abringen, es gibt viele Besserwisser da
draußen.
Du wirst automatisch in deiner Materie besser wenn du dich damit
ausführlich befasst und am Ende bist du darin ein Spezialist und dass
ist gefragt.