float zu int auf Kommazahl pruefen

3geld

Grünschnabel
Hallo erstmal liebe tutorials.de Gemeinde,
ich hab jetzt mit dem Studium zum Mechatroniker angefangen, und folglich auch Informatik Praktika, die ersten 2 waren auch sehr einfach, doch jetzt hänge ich schon seit 2 Tagen an einem bestimmt sehr simplen Problem bzw. an mehreren Problemen.

Hier ist zu allererst einmal der Code.

http://codepad.org/hhHsgZSr

Also ich muss halt eine Zahlenfolge schreiben, die bei Eingabe einer Zahl > 200 und < 0 sowie bei der Eingabe einer Kommazahl eine Erneute Möglichkeit zur Eingabe bieten soll, und auf den Fehler hinweisen. des weiteren soll bei Eingabe einer 0 das Programm geschlossen werden. Außerdem sollen in einer Zeile maximal 10 Zahlen ausgegeben werden, danach soll in eine neue Zeile gewechselt werden, dafür die Variable Zeile. Das krieg ich mit einfachem Zählen hin und dann "\n". > 200 und < 0 ist kein Problem, vielmehr die Überprüfung auf Kommazahl stellt ein, für mich unlösbares, Problem da. Und noch diverse kleine Stücke. Wie gesagt, ich komm einfach nicht weiter.
Übermorgen muss ichs im Praktika erklären, wie ich auf was kam, daher hab ich versucht es selbst zu schreiben. Aber ohne Hilfe scheint das aussichtslos.

Das viele Syntaxfehler enthalten sind, schleifen nicht vollständig bitte ich zu entschuldigen. Ich weiß das es für einen Programmierer an schwere Körperverletzung grenzt was ich hier biete ;)

Ich hoffe heute evtl. noch die ein oder andre Hilfestellung zu erhalten, am Donnerstag ist Stichtag ;)

Vielen Dank für die freundliche und hoffentlich schnelle Hilfe ;)

PS: Ich erwarte keinen Vollständigen Code oder ähnliches, einfach den Wink mit dem Baumstamm vllt^^
 
Moin,

zu Zeile 9:
Das erste Semikolon schließt immer eine Zeile ab!
Daher haben die beiden letzten Variablen KEINEN Datentyp!

Zeile 44:
Wie die Fehlermeldung schon besagt: hier fehlt ein abschließendes Semikolon (Zeile 42) !


Zeile 58:
Auch hier sagt die FM schon alles!
Du versucht eine DO-While-Schleife zu benutzen, aber der Teil mit "while" fehlt!
Schau mal hier:
http://www.dpunkt.de/java/Die_Sprache_Java/Die_Sprachelemente_von_Java/14.html#x61

Zeile 14:
Und auch hier sagt die FM schon alles!
Der Rückgabe darf nicht VOID, sondern muss von Typ "int" sein !!
also grundlegend:
Java:
int main()
{
    int iResult = 0;
    ...
    return iResult;
}


Gruß
Klaus

[EDIT] Anmerkungen zu Deiner Logik:
Du vergleichst bspw. "azahl == grad". Nun ist aber 'grad' (vermutlich float, oder :confused:) weder deklariert (siehe oben), noch initialisiert (d. h. mit irgendwas gefüllt). Also werden diese Vergleiche IMMER fehlschlagen! Was soll 'grad' denn enthalten :confused:
 
Zuletzt bearbeitet:
Also danke erstmal für die Mühen. Ich hab jetzt nachdem ich ne Nacht drüber geschlafen hab, das ganze nochmal komplett neu geschrieben. Es klappt auch alles wunderbar, bis auf die Sache mit dem Komma, und einem kleinen Problem beim berechnen der Summe.

Hier der neue Quellcode im ganzen: http://codepad.org/2KiDpjd7
Code:
			if (ezahl % 2 == 0)
			{
				anzahl=anzahl+1; //2.
				ezahl=ezahl/2;
				printf("%d ", ezahl);
				zeile=zeile+1;
				summe=summe+ezahl; 1. Problem - 2.
			}
			else
			{
				anzahl=anzahl+1; //2.
				ezahl=(3*ezahl)+1;
				printf("%d ", ezahl);
				zeile=zeile+1;
				summe=summe+ezahl; //1. Problem - 2.

			} //Meiner Meinung nach unnötig kompliziert

1. Problem
Er rechnet mir so wie ich es hier gelöst hab, die Summe der Folgeglieder aus ohne das er das Startglied mit einbezieht. Ich bin nicht sicher ob wir überhaupt so schreiben sollen das es mit berechnet wird, allerdings würde ichs chon gern wissen wie ich es machen kann ;).

2. Problem
Es muss doch möglich sein diese Aktionen unabhängig von den beiden zweigen ausführen zu lassen, sodass ich sie nicht jedesmal bei beiden schreiben muss. So würde ich aus 4 Zeilen 2 machen. Nicht viel, aber es sieht mit Sicherheit auch besser aus.

Natürlich fehlt weiterhin die Abfrage nach einem , bzw. die Überprüfung auf Integer. Ich hab dazu schon viel gelesen, aber nichts auf mein Beispiel anwenden können :/.
Ich dachte im Prinzip müsste ich doch eine Bedingung einbaun können.

Code:
	while (ezahl < 0 || ezahl > 200 \****Hier****/)
	{
		printf("Erneute Eingabe:\n");
		scanf("%d", &ezahl);
	}

	if (ezahl == 0)
	{
		exit(0);
	}  //Oder auch danach als eigene Anweisung.

Das war zumindest meine Überlegung.

MfG
 
Moin,

(a) gewöhne Dir bitte, Deine Variablen bei der Deklaration immer zu initialisieren :
Code:
int ezahl = 0;
Andernfalls steht irgendein Wert drauf, was sehr unschöne Folgen haben kann!

(b) Sicher kannst Du Deine Schleife auch so umschreiben:
Code:
while( ezahl > 1 )
{
    if (ezahl % 2 == 0)
    {
        ezahl = ezahl / 2;
    }
    else
    {
        ezahl = (3 * ezahl) + 1;
    }

    printf( "%d ", ezahl );
    
    zeile = zeile + 1;
    if( zeile == 10 )
    {
        zeile=0;
        printf("\n");
    }

    anzahl = anzahl + 1;
    summe = summe + ezahl;
} // while

wobei mir wirklich nicht klar ist, was Du damit bezwecken willst! Wenn Du 'nur die eingegebenen Zahl ausgeben sollst, warum dann die Berechungen mit "x / 2" bzw. "(x * 3) +1" :confused::confused:

(c) zur Prüfung auf eingegebene Fließkommazahlen:
lies die Werte nicht in INT-Variablen ein, sondern in eine Fließkommazahl (bspw. mit "%f" in eine double-Variable). Dann kannst mit Modulo prüfen, ob die Zahl NK-Stellen hat oder nicht !

Gruß
Klaus
 
Zuletzt bearbeitet:
hallo, ja danke. werd das gleich im praktikum mal ausprobieren.
das mit dem initialisieren werd ich beherzigen. und die x/2 bzw. *3 ... liegt daran das es eine Zahlenfolge ist die ausgegeben werden soll ;)

ich werd heut abend mal eine lösung posten, muss jetzt in die uni
 
Hi@,
also hab es jetzt mit dem von dir gemachten Vorschlag gelöst.
Funktioniert alles bestens ;)

Code:
// Praktikum_2_1
// 02-11-09 
// Zahlenfolge

#include <stdio.h>
#include <stdlib.h>

int ezahl, summe=0, zeile=0, anzahl=0;
float test;

void main()
{

	do
	{
		printf("Eingabe einer Zahl:");
		scanf("%f", &test);
		ezahl=test;

		if (test-ezahl > 0)
		{
			test=1;
		}

		printf("\n\n");
	}
	while (ezahl < 0 || ezahl > 200 || test == 1);


	if (test == 0)
	{
		exit(0);
	}

	do
	{
		if (zeile==10)
		{
			zeile=0;
			printf("\n");
		}
		else
		{
			if (ezahl % 2 == 0)
			{
				summe=summe+ezahl;
				anzahl=anzahl+1;
				ezahl=ezahl/2;
				printf("%d ", ezahl);
				zeile=zeile+1;
			}
			else
			{
				summe=summe+ezahl;
				anzahl=anzahl+1;
				ezahl=(3*ezahl)+1;
				printf("%d ", ezahl);
				zeile=zeile+1;
			}
		}
	}	
	while (ezahl > 1);

	printf("\n\nAnzahl der Glieder=%d\n", anzahl);
	printf("Summe der Glieder=%d\n\n\n", summe);


	system("pause");
}

Ich danke herzlichst.
 
Zuletzt bearbeitet:
Zurück