Pereiti prie turinio

Gal kas padėtų pataisyti paprastą c programą ?


Rekomenduojami pranešimai

Sveiki. Seniau rašiau dėl C programos, kuri atspausdintu reikiamo tikslumo skaičių PI. Programą iš principo padaryti pavyko, bet atsirado daug klaidų, kurių pataisyt nelabai suvokiu kaip. Programa veikia su kai kuriais skaičiais tik, reikia, kad veiktų su visais, be to spausdina per daug skaičių, pvz paprašau 15 -> spausdina 16 ir toliau didėja. Gal pastebėsit klaidų programinių ar loginių.

 


#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#define DIGITS 10000 // skaitmenu daliklis
#define ARRAY  2000

int first = 0;

void pi(int skaicius) {

  int ITER = (skaicius * 14);
   int liekana = ITER % 4;
   if (liekana != 0 )
       ITER = ITER + liekana;
   ITER = ITER / 4;
   int digits[iTER + 1]; // +1 nes pirmas elementas nulius
   for (int i = 1; i <= ITER; i++) {
       digits[i] = ARRAY;
}
   for (int i = ITER; i > 0; i -= 14) { // 350 / 14 = 25 ciklai * 4 skaiciai = 100 skaiciu, iteraciju skaicius / 14 = ciklu skaicius tiksliam norimam skaiciui
       int sum = 0; //toliau prasideda gregoro leibnico algoritmas
       for (int j = i; j > 0; j--) {
		sum = sum * j + DIGITS * digits[j];//iš gregoro leibnico algoritmo
           digits[j] = sum % ( j * 2 - 1);
           sum /= j * 2 - 1;//iš  gregoro leibnico algoritmo
       }
       if (i == ITER) {
		printf("3.%03d\n", (first + sum / DIGITS) - 3000); // salinam trejetuka ir pridedam 4 skaicius po kableliu (toliau viska kartojam tiek kiek iteraciju)
    	} else
       if ((i <= 14) && (liekana != 0) ){
           printf("%04d\n", first + sum / DIGITS);
           printf("\n\n P.S reik padaryt kad nespausdintu %d skaiciu(-aus), nebesuprantu kaip tik\n\n", (4-liekana));
       }
       else {
		printf("   %04d\n", first + sum / DIGITS);
       }
       first = sum % DIGITS; // Leaving 4 last digits
   }
}
int main() {
   int skaicius;
   a11: //kartojam  nuo cia
   printf("PI apytiksliai lygu 3.141, kiek dar PI skaiciu norite gauti ? \n ");
   scanf ("%d",&skaicius);
   if(skaicius<6)
   printf("tokiu mazu skaiciu tikrai neskaiciuosiu\n\n");
   else
       {
           printf("Skaiciuoju:\n "); pi(skaicius);
       }
   goto a11; //kartojam
system("PAUSE");

}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

      if (i == ITER) {
                       printf("3.%03d", (first + sum / DIGITS) - 3000); // salinam trejetuka ir pridedam 4 skaicius po kableliu (toliau viska kartojam tiek kiek iteraciju)
       } else
       if ((i <= 14) && (liekana != 0) ){
           printf("%04d", first + sum / DIGITS);           
       }
       else {
                       printf("%04d", first + sum / DIGITS);
       }
       first = sum % DIGITS; // Leaving 4 last digits
   }
   printf("\n");
}

 

Dabar spausdints pilna skaičių, o šiaip čia formulėj pas tave kažkokia klaida yra nes kiek tikrinau visuomet po 3,141 eina 9 - 3,1419...nors turėtų būt 3,1415.. Tyngiu labai gilintis į formulę :/

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...