Kezdőoldal » Számítástechnika » Programozás » Miért add rossz eredményt ez...

Miért add rossz eredményt ez a kód? (c++)

Figyelt kérdés

Tehát az lenne a célja ,hogy meg mondja ,hogy a vektor melyik két eleme között legnagyobb a különbség.

#include <iostream>

#include <vector>

using namespace std;


int main()

{

vector<int>v;

v.push_back(1);

v.push_back(2);

v.push_back(3);

v.push_back(4);

v.push_back(5);



int b=3;

for(int k=3;k<v.size();k++){ //Ez megszámolja ,hogy hányszor fusson le a következő ciklus.Nem ez okozza a probélmát szerintem.

b=b+k;

}

int i=0;

int c=0;

while(i<b){i++;

for(int k=0;k<v.size();k++){

if(c>v[i]-v[k]){c=v[i]-v[k];

}


}


}

cout<<c;

return 0;

}


2016. szept. 22. 18:56
 1/7 A kérdező kommentje:
Erre -5 add vissza pedig (1-5) -4 kellene legyen
2016. szept. 22. 18:58
 2/7 anonim ***** válasza:

Kezdjük ott, hogy azt állítod a program azt mondja meg, hogy melyik két elem közt a legnagyobb a különbség. De a programod a különbséget adja vissza és nem a két elemet.


Egyébként itt van egy gebasz:

if(c>v[i]-v[k]){c=v[i]-v[k];

Ez az algoritmus egyértelmű hogy a lehető legkisebb számra állítja c-t: Ha c NAGYOBB valaminél, akkor c legyen az a valami.


De ezzel a b-vel és k-val való bűvészkedéssel is bajok vannak. Minek kell azt a két 3-mast összeadni? Az a legelső for ciklus egyáltalán minek?


Ott is baj van hogy ha i=4, akkor még a while(i<b) igaz, és egyből megnöveled i-t eggyel. Mert v[5] nincs is.

2016. szept. 22. 19:31
Hasznos számodra ez a válasz?
 3/7 anonim ***** válasza:

Szerintem ezt feleslegesen túlbonyolítod.

Egyszerűsítsd:

[link]

2016. szept. 22. 20:16
Hasznos számodra ez a válasz?
 4/7 anonim ***** válasza:
Ebben a kódban az összes lehetséges tipikus programozói hiba el van követve, tanítani lehetne belőle.
2016. szept. 22. 20:24
Hasznos számodra ez a válasz?
 5/7 anonim válasza:

Szerintem ti ezt mind túlbonyolítjátok - a legnagyobb különbség természetesen a legkisebb és a legnagyobb érték között lesz.



int main()

{

std::vector<int> v = { 1, 2, 3, 4, 5 };


int iMinIndex = std::distance(v.begin(), std::min_element(v.begin(), v.end()));

int iMaxIndex = std::distance(v.begin(), std::max_element(v.begin(), v.end()));


std::cout << "Vektor Indexe --> min szam: " << iMinIndex << " -- max szam: " << iMaxIndex << std::endl;


}



Megnézzük std::distance -el hogy hol vagyunk a vektor elejéhez képest, ezzel megkapva az effektív pozíciónkat a vektorban, aminek ez a vége:


Vektor Indexe --> min szam: 0 -- max szam: 4

2016. szept. 22. 20:36
Hasznos számodra ez a válasz?
 6/7 A kérdező kommentje:
Köszönöm a válaszokat.Az utolsó válasz nekem még bonyolult ,még nem tartok az obijektum orientált programozásnál ,mert először ez szeretném megérteni.A második válaszban kapott linkben csak 1 dolgot nem értek azt ,hogy az első ciklusnál "for (int i = 0; i < v.size() - 1; i++) " miért kell kivonni 1-et a v.size()-ból.
2016. szept. 23. 17:24
 7/7 anonim ***** válasza:
Hol van itt objektum orientált programozás?
2016. szept. 23. 17:36
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!