gerade/ungerade Zahlen kennzeichenen in diesem Programm [C]

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
AlexImperator
Beiträge: 23
Registriert: Mi Aug 13, 2014 5:25 pm

gerade/ungerade Zahlen kennzeichenen in diesem Programm [C]

Beitrag von AlexImperator » Mi Aug 13, 2014 7:00 pm

bin grad bei der lektion Wiederholungen und frage mich wie es möglich ist in diesen programm zu sagen wenn nicht erfüllt "Dieser Wert ist ungerade" auszugeben?

Code: Alles auswählen

#include <stdio.h>

int main(void)
{
  int wert;
  for( wert = 1; wert <= 10; wert = wert + 1 )
  {
    printf( "Ich bin bei '%d'\n", wert );
 
    if(wert % 2)
      continue;       
 
    printf( "  Dieser Wert ist durch zwei teilbar.\n" );
  }
 
  return 0;
}
else funktioniert in dem fall ja nicht, das sagt auf seden fall mein compiler und wowas wie

Code: Alles auswählen

if !(wert % 2)
funktioniert auch nicht... also wie ?

Benutzeravatar
oenone
Beiträge: 223
Registriert: Do Sep 01, 2011 2:42 pm
Wohnort: Bremen
Kontaktdaten:

Re: gerade/ungerade Zahlen kennzeichenen in diesem Programm

Beitrag von oenone » Mi Aug 13, 2014 7:19 pm

probier es ohne "continue".

AlexImperator
Beiträge: 23
Registriert: Mi Aug 13, 2014 5:25 pm

Re: gerade/ungerade Zahlen kennzeichenen in diesem Programm

Beitrag von AlexImperator » Mi Aug 13, 2014 7:42 pm

Code: Alles auswählen

#include <stdio.h>

int main()
{
	int i;

	for(i=1; i<=10; i++)
	{
		printf("|%d| ",i);

		if(i%2)
			printf("druch 2 teilbar\n");

		else
			printf("ungerade Zahl\n");
	}
	return 0;
}
|1| druch 2 teilbar
|2| ungerade Zahl
|3| druch 2 teilbar
|4| ungerade Zahl
|5| druch 2 teilbar
|6| ungerade Zahl
|7| druch 2 teilbar
|8| ungerade Zahl
|9| druch 2 teilbar
|10| ungerade Zahl




jetzt macht er genau das gegenteil. Was ist jetzt falsch?

ps ist ein

Code: Alles auswählen

if !(i%2)
möglich ich bekomme da immer eine fehlermeldung

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: gerade/ungerade Zahlen kennzeichenen in diesem Programm

Beitrag von cloidnerux » Mi Aug 13, 2014 7:49 pm

ps ist ein

Code: Alles auswählen

if !(i%2)
möglich ich bekomme da immer eine fehlermeldung
Wrsl müsstest du ein

Code: Alles auswählen

if(!(i%2))
schreiben, da in C der Ausdruck in Klammern stehen muss.
Du könntest aber auch per Mathematik argumentieren, dass

Code: Alles auswählen

if(i%2 == 0)
die Invertierung ist.
Redundanz macht wiederholen unnötig.
quod erat expectandum

AlexImperator
Beiträge: 23
Registriert: Mi Aug 13, 2014 5:25 pm

Re: gerade/ungerade Zahlen kennzeichenen in diesem Programm

Beitrag von AlexImperator » Mi Aug 13, 2014 7:57 pm

was bedeuted if(i%2 == 0) genau? ist das der rest der berechnet wird?

ps was ist das problem beim verbesserten programm?

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: gerade/ungerade Zahlen kennzeichenen in diesem Programm

Beitrag von cloidnerux » Mi Aug 13, 2014 8:32 pm

was bedeuted if(i%2 == 0) genau? ist das der rest der berechnet wird?
Das ist eigentlich das was du lernen solltest :D
% ist der Modulo-Operator(zu der es eine eigene Mathematik gibt). Er gibt den Rest eine Ganzzahligen Division zurück:

Code: Alles auswählen

 0 % 3 = 0
1 % 3 = 1
2 % 3 = 2
3 % 3 = 0
4 % 3 = 1
Eine Zahl ist gerade, wenn sie durch zwei Teilbar ist, daher wenn der Modulo-Operator 0 zurück gibt, das ist das was ich überprüfe.
ps was ist das problem beim verbesserten programm?
Ein Wahrheitswert in C ist wahr, wenn entweder der gegebene Vergleich(>, <, ==, >=, <=, !=) wahr ist, oder eine Zahl größer 0 angegeben wird.
Daher

Code: Alles auswählen

if(100000) //wahr}
if(0) // nicht wahr
In deinem Code hast du die Bedingung

Code: Alles auswählen

 if(i%2)
genommen, um eine Zahl als gerade zu klassifizieren.
Nun solltest du aber schon gelernt haben, dass dieser Ausdruck nur Wahr wird, wenn ein Wert größer 0 heraus kommt und dies ist der Fall, wenn die Zahl ungerade ist, da dann Modulo 1 zurück liefert.
Effektiv hast du den falschen Schluss gezogen, tauschst du die Texte aus, dann würde es stimmen.
Redundanz macht wiederholen unnötig.
quod erat expectandum

AlexImperator
Beiträge: 23
Registriert: Mi Aug 13, 2014 5:25 pm

Re: gerade/ungerade Zahlen kennzeichenen in diesem Programm

Beitrag von AlexImperator » Mi Aug 13, 2014 9:25 pm

ohh... sry genau den part hatte ich üblerlesen^^ danke dass du es mir noch mal erklärt hast :)

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: gerade/ungerade Zahlen kennzeichenen in diesem Programm

Beitrag von nufan » So Aug 17, 2014 4:39 pm

cloidnerux hat geschrieben:Ein Wahrheitswert in C ist wahr, wenn entweder der gegebene Vergleich(>, <, ==, >=, <=, !=) wahr ist, oder eine Zahl größer 0 angegeben wird.
Ungleich 0. Auch eine negative Zahl ergibt True.

Antworten