kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii

Zaczęty przez bartsob5, 09 Październik 2006, 21:50

marcin20_21

Ja raczej za bardzo Ci nie pomogę, szukaj informacji u źródeł, czyli tam, gdzie to ktoś zrobił:)
url=http://www.puzzlepirates.com/register/welcome.wm?from=r490404][/url]

bartsob5

void obrotosciane2(int o,int k, int a, int x, int y)
{
//x,y - wspolrzedne srodka
//a(x+t1,y+v1); wspolrzedne rogow..
// b(x-v1,y+t1);
// c(x-t1,y-v1);
// d(x+v1,y-t1);
// a(x+t1,y+v1);
// x- pierwsza wspolrzedna punktu o ktorego sie obracam
// y- druga wspolrzedna
   setwritemode(1);
   moveto(x,y);
   lineto(x-((r/3)*sin(k*0.017453292)),y-((r/3)*cos(k *0.017453292)));
   lineto(x-((sqrt(10)/3)*r)*sin(M_PI-(k*0.017453292+ atan(3))),y+((sqrt(10)/3)*r)*cos(M_PI-(k*0.0174532 92+atan(3))));
   lineto(x-((sqrt(13)/3)*r)*sin(atan(1.5)-k*0.017453 292),y+((sqrt(13)/3)*r)*cos(atan(1.5)-k*0.01745329 2));
   lineto(x+(2*r*sin(k*0.017453292))/3,y+(2*r*cos(k*0 .017453292))/3);
   lineto(x,y);
//    delay(a);
/*    putpixel(x-((r/3)*sin(k*0.017453292)),y-((r/3)*cos (k*0.017453292)),2);
   putpixel(x-((sqrt(10)/3)*r)*sin(M_PI-(k*0.01745329 2+atan(3))),y+((sqrt(10)/3)*r)*cos(M_PI-(k*0.01745 3292+atan(3))),3);
   putpixel(x-((sqrt(13)/3)*r)*sin(atan(1.5)-k*0.0174 53292),y+((sqrt(13)/3)*r)*cos(atan(1.5)-k*0.017453 292),4);
   putpixel(x+(2*r*sin(k*0.017453292))/3,y+(2*r*cos(k *0.017453292))/3,5);
   putpixel(320,335,11);
   putpixel(x,y,6);
*/


/*    cotovt(k);
   moveto(x,y);
   moveto(x,y+r/3);
   lineto(x-v1,y+t1);
   lineto(x-t1,y-v1);
   lineto(x+v1,y-t1);
   lineto(x+t1,y+v1);

  for(b=o;b<k;b++)
  {
  cotovt(b);
  zegar(b);

  delay(a);
  zegar(b);
/*
  moveto(x+t1,y+v1);
  lineto(x-v1,y+t1);
  lineto(x-t1,y-v1);
  lineto(x+v1,y-t1);
  lineto(x+t1,y+v1);
  x=x+(t1/30);
  y=y+(v1/30);
  }
/*   line(x+t1,y+v1,x+t1,y+v1);
  line(x-v1,y+t1,x-v1,y+t1 );
  line(x-t1,y-v1,x-t1,y-v1);
  line(x+v1,y-t1,x+v1,y-t1);*/
}



jakby kto pytal, to jest moj algorytm na obkrecanie kwadratu wokol punktu lezacego na boku...

bartsob5

moze mi ktos pokazac jakis program napisany w jezyku c/c++ z wykorzystaniem biblioteki opengl albo allegro, i przedstawic jakis maly tutorial z czym to sie je?

chcialbym napisac taki windowsowy program, zeby wygladal jak powiedzmy

czyli oprocz otwierania okna, ustalania jego ksztaltu i koloru to jeszcze sposob robienia pol edit, combo, panelow i tym podobnych.

chcialbym dostac przyklad programu (nieskomplikowany!) z komentarzami, tudziez szerszym wyjasnieniem, oraz link do jakiegos lopatologicznego manuala.

p.s. ano i ma to sie dac zaimplementowac do dev-c++

D_T_G

Cytat: "bartsob5"moze mi ktos pokazac jakis program napisany w jezyku c/c++ z wykorzystaniem biblioteki opengl albo allegro, i przedstawic jakis maly tutorial z czym to sie je?

chcialbym napisac taki windowsowy program, zeby wygladal jak powiedzmy (...) czyli oprocz otwierania okna, ustalania jego ksztaltu i koloru to jeszcze sposob robienia pol edit, combo, panelow i tym podobnych.

Eeeeeee, zaprzęgać do tego ogl/allegro nie ma sensu.... Windows tam ma swoje biblioteki do takich okien + uchwyty i te sprawy, ale doświadczenia w tym nie mam :P A jak nie to możesz pobawić się w wxwidgets, w którym jest napisany boincmgr :)

Cytatchcialbym dostac przyklad programu (nieskomplikowany!) z komentarzami, tudziez szerszym wyjasnieniem, oraz link do jakiegos lopatologicznego manuala.

p.s. ano i ma to sie dac zaimplementowac do dev-c++

Znaczy, że w ANSI C++?


bartsob5

generalnie, mow do mnie jeszcze...

mialo byc lopatologicznie:P

o, czekaj, znalazlem takie biblioteki dla deva:) moze cos z tego bedzie...


a jeszcze takie pytanie...

znalazlem takiego tutoriala dla opengl, na podstawie ktorego napisalem

#include <gl/gl.h>
#include <windows.h>
#include <gl/glut.h>
int y=100,x=200,a;

int main()
{
glutInit(int *argc, char **argv);
glutInitDisplayMode(GLUT_DOUBLE||GLUT_RGB);
glutInitWindowSize(x,y);
glutCreateWindow(char *tytul);  
   
}


kompilator wykladal sie na lini 8, wiec moje pytanie brzmi: "co to jest to argc i argv, jak kiedy i po co sie tego uzywa, bo juz to kilkanascie razy widzialem, i wiem ze zapewne jest przydatne, ale nie wiem do czego"

D_T_G

Może powtórzę jeszcze raz - w OpenGL teoretycznie da się napisać interfejs tego typu aplikacji (najlepszym przykładem blender) ale lepiej rozglądnij się za tutorialem windows.h (chyba) niż gluta/ogl.

Cytat: "bartsob5"
#include <gl/gl.h>
#include <windows.h>
#include <gl/glut.h>
int y=100,x=200,a;

int main()
{
glutInit(int *argc, char **argv);
glutInitDisplayMode(GLUT_DOUBLE||GLUT_RGB);
glutInitWindowSize(x,y);
glutCreateWindow(char *tytul);  
   
}


kompilator wykladal sie na lini 8, wiec moje pytanie brzmi: "co to jest to argc i argv, jak kiedy i po co sie tego uzywa, bo juz to kilkanascie razy widzialem, i wiem ze zapewne jest przydatne, ale nie wiem do czego"

to są zmienne do przechwycenia przekazywanych z lini komend parametrów programu, które żeby przyjąc musisz zmodyfikować int main() na int main(int *argc, char **argv), przy czym argc to licznik argumentów (nazwa programu wliczona a zerowa, hehe) a arg to tablica przechowująca te parametry (powiedzmy, choć nie do końca). To Ci się przyda, ale jak mówię glutem póki co się nie zaprzątaj :P


bartsob5

no to w takim razie poprosze jakies wytlumaczenie z czym sie je wxwidgets, ale to juz moze czwartek/piatek, po tym, jak sam sobie wygooglam jakiegos tutoriala (narazie cos wyhaczylem z programem hello world, ale sie nie kompiluje, a nie chce mi sie nad tym myslec- mam inna robote;) )

bartsob5

ok. zainstalowalem wxDev-c++
robie w nim w zamysle program do rozwiazywania sudoku...
pierwszy problem:
po uruchomieniu programu w pola edit nie mozna kliknac myszka, natomiast tab przesuwa kursor pomiedzy 15 z 81 pol edit, i to tylko przez, ze sie tak wyraze pierwowzory (uzywalem kopiowania, i wolalbym tego drugi raz nie robic)

drugie pytanie:
jak (i gdzie) napisac funkcje zczytajaca teksty z pol edit po wcisnieciu guzika (zapewne klikam 2 razy na guzik i odsyla mnie do odpowiedniego miejsca, ale jak ta funkcja powinna wygladac?

3 pytanie
co to jest gauge po co sie to uzywa i czy uzywajac niezgodnie z przeznaczeniem moze zaszkodzic?

bartsob5

no i prosze! wersja beta mojego programu do rozwiazywania sudoku wyszla! :D
narazie rozwiazywanie nie jest zbyt doskonale.. rozwiazuje najtrudniejsze sudoku z tej strony http://www.krzyzowki.eu/sudoku.html w okolo 60% (probowalem rozwiazac tam 2 - 66,6% i 67% wypelnienia) a z najlatwiejszego powinien wypisac wszystko (probowalem raz - 100% z uzyciem najslabszego algorytmu)

w dodatku, trzeba przyznac, ze wyglada dosc niezle estetycznie... jak chce ktos przetestowac, to niech da znac ;)

Mchl

No ładnie :)
Ja chętnie potestuje na sudoku generowanych przez mojego palma.

W nagłych wypadkach wzywać przez: mail: mchlpl[at]gmail.com | PM|mchl[a]boincatpoland.org

AL


bartsob5

Cytat: "Mchl"No ładnie :)
Ja chętnie potestuje na sudoku generowanych przez mojego palma.

sudoku.rar

w paczce 4 pliki:
sudoku.exe
wiejscie.in
wejscie.in
wyjscie.in

wiejscie.in - z tego pliku wczytywana jest plansza poczatkowa (uzywana opcjonalnie)
wyjscie.in - pokazuje wynik i w jakich komorkach jakie sa jeszcze mozliwosci
wejscie.in - zachowuje plansze wczytana z interfejsu

sudoku.exe - pierwszy guzik wczytuje plancze z pliku wiejscie.in
drugi wczytuje wynik z wyjscia.in do komorek w interfejsie
trzeci uruchamia algorytm rozwiazujacy

guzik help->pomoc jeszcze nie dziala

w przypadku gdy nie rozwiaze calego, rzuc okiem na wyjscie.in i wybierz uzupelnienie ktorej komorki pozwoli na rozwiazanie sudoku do konca (wystarczy zanalizowac 2,3,4,5,6,7,8,9 kwadrat z wynikami i uzupelnic na interfejsie odpowiednia komorke odpowiednia liczba i wcisnac run)

wszelkie bug reports prosze skladac tutaj :)

jesli ktos ma jeszcze pomysl na algorytm, ktory by wyliczal wszystkie sudoku, i ten algorytm nie dzialalby na zasadzie brute'a to tez prosze sie podzielic ;)

Mchl

To może powiesz jeszcze, jak działa Twój algorytm? ;)

W nagłych wypadkach wzywać przez: mail: mchlpl[at]gmail.com | PM|mchl[a]boincatpoland.org

bartsob5

sklada sie z 2 etapow.
do obliczenia sudoku uzywam:

jedna trojwymiarowa tablica typu long int (long z koniecznosci dopasowania do funkcji zczytujacej cyfry z interfejsu, konwersja do zwyklego inta w moim przekonaniu jest bezsensowna)
szereg innych zmiennych pomocniczych (w sumie okolo 8)

tablica[wiersz][kolumna][poziom]
gdzie wiersz <0,8>
kolumna <0,8>
poziom <0,9>


1. wczytywanie z interfejsu do poziomu 0
2. sprawdzanie w jakie komorki jakie cyfry mozna wstawic... (na poziomie 1 wpisuje 1 wszedzie tam gdzie mozna na poziomie 0 wstawic teoretycznie 1, na poziomie 2 wpisuje 2 wszedzie tam gdzie mozna na poziomie 0 wstawic liczbe 2 i tak dalej)
3 sprawdzenie, czy dla jakiejs komorki poziomu 0 jest JEDNA i TYLKO JEDNA mozliwosc i dopisanie jej
etap II
4 sprawdzenie dla danego poziomu czy dana liczba wystepuje w kolumnie lub wierszu wystepuje jeden raz, i stad ma pierwszenstwo nad innymi mozliwosciami

w sumie jest to rozdzielone na 3 funkcje, wszystkie sie przeplataja i wykonuja za pomoca petli while 50 razy (czyli kazda funkcja wykonuje sie od 100 do 200 razy, choc zapewne wystarczyloby id 40 do 80)

bartsob5

no! oglaszam wszem i wobec, ze wyszla wersja 0.9.9 beta moje programu do robienia sudoku :D

dostepny do pobrania i testow jest pod sudoku.rar

jesli bedzie wymagane wersja 1.0 wyjdzie wraz z malym helpem (narazie guzik pomoc nie dziala), jesli nie bedzie to konieczne, a program bedzie robil wszystkie sudoku poprawne (do tego potrzebuje waszych testow) to wersja beta stanie sie wersja ostateczna :D

Rysiu

Temat stary ale nie będę zakładał nowego skoro jest ogólny.

Zmodyfikowałem do własnych potrzeb pewien program.

Kod jaki posiadam wygląda następująco:

#include <iostream>
#include <cmath>
#include <cstdlib>
#include <iostream>
using namespace std;


int findNextPrime(int, int);
int findPreviousPrime(int);
bool IsPrime(int);

int main()
{

int input = 0, prime1 = 0, prime2 = 0; int prime3 = 0; int up = 0;
int a = 0, k = 4, b = 2, count2 = 0, d = 0;

cout << "Dol: ";
cin >> input;

cout << "Gora: ";
cin >> up;


while (input <= up)
{


prime1 = 2;
prime2 = findPreviousPrime(input);
prime3 = findPreviousPrime(input);

while (prime1 <= prime2) {

if ((prime1 + prime2 + prime3) < input) { prime1 = findNextPrime(prime1,input); }

else if ((prime1 + prime2 + prime3) > input) { prime2 = findPreviousPrime(prime2); }


else {
cout << input << " " << prime1 << " "<< prime2 << " " <<prime3 << endl;



prime1 = findNextPrime(prime1,input);
prime2 = findPreviousPrime(prime2);
prime3 = findPreviousPrime(prime3);
}
}




input=input+2;
}


system("PAUSE");
return 0;

}

int findPreviousPrime(int n) {
n--;
while (!IsPrime(n) && (n > 2)) {
n--;
}
return n;
}

int findNextPrime(int n, int max) {
n++;
while (!IsPrime(n) && (n < max)) {
n++;
}
return n;
}

bool IsPrime(int n) {

for (int i = 2; i < n; i++) {
if ((n%i) == 0) {
return false;
}

}

return true;


}



Niby działa dobrze ale jednak nie do końca.

Upraszczając program odnajduję trzy liczby pierwsze jakie składają się na sumę określonej liczby nieparzystej. Wyszukuje wszystkie możliwości.

Mamy tam pętlę (+2). Po podaniu na wejściu liczby nieparzystej program powinien sprawdzać kolejne liczby nieparzyste do momentu gdy osiągnie górny zakres i pętla się zamknie.

Cały problem polega na tym, że algorytm coś szwankuje i rozsypuje się gdy np. trzeba znaleźć rozwiązania dla 13, 15, 19, 21 itp.

Generuje część wyników ale coś jest nie tak i nie widzi rozwiązań u wszystkich liczb nieparzystych, a przecież 13 można rozbić na np. 5, 5 i 3, a 15 na 5, 5, 5. Coś chyba z tym algorytmem szukającym jest nie tak...

Widzicie rozwiązanie problemu? Nie mam zbyt dużych umiejętności także proszę o łopatologiczne wytłumaczenie  :shock:

Rysiu

Problem poniekąd częściowo rozwiązany. Trzeba było napisać kod od podstaw. Wyszła chyba najbrutalniejsza z możliwych metod ale i najprostsza, a ja programistą niestety nie jestem.

Rysiu

Właśnie kombinuję z pewnym programem jednak nie mam pojęcia jak zrobić aby określona operacja wykonywała się co np. 10 sekund a sam procesor nie był kompletnie obciążany.

Wygooglowałem gdzieś taką ciekawą funkcję 'wait', która to pozwala określić "przerwy" w wykonywaniu programu ale obciążenie procesora cały czas jest na max.

Mógłbym to teortycznie wrzucić na linuxie do harmonogramu i niech się wykonuje co jakiś czas, ale wolę jednak mieć cały czas odpalony taki programik w tle, co tam nic konkretnego nie będzie robić.

Jakieś pomysły?

Mchl


W nagłych wypadkach wzywać przez: mail: mchlpl[at]gmail.com | PM|mchl[a]boincatpoland.org

sesef

Cytat: Mchl w 21 Marzec 2010, 00:31
Multithreading?

<stdlib.h>

sleep(10); //na lin z tego co pamiętam sleep w sekundach sie podaje jak nie to sleep(10000);

Rysiu

Zatrybiło ale z biblioteką unistd.h, a na Windows ponoć to jest w windows.h.

Działa jak należy  ;)

Mchl

Cytat: sesef w 21 Marzec 2010, 01:34
Cytat: Mchl w 21 Marzec 2010, 00:31
Multithreading?

<stdlib.h>

sleep(10); //na lin z tego co pamiętam sleep w sekundach sie podaje jak nie to sleep(10000);

Ja tam lubię z armatą na wróbla... :P

Po prostu C i Mchl nigdy się nie lubieli za bardzo ;)

W nagłych wypadkach wzywać przez: mail: mchlpl[at]gmail.com | PM|mchl[a]boincatpoland.org

sesef

Cytat: Rysiu w 21 Marzec 2010, 12:27
Zatrybiło ale z biblioteką unistd.h, a na Windows ponoć to jest w windows.h.

A faktycznie z stdlib.h to funkcja system(); była.

Cytat: Mchl w 21 Marzec 2010, 14:54
Ja tam lubię z armatą na wróbla... :P

Po prostu C i Mchl nigdy się nie lubieli za bardzo ;)

Teraz dopiero zauważyłem, że nie tego posta co trzeba zacytowałem.

Rysiu

Zainstalowałem według instrukcji GMP  ;)

Uruchamiam kompilator [Code:Blocks] i próbuję skompilować przykładowy kod.

Wywala mi jednak cały czas komunikaty typu:

Cytatundefined reference to `__gmpz_init'|

Wygooglowałem, że jest to wina linkera, i trzeba coś zmienić w konfiguracji edytora. Kombinowałem jednak za nic nie idzie przekabacić aby zadziałało. Może ktoś jest w stanie pomóc?  %)

sesef

z tego co pamiętam w Dev cpp (w końcu ten sam interface) dawało się prawym na projekt i chyba 3 zakładka tam trzeba było dopisać liby.

Cytat: Rysiu w 30 Marzec 2010, 21:16
Wygooglowałem, że jest to wina linkera, i trzeba coś zmienić w konfiguracji edytora. Kombinowałem jednak za nic nie idzie przekabacić aby zadziałało. Może ktoś jest w stanie pomóc?  %)

Najlepszą pomocą jest ściągniecie Visual Studio może być nawet express i na tym działać. MPIR ma już gotowe projekty do kompilacji pod winde, potem dodanie tylko libów do projektu i po problemie.

Rysiu

Tutaj to gdzie to trzeba dodać chyba mam: Settings -> Compiler and debugger -> Linker settings -> Link libraries

Nie wiem tylko jakie są ścieżki do tych bibliotek. Gdzie on je standardowo wrzucił?  %)

sesef

Cytat: Rysiu w 30 Marzec 2010, 22:44
Tutaj to gdzie to trzeba dodać chyba mam: Settings -> Compiler and debugger -> Linker settings -> Link libraries

Nie wiem tylko jakie są ścieżki do tych bibliotek. Gdzie on je standardowo wrzucił?  %)

A nie wiem GMP po skompilowaniu powinno gdzieś mieć liby w katalogach swoich.

Rysiu


Rysiu

Cytat: sesef w 30 Marzec 2010, 22:39
Najlepszą pomocą jest ściągniecie Visual Studio może być nawet express i na tym działać. MPIR ma już gotowe projekty do kompilacji pod winde, potem dodanie tylko libów do projektu i po problemie.
Zapomniałem dodać, że nie mam Windowsa :)

Okazało się, że wystarczyło dodać w "other linkers options": "-lgmp".

Teraz wydaje się, że wszystko działa. Skompilowałem nawet sesef programik, który dla mnie napisałeś [ten związany z rozkładem liczb pierwszych] i jako tako działa ale jednak nie o to mi chodziło  %)

--- EDIT ----

Właśnie zerknąłem na podstawową arytmetykę - wydaje się mieć to nogi i ręce. Jutro spróbuję coś napisać,