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

Tabele, pętle, warunki. Pomocy!

Ostatnio zmodyfikowano 2011-02-10 11:10
Autor Wiadomość
Vercevales
Temat założony przez niniejszego użytkownika
Tabele, pętle, warunki. Pomocy!
» 2011-01-31 16:03:38
Od kilkunastu godzin siedzę nad pewnym zadaniem, które pojawiło się na maturze rok temu.
Nie mogę dojść do końca.
Oto zadanie:
http://img201.imageshack.us/img201/8637/201102091839231024x768s.png

Jako, że nie umiem jeszcze bawić się plikami tekstowymi postanowiłem stworzyć program- kalkulator do zadania 5.
Zacząłem od podpunktu a)

Ułożenie funkcji, które obliczają cenę w zależności od ilości sztuk oraz firmy nie stanowiły problemu.
Zapisanie do tablicy ilości, które bardziej się opłacają u producenta A, też nie stanowiło problemu.

Nie mogę jednak dojść do tego jak rozdzielić poszczególne przedziały na odrębne wiersze tabeli.

Udało mi się jedynie wymęczyć pozbycie się "Segmentation fault".

Wklejam wam kod, który, jeśli zrozumiecie, może być pomocny.

C/C++
#include <iostream>

float prodA( int x )
// x oznacza ilość sztuk
{
    float k;
   
    if( x <= 500 )
    {
        k = x *( 1 - 0.15 ) * 12;
    }
    else
    {
        k = x *( 1 - 0.25 ) * 12;
    };
   
    return k;
}

float prodB( int x )
// x oznacza ilość sztuk
{
    float k;
   
    if( x <= 300 )
    {
        k = x *( 1 - 0.1 ) * 12;
    };
   
    if(( x > 300 ) and( x <= 600 ) )
    {
        k = 300 *( 1 - 0.1 ) * 12 +( x - 300 ) *( 1 - 0.25 ) * 12;
    };
   
    if( x > 600 )
    {
        k = x *( 1 - 0.35 ) * 12;
    };
   
    return k;
}

// NO! I teraz będą schody...

int main()
{
    int s = 0;
    int lepiej_A[ 10 ][ 110 ];
    int i = 0;
    int j = 0;
    int u = 0;
    int y = 0;
    int g = 0;
    float a;
    float b;
   
    do
    {
       
        s = s + 10;
       
        a = prodA( s ); // koszt u A
        b = prodB( s ); // koszt u B
       
        if( a < b ) // A się bardziej opłaca przy tej ilości sztuk
        {
            lepiej_A[ i ][ g ] = s;
            g++;
        };
       
        if( b < a ) // B się bardziej opłaca przy tej ilości sztuk
        {
            g++;
        };
       
        if( a == b ) // wychodzi na to samo przy tej ilości sztuk
        {
            g++;
        };
       
       
       
    } while( s != 1010 );
   
    do
    {
        while(( lepiej_A[ i ][ j ] ) -( lepiej_A[ i ][ j - 1 ] ) == 10 )
        {
            j++;
        }
       
        y = j;
       
       
        while(( lepiej_A[ i ][ y ] ) -( lepiej_A[ i ][ y - 1 ] ) <= 0 )
        {
            y++;
        };
       
        // rozdzielanie na osobne wiersze tablicy
       
       
        while(( lepiej_A[ i ][ y ] ) -( lepiej_A[ i ][ y - 1 ] ) >= 10 )
        {
            lepiej_A[ i + 1 ][ u ] = lepiej_A[ i ][ y ];
            lepiej_A[ i ][ y ] = 0;
            y++;
            u++;
        };
        i++;
        u = 0;
        j = 0;
       
    } while( i != 9 );
   
   
    for( i = 0; i <= 9; i++ )
    {
        std::cout << std::endl;
        std::cout << "Tabela lepiej_A" << "[" << i << "]" << " :  ";
        for( j = 0; j <= 101; j++ )
        {
            std::cout << lepiej_A[ i ][ j ] << "  ";
        };
    };
   
   
    return 0;
}
Może nie jestem w stanie zrobić tego zadania znając pętle, tablice, funkcje?

PS. ciekaw jestem ile nowych niecenzuralnych słów udało mi się wymyślić przez czas trwania moich prób

Dodam, że nie chcę gotowca, tylko pomocy i objaśnień jak to zrobić :)

//edit: dodałem link do screen'a zadania
P-27580
malan
» 2011-01-31 16:09:15
Które to zadanie?
/edit: Czwarte, ok ;p
P-27581
Vercevales
Temat założony przez niniejszego użytkownika
» 2011-01-31 16:13:04
EEE.
Piąte :D
P-27583
malan
» 2011-01-31 16:19:33
Struktury byłyby tu pomocne...
P-27586
Vercevales
Temat założony przez niniejszego użytkownika
» 2011-01-31 16:28:28
Więc będę się dalej dokształcał, a potem do tego wrócę :)
Myślałem, że jestem już w stanie to zrobić.
P-27591
Vercevales
Temat założony przez niniejszego użytkownika
» 2011-02-09 18:48:17
Udało mi się zrobić podpunkt a i b bez użycia struktur, lecz teraz mam problem z podpunktem c.

to link do zadania:
http://img201.imageshack.us/img201/8637/201102091839231024x768s.png

Wiem, że tych sztuk powinno być 550, ale niestety mój program pisze, że powinno ich być 500 ;/
C/C++
#include <iostream>
#include <fstream>

float prod_A( int x )
{
    float k;
   
    if( x <= 500 )
    {
        k = x *( 1 - 0.15 ) * 12;
    }
   
    else
    {
        k = x *( 1 - 0.25 ) * 12;
    }
   
    return k;
}


float prod_B( int x )
{
    float k;
   
    if( x <= 300 )
    {
        k = x *( 1 - 0.1 ) * 12;
    }
   
    if( x > 300 and x <= 600 )
    {
        k = 300 *( 1 - 0.1 ) * 12 +( x - 300 ) *( 1 - 0.25 ) * 12;
    }
   
    if( x > 600 )
    {
        k = x *( 1 - 0.35 ) * 12;
    }
   
    return k;
}

int main()
{
    std::fstream plik;
    plik.open( "/home/karol/Pobrane/Matura informatyka/Dane_PP/zadanie5.txt", std::ios::out | std::ios::trunc );
   
    /*
             { ... podpunkty a i b ... }
    */
   
    // podpunkt c
   
    std::cout << "koszt 500 sztuk w B : " << prod_B( 500 );
    std::cout << "\nKoszt 550 sztuk w A : " << prod_A( 550 ) << std::endl;
   
    int a;
    int b = prod_B( 500 );
    int t = 10;
   
    do
    {
        a = prod_A( t );
        t = t + 10; // chcę otrzymać t minimalnie większe od oczekiwanego
    } while( a <= b );
   
    plik << "\nOdpowiedź do podpunktu c: " <<( t - 10 ); // tu powinno zapisać oczekiwaną liczbę sztuk (550) niestety, wypisuje mniej
   
    plik.close();
   
    return 0;
}
P-28104
malan
» 2011-02-10 10:26:37
To zadanie jest typowo do Excela ;p.

Co do programu- zobacz jak rozkładają się koszty w przedziale <400;600>:
Ilość sztukProducent AProducent B
400 4080 4140
410 4182 4230
420 4284 4320
430 4386 4410
440 4488 4500
450 4590 4590
460 4692 4680
470 4794 4770
480 4896 4860
490 4998 4950
500 5100 5040
510 4590 5130
520 4680 5220
530 4770 5310
540 4860 5400
550 4950 5490
560 5040 5580
570 5130 5670
580 5220 5760
590 5310 5850
600 5400 5940
Widzisz o co chodzi? ;)
P-28131
Vercevales
Temat założony przez niniejszego użytkownika
» 2011-02-10 11:10:26
Założyłem, że ceny do tego momentu będą zawsze mniejsze u producenta A niż u producenta B, przy czym muszę poszukać liczb sobie najbliższych wśród producenta A i B.
Nie wiem czy dobrze ująłem to w słowa, ale rozumiem o co chodzi.

Dziękuję Malanie!
P-28134
« 1 »
  Strona 1 z 1