Liber utworzono 17 października 2007 utworzono 17 października 2007 Siema! mam progs do liczenia l pierwszych. jednak bazuje on na typie zmiennej: integer, ktorej zakres jest mi niewystarczajacy. walnalem wiec typ:extended i tu pojawia sie moje pytanie. Podaje czesc "liczaca" kodu: var dowyns, odwyns, i, pier, c : Extended; //zmienne procedury generacji liczb ilp, tt : currency; // zmienne dodatkowe (do object pascala) wyn : AnsiString; // label ddd;beginButton1.Caption := '>Generuje<';ilp := 0; //ilosc liczb pierwszych (zmienna dodatkowa)dowyns := strtofloat(odwyn.Text); //liczba ododwyns := strtofloat(dowyn.Text); //liczba dott := GetTickCount; //Pobranie czasuwyn := 'Liczby pierwsze od ' + floattostr(odwyns) + ' do ' + floattostr(dowyns) +(Chr(13) + Chr(10)); //taki ciągo do wynikui := trunc(odwyns/2)*2-1; //nie wiem co napisałem;-)//<początek procedury generowania while (i < dowyns-1) do begin //pętla glowna wybierająca liczby do sprawdzenia i := i + 2; // i to wybrana liczba c := 1; // c to liczba do dzielenia pier := trunc(sqrt(i)+2); // do tej liczby nalerzy dzielic aby otrzymac liczbę pierwszą while c < pier do begin c := c + 2; If i mod c = 0 then GoTo ddd; end; wyn := wyn + floattostr(i) + ', '; //jesli to liczba pierwsza to dojdzie do ilp := ilp + 1; //tej linii i zostanie zapisana;-) gauge1.Progress := trunc(((i-odwyns)/(dowyns - odwyns))*100);ddd: end;//>koniec procedury generowania chodzi o zaznaczony na czerwono obszar kodu. jezeli zrobie na integer to dziala, a przy tym juz nie. probowalem tez currency i tez lipa. Pls pomozcie:D A moze zna ktos jakis lepszy algorytm?
onna komentarz 18 października 2007 komentarz 18 października 2007 Nie wiem jak pozostali ale nie widze tego pola na czerwono zaznaczonego
Liber komentarz 18 października 2007 Autor komentarz 18 października 2007 If i mod c = 0 then GoTo ddd; Po prostu procedura kolorowania chyba nie zadzialaa jeszcze to sprawdze:D ahaa no bo to jest kod:D wiec tu nie dziala kolorowanie wiec chodzi o 8wiersz od dolu kodu
grucha komentarz 18 października 2007 komentarz 18 października 2007 i mod c=0 Kiedy Robisz dzielenie modulo jakiejś liczby musi ona być typu całkowitego, a typ Extendet z pewnością takim nie jest Btw. Taka wskazówka na przyszłość: w pascalu raczej nie używa się instrukcji skoku GoTo
Liber komentarz 19 października 2007 Autor komentarz 19 października 2007 w pascalu raczej nie używa się instrukcji skoku GoTo Kompilator - delphi 7:D a typ Extendet z pewnością takim nie jest to jaki jest najwiekszy podobny do integer? i jak sie robi nim skroty typu xxxtostr (np inttostr ?)
grucha komentarz 20 października 2007 komentarz 20 października 2007 Co do GoTo, nie chodzi o to, że tej instrukcji tam nie ma, tylko do wyboru jest tyle pętli, instrukcje wyboru, że tej instrukcji raczej się nie stosuje, bo zaburza strukturę programu, ale to już zależy od indywidualnego podejścia to jaki jest najwiekszy podobny do integer? i jak sie robi nim skroty typu xxxtostr (np inttostr ?) Jeżeli piszesz w Delphi to użyj Int64, konwersja wygląda tak samo jak w przypadku integer czyli IntToStr i vice versa
Liber komentarz 20 października 2007 Autor komentarz 20 października 2007 int64 to tez troche maly przedzial. a nie mozna tak zrobic ze sam bym zrobil typ, np wpisal od 0 do np 4x10^10000 ?
grucha komentarz 21 października 2007 komentarz 21 października 2007 W sumie jak Ci zależy na tak dużym przedziale, to zastosuj ten Extended. Tylko później w miejscu i mod c=0 musisz to i przekształcić na typ całkowity. I tutaj pojawia się problem, ponieważ możesz zastosować do tego Round, ale jeżeli spojrzymy na definicje tej funkcji: function Round(X: Extended): Int64; to widzimy, że i tak wynik będzie tylko typu Int64. Dlatego nie widzę innej możliwości. Kiedyś widziałem, że ktoś napisał coś takiego w asm, ale to było dawno, i to było do zastosowania w Turbo Pascalu i teraz nawet nie pamiętam, czy do na prawdę służyło do tego. Tak, że szukaj dalej, może coś Ci się uda znaleźć
Liber komentarz 21 października 2007 Autor komentarz 21 października 2007 ;/ szkoda.. a nie idzie zrobic wlasnego typu zmiennych? np Liberstyp : 0...1231231231231123 ? a jakby cos takiego moze przez tablice rozwiazac? da rede? +1pt 4 grucha:D
grucha komentarz 21 października 2007 komentarz 21 października 2007 Oczywiście możesz zastosować własny typ danych np: type TMojTyp = 0..9999999999999999999; Ale później np. tą zmienną musisz zamienić na String a do tego musisz zastosować IntToStr, i tutaj pojawia Ci się błąd [DCC Error] Unit1.pas(10): E2011 Low bound exceeds high bound Czyli jesteśmy w punkcie wyjścia Ale jak wspomniałem, sposób może istnieć, tak że się nie zniechęcaj
Liber komentarz 21 października 2007 Autor komentarz 21 października 2007 (edytowane) typeTMojTyp = 0..9999999999999999999; Probowalem juz tym, ale to i tak jest za male:D hehehe a w dodatku tak jak napisałeś nie mozna zmienic na string.... pogadam z gatesem moze w nowym windowsie bedie dodatek ze mozna nieskonczana liczbe w typie walnac hahahhahaha:D:D JOKE na razie zostaje czekanie i myslenie, a takze szukanie odpowiedzi w necie:D DzIeNkI pozdro.
Wciąż szukasz rozwiązania problemu? Napisz teraz na forum!
Możesz zadać pytanie bez konieczności rejestracji - wystarczy, że wypełnisz formularz.