'else' without a previous 'if'

algemene C code
Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Re: 'else' without a previous 'if'

Berichtdoor benvo » 29 Nov 2016, 20:21

cpp code
/* Sketch om getallen af te ronden op integers*/

int T;
float X;


void setup() {

Serial.begin(9600);

Serial.println(" Geef een niet integer getal in: "); //vraagt om gebruikers invoer
while (Serial.available() == 0) //wacht op invoer
{

}
X = Serial.parseFloat(); //Geeft X de waarde van de (gebruikers-)invoer

}
void loop()
{

T = (int)X; //T krijgt de ingevoerde waarde voor de komma
if ((X - float(T)) < 0.5) //de waarde ligt onder een 0.5
{
X = int(X); //rond af naar beneden


}
else
{

if ((X - float(T)) >=0.5) //de waarde ligt op 0.5 of daarboven
}
{
X = (X + 1) //afronding naar boven
Serial.print( "Het afgeronde getal is ");
Serial println (X); //Het afgeronde getal wordt afgedrukt
}
}




Pfffff, ik zie het even niet meer... Maar werken doet hij nog niet!

Advertisement

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: 'else' without a previous 'if'

Berichtdoor shooter » 29 Nov 2016, 20:58

cpp code
/* Sketch om getallen af te ronden op integers*/

int T;
float X;


void setup() {

Serial.begin(9600);


}
void loop()
{
Serial.println(" Geef een niet integer getal in: "); //vraagt om gebruikers invoer
while (Serial.available() == 0) //wacht op invoer
{

}
X = Serial.parseFloat(); //Geeft X de waarde van de (gebruikers-)invoer

T = (int)X; //T krijgt de ingevoerde waarde voor de komma
if ((X - float(T)) < 0.5) //de waarde ligt onder een 0.5
{
X = int(X); //rond af naar beneden


}
else
{
X = (X + 1) //afronding naar boven
Serial.print( "Het afgeronde getal is ");
Serial println (X); //Het afgeronde getal wordt afgedrukt
}
delay (1000);
}

ik heb het niet geprobeerd, maar dat is wel iets voor jou.
paul deelen
shooter@home.nl

Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Re: 'else' without a previous 'if'

Berichtdoor benvo » 30 Nov 2016, 14:18

Dank je wel!

Dit maakt me duidelijk dat ik overbodige zaken weg kan laten. Overigens; hij werkt nog steeds niet. Expected ';' before 'Serial' krijg ik te zien op de één na laatste Serial. print regel. Maar ik snap de verbeteringen nu ik ze zie!

Groet,
Ben.

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: 'else' without a previous 'if'

Berichtdoor shooter » 30 Nov 2016, 22:55

tja en dan ga je dus 1 regel hoger kijken bij de x=x+1 en daar moet dan nog een ; achter.
eigenlijk gewoon de compiler volgen. ik compile bijna na iedere regel, om typefouten te voorkomen.
print ook eens een cheatsheet uit dan heb je alle commandos en hoe je ze moet schrijven op 1 vel papier.
paul deelen
shooter@home.nl

Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Re: 'else' without a previous 'if'

Berichtdoor benvo » 01 Dec 2016, 14:42

[code2=cpp/* Sketch om getallen af te ronden op integers*/

int T;
float X;


void setup() {

Serial.begin(9600);


}
void loop()
{
Serial.println(" Geef een niet integer getal in: "); //vraagt om gebruikers invoer
while (Serial.available() == 0) //wacht op invoer
{

}
X = Serial.parseFloat(); //Geeft X de waarde van de (gebruikers-)invoer

T = (int)X; //T krijgt de ingevoerde waarde voor de komma
if ((X-T)<0.5) //de waarde ligt onder een 0.5
{
X = int(X); //rond af naar beneden
Serial.print (X);

}
else
{

X = ((int)X + 1); //afronding naar boven
Serial.print( "Het afgeronde getal is ");
Serial.println (X); //Het afgeronde getal wordt afgedrukt
}
delay (1000);

}][/code2]

Dit is de code zoals hij wel werkt.
Hij ronde zo keurig af.
Toch nog een maar...
Maar dat vind ik ook nog uit, uit geeft als resultaat op bijvoorbeeld 12.889, 13.00. Op zich juist maar ik zou willen dat hij dan 13 geeft dus zonder twee decimale nullen. Kom ik wel uit.
Dank jullie wel voor het geduld en de uitleg!

Groet,
Ben.

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: 'else' without a previous 'if'

Berichtdoor Koepel » 01 Dec 2016, 16:34

De default voor een 'float' is twee decimalen achter de punt als je Serial.println() gebruikt. Dat heb je natuurlijk niet als je een integer gebruikt met Serial.println().

Je gebruikt de 'int' 'T' en de 'float' 'X' nog steeds op een merkwaardige manier door elkaar. Voor de compiler zijn het twee verschillende dingen. De compiler kan geen berekening met die twee uitvoeren, maar zal eerst de ene naar het andere converteren.

Kun je misschien 'T' en 'X' anders noemen ? Bijvoorbeeld "float drijvendGetal" en "int heelGetal", of verzin zelf betere namen. Zet ook altijd iedere inspringen en alle haakjes goed, en gebruik [ Code ] of [ Code2 ] om een sketch te laten zien. Op die manier is het eenvoudiger om een sketch te lezen.

Je gebruikt de onderstaande dingen allebei om het om te zetten. Dat mag allebei.
Code: Alles selecteren
a = int(b);
a = (int) b;
De tweede regel heet een 'cast', en dat was vroeger de standaard manier. Ik weet niet welke op dit moment de voorkeur heeft. Misschien wel de eerste regel.

Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Re: 'else' without a previous 'if'

Berichtdoor benvo » 01 Dec 2016, 17:11

cpp code
Code: Alles selecteren

/* Sketch om getallen af te ronden op integers*/
 
int T;
float X;
 
 
void setup() {
 
  Serial.begin(9600);
 
 
}
void loop()
{
   Serial.println(" Geef een niet integer getal in:   "); //vraagt om gebruikers invoer
  while (Serial.available() == 0)                      //wacht op invoer
  {
 
  }
  X = Serial.parseFloat();                              //Geeft X de waarde van de (gebruikers-)invoer
 
  T = (int)X;                                    //T krijgt de ingevoerde waarde voor de komma
  if ((X-T)<0.5)                                 //de waarde ligt onder een 0.5
  {
    X = int(X);                                  //rond af naar beneden
    Serial.print( "Het afgeronde getal is ");
    Serial.println (X,0);                             //Het afgeronde getal wordt afgedrukt zonder twee nullen achter de komma.
   
  }
    else
    {
   
      X = ((int)X + 1);                                   //afronding naar boven
    Serial.print( "Het afgeronde getal is ");
    Serial.println (X,0);     //Het afgeronde getal wordt afgedrukt zonder twee nullen achter de komma.
   }
delay (1000);
   
}

Deze werkt in ieder geval zoals het moet, d.w.z. zonder decimale nullen achter de komma.
Laatst gewijzigd door benvo op 01 Dec 2016, 17:23, in totaal 1 keer gewijzigd.

Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Re: 'else' without a previous 'if'

Berichtdoor benvo » 01 Dec 2016, 17:22

T heb ik gedefinieerd als een INT variabele omdat deze letter ook altijd een integer waarde krijgt. X is altijd een float variabele. De variabele wordt immers altijd als float, dus met een komma ingevoerd. Op een moment ben ik de waarde van X vóór de komma nodig om aan de variabele T te geven. Dan gebruik ik T=(int)X. Zo heb ik erover nagedacht. Maar misschien helemaal fout gedacht; immers ik ben maar een beginner, ik hoor natuurlijk graag hoe het hoort. En graag ook waarom.

Dank je wel Koepel!

Groet Ben.

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: 'else' without a previous 'if'

Berichtdoor shooter » 01 Dec 2016, 20:33

dat13.00 komt omdat je de X hergebruikt, pak daar een andere naam voor, er staat ergens X=int(X) dat mag wel maar dan gebruik je dus dezelfde naam en dus wordt het getal de int van een float maar het blijft een float.
vandaar dus dat je de 00 houd.
je zult ook merken dat dit niet altijd goed gaat, zeker niet als je hele grote/kleine getallen pakt, want dan gaat die float rare dingen doen. ze hebben geen oneindige precisie.
paul deelen
shooter@home.nl

Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Re: 'else' without a previous 'if'

Berichtdoor benvo » 01 Dec 2016, 20:56

Shooter, dat met die nullen had ik al opgelost. Door Serial.print (X,0); (Zie mijn sketch.)

VorigeVolgende

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 14 gasten