Hilfe, kleines C Problem!!
-
Hallo,
ich bin neu hier und absoluter Programmier Noob.
Jetzt muss ich für die Schule ein kleines C programm schreiben und komm absolut nicht weiter!! Ich hoffe ihr könnt helfen!!
Also ich schilder mal mein Problem:
Ich muss ein Programm entwickeln, indem man eine Zahl eingibt und das Programm prüft ob diese durch 7 teilbar ist.
Das Problem ist nun , das bei der Dezimaldivision %d die Ganzahl Division gemacht wird, dh, wenn ich 15 eingeb, sagt er auch das es Teilbar ist,... .
Wenn ich float nehme, weiß ich aber auch nicht wie ich es machen soll!!
Ich hab zwar das Problem mehr schlecht als recht schon hinbekommen nur mit meiner Version gehts dann wiederum nicht weiter, weil falls die Zahl nicht Teilbar ist soll er die Nächstkleinere und die Nächstgrößere durch 7 teilbare Zahl ausgeben.
Ich häng hier nochmal meine 3 Verzweifelungsversionen an, und hoffe jemand kann mir bei der Problemlösung helfen!!!
1.Versuch:
#include <stdio.h>
#include <math.h>
#include <windows.h>main()
{ int zahl,b,erg,d;
b=7;
printf("Bitte die Zahl eingeben:");
scanf("%d",&zahl);
erg = zahl / b;
d= zahl % b;if (" %d % b = %d ",zahl,erg)
printf(" Teilbar");
if ("%d % b = %d rest %d", zahl,erg)
printf("Nicht Teilbar");...
return 0;
}#include <stdio.h>
#include <math.h>
#include <windows.h>main()
{ int zahl,b,erg,d;
b=7;
printf("Bitte die Zahl eingeben:");
scanf("%d",&zahl);
erg = zahl / b;
d= zahl % b;if (" %d % b = %d ",zahl,erg)
printf(" Teilbar");
if ("%d % b = %d rest %d", zahl,erg)
printf("Nicht Teilbar");...
return 0;
Versuch 2:main()
{ int a,erg,zahl,zahl2,d,x;
a=7;
d=0;
printf("Bitte geben Sie eine positive ganze Zahl ein:");
scanf("%d",&zahl);
erg = zahl / a;
d=zahl%a;if (d = zahl%a)
{printf ("\nDie Zahl ist nicht durch 7 teilbar");
do
{zahl2 = zahl-1;
}while (d!=zahl%a);
printf ("\nDie nächstkleiner durch 7 teilbare Zahl hat den Wert:");}if (erg = zahl / a)
{printf ("\nDie Zahl ist durch 7 teilbar ");}Versuch 3:
#include <stdio.h>
int main()
{float a,erg,zahl;
a=7;printf("Bitte geben Sie eine positive ganze Zahl ein:");
scanf("%f",&zahl);
erg = zahl / a;printf("%f / %f = %f \n" ,zahl,a,erg);
if ("%f / %f = x.000000 " ,zahl,a,erg)
printf (" Teilbar");
else
printf("Nicht teilbar");....
return 0;}
Please help!!!
-
Hi Namensvetter
Du machst ziemlich derben Unfug bei deinen if-Überprüfungen.
Ein double Zahl brauchst du nicht, da durch 7 teilbare Zahlen immer ganzzahlig sind.
% liefert dir den Teilungsrest zurück, ist also bei geeigneten Zahlen 0.
if (Zahl % 7 == 0) // sie ist´s
Bitte benutze demnächst Code-Tags und versuche, den Quelltext auf den notwendigsten Problembereich zu reduzieren.
-
Wie gesagt, Programmieren ist totales Neuland für mich!!!
Welchen meiner Versuche würdest du mir empfehlen um mit deinem Tip weiterzumachen?
btw. Ich weis nicht mal was Double Zahl bedeutet!*schäm*
-
Ich würde dir empfehlen, komplett neu anzufangen.
#include <stdio.h> int main() { int zahl; printf("Bitte die Zahl eingeben:"); scanf("%d",&zahl); return 0; }
Das kannst du übernehmen.
Der Rest ist Müll. Sorry
-
Danke für den Tip:
if (zahl % 7 == 0)
Hätt ich das eher gewusst hätt ich mir 3 Stunden rumgerätsel gespart.
Danke erstmal, meld mich nochmal falls ich wieder feststecke!!
-
#include <stdio.h>
int main(void) { int wert; // Interger Var. printf("Wert: "); scanf("%i", &wert); // Wert einlesen if((wert % 7) == 0) // ergibt der Wert bei der teilung // keinen einen Rest? printf("\nGeht!"); // freu dich! else // wenn's nicht geht printf("\nGeht nicht!"); return 0; }
PS: Ich würd dir ein C-Buch empfehlen!
-
Noch ne kleine Frage:
Welche Formel für die Schleife?
Also z.B eingebene Zahl 16.
Hab mir gedacht:
else {
printf("\nDie Zahl ist nicht durch 7 teilbar\n");
do
{x=zahl-1;
}while (zahl % 7 == 0);
printf("\nDie naechstkleiner durch 7 teilbare Zahl hat den Wert:",x);}Funzt aber irgendwie net!!
-
Überlege nocheinmal, was ich gesagt habe, was der % - Operator zurückliefert.
Und ob du dann immer noch eine Schleife brauchst.
-
Ich brauch doch eine Schleife???oder?
Er soll mir ja die nächst kleinere und größere durch 7 teilbare Zahl ausgeben, falls ich eine Zahl eingebe welche nicht durch 7 teilbar ist.
Also zb. ich geb 180 ein.
Ausgabe: Nicht durch 7 teilbar.
Ausgabe: Nächstkleinere durch 7 teilbare Zahl 175
Ausgabe: Nächstgrößere 182
Das muss ich doch mit einer schleife machen??
-
Seppi schrieb:
Ich brauch doch eine Schleife???oder?
Er soll mir ja die nächst kleinere und größere durch 7 teilbare Zahl ausgeben, falls ich eine Zahl eingebe welche nicht durch 7 teilbar ist.
Also zb. ich geb 180 ein.
Ausgabe: Nicht durch 7 teilbar.
Ausgabe: Nächstkleinere durch 7 teilbare Zahl 175
Ausgabe: Nächstgrößere 182
Das muss ich doch mit einer schleife machen??nehm dir doch mal den tip von deinem namensvetter zu herzen.
gib dir mal den rückgabewert der modulo-operation (also die zeile mit dem %-operator) aus, spiel ein paar zahlen durch und denke kurz nach.
-
Moment, hab glaub ich kapiert was du meinst.
Ich muss nur von meiner Zahl den Rest abziehen und hab die nächstkleinere Zahl!
-
So mein Prog ist jetzt soweit fertig!!
Aber braücht nocheinmal Hilfe.
Am ende wird gefragt nochmal ja/nein.
Hab des so gemacht s.u.
Kapier nur nicht worüber ich die do while Schleife legen muss damit es funktioniert und von vorne anfängt.
Mein Stand:#include <math.h>
#include <windows.h>int main()
do
{ int zahl,b,erg,rest,erg1,erg2,weiter;
b=7;
printf("Bitte geben Sie eine positive ganze Zahl ein:");
scanf("%d",&zahl);
erg = zahl / b;
if
(zahl % 7 == 0)
printf("\nDie Zahl ist durch 7 teilbar!\n");else
{
printf("\nDie Zahl ist nicht durch 7 teilbar!\n");
rest = zahl % 7;
erg1 = zahl - rest;
erg2 = erg1 + 7;
printf("\nDie naechstkleiner durch 7 teilbare Zahl hat den Wert: %d\n",erg1);
printf("\nDie naechstgroesser durch 7 teilbare Zahl hat den Wert: %d\n",erg2);
}printf("\nSoll das Programm wiederholt werden? (Ja= 1, Nein= beliebig) :");
scanf ("%d",weiter);
if (weiter = 1)
printf("\nProgramm wird wiederholt");
else
printf("\nProgramm wird beendet");return 0;
}while (weiter=1);Bitte nochmal helfen!!
-
if (weiter = 1)
du weist der Variablen den Wert 1 zu, und dann fragst du, ob weiter ungleich 1 ist ...
-
Mein Fehler!
Hier richtig, bis auf die Schleife:
#include <math.h>
#include <windows.h>int main()
{
do
{ int zahl,b,erg,rest,erg1,erg2,ja;
b=7;
printf("Bitte geben Sie eine positive ganze Zahl ein:");
scanf("%d",&zahl);
erg = zahl / b;
if
(zahl % 7 == 0)
printf("\nDie Zahl ist durch 7 teilbar!\n");else
{
printf("\nDie Zahl ist nicht durch 7 teilbar!\n");
rest = zahl % 7;
erg1 = zahl - rest;
erg2 = erg1 + 7;
printf("\nDie naechstkleiner durch 7 teilbare Zahl hat den Wert: %d\n",erg1);
printf("\nDie naechstgroesser durch 7 teilbare Zahl hat den Wert: %d\n",erg2);
}printf("\nSoll das Programm wiederholt werden? (ja= 1, nein= beliebig) :");
scanf ("%d",&ja);if (ja == 1)
printf("\nProgramm wird wiederholt");
else
printf("\nProgramm wird beendet");return 0;
}while (ja == 1);
return 0;}
-
Achja, nochwas. Wir haben gelernt, das != ungleich heißt. Stimmt des gar nicht?
Heißt nur = ungleich??
-
Du verlässt das Programm (main fkt.) durch das return, bevor du das while erreichst.
Außerdem würde ich mir das
printf("\nProgramm wird beendet");
bis zum Schluss aufheben, wenn du die Schleife verlassen hast.
Anm.: Bitte angewöhnen, Codetags zu benutzen bei so viel Quellcode.
-
Seppi schrieb:
Achja, nochwas. Wir haben gelernt, das != ungleich heißt. Stimmt des gar nicht?
Heißt nur = ungleich??Hab mich vlt. unklar ausgedrückt.
Wenn duif (weiter)
schreibst, gilt die Bedingung als erfüllt, wenn weiter!=0 ist.
Allerdings wird in deinem Beispiel zuerst 1 zugewiesen durch das = und dann erst verglichen.
-
So jetzt funktioniert alles!!
Wens interessiert:#include <math.h> #include <windows.h> int main() { int zahl,b,erg,rest,erg1,erg2,ja; b=7; do { printf("\nBitte geben Sie eine positive ganze Zahl ein:"); scanf("%d",&zahl); erg = zahl / b; if (zahl % 7 == 0) printf("\nDie Zahl ist durch 7 teilbar!\n"); else { printf("\nDie Zahl ist nicht durch 7 teilbar!\n"); rest = zahl % 7; erg1 = zahl - rest; erg2 = erg1 + 7; printf("\nDie naechstkleiner durch 7 teilbare Zahl hat den Wert: %d\n",erg1); printf("\nDie naechstgroesser durch 7 teilbare Zahl hat den Wert: %d\n",erg2); } printf("\nSoll das Programm wiederholt werden? (ja= 1, nein= beliebig) :"); scanf ("%d",&ja); if (ja == 1) printf("\nProgramm wird wiederholt\n"); else printf("\nProgramm wird beendet\n"); }while (ja == 1); return 0;}
Das einzige was der Compiler jetzt noch meckert ist zu dem 1. printf und scanf
missing prototype.
Wie kann ich das noch beheben?
-
Na das sieht doch schon besser aus
#include <stdio.h>
mit rein, dann passt es.
-
Vielen Dank, ich schuld Dir ein Bier!