Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Szukanie najmniejszej różnicy dwóch liczb z określonego zestawu liczb

Ostatnio zmodyfikowano 2013-06-16 14:47
Autor Wiadomość
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ę :)

C/C++
#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 )
{
    //cout<<var<<endl;
    float res;
    //char abc=var.str_c();
    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 );
   
    // cout<<res<<endl;
    return res;
}


int main( int argc, char * argv[] )
{
    float a;
    fstream plik;
    string tmp;
    vector < double > tablica;
    int k;
    int i;
    // float min;
    //    vector<double> tablica2;
   
    plik.open( "pp.txt", ios::in );
    if( plik.good() ) {
        while( !plik.eof() ) {
            //float kk;
            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 );
               
               
            }
        }
    }
    //cout<<najmniejsz_skladnik.size()<<endl;
    if(( najmniejsza_roznica.size() ) > 1 ) {
        for( int x = 0; x < najmniejsza_roznica.size(); x++ ) {
            //double a1;
            //double b1;
           
            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;
               
               
            }
           
        }
    }
   
}
P-85409
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.
P-85657
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
P-85661
MrPoxipol
» 2013-06-15 23:28:19
Nie widziałeś chyba nigdy na prawdę dużej ilości dołączonych nagłówków ;P
P-85662
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
P-85664
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?
P-85667
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.
P-85684
« 1 »
  Strona 1 z 1