C++ Najväčšia vzdialenosti - neviem kde mám chybu

Programovacie jazyky, rady, poradňa...
Mick_14
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 458
Registrovaný: 07 aug 2008, 18:44

C++ Najväčšia vzdialenosti - neviem kde mám chybu

Príspevok od používateľa Mick_14 »

Ahojte, potreboval by som poradiť s týmto programom mám ho už hotový len niekde je tam nejaká chyba a neviem kde, maximum by to malo vypisovať 3.74 ale vypisuje mi to iné maximum 3 ..ďakujem za každú radu ktorá pomôže :)
..používám Visual Studio C++ 2010

Kód: Vybrať všetko

    #include "stdafx.h"
    #include <iostream>
    #include <fstream>
    using namespace std;
     
    void nacitajCislaZoSuboru() {
            fstream iSubor("vstup.txt");
            if (iSubor.is_open()) {
            double x[5],y[5],z[5]; 
            int i=1;
                    while (!iSubor.eof()) {
                            iSubor >> x[i] >> y[i] >> z[i];  // nacitanie cisel zo suboru vstup.txt
                            if(!iSubor.fail()){
                                    cout << "[" << x[i] << ", " << y[i] << ", " << z[i] << "] ";  // vypis cisel v tvare [1,2,3]
                            }
                            i++;
                    }
                    cout << endl;  
            double max=0;
            double vzd[5][5];
           
            int prvok_i, prvok_j;
                    for (int i=0; i<4 ;i++) {  
                            for (int j=0; j<4 ;j++) {
                                    if (i == j) // zabranenie pocitania nulovych hodnot, lebo vzdialenost tych istych prvkov by bola vzdy nula
                                    continue;
                                    vzd[i][j] = sqrt( pow((x[j]-x[i]),2) + pow((y[j]-y[i]),2) + pow((z[j]-z[i]),2) ); //j - je prvok od 0 po 4 a i sa mení postupne od 0 po 4 ...j0i0 ..j1i0 ..j2i0..j3i0..j0i1
                                    cout.precision(3); //nastavenie zaokruhlovania na 3 des. cisla ale nejako to nefuguje :/
                                    cout << "VZDIALENOST prvkov s indexmi: " << "[" << i << ", " << j << "]   je ---> " << vzd[i][j] << endl; //len vypis lebo neviem preco mi to pise to 1.6e+062
                                   
     
                                    if (i==0 && j==0) {
                                            max = vzd[i][j];  // zadefinovanie maxima
                                            prvok_i = i;     // toto bude 1 index prvokv s najvacsou vzdialenostou
                                            prvok_j = j;     // toto bude 2 index prvokv s najvacsou vzdialenostou
                                    } else {
                                            if (vzd[i-1][j-1]<vzd[i][j]) { //ak je nova vzdialenost vacsia ako predchzdzajuca tak sa do max priradi aktualna vzdialenost
                                                    max = vzd[i][j];
                                                    prvok_i = i;
                                                    prvok_j = j;
                                            }
     
                                    cout << "MAXIMUM JE: " << max << endl;
                                   
                                    }
                            }
                    }
                    cout << "Dva najvzdialenejsie body su: " << "[" << x[prvok_j] << ", " << y[prvok_j] << ", " << z[prvok_j] << "] " << "[" << x[prvok_i] << ", " << y[prvok_i] << ", " << z[prvok_i] << "] " << endl;
                    cout.precision(3); //zas nefunguje nejak :D
                    cout << "Ich vzajomna vzdialenost je: " << vzd[prvok_i][prvok_j] << endl;
     
                    iSubor.close();
            } else
            {
                    cout << "Subor sa nepodarilo otvorit" << endl;
            }
    }
     
     
    int main()
    {
            nacitajCislaZoSuboru();
            return 0;
    }
Prílohy
sshot-1.jpg
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8223
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: C++ Najväčšia vzdialenosti - neviem kde mám chybu

Príspevok od používateľa harrison314 »

Zdrojaky patria do tagov

Kód: Vybrať všetko

.

Skusal si debugger ?
Mick_14
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 458
Registrovaný: 07 aug 2008, 18:44

Re: C++ Najväčšia vzdialenosti - neviem kde mám chybu

Príspevok od používateľa Mick_14 »

v tom pastebin to vyzeralo ale prehladnejšie ...neskušal, lebo som to ešte nerobil nikedy tak ani neviem ako
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8223
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: C++ Najväčšia vzdialenosti - neviem kde mám chybu

Príspevok od používateľa harrison314 »

Este mam dve otazky a mozme sa pustit do opravovania
1) vzdy budu iba 4 body ?
2) ucil si sa uz vytvarat vlastne triedy alebo struktury ?
Mick_14
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 458
Registrovaný: 07 aug 2008, 18:44

Re: C++ Najväčšia vzdialenosti - neviem kde mám chybu

Príspevok od používateľa Mick_14 »

harrison314 napísal:Dost neprehladne, ale mam dve otazky?
1) vzdy budu iba 4 body ?
2) ucil si sa uz vytvarat vlastne triedy alebo struktury ?
1. no je to zadané takto, takže myslím že by stačilo keby to fungovalo len s týmito 4 bodmi
2. ešte nie, ale malo by sa to dať spraviť aj bez toho nie? ...nemohol by si to skúsiť spustiť prosím ťa, lebo ono to funguje len to zle počíta niektoré čísla ale neviem prečo
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8223
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: C++ Najväčšia vzdialenosti - neviem kde mám chybu

Príspevok od používateľa harrison314 »

Bez struktur sa to da spravit, len by ti to velmi sprehladnilo kod.
Hned prve co vidim, tak cisla nacitas do pola od indexu 1 ale iterujes od nuly.

double vzd[5][5]; rovno vyhod je to tam zbytocne,
takisto aj

Kód: Vybrať všetko

if (i==0 && j==0) {
                                            max = vzd[i][j];  // zadefinovanie maxima
                                            prvok_i = i;     // toto bude 1 index prvokv s najvacsou vzdialenostou
                                            prvok_j = j;     // toto bude 2 index prvokv s najvacsou vzdialenostou
                                    } else {
namiesto hoho si vzdialonost dvoch bodov ukladaj do premenej vnutri cyklov a potom ju porovnavaj s premnou max, ktoru prednastavis na -1.0 ( vsteky vzdialenosti budu kladne).
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: C++ Najväčšia vzdialenosti - neviem kde mám chybu

Príspevok od používateľa BX »

V zadaní je "načíta zo súboru vstup.txt body" a ďalej je "ukážka vstupu". To znamená, že nie, nemusia tam byť vždy len štyri. Radšej si to dorob.
Mick_14
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 458
Registrovaný: 07 aug 2008, 18:44

Re: C++ Najväčšia vzdialenosti - neviem kde mám chybu

Príspevok od používateľa Mick_14 »

harrison314 napísal: Hned prve co vidim, tak cisla nacitas do pola od indexu 1 ale iterujes od nuly.

double vzd[5][5]; rovno vyhod je to tam zbytocne,
takisto aj

Kód: Vybrať všetko

if (i==0 && j==0) {
                                            max = vzd[i][j];  // zadefinovanie maxima
                                            prvok_i = i;     // toto bude 1 index prvokv s najvacsou vzdialenostou
                                            prvok_j = j;     // toto bude 2 index prvokv s najvacsou vzdialenostou
                                    } else {
namiesto hoho si vzdialonost dvoch bodov ukladaj do premenej vnutri cyklov a potom ju porovnavaj s premnou max, ktoru prednastavis na -1.0 ( vsteky vzdialenosti budu kladne).
dal som to nacitat od indexu 0 a hentie veci som pomazal ale ako potom budem vedieť ktoré prvky mali tú najväčšiu vzdialenosť? (lebo ich potrebujem potom ešte vypísať)...max mám -1.0 a v tom vnorenom cykle for porovnávam ci je vzd>max
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8223
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: C++ Najväčšia vzdialenosti - neviem kde mám chybu

Príspevok od používateľa harrison314 »

budes si ich pametat v

Kód: Vybrať všetko

if(max<vzd)
{
  vzd = max;
  prvoj_i =i;
  prvok_j = j;
}

Mick_14
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 458
Registrovaný: 07 aug 2008, 18:44

Re: C++ Najväčšia vzdialenosti - neviem kde mám chybu

Príspevok od používateľa Mick_14 »

a to je všetko?
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8223
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: C++ Najväčšia vzdialenosti - neviem kde mám chybu

Príspevok od používateľa harrison314 »

Asi by si si mal zistit ci budu vo vstupnom subore vzdy 4 body, a ak nie tak to prerobit, lebo v zadani to nie je.
Ano, teda pokial to už ide spravne. Ak nejde pastni sem najnovsiu verziu zdrojaku.
Mick_14
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 458
Registrovaný: 07 aug 2008, 18:44

Re: C++ Najväčšia vzdialenosti - neviem kde mám chybu

Príspevok od používateľa Mick_14 »

áno, už mi to funguje, ďakujem veľmi pekne a zaujímalo by ma aj ako by sa to dalo spraviť tak hromadne nie len pre tie 4 body ..teda ak by si mal ešte čas poradiť mi s tým
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8223
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: C++ Najväčšia vzdialenosti - neviem kde mám chybu

Príspevok od používateľa harrison314 »

Najlepsie riesenie by bolo vyuzit struktutu spolu z listom alebo vektorom, ale s tym si sa asi nestertol.
Potom take primitivne riesenie je pouzit velke polia pre vstupy napr vekosti 1000, a potom si pri nacitavani do nejakej premnnej pocitat kolko bodov sa ti podarilo nacitat a ietarovat len nad nimi.
Mick_14
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 458
Registrovaný: 07 aug 2008, 18:44

Re: C++ Najväčšia vzdialenosti - neviem kde mám chybu

Príspevok od používateľa Mick_14 »

Kód: Vybrať všetko

 double x[1000],y[1000],z[1000];
            int i=0,kolko=0;
                    while (!iSubor.eof()) {
                            iSubor >> x[i] >> y[i] >> z[i];  // nacitanie cisel zo suboru vstup.txt
                            kolko++;
							if(!iSubor.fail()){
                                    cout << "[" << x[i] << ", " << y[i] << ", " << z[i] << "] ";  // vypis cisel v tvare [1,2,3]
                            }
                            i++;
                    }
                    cout << endl; 
            double max=0;
            double vzd;
           
            int prvok_i, prvok_j;
                    for (int i=0; i<kolko ;i++) { 
                            for (int j=0; j<kolko ;j++) {
no s tým som sa zatiaľ nestretol, to ľahšie riešenie by vyzeralo takto nejako?
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8223
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: C++ Najväčšia vzdialenosti - neviem kde mám chybu

Príspevok od používateľa harrison314 »

Podobne, len by si nemusel pocitat pocet nacitanych bodov a namiesto 3 poli by si mal jeden zoznam struktur Bod, ktora by mala suradnice x,y,z - potom by sa ti s tym lahsie programovalo, lebo suvisiace data by si mal pokope.
Mick_14
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 458
Registrovaný: 07 aug 2008, 18:44

Re: C++ Najväčšia vzdialenosti - neviem kde mám chybu

Príspevok od používateľa Mick_14 »

ok vďaka, teraz mi stačí keď to funguje aj takto, neskôr sa dostanem aj k tým štruktúram ...ďakujem za pomoc
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8223
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: C++ Najväčšia vzdialenosti - neviem kde mám chybu

Príspevok od používateľa harrison314 »

zamalo
Napísať odpoveď