+2 votes
81 views

a dhe b jane emeruesi te thyesave.Sa me thjesht ju lutem

in Programim nga (190 points)   | 81 views
pas pak oreve do te merrni pergjigje.
Mund të shpjegosh rregullin e shenjës së kufizave? Prsh është + - - + + - - + ... ?

2 Answers

+1 vote

Unë nuk e kuptoj rregullin e shenjave të kufizave, pasi dhe pyetjen nuk e ke parashtruar qartë, por kjo është një zgjidhje nqs të gjitha kufizat do të ishin pozitive. (për një rregull tjetër, shenja e kufizave ndërrohet lehtë tek loop-i i dytë i funksionit që llogarit shumën e kufizave)

#include <stdio.h>

struct Term
{
    long double numerator;
    long double denominator;
};

struct Term getNextTerm(struct Term previous)
{
    struct Term next;
    next.numerator = previous.numerator + previous.denominator + 1.0;
    next.denominator = previous.denominator * previous.denominator;
    return next;
}

struct Term getFirstTerm()
{
    struct Term first;
    first.numerator = 1.0;
    first.denominator = 3.0;
    return first;
}

long double getTermValue(struct Term term)
{
    return term.numerator / term.denominator;
}

long double getSum(unsigned int n)
{
    struct Term kufizat[n];
    kufizat[0] = getFirstTerm();
    unsigned int index;
    for(index = 1; index < n; index++)
    {
        kufizat[index] = getNextTerm(kufizat[index-1]);
    }
    long double sum = 0;
    for(index = 0; index < n; index++)
    {
        sum += getTermValue(kufizat[index]);
    }
    return sum;
}

void printSum(unsigned int n)
{
    printf("Shuma e %u kufizave te para te vargut eshte %Lf", n, getSum(n));
}

void test()
{
    unsigned int n;
    for (n = 1; n < 10; n++)
    {
        printSum(n);
    }
}

int main(int argc, const char * argv[])
{
    unsigned int n = 5; // Numri i kufizave te vargut
    printSum(n);
    return 0;
}

Duhet të kuptosh se për shkak se numëruesi ka rritje lineare ndërsa emëruesi rritje eksponenciale, diferenca ndërmjet tyre bëhet shumë shpejt shumë e madhe, dhe si pasojë kompjuteri e vlerëson me 0 vlerën e kufizave me n > 5. Kjo shihet qartë nëse thërret funksionin test() i cili printon vlerën e vargjeve me n nga 1 në 9.

Shuma e 1 kufizave te para te vargut eshte 0.333333
Shuma e 2 kufizave te para te vargut eshte 0.888889
Shuma e 3 kufizave te para te vargut eshte 1.074074
Shuma e 4 kufizave te para te vargut eshte 1.088858
Shuma e 5 kufizave te para te vargut eshte 1.089013
Shuma e 6 kufizave te para te vargut eshte 1.089013
Shuma e 7 kufizave te para te vargut eshte 1.089013
Shuma e 8 kufizave te para te vargut eshte 1.089013
Shuma e 9 kufizave te para te vargut eshte 1.089013

Siç shihet, vlera e vargut nuk ndryshon kur n > 5. Vlera e vargut që llogaritet është gjithashtu limiti i vargut që arrihet të llogaritet nga kompilatori i gjuhës C ose kompjuteri që egzekuton programin.

Gjithashtu dhe për vargje të ngjashme ku ndryshon vetëm shenja e kufizave por jo vlera absolute e tyre (ose diferenca e madhe ndërmjet numëruesit dhe emëruesit), limiti do të arrihet me po të njëjtën shpejtësi.

nga (220 points)  
0 votes
    int main(){
 float a ; 
float b; 
float sum; 
sum=1/3 -5/9 -15/81 +... (a+b+1)/(b*b);
 cout<<sum; 
return 0;
 }

Nuk e kuptoj se cfare do te afishosh por besoj se ky kod nuk funx...

nga Fillestar (1.4k points)  
Mirë se vini në mepyet.al, forumi ku mund të bëni pyetje dhe merrni përgjigje nga anëtarët e tjerë të komunitetit.

  1. Fiona Hamzaj

    130 pikë

  2. joylaragel

    100 pikë

  3. menangpanda

    100 pikë

  4. GauthierBoel0

    100 pikë

Dhurata mujore
1. Vendi pare: Profesor
2. Vendi dyte: Mjeshtër
3. Vendi 3: Student

31 në linjë
0 Antar dhe 31 mysafir
Vizitat sot : 3111
Vizitat e djeshme : 6980
Të gjitha Vizitat : 770697
77 questions
141 answers
108 comments
5,590 users