Frage zu C Einstieg

Status
Für weitere Antworten geschlossen.
Ja, hast du recht, das Problem ist nur, um Rekusion zu verstehen muss man Rekursion verstehen.
Aber kommen gleich bestimmt Leute, die dann sagen, dass man in einer syntaktisch hochkomplexen Sprache für Systemprogrammierung nichts gefährliches wie Rekursion machen darf, weil das ja zu einem Stackoverflow führen könnte.

OT: Schade, hatte gehofft, ich sehe jetzt hier eine schöne Version mit Modulo.
 
tollertyp schrieb:
dass man in einer syntaktisch hochkomplexen Sprache für Systemprogrammierung nichts gefährliches wie Rekursion machen darf, weil das ja zu einem Stackoverflow führen könnte.
Die Vorgehensweise ist didaktisch extrem suboptimal. Aber können wir ja schlecht dem Threadstarter zur Last legen, der ja nur Wirtschaftsinformatik studieren will, aber jetzt aus irgendeinem Grund Systemprogrammierung ohne Vorkenntnisse lernen muß. Idealerweise beherrscht man Konzepte wie Rekursion bereits, wenn man sich mit dem Stack beschäftigen muß, weil der Compiler das eben verlangt. Lernen funktioniert nur aufbauend, man kann nicht den zweiten Schritt vor dem ersten Schritt machen.

C ist mit dem Ziel entworfen worden, es dem Compiler möglichst einfach zu machen. Deshalb ist die Syntax nicht auf eine möglichst gute Lesbarkeit optimiert, sondern sollte seinerzeit Profis das Erstellen von Compilern möglichst vereinfachen. Viele C-Idiome sind auch schlicht eine Erbe der Rechner-Architektur, die die Ersteller des ersten C-Compilers zur Verfügung hatten, inklusive der Präfix/Postfix-Operatoren. Das macht die Sache eher ungeeignet für Programmieranfänger.
 
Nein, er lernt nicht Systemprogrammierung. Eine Programmiersprache sagt nichts über ihr Einsatzgebiet aus - jetzt kann man argumentieren, dass es Sprachen gibt, die quasi nur ein Einsatzgebiet haben könnten, so wie früher ein JavaScript oder so. Das ist schon richtig, aber gleichzeitig zeigt das Beispiel JavaScript, dass es keine Limitierung der Sprache ist.

Lange Rede, kurzer Sinn: Die Sprache sagt wenig über den Verwendungszweck aus.

Wechsler schrieb:
Viele C-Idiome sind auch schlicht eine Erbe der Rechner-Architektur, die die Ersteller des ersten C-Compilers zur Verfügung hatten, inklusive der Präfix/Postfix-Operatoren. Das macht die Sache eher ungeeignet für Programmieranfänger.
Manche würden sagen, dass es sie deshalb so geeignet macht, weil sie halt nicht alles abstrahiert. Alles eine Frage der Perspektive. Wenn es um das Lernen von Programmieren geht, geht es am meisten um das Lernen von Konzepten und Denkweisen. Nehmen wir diese Beispiele - ob das in C, C++, Java, JavaScript, Go gemacht wäre, würde alles wenig dran ändern, dass der TE schon "Probleme" hatte sein Problem zu verbalisieren.

Ach ja, ironischerweise war die Sprache vorher noch hochkomplex, dafür habe ich nach wie vor keine Anhaltspunkte von dir bekommen. Oder blöd gefragt: Was macht eine Sprache denn komplex?
Assembler ist meiner Meinung nach alles andere als komplex, aber ist es damit einfacher?
Alles eine Frage der Perspektive.
 
Hätte noch eine weitere Frage.
Wieso könnte das Ausführen von Programmen über Kommandozeile so lange dauern?

Ich schreib den Code in Notepad++
Abgespeichert wird der Code im .C Format

Dann über cmd die Windows Eingabeaufforderung öffnen
Als Compiler verwenden wir den GCC Compiler
Zb erstelle ich die Übungsaufgabe Aufgabe1.c
Der Compilierbefehl lautet dann gcc Aufgabe1.c -o Aufgabe1

Dazu sollen wir -ansi -pedantic -Wall und -Wextra verwenden
Das Kompilieren klappt in Sekundenbruchteilen

Wenn ich dann aber das Programm über die Eingabeaufforderung öffne, dauert es ewig, bis die Ausgabe kommt. Selbst bei so einem einfachen Programm wie printf("Hello world"); dauert es locker 15sek vom Aufruf des Programms bis zur Ausgabe "Hello world" in der Kommandozeile

Ist das normal? Im Video vom Dozenten kommt die Ausgabe sofort nach Aufruf
Woran könnt das liegen?
 
Sollte definitiv nicht so sein. Die Ursache kann ich dir auch kaum sagen.
 
  • Gefällt mir
Reaktionen: Ensinger
Hab hier leider nur mein Laptop. In der Heimat hätte ich noch einen Rechner, dann hätte ich vergleichen können. Dachte evtl liegt es am Compiler, aber der erledigt die Arbeit sofort. Nur beim Aufruf des Programms dauert es lange, da hat ja der Compiler sicher nichts mit zu tun

Nervt ^^
 
Könnte es am Antivirus Programm liegen? Das prüft erstmal jedes neue Programm? Und wenn es durchgeht läuft es schneller? Weil dauert immer nur nach dem ersten Öffnen 10-15 sekunden. Danach kommt die Ausgabe bei erneutem Aufrufen sofort
 
Das kann schon sein, ja. Kannst ja testweise den Ordner wo die .exe liegt mal whitelisten.
 
@Ensinger Wie rufst du denn das Programm auf? Mit Pfadangabe oder hast du das übergeordnete Verzeichnis in den Systempfad eingetragen und rufst nur mit Namen auf? Dann könnte ich mir evtl. vorstellen, dass beim ersten Aufruf erstmal gesucht werden muss, wo das Programm liegt. Auf welchem Betriebssystem bist du denn eigentlich unterwegs?
 
Kurze Frage: Die Aufgabenstellung lautet, man soll eine Funktion upper_array(char v[], char w[], int size) implementieren. Diese soll zuerst prüfen, ob das Feld v nur lateinische Buchstaben enthält. Wenn das so ist, werden alle Zeichen in v in Großbuchstaben umgewandelt und in w an die gleiche Indexstelle, wie in v kopiert und am Ende 0 zurück gegeben.

Wenn v Zeichen enthält, die nicht Buchstaben sind, dann soll die Funktion 1 zurückgeben.
Habe das jetzt so "gelöst":

Code:
int upper_array(char v[], char w[], int size)
{
    int i;
    for (i = 0; i < size; i++) {
        if (isalpha(v[i])) {
            v[i] = toupper(v[i]);
            w[i] = v[i];
        } else {
            return 1;
        }
    }
    return 0;
}

Das klappt soweit. Hab Testweise ein Feld mit 'H', 'a', 'l', 'l', 'o' übergeben und es wurde nach funktionsaufruf HALLO daraus. Allerdings prüfe ich parallel, ob der jeweilige Index ein Buchstabe ist, mache ihn gleichzeitig zu einem Großbuchstaben und kopiere ihn ebenfalls gleichzeitig an den entsprechend gleichen Index im Feld w.

In der Aufgabenstellung steht aber, man soll zuerst prüfen, ob das Feld v nur aus Buchstaben besteht und DANN in Großbuchstaben umwandeln und kopieren. Bestimmt ist es total einfach das zu implementieren, aber ich komm einfach nicht drauf
 
Es wurde genug geholfen.

reaper-clipart3328304.png
 
Status
Für weitere Antworten geschlossen.

Ähnliche Themen

Zurück
Oben