Problem bei Rechteck erstellen in C.
-
Hallo,
seit 2 Wochen studiere ich nun medizinische Informatik. Bis zum anfang meines Studiums hatte ich noch nie programmiert. Jetzt, nach der 3. Vorlesung haben wir folgende Übungsaufgabe bekommen:
Entwickeln Sie ein Programm welches folgende Figur auf dem Bildschirm zeichnet. Bauen Sie das Programm so auf, dass die Breite der Figur zu Beginn des Programms von Tastatur eingelesen wird. Erlaubte Werte für die Breite liegen im Bereich von 10 - 40. Prüfen Sie die Eingabe auf Fehler. Fordern Sie den Benutzer zur erneuten Eingabe im Falle eines Fehlers auf.
Die Ausgabe soll dann so aussehen:
******
........
........
........
........
........
******(Die punkte im rechteck sollen leerzeichen darstellen)
ich sitz an dem SCH**** jetz schon einen Tag und hab k.a. wie es funktionieren soll
.
ich komme bis zur bedingung, dass die Breite zwischen 10 und 40 sein muss aber nicht wie dan diese Sterne ausgegeben werden sollen. bisher sieht mein code so aus:
#include <stdio.h>
int main()
{
float b,h;printf("Breite eingeben: ");
scanf("%f", &b);
printf("Hoehe eingeben: ");
scanf("%f", &h);for ( (!breite) || (breite <10) || (breite > 40))
{
printf("Nur Werte zwischen 10 und 40 erlaubt - neu eingeben");
}bis dahin funktionierts (kann sein dass ich jetz iwo einen Fehler drinnen hab, da ich es jetzt schnell ohne compilieren hier geschrieben hab. Auf meinem Laptop für die uni läufts jedenfalls. Nur weiss ich dann nicht mehr weiter bzw. komm jedesmal in ne sackgasse.
könnt ihr mir weiterhelfen?
Danke
-
Du benutzt die Schleife falsch, besser sind für deinen Fall int- und keine float-Werte:
int b,h; for(; printf("Breite eingeben: "),scanf("%d", &b),printf("Hoehe eingeben: "),scanf("%d", &h),(breite <10) || (breite > 40); printf("Nur Werte zwischen 10 und 40 erlaubt - neu eingeben"));
-
Zum ausgeben einzelner Zeichen (auf stdout) gibt es die Funktion putchar
Du kannst aber auchprintf
nehmenWie würdest du das denn auf einem karierten Blatt Papier machen?
Stern ausgeben, bestimmte Anzahl Leerzeichen ausgeben, wieder Stern ausgeben.
Und das wiederholst du mehrmals
Und diese bestimmete Anzahl und das mehrmals hat etwas mit deiner Eingabe zu tun.
-
also ich habs nicht geschaft und heute haben wir vom prof. die lösung bekommen:
1 /* ********************************************************
2 * Zeichnen eines Quadrats
3 * ********************************************************/
4 #include "stdio.h"
5
6 int main( int argc, char argv[] )
7 {
8 int y;
9 int x;
10 int breite;
11
12 / *********************************************************
13 * Breite der Figur von Tastatur einlesen.
14 * ********************************************************/
15
16 printf( "Bitte geben Sie die Breite ein : ");
17 scanf( "%d", &breite );
18
19 / *********************************************************
20 * Nur wenn breite im erlaubten Intervall liegt wird die
21 * Figur gezeichnet
22 * ********************************************************/
23
24 if( breite >= 10 && breite <= 40 )
25 {
26
27 for( y = 0; y < breite; y = y + 1 )
28 {
29 for( x = 0; x < breite; x = x + 1 )
30 {
31 / *********************************************************
32 * Die oberste bzw. unterste Linie wird durchgehend
33 * gezeichnet
34 * ********************************************************/
35
36 if( y == 0 || y == breite - 1 || x == 0 || x == breite - 1 )
37 {
38 printf( "" );
39 }
40 else
41 {
42 printf( " " );
43 }
44 }
45
46 printf( "\n" );
47 }
48 }
49 else
50 {
51 printf( "Ungueltiger Wert fuer Breite. 10 - 40 ist erlaubt.\n" );
52 }
53
54 getchar();
55 getchar();
56
57 }meine erste frage zu dem code: wozu sind die werte x und y gut? für die leerzeichen bzw. sterne?? und was bedeutet bei der if schleife in zeile 36 das y == breite -1 und das x == breite -1
-
Warum magst Du uns Deinen Code nicht mit Code-Tags präsentieren? Willst Du keine Hilfe, oder magst Du uns optiomal ärgern?
-
weil ich jetzt das erste mal von "Code-Tags"?? höre
-
vayacontoz schrieb:
weil ich jetzt das erste mal von "Code-Tags"?? höre
Auf der Startseite von diesem Unterforum ist so ein farblich markierter Kasten.
Wenn du deine Scripte genauso liest, verpasst du das Wichtigste.
Als registriertes Mitglied kannst du sogar deine alten Beiträge noch editieren.
vayacontoz schrieb:
wozu sind die werte x und y gut?
Zum zählen der Spalten bzw. Zeilen.
vayacontoz schrieb:
und was bedeutet bei der if schleife
Wie kommst du auf if-Schleife?
vayacontoz schrieb:
in zeile 36 das y == breite -1 und das x == breite -1
Wenn die Bedingung bei dem if wahr ist, wird ein * ausgegeben.
Jetzt die große Frage: An welchen Stellen müssen die *stehen?
In der ersten Zeile (y == 0)
In der ersten Spalte (x == 0)
In der letzten SPalte (x == ....)
in der letzten Zeile (y == ....)
-
mir ist klar, dass wenn die if-bedingung wahr ist dann ein "*" ausgegeben wird, aber nicht was das "breite-1" zu beduten hat. warum -1??
danke schonmal
-
Weil bei 0 begonnen wird, zu zählen. Eine Breite von 10 bedeutet also von 0 - 9.
-
vayacontoz schrieb:
mir ist klar, dass wenn die if-bedingung war ist dann ein "*" ausgegeben wird, aber nicht was das "breite-1" zu beduten hat. warum -1??
danke schonmal
Weil er bei 0 hat angefangen zu zählen. Ist in diesem Fall natürlich Unfug, weil das nur notwendig ist, wenn Arrayinidzes durchgegangen werden sollen. EDIT: (Was natürlich meisten der Fall ist, weshalb man dem Prof diesen Lapsus durchaus durchgehen lassen kann.)
Das wäre besser gewesen:
for( y = 1; y <= breite; y = y + 1 ) { for( x = 1; x <= breite; x = x + 1 ) { if( y == 1 || y == breite || x == 1 || x == breite )
mfg Martin
-
danke jetzt ist es mir etwas verständlicher