[C++] Szukanie najmniejszej różnicy dwóch liczb z określonego zestawu liczb
Ostatnio zmodyfikowano 2013-06-16 14:47
rastaman697 Temat założony przez niniejszego użytkownika |
[C++] Szukanie najmniejszej różnicy dwóch liczb z określonego zestawu liczb » 2013-06-12 00:54:51 WItam Was wszystkich mam o to taki problem... Ma do napisanie program który, z wczytanych z pliku liczb wybierze te które dają najmiejszą różnicę... Siedzę juz 20 h i nie mam pomysłu jak zrobić to w momencie kiedy jest np 5 liczb w pliku i np 4(czyli 2 pary) dają najmniejszą różnicę. Jesli jest tak ze właśnie istnieje kilka par takich liczb to i tak trzeba je wszystkie pary wypisać .... Wiem że mój kod jest bardzo chaotyczny itd.... ale to wsio wynikiem tego ze nie mogłem sobie z Tym poradzić... Proszę Jeszce raz o pomoc.... Dziękuję :) #include <fstream> #include <iostream> #include <string> #include <vector> #include <sstream> #include <cstring> #include <cmath> #include <stdlib.h> #include <cstdlib> #include <iomanip> #define EXIT_MULTI 2; using namespace std;
float toDouble( string & var ) { float res; if(( var.compare( "F" ) ) == 0 ) { res = 96485.3399; return res; } if(( var.compare( "pi" ) ) == 0 ) { res = 3.1415926536; return res; } if(( var.compare( "c" ) ) == 0 ) { res = 299792458; return res; } if( var.compare( "G" ) == 0 ) { res =( 299792458 * pow( 10, - 11 ) ); return res; } res = strtod( var.c_str(), NULL ); return res; }
int main( int argc, char * argv[] ) { float a; fstream plik; string tmp; vector < double > tablica; int k; int i; plik.open( "pp.txt", ios::in ); if( plik.good() ) { while( !plik.eof() ) { getline( plik, tmp ); tablica.push_back( toDouble( tmp ) ); } plik.close(); } else return EXIT_FAILURE; vector < double > najmniejsz_skladnik; vector < double > najmniejsz_skladnik2; vector < double > najmniejsza_roznica; double static min = 10000000; for( i = 0; i <( tablica.size() ); i++ ) { for( k = 0; k <( tablica.size() ); k++ ) { if( tablica[ i ] == tablica[ k ] ) break; if( min ==( abs(( tablica[ i ] - tablica[ k ] ) ) ) ) { najmniejsz_skladnik.push_back( tablica[ i ] ); najmniejsz_skladnik2.push_back( tablica[ k ] ); najmniejsza_roznica.push_back( min ); } if(( min > abs( tablica[ i ] - tablica[ k ] ) ) &&( tablica[ i ] != tablica[ k ] ) &&( tablica[ k ] != tablica[ i ] ) ) { min = abs(( tablica[ i ] - tablica[ k ] ) ); najmniejsz_skladnik.push_back( tablica[ i ] ); najmniejsz_skladnik2.push_back( tablica[ k ] ); najmniejsza_roznica.push_back( min ); } } } if(( najmniejsza_roznica.size() ) > 1 ) { for( int x = 0; x < najmniejsza_roznica.size(); x++ ) { if( najmniejsz_skladnik[ x ] > najmniejsz_skladnik2[ x ] ) { cout.setf( ios::fixed ); cout.precision( 3 ); cout << "("; cout << najmniejsz_skladnik[ x ]; cout << ","; cout << najmniejsz_skladnik2[ x ]; cout << ") "; cout << "lub "; return EXIT_MULTI; } else { cout.precision( 3 ); cout.setf( ios::fixed ); cout << "("; cout << najmniejsz_skladnik2[ x ]; cout << ","; cout << najmniejsz_skladnik[ x ]; cout << ") "; cout << "lub "; } return EXIT_MULTI; } } if( najmniejsza_roznica.size() == 1 ) { for( int x = 0; x < najmniejsza_roznica.size(); x++ ) { cout.setf( ios::fixed ); if( najmniejsz_skladnik[ x ] < najmniejsz_skladnik2[ x ] ) { cout.precision( 3 ); cout.setf( ios::fixed ); cout << "("; cout << najmniejsz_skladnik2[ x ]; cout << ","; cout << najmniejsz_skladnik[ x ]; cout << ") "; return EXIT_SUCCESS; } else { cout.setf( ios::fixed ); cout.precision( 3 ); cout << "("; cout << najmniejsz_skladnik[ x ]; cout << ","; cout << najmniejsz_skladnik2[ x ]; cout << ") "; return EXIT_SUCCESS; } } } } |
|
DejaVu |
» 2013-06-15 21:54:19 Wczytaj liczby do tablicy, posortuj je i sprawdzaj później różnicę dwóch sąsiadujących liczb. |
|
cichociemny |
» 2013-06-15 22:57:27 Po ilosci plikow headers mozna pomyslec , ze piszesz program dla NASA. Uzyj iostream, fstream i iomanip /jesli chcesz okreslic dokladnosc analizowanych danysch/. Zadanie jest proste,wiec nie warto utrudniac. Posluchaj DejaVu |
|
MrPoxipol |
» 2013-06-15 23:28:19 Nie widziałeś chyba nigdy na prawdę dużej ilości dołączonych nagłówków ;P |
|
cichociemny |
» 2013-06-15 23:50:08 Juz na poczatku programowania warto myslec o szybkosci przetwarzania danych i to, ze kazdy niepotrzebnie umieszczony plik w head wydluza czas dzialania programu |
|
m4tx |
» 2013-06-16 10:16:18 Nieprawda. Jeśli nie używasz funkcji, które zadeklarowane są w dodanych nagłówkach to w jakiż to niby sposób ma się zwiększyć czas działania programu? |
|
pekfos |
» 2013-06-16 14:47:44 Po ilosci plikow headers mozna pomyslec , ze piszesz program dla NASA. |
Raczej można pomyśleć, że kiedyś sobie wypisał wszystkie, o jakich słyszał i teraz tylko kopiuje ;) Poza tym, mało widziałeś, jeśli wg Ciebie to jest dużo nagłówków. I skoro już się czepiamy, to ten define z 11 linii jest bez sensu. |
|
« 1 » |