Archief - [PROG]C++ Eerste programma

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

RaZoR be

Legacy Member
Shai Hulud zei:
Je leest strings in, en probeert er dan wiskundige bewerkingen mee te doen. Dat kan niet, je moet de string eerst omvormen naar een getal (int of float bvb).

Je zal ook de input moeten controleren. Wat doe je als de gebruiker een lege lijn meegeeft? Als hij "sdfsdf" intypt? ...

- idd, je kan echt beter met int/float werken, want met strings bewerkingen doen is NONO...
- Devc++ geeft toch normaal errors like '; missing' ofzo (alle VS doet da toch)
- ik zou eerst met de simpele dingen like input / output, en simpele sommen & producten beginnen... & zeker zorgen dat ge de juiste sintaxen gebruiken...
- let dat de variabelen namen hetzelfde zijn etc...

Hier al een iets betere versie , die zou moeten werken denk ik, u bewerking kan je zelf wel verbeteren, met math functies ala math.round() (afronden) & math.sqrt() (vierkantswortel)

Code:
#include <iostream>
using namespace std

int main()
{
    float a, b, c, d, oplossing1, oplossing2;
    cout <<"a =?" <<endl;
    cin >> a;
    cout <<"b=?" <<endl:
    cin >>b;
    cout <<"b=?" <<endl;
    cin >>c;
    
d = (b-4*a*c);
oplossing1= (-b+(d/d))/(2*a);
oplossing2= (-b-(d/d))/(2*a);

if (d<0)
{
cout <<"X1=" << oplossing1 <<endl;
cout <<"X2=" << oplossing2 <<endl;
}
else
{
cout <<"ledige verzameling" <<endl;
}

cin.get();

return 0;
}

Shai Hulud

Legacy Member
RaZoR, integers zijn gehele getallen. In dit geval moeten het echt wel float's zijn, anders krijg je verkeerde resultaten:

int a = 5, b = 2;
float c = 5, d = 2;

cout << a / b << endl;
cout << c / d << endl;

Dit zal de volgende output geven:

RaZoR be

Legacy Member
Shai Hulud zei:
RaZoR, integers zijn gehele getallen. In dit geval moeten het echt wel float's zijn, anders krijg je verkeerde resultaten:



Dit zal de volgende output geven:


sorry idd, de discriminant enz moeten floats zijn, nie bij nagedacht just :D
heb het effe aangepast ;)

killgore

Legacy Member
Code:
#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    float a, b, c, d;
    
    do
    {
		if(!cin.good()) { cin.clear(); cin.ignore(1024,'\n'); }
		cout <<"a =?";
        cin >> a;
        cout << endl;
    }
    while(!cin.good());
    
    do
    {
		if(!cin.good()) { cin.clear(); cin.ignore(1024,'\n'); }
    	cout << "b=?";
        cin >> b;
        cout << endl;
    }
    while(!cin.good());
    
    do
    {
		if(!cin.good()) { cin.clear(); cin.ignore(1024,'\n'); }
    	cout << "c=?";
        cin >> c;
        cout << endl;
    }
    while(!cin.good());
    
	d = (b*b-4*a*c);

	if (d>0)
	{
		cout <<"X1=" << (-b+sqrt(d))/(2*a) <<endl;
		cout <<"X2=" << (-b-sqrt(d))/(2*a)  <<endl;
	}
	else
	{
		cout << "X1=" << -b/(2*a) << "+" << sqrt(-d)/(2*a) << "i" << endl;
		cout << "X2=" << -b/(2*a) << "-" << sqrt(-d)/(2*a) << "i" << endl;
	}

	cin.clear();cin.ignore();
	cin.get();
	return 0;
}
deze code is afaik AF.

edit: en ook zowat de enige hier die ffs de juiste methode voor vkv aanhaalt :/.

Shai Hulud

Legacy Member
Tijd voor stijlkritiek dan :)

  1. Je doet drie keer hetzelfde, maar dan voor een verschillende variabele. Dat staat duidelijk beter in een aparte functie.
  2. Probeer output en berekening gescheiden te houden. Je kan het dan gemakkelijker in een aparte functie stoppen en eventueel hergebruiken. Het is ook veel duidelijker wat er gebeurt.
  3. Zet geen twee statements op één lijn.
  4. Indenteer de if statements.
  5. De do-while loop ziet er verdacht uit, aangezien je eerst cin.good() test in de loop conditie, en dan nog eens in je if statement.
  6. Magic numbers! Waarom 1024 en geen 1025? Gebruik een constante met een duidelijke naam.

killgore

Legacy Member
1: ik ga er van uit dat iemand bij een eerste c++ programma nog niet veel meer zal doen als wat if's en berekeningen in de main.
2: same as hierboven
3: bullshit, in deze situatie zie ik echt niet waarom je ignore en clear niet op 1 lijn mag zeggen, ze doen namelijk 1 ding: de input resetten.
4: if is geïndenteerd, is enkel iets misgelopen met c/p
5: de cin input staat standaard op goed, als ik een while(!cin.good()) doe gaat em dus nooit aan dat stuk komen -> do-while. Die if is er omdat dat stuk specifiek eigenlijk wel pas mag aangeroepen worden als de cin niet meer goed is.
6: defaults. In men eigen progs gebruik ik constanten, dit is een verdomd voorbeeldprogrammatje.

Ik zei trouwens dat de code AF was, de programmastructuur kan veel beter.

jodeman

Legacy Member
Speciale manier van programmeren :). Daarom niet slecht he.

1. Je kan dat ook doen zonder een functie aan te roepen.
3. Ik zou ook niet alles op één lijn zetten maar gewoon comments bijzetten, voor betere leesbaarheid van de code.

Rest moei ik mij niet mee ;)

nickman

Legacy Member
Mischien ook ergens is controleren of de variabele "a" niet 0 is en eventueel een exeption trowen ofzo?
Anders gaat je programma nogal lelijk crashen denkik ;)

RaZoR be

Legacy Member
nickman zei:
Mischien ook ergens is controleren of de variabele "a" niet 0 is en eventueel een exeption trowen ofzo?
Anders gaat je programma nogal lelijk crashen denkik ;)
lol, in je eerste programma toch niet...

killgore

Legacy Member
nickman zei:
Mischien ook ergens is controleren of de variabele "a" niet 0 is en eventueel een exeption trowen ofzo?
Anders gaat je programma nogal lelijk crashen denkik ;)

aha

correct, wassek vergeten :).

edit: en @jodeman: men coding style is algemeen gezien zeker niet apart, weet niet meer onder welke conventies hij valt. Enige reden dat ik hier die 2 statements op een lijn zet is omdat dat voor mij 1 commando is (in men eigen code staat dat meestal ook als 1 macro :p).

Buiten dat de structuur hier veel beter kan door het gebruik van functies zie ik niet in wat er speciaal is aan die manier van programmeren :/?
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan