Hallo, heute begann das 2te Ausbildungsjahr in der HTL für mich, Schwerpunkt: Elektronik, sowie Programmieren... in der 1. Klasse hatte ich einen Professor der uns in einem Jahr die while und die do- while Schleife beibrachte, da unsere Klasse geteilt war, hatte die andere Gruppe einen "richtigen Programmierer" als Lehrer und kamen daher viel weiter als wir...Dieses Jahr haben wir "IHN".. darum will ich mein Wissen erweitern. Daher meine Fragen: Wie funktioniert eine for- Schleife in C? Welche Möglichkeiten gibt es für eine Programmwiederholung??? Wie kann man einen "Zufallsgenerator" programmieren? Welche Aufgabe(n) haben Compiler, Debugger, Linker... und was es da sonst noch gibt?? Was ist char, int, long in, float, also Zahlenbereiche.. wie weit gehen diese. So, das wären mal die ersten Fragen. Danke schon mal im Voraus PS: Bitte, ich hatte gerade mal 1 Jahr AINF, also bitte nicht ZU kompliziert beantworten.
haha,.... danke jedenfalls, falls ich was nicht verstehe oder so, schreibe ich hier ma wieder was lG:Thomas
> Was ist char, int, long in, float, also Zahlenbereiche.. wie weit gehen > diese. Das ist leider eine ganz fiese Frage, denn die minimal verlangten Zahlenbereiche sind im Standard sehr kompliziert festgelegt. Die tatsächlichen Zahlenbereiche sind auf jedem System anders. Nur als Beispiel, ein int auf einem AVR-Mikrocontroller geht bis 32767. Auf üblichen 32-Bit-PCs wäre die Obergrenze aber 2147483647. Präzise Grenzen kann man immer nur für ein bestimmtes System angeben, also eine bestimmte Architektur mit einem bestimmten Compiler.
Hallo, Die sprach C liefert in seinen Bibliotheken,welche Du über den Befehl include einbinden kannst, eine Methode sizeof, mit der Du die größe des Datentypen anzeigen lassen kannst. Es ist korrekt, dass auf die größe der Datentypen auf verschiedenen Rechnersystemen bzw. Compiler unterschiedlich ist. Entscheident für den Anfang ist aber dass Du die Funktionsweise der Elemente verstanden hast. Was die for-Schleife angeht, ist diese schnell erklährt. Sie ist wie folgt aufgebaut: for(int i = 0; i < 10 ; i++) { } Hier kommt es au den Kopf ("for(...)") an. - int i = 0 bedeutet, dass eine Zählervariable initiallisiert wird. Diese hat nun beim eintritt in die Schleife den Wert 1. - i <10 Nun wird die Abbruchbedingung geprüft - hier wird nun geschaut, ob die Bedingung i < 10 auf Wahrheit geprüft. Ist diese Wahr läuft die Schleife weiter. - i++ der Schleifenzähler (die Variable i) wird um den 1 erhöht. - {...} Dies solltest Du schon aus den while und do - while Schleifen kennen, ist der Schleifen Block in dem Du die zu wiederholende Aktion rein schreibst. Wenn i den Wert 10 erreicht hat, bricht die Schleife ab. Das Abbrechen, kannst Du auch vorher mit dem Befehl "break" verursachen.
Axel S. wrote: > Die sprach C liefert in seinen Bibliotheken,welche Du über den Befehl > include einbinden kannst, Falsch. #include zieht den Inhalt einer anderen Datei (die typischerweise als sogenannte Header-Datei für Definitionen benutzt wird) an der entsprechenden Stelle in die aktuelle Übersetzung ("translation unit") als 1:1-Kopie mit hinein. Es bindet keine Bibliotheken ein. Das macht der Linker. > eine Methode sizeof, sizeof gehört zu keiner Bibliothek, sondern ist ein Operator des Compilers. Als solcher muss er nicht extra deklariert werden, sondern ist jederzeit verfügbar. Übrigens gilt per definitionem, dass sizeof(char) gleich 1 ist -- egal, wie viele Bits zur Implementierung des Typs char benutzt werden. Das sind zwar meistens 8, das ist aber keinesfalls zwangsläufig so. Dem Hörensagen nach gibt es auch Umgebungen, bei denen selbst char ein 32-bit-Typ ist. Bei denen gilt dann sizeof(char) == sizeof(int) == sizeof(short) == sizeof(long) = 1. Allerdings ist das zugegebener Maßen ein eher exotischer Fall.
Hallo, @Axel S.: ich habe mal gelesen das bei der for Schleife, das Erweitern der jezeiligen zahl erst nach einem Durchlauf geschieht.... for(y=1;f<=5;a++) geht das???????? eine Frage: #include... usw erspare ich mir... while(x<=10) { if(x<=5) { break; } } das ist jetzt kein sinvolles Programm aber meine Frage: wird nur die if Abfrage oder die if- Abfrage und die while-Schleife durch das break vorzeitig abgebrochen???? @Jörg Wunsch: das mit dem sizeof(z.B:int) habe ich schon gelesen aber wie geht das das man sich die Zahlenbereiche ausgeben lassen kann?? #include<?????> . . . . printf("%d und %d", INT_MIN, INT_MAX); welches include file braucht man da??? und wie geht das bei float, double,.......????? es gibt ein Programm, das die ASCII Tabelle ausgibt..???? wie sieht das aus??????????? @alle: inzwischen kann ich folgendes: eingabe ausgabe( printf.....) if, bedingter Ausdruck, switch case, while, do while, for, && und || und ! Operatoren, #define kenn ich schon, \a, \n... kenn ich alle, wie zahlen ausgegeben werden können( ich meine %d, %x, %f...); funktioniert z.B . . . . HALLO : ....... . . . . . . . goto HALLO; . . . geht..also das es dann wieder rauf springt falls es zum goto Befehl kommt??? continue... beendet den aktuellen Schleifendurchlauf exit.......beendet das programm break.. beendet schleife und if oder?????????????? return?????????????? return0??... ende des Programms????????????? Dann hab ich schon mal ein Grund wissen.. oder? schaut mal welche Fragen ihr mir beantworten könntet... lG:Thomas
>wird nur die if Abfrage oder die if- Abfrage und die while-Schleife >durch das break vorzeitig abgebrochen???? IF ist keine Schleife. break bricht nur Schleifen ab!
1 | while(x<=10) |
2 | {
|
3 | if(x<=5) |
4 | {
|
5 | break; |
6 | }
|
7 | }
|
Das ist übrigens eine Endlosschleife. Da x nirgend verändert wird. >das mit dem sizeof(z.B:int) habe ich schon gelesen aber wie geht das das >man sich die Zahlenbereiche ausgeben lassen kann?? Garnicht. Die solltest du wissen. 0..(2^N)-1 für unsignd, und -(2^N)..+(2^N)-1 für signed. N ist die Anzahl der Bits des Datentypes. >ASCII Tabelle ausgibt..???? ASCII ist nur eine andere Interpretation des Inhalts eines (unsigned)char-arrays (u8). >goto Befehl Du solltest dir angewöhnen, ohne goto auszukommen. Das (wilde Rumgespringe) erzeugt nur Spaghetticode. >return beendet das aktuelle Unterprogramm (vorzeitig). Ein Wert/Variable hinter return ist dann ein Rückgabewert. >exit siehe oben. exit beendet nur die innerste Schleife, mehr nicht!
Jörg Wunsch wrote: > Dem Hörensagen nach gibt es auch Umgebungen, bei > denen selbst char ein 32-bit-Typ ist. Bei denen gilt dann > sizeof(char) == sizeof(int) == sizeof(short) == sizeof(long) = 1. Huh? Du meinst doch sicher sizeof(char) == sizeof(int) == sizeof(short) == sizeof(long) = 4
Chris wrote: > Nur als Beispiel, ein int auf einem AVR-Mikrocontroller geht bis 32767. > Auf üblichen 32-Bit-PCs wäre die Obergrenze aber 2147483647. Beim GCC (bei anderen Compilern sicher auch) kann man sogar noch festlegen ob signed oder unsigned als default verwendet wird (Wenn keine signedness angegeben wird). Unter Umständen kann der int auf dem AVR mit dem GCC und der avr-libc dann bis zu 65535 zählen. EDIT: Nein, das stimmt auch nicht, was ich erzählt habe. Ich glaube der C-Standard schreibt signed als default vor, außer beim char. Da lässt es sich aber per Kommandozeilenparameter einstellen.
>for(y=1;f<=5;a++) geht das???????? Sollte ueberall gehen, macht aber kein Mensch so. Was manchmal Sinn macht ist sowas wie for(int i=0, int j=0; i < 10, data[i] != 0; i++, j+=2) Oder so...nur als Beispiel. Man kann also mehrere Definitionen fuer Start, Abbruch, Inkrement angeben. Ich weiss aber jetzt nicht, ob das alle C Compiler koennen oder nur manche bzw. nur C++. while(x<=10) { if(x<=5) { break; } } <- mit dem Programm gehts nach break hier weiter. >printf("%d und %d", INT_MIN, INT_MAX); >welches include file braucht man da??? >und wie geht das bei float, double,.......????? Schau doch mal in ein C-Buch oder in die links, die oben bereits genannt sind. Das ist normalerweise der erste Befehl den man lernt. Und dann printf anschauen. >http://info.baeumle.com/ansic.html Das sieht mir ganz gut fuer den Anfang aus. Linke Seite durcharbeiten. >es gibt ein Programm, das die ASCII Tabelle ausgibt www.google.de -> ascii Und der Rest...nachlesen! Und nicht nur lesen sondern auch kompilieren und testen. Dann lernst Du es am schnellsten. GCC z.B. gibts umsonst. Heb Dir Deine ersten Versuche auf indem Du Dein Programm succesive erweiterst. Das kannst Du dann spaeter als Referenz nehmen.
> Huh? Du meinst doch sicher > > sizeof(char) == sizeof(int) == sizeof(short) == sizeof(long) = 4 Nein, Jörg hat Recht, sizeof(char) ist per Definition immer 1. Nur was das System unter "1 Byte" versteht, variiert. Es gibt wohl Systeme, bei denen "1 Byte" volle 32 Bits hat. Dann wäre es durchaus sinnvoll, wenn char, int, short und long alle genau 1 "Byte" groß sind, weil das eben 32 Bit sind.
hallo, @ lippy das mit dem 2^n... das man z.B mit 2 Byte=16 bit= 2^16 Zustände....erreichen kann ist mir schon klar. Das das eine Endlosschleife ist weiß icch schon, wolte nur nichts anderes reinschreiben weil ich nur wegen des breaks fragen wollte break ist also gleich wie exit, oder???? und return, beendet in meinem beispiel ,mit while und if ,also nur die if Abfrage(abgesehen dsa das eine Endlosschleife ist...), oder??? Was is ein Rückgabewert?? sorry lG:Thomas
oh, noch was: http://info.baeumle.com/ansic.html hab ich bis einschließlich Kapitel 6 durchgelesen, habe aber jetzt ein anderes "Tutorial" gefunden, das wie ich glaube nicht so detailliert ist.
Datentypen in C Aus Kernighan/Ritchie, Programmieren in C Beschribungen zur for-Schleife findet man milionenfach im Netz
>Was manchmal Sinn macht ist sowas wie >for(int i=0, int j=0; i < 10, data[i] != 0; i++, j+=2) das ist unfug ... i < 10, data[i] != 0 i<10 wird nicht beachtet! i < 10 && data[i] != 0 so ja
> Was manchmal Sinn macht ist sowas wie > for(int i=0, int j=0; i < 10, data[i] != 0; i++, j+=2) Der Komma-Operator hat in der Bedingung einer Schleife nichts zu suchen. Mit solchen "Unschönheiten" verdienen Leute, die Tools zu "statischen Codeanalyse" schreiben, ihr Geld. Wer einmal einen solchen Fehler gemacht und 1 Woche später gefunden hat, findet es dann echt toll, dass es Firmen wie z.B. Coverity diese Schludrigkeiten automatisch finden. Was macht z.B. dieser Code:
1 | int z = 0; |
2 | float i; |
3 | for( i=0,0; i < 10,0; i+=1,23 ) { |
4 | z += (int)i; |
5 | }
|
Welchen Wert hat z am Programmende?
Lothar Miller wrote:
> Welchen Wert hat z am Programmende?
0, die Schleife wird nie abgearbeitet.
Hi, ich möchte nicht unhöflich sein aber bitte... könntet ihr die Fragen von meinem letzten Beitrag beantworten??? lG:Thomas
in deinem letzten beitrag waren doch gar keine fragen... http://www.google.de/search?&q=r%C3%BCckgabewert
Thomas G. wrote: >break ist also gleich wie exit, oder???? Nein, mit break wird die aktuelle Schleife abgebrochen und das Programm nach der Schleife weiter ausgeführt. Exit beendet das Programm. > und return, beendet in meinem Return beendet die aktuelle Unterroutine. Wenn das return in main() steht, wird das Programm beendet. > Was is ein Rückgabewert?? sorry Bei return(56); ist 56 der Rückgabewert, bei return(i); ist der Wert von i der Rückgabewert usw. usf. > ich möchte nicht unhöflich sein aber bitte... könntet ihr die Fragen von > meinem letzten Beitrag beantworten??? Den haben Kernighan und Ritchie in ihrem Standardwerk "Programmieren in C" (ISBN 3-446-15497-3) schon recht ausführlich beantwortet. Dieses Buch solltest du dir unbedingt zulegen, da sind deine Fragen beantwortet.
Lothar Miller wrote: Nur als Randbemerkung: > Bei > return(56); > ist 56 der Rückgabewert, bei > return(i); > ist der Wert von i der Rückgabewert usw. usf. return ist kein Funktionsaufruf. Manche Leute mögen die Klammer- schreibweise zwar, aber man kann genauso gut auch schreiben:
1 | return 56; |
2 | ...
|
3 | return 2 * i * i; |
hallo, warum soll ich faul sein???? ich weiß worums geht, aber Einzelheiten und Spezialfälle kann man nirgends nachlesen. lG:Thomas @Pedda: Wer bist du, kenn ich dich???
> ...Einzelheiten und Spezialfälle kann man nirgends nachlesen...
waahaaahaha!!! Schon klar, ein Rückgabewert is ein Spezialfall. Und
darüber gibts auch nirgends was geschrieben :D
Du bist echt lustig ;)
@thomas g. (Gast) >heute begann das 2te Ausbildungsjahr in der HTL für mich, Schwerpunkt: >Elektronik, sowie Programmieren... in der 1. Klasse hatte ich einen >Professor der uns in einem Jahr die while und die do- while Schleife >beibrachte... Ein ganzes Jahr für "while" und "do while" Schlaufen? Weit bist Du da wirklich nicht gekommen, das ist der Stoff für 2..4 Lektionen. Aber noch vor den Schlaufen sind etliche Grundlagenkentnisse wie Synthax, Datentypen, Grundoperationen, Zuweisungen, Vergleiche etc... unbedingt erforderlich, hier scheinst Du nicht viel mitgekriegt zu haben. Ob's am Prof. oder an Dir liegt sei dahingestellt, aber ich frage mich trotzdem: Was ist das für ein HTL? Gruäss Peter
thomas g. wrote: > ich weiß worums geht, aber Einzelheiten und Spezialfälle kann man > nirgends nachlesen. Also das ist nun aber wirklich lachhaft. Erstens betreffen deine Fragen keine "Einzelheiten und Spezialfälle", das sind Grundlagen. Zweitens kann man das nun wirklich überall nachlesen.
Jörg Wunsch wrote: > > Übrigens gilt per definitionem, dass sizeof(char) gleich 1 ist -- > egal, wie viele Bits zur Implementierung des Typs char benutzt > werden. Das sind zwar meistens 8, das ist aber keinesfalls > zwangsläufig so. Dem Hörensagen nach gibt es auch Umgebungen, bei > denen selbst char ein 32-bit-Typ ist. Bei denen gilt dann > sizeof(char) == sizeof(int) == sizeof(short) == sizeof(long) = 1. > Das ist korrekt so. Auf 32-bit breiten DSPs (z.B. TMS320C31, ADSP21020, zugegeben sehr alt, aber in der Raumfahrt sehr beliebt da strahlungsfest verfügbar) ist das der Fall. Die kleinste Einheit, die diese adressieren können, ist ein 32-bit Wort. D.h. ein Adressinkrement um 1 erhöht um 32-bit im Speicher. Das ist dann auch bei char pointern so. Ein Zeichen belegt dort 32 bit. > Allerdings ist das zugegebener Maßen ein eher exotischer Fall. Ein TMS320C3x war nicht soo exotisch. Hast Du dann eher wenig mit zu tun gehabt. :-)
hallo, also wisst ihr: wenn man gerade mal 10 Monate pro Woche nicht mal 1,5 Std ainf hat, und von diesen 10 Monaten gerade mal 4 zum programmieren verwendet hat, und man vorher noch nichts programmiert hat.... nachlesen kann man ALLES, aber wenn einem die Frage von wem beantwortet wird ist das 10 Mal besser lG:Thomas
@ thomas g. > wenn man gerade mal 10 Monate pro Woche nicht mal 1,5 Std... Nein, die Rechnung ist falsch. Ein Tag hat 24 Stunden, und nur einen Bruchteil davon gehst du in die Schule. Entwicklungsumgebungen gibts für lau, und Bücher in der Bibliothek genauso. Viele lernen etwas, indem sie es einfach tun z.B. auch nach Schulschluss/Feierabend. So solltest du das sehen, das bringt dich weiter ;-) > wenn einem die Frage von wem beantwortet wird ist das 10 Mal besser... Aber nur, wenn man sich vorher schon selber ein klein wenig den Kopf darüber zerbrochen und ein paar Sackgassen ausprobiert hat.
Hallo, das ist sicherlich richtig was du sagst, ich habe auch zuhause geübt, aber weißt du, wenn man andere Fächer auch noch hat findet man keine Zeit, ich will nicht sagen dass man keine Zeit hat, aber was soll man programmieren? 5- Zeilen programme mit 1 if Abfrage????? mit der Zeit, wenn man einiges kann dann kann man auch was anfangen mit seinen Programmierkenntnissen.. Ich lese auch Tutorials zu C und sowas, aber um wirklich das Programmieren zu vertiefen fehlen mir noch die Kenntnisse, und um diese über Skryten usw. zu bekommen, das ist doch dann schon sehr mühsam. lG:Thomas
Hallo, bin zufällig hier druaf gestoßen und wollte nur mitteilen das ich auch dieses Schuljahr mit links geschaffft habe und sich meine Programmierkenntnisse erheblich verbessert haben! Danke für die Hilfe, sehe gerade das ich euch nie dafür gedankt habe. MfG: Gerbi PS: Thema kann gerne gelöscht werden!
Peter schrieb: > ... > vor den Schlaufen sind etliche Grundlagenkentnisse wie Synthax, > ... "Schlaufen" ist auch schön, gleich mal merken. Jeder Thread hat doch auch seine guten Seiten!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.