Archiv verlassen und diese Seite im Standarddesign anzeigen : Was ist hier falsch? [C]
SuperCow
22.05.2004, 20:07
printf("%f", (x>y) ? ((y>z)?y:((x>z)?z:x))) : ((x>z)?x:((y>z)?z:y));
______________________________________________________________
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
nkap.c:
Error E2256 nkap.c 14: No : following the ? in function main
*** 1 errors in Compile ***
______________________________________________________________
Was ist denn falsch? Ich will rausfinden, welche Zahl in der "Mitte" liegt...
Ich erkenne aber keinen Fehler? Darf man die Anweisungen denn nicht so ineinander verschachteln?
EDIT: Bin noch blutiger Anfänger... :(
SuperCow
22.05.2004, 20:32
Ich habs :)
printf("%f", (x>y) ? ((y>z)?y:((x>z)?z:x)) : ((x>z)?x:((y>z)?z:y)))
Hm,
solche Dinger werden eigentlich nicht gern gesehen. Wenn du da nach 2 Monaten wieder nachschauen sollst was das Ding macht, wird das richtig anstrengend...
exr
SuperCow
23.05.2004, 12:27
Jaja. Ich wollte das nur mal üben :) So schwer ist das gar nicht, wenn man sich die Mühe macht und einen Baum zeichnet
und bei so einem kleinen Programm :) Außerdem ist es ja dokumentiert :D
#include <stdio.h>
void main(void) {
float zahl1, zahl2, zahl3;
printf("\n\n\n\tZ a h l e n r e i h e n f o l g e");
printf("\n\n\nErste Zahl: ");
scanf("%f", &zahl1);
printf("Zweite Zahl: ");
scanf("%f", &zahl2);
printf("Dritte Zahl: ");
scanf("%f", &zahl3);
printf("\nklein --> gross : %f, %f, %f\n",
(zahl1<zahl2) ? ((zahl1<zahl3) ? zahl1 : zahl3) : ((zahl2<zahl3) ? zahl2 : zahl3), // ermittelt kleinste Zahl
(zahl1>zahl2) ? ((zahl2>zahl3) ? zahl2 : ((zahl1>zahl3) ? zahl3 : zahl1)) : ((zahl1>zahl3) ? zahl1 : ((zahl2>zahl3) ? zahl3 : zahl2)), //ermittelt die dazwischenliegende Zahl
(zahl1>zahl2) ? ((zahl1>zahl3) ? zahl1 : zahl3) : ((zahl2>zahl3) ? zahl2 : zahl3)); // ermittelt größte Zahl
}
wie was baum, für mich sieht das so aus als wenn man eine zahl ausgibt, und dann umständlich die stellen vor und nach dem komma festlegt
SuperCow
23.05.2004, 13:05
Das wäre der Baum für die "dazwischengelegene" Zahl...
http://people.freenet.de/chagga/baum.JPG
Meinte jetzt nich so einen Baum :)
http://www.kigo-tipps.de/images/treukart/baum.jpg
Ps.: Wie macht man das mit den Kommastellen? Das würde mich echt interessieren! :)
SuperCow
23.05.2004, 17:07
/* ermittelt die Reihenfolge dreier Zahlen */
#include <stdio.h>
void main(void) {
float zahl1, zahl2, zahl3;
printf("\n\n\n\tZ a h l e n r e i h e n f o l g e");
printf("\n\n\nErste Zahl: ");
scanf("%f", &zahl1);
printf("Zweite Zahl: ");
scanf("%f", &zahl2);
printf("Dritte Zahl: ");
scanf("%f", &zahl3);
if (zahl1!=zahl2 && zahl2!=zahl3 && zahl3!=zahl1) { // Sind alle drei Zahlen unterschiedlich?
printf("\nklein --> gross : %f, %f, %f\n",
(zahl1<zahl2) ? ((zahl1<zahl3) ? zahl1 : zahl3) : ((zahl2<zahl3) ? zahl2 : zahl3), // ermittelt kleinste Zahl
(zahl1>zahl2) ? ((zahl2>zahl3) ? zahl2 : ((zahl1>zahl3) ? zahl3 : zahl1)) : ((zahl1>zahl3) ? zahl1 : ((zahl2>zahl3) ? zahl3 : zahl2)), //ermittelt die dazwischenliegende Zahl
(zahl1>zahl2) ? ((zahl1>zahl3) ? zahl1 : zahl3) : ((zahl2>zahl3) ? zahl2 : zahl3)); // ermittelt größte Zahl
}
else if ((zahl1==zahl2 && zahl1!=zahl3 && zahl2!=zahl3) || (zahl1==zahl3 && zahl1!=zahl2 && zahl3!=zahl2) || (zahl2==zahl3 && zahl2!=zahl1 && zahl3!=zahl1)) { // sind vll. 2 Zahlen gleich?
printf("2 Zahlen sind gleich!\n\n");
printf("klein --> gross: %f, %f",
(zahl1<zahl2) ? ((zahl1<zahl3) ? zahl1 : zahl3) : ((zahl2<zahl3) ? zahl2 : zahl3), // ermittelt kleinere Zahl
(zahl1>zahl2) ? ((zahl1>zahl3) ? zahl1 : zahl3) : ((zahl2>zahl3) ? zahl2 : zahl3)); // ermittelt größere Zahl
}
else if (zahl1==zahl2 && zahl2==zahl3 && zahl3==zahl1) { // sind etwa alle drei Zahlen gleich?
printf ("Alle drei Zahlen gleich!");
}
else {
printf("Ungueltige Eingabe!");
}
}
Mein Programm ist soweit gediehen... :) Wie kann ich jedoch überprüfen, ob meine Variablen Buchstaben und keine Zahlen enthalten? Falls ich nämlich einen Buchstaben eingebe, setzt er ab diesem Zeitpunkt abzufragende Variablen automatisch 0. Wie kann ich das Programm aber kontrolliert abbrechen? Sry, falls ich nerve... :)
Wie kann ich also kontrolliere, ob Buchstben eingegeben worden sind?
ne while schleife .. bis in dem abzufragenden wert mal ne zahl drin steht bzw. keine 0
oder man machts mit char werten, zahlen 0-9 und noch ne menge ascii zeichen .. so kann man auch die buchstaben der größe ordnen
i_hasser
23.05.2004, 23:47
Uhm... und ich dachte mein Stiel wäre grausam.
Meinst du nicht, dass das deutlich besser lesbar ist?
#include <stdio.h>
void swapv(float *a, float *b)
{ float i=*a; *a=*b; *b=i; }
int main(void) {
float number[3];
int i, j, k=0;
printf("\n\n\n\tZ a h l e n r e i h e n f o l g e");
// get the values
for(i=0;i<3;i++)
{
printf("\n%ld. Zahl: ", i+1);
scanf("%f", &number[i]);
}
// make a bubblesort
for(i=0;i<3;i++)
for(j=0;j<2;j++) if(number[j]>number[j+1]) swapv(&number[j],&number[j+1]);
// count equal values and print values
for(i=0;i<3;i++)
{
printf("\n%f", number[i]);
for(j=0;j<3;j++) if(number[i]==number[j]) k++;
}
switch(k)
{
case 3*3: // all equal
break;
case 5: // 2 equal
break;
default: // none equal, k=3
break;
}
printf("\n");
return 0;
}
variabler und kürzer ist es außerdem auch ;)
SuperCow
24.05.2004, 00:21
Hey! Ich kann noch keine Schleifen :)
Dein Stiel ist ganz in Ordnung :D (Stil)
SuperCow
28.05.2004, 13:52
Noch ne kleine Frage:
Ich hab mal
for(;;)
eingegeben. Das erzeugt ja eine Endlosschleife. Warum bekomme ich aber so keine 100% Prozessorauslastung, sondern nur um ca. 92%?
Ich hab da mal was mit niedrigerer Priorität gehört. HAt das vll. damit etwas zu tun?
i_hasser
28.05.2004, 14:09
Ja, hat es. Gib dem Programm Realtime Priorität (bzw. unter Linux +19) und du wirst Mühe haben das Prog wieder beenden zu können ;)
SuperCow
28.05.2004, 14:19
Bei Linux kann man das aber nur als root? ??? :)
i_hasser
28.05.2004, 14:26
Ja - zumindest bei Prioritäten >0 (0=normale Priorität)
SuperCow
02.06.2004, 15:03
Ich weiß, dass das jetzt nichts kompliziertes ist und ihr euch bestimmt mit interessanteren Sachen beschäftigt, ich hätte aber dennoch eine Frage. Vll. kann man den Code um vereinfachen oder besser schreiben, darum gehts mir jetzt aber nicht primär. Mein Compiler bringt mir zu diesem Code:
#include <stdio.h>
main() {
int zeile, spalte;
// erste Dreieckhälfte
for(zeile=1; zeile<=10; zeile++) { // Zeile 9
spalte=1;
printf("\n");
for(spalte; spalte<=zeile; spalte++) {
printf("*");
}
}
printf("\n");
// zweite Dreieckhälfte
for(zeile=0; zeile<=10; zeile++) { // Zeile 18
spalte=10;
for(spalte; spalte>=zeile; spalte--) {
printf("*");
}
printf("\n");
}
printf("\n");
return 0;
}
folgende Warnung:
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
dreieck.c:
Warning W8019 dreieck.c 9: Code has no effect in function main
Warning W8019 dreieck.c 18: Code has no effect in function main
Error E2194: Could not find file ',txt.cpp'
Warum bringt er mir die zwei Warnings? Etwa weil er nicht weiß, was in den Variablen drinsteht?
i_hasser
02.06.2004, 15:08
Original geschrieben von SuperCow
Ich weiß, dass das jetzt nichts kompliziertes ist und ihr euch bestimmt mit interessanteren Sachen beschäftigt, ich hätte aber dennoch eine Frage. Vll. kann man den Code um vereinfachen oder besser schreiben, darum gehts mir jetzt aber nicht primär. Mein Compiler bringt mir zu diesem Code:
#include <stdio.h>
main() {
int zeile, spalte;
// erste Dreieckhälfte
for(zeile=1; zeile<=10; zeile++) {
spalte=1;
printf("\n");
for(spalte; spalte<=zeile; spalte++) {
printf("*");
}
}
printf("\n");
// zweite Dreieckhälfte
for(zeile=0; zeile<=10; zeile++) {
spalte=10;
for(spalte; spalte>=zeile; spalte--) {
printf("*");
}
printf("\n");
}
printf("\n");
return 0;
}
folgende Warnung:
Warum bringt er mir die zwei Warnings? Etwa weil er nicht weiß, was in den Variablen drinsteht?
spalte=1;
printf("\n");
for(spalte; spalte<=zeile; spalte++) {
Da liegt das Problem. Entweder
printf("\n");
for(spalte=1; spalte<=zeile; spalte++) {
oder
spalte=1;
printf("\n");
for(; spalte<=zeile; spalte++) {
SuperCow
02.06.2004, 15:14
Danke! :) War ein Denkfehler meinerseits. Ich hab vergessen, das spalte zurückgesetzt wird.
vBulletin® v3.8.7, Copyright ©2000-2012, vBulletin Solutions, Inc.