BOINC@Poland

Inne => Archiwum => Wątek zaczęty przez: bartsob5 w 09 Październik 2006, 21:50

Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: bartsob5 w 09 Październik 2006, 21:50
---------- 19:40 09.10.2006 ----------

stwierdzilem ze dosc juz meczenie watku html i pora stworzyc nowy tylko i wylacznie o c...

a moj problem wyglada tak:

jak zapisac wynik do pliku? jesli chodzi o program do zapisu do pliku to znalazlem tylko

#include <stdio.h>
#include <stdlib.h>
/* program udający bardzo prymitywną wersję programu tee(1) */

int main (int argc, char *argv[0])
{
 FILE *fp;
 int c;
 if (argc > 1) {
   fp = fopen (argv[1], "w");
   if (!fp) {
     fprintf (stderr, "Nie mogę otworzyć pliku %s\n", argv[1]);
     exit (-1);
     }
   }
 while ( (c = fgetc(stdin)) != EOF) {
   fputc (c, stdout);
   fputc (c, fp);
   }
 fclose(fp);
 return 0;
}


ale kompletnie go nie ogarniam, bo on nawet nie dziala prawidlowo, bo sie wiesza... prosze przede wszystkim o objasnienie deklaracji plikow gdzie zostaly zadeklarowane jak te pliki sie nazywaja i czy one juz powinny byc wczesniej w tym folderze?

---------- 20:50 ----------

i jeszcze pytanie, czy jest jakis taki typ zmiennej calkowitej (lub nie), ktorej zakres bylby od 0 do praktycznej nieskonczonosci? bo long int mnie nie zadowala... (silnia dochodzi do kresu juz przy 12...)
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: Mchl w 09 Październik 2006, 22:01
na drugie: double, czyli liczby zmiennoprzecinkowe podwójnej precyzji. Maksimum jeśli dobrze pamiętam w okolicach 10^39.


Pomyłka. 3,4x10^38 ma typ float. Dla double jest 1,7x10^308.
Trzeba tylko pamiętać, że typt zmiennoprzecinkoe nie są dokładne, to znaczy przchowują tylko pewną ilość cyfr znaczących liczby.
Stąd mogą być dziwne wyniki. Na przykład:
10000000000000000000000000000000000000+1=10000000000000000000000000000000000000
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: marcin20_21 w 09 Październik 2006, 23:26
Jesli napiszę coś, co wiesz, to nie czytaj tego, i nie miej mi za złe.

Po pierwsze musisz wiedzieć, że pliki można otwierać:
- do zapisu "w" (zostaje wtedy stworzony nowy plik, a jeśli plik o danej nazwie już istnieje, zosanie zastąpiony nowym plikiem)
- do zapisu "a" (plik nie jest mazany, dopisujesz co chcesz do istniejącego pliku)
- do odczytu "r" (do odczytywania z pliku :) )
Co ważniejsze, pliki można otworzyć w trybie tekstowym, albo binarnym wb ab rb. Tryb tekstowy służy tylko do znaków drukowalnych, używanie go ze znakami niedrukowalnymi (np Znak ENTERA) może prowadzić przy powtórnym odczycie pliku do błędu (błąd programisty). Tryb binarny stosować lepiej, gdy zapisujesz jakieś liczby (int, float, itp), oczywiście można też zapisywać wtedy zwykły tekst.

Poniższy przykładowy program pokazuje, jak można to zrobić. Nie twirdzę, że jest on najlepszy. Może jednak pokaże Ci, jak co zapisać najlepiej.


#include <stdio.h>
#include <conio.h>


int main(int argc, char* argv[])
{
FILE * fp; // fp służy do komunikacji z plikami na dysku
char nazwaPliku[20]={"plik.txt"}; //załóżmy, że chcemy dzialac na takim pliku
char napis [30];
int znak;
float pi = 3.14;
int liczba = 10;

//najpierw spróbujemy zapisac cos do pliku
fp = fopen(nazwaPliku,"w"); //otwirzamy (tworzymy plik)
//ponieważ otwarcie może się nie udac, trzeba sprawdzic, czy fp == NULL
if(fp == NULL) printf("Nie udalo sie otworzyc pliku %s do zapisu\n",nazwaPliku);
else
   {
    fputc('a',fp); //zapisanie znaku 'a' do pliku
    fputs("la ma kota\n",fp); //zapisanie ciągu znaków do pliku
    fclose(fp);    // po otwarciu pliku i uzyciu koniecznie trzeba go zamknąc
   }

//to teraz zobaczmy, co zapisalismy
fp = fopen(nazwaPliku,"r");
if(fp == NULL) printf("Nie udalo sie otworzyc pliku %s do odczytu",nazwaPliku);
else
   {
    fgets(napis,4,fp); //odczytanie z pliku 4 pierwszych znaków
    printf ("Odczytalem z pliku : %s \n\n",napis);
    fclose (fp);
   }
//dawno tego nie robiłem

// pokazę Ci ile wynosi teraz pi oraz liczba
printf("pi : %f, liczba : %d\n",pi,liczba);

//teraz użyjemy trybu binarnego:
//jesli po zakonczeniu dzialania pliku otworzysz plik.txt, znajdziesz tam troche "smieci"
//roznych znaczkow np i nazwe pliku :)
fp = fopen(nazwaPliku,"wb"); //otwirzamy (tworzymy plik)
//ponieważ otwarcie może się nie udac, trzeba sprawdzic, czy fp == NULL
if(fp == NULL) printf("Nie udalo sie otworzyc pliku %s do zapisu\n",nazwaPliku);
else
   {
    fwrite(nazwaPliku,20,1,fp); //zapisujemy calą tablice nazwaPliku, równiez tą czesc, której nie uzywam do przechowywania nazwy
    fwrite(&pi,sizeof(pi),1,fp); //zapisujemy zmienna pi (typu float)
    fwrite(&liczba,sizeof(liczba),1,fp); //zapisujemy zmienna liczba (typu int)
    fclose(fp);
   }

//zmieniamy pi oraz
pi = 3.14159;
liczba = 24;

// pokazę Ci ile wynosi teraz pi oraz liczba
printf("Po zmieanie wartosci pi : %f, liczba : %d\n",pi,liczba);

//a teraz wczytamy, to zo zapisalismy
fp = fopen(nazwaPliku,"rb"); //otwirzamy
//ponieważ otwarcie może się nie udac, trzeba sprawdzic, czy fp == NULL
if(fp == NULL) printf("Nie udalo sie otworzyc pliku %s do odczytu\n",nazwaPliku);
else
   {
    fread(nazwaPliku,20,1,fp); //odczytujemy tablice - zapisalismy 20, to tyle odczytujemy
    fread(&pi,sizeof(pi),1,fp); //odczyt pi
    fread(&liczba,sizeof(liczba),1,fp); //odczyt liczby int
    fclose(fp);
   }

// pokazę Ci ile wynosi teraz pi oraz liczba
printf("Po odczycie z pliku pi : %f, liczba : %d",pi,liczba);

getch();
return 0;
}
//------------------------------------------------  ---------------------------


Zazwyczaj w takich przypadkach wystarcza double.Jeśli jednak potrzebowałbyś policzyć silnię dokładnie, musiałbyć poszukać w internecie gotowej struktury do takich liczb. Kiedyś robiłem coś takiego, liczyłem silnię chyba z 1000. Wynik wyglądał masakrycznie :)



[/color]
1000! = a=402387260077093773543702433923003985719374864210 7146325437999104299385
12398629020592044208486969404800479988610197196058 631666872994808558901323829669
94459099742450408707375991882362772718873251977950 595099527612087497546249704360
14182780946464962910563938874378864873371191810458 257836478499770124766328898359
55735432513185323958463075557409114262417474349347 553428646576611667797396668820
29120737914385371958824980812686783837455973174613 608537953452422158659320192809
08782973084313928444032812315586110369768013573042 161687476096758713483120254785
89320767169132448426236131412508780208000261683151 027341827977704784635868170164
36502415369139828126481021309276124489635992870511 496497541990934222156683257208
08213331861168115536158365469840467089756029009505 376164758477284218896796462449
45160765353408198901385442487984959953319101723355 556602139450399736280750137837
61530712776192684903435262520001588853514733161170 210396817592151090778801939317
81141945452572238655414610628921879602238389714760 885062768629671466746975629112
34082439208160153780889893964518263243671616762179 168909779911903754031274622289
98800519544441428201218736174599264295658174662830 295557029902432415318161721046
58320367869061172601587835207515162842255402651704 833042261439742869330616908979
68482590125458327168226458066526769958652682272807 075781391858178889652208164348
34482599326604336766017699961283186078838615027946 595513115655203609398818061213
85586003014356945272242063446317974605946825731037 900840244324384656572450144028
21885252470935190620929023136493273497565513958720 559654228749774011413346962715
42284586237738753823048386568897646192738381490014 076731044664025989949022222176
59043399018860185665264850617997023561938970178600 408118897299183110211712298459
01641921068884387121855646124960798722908519296819 372388642614839657382291123125
02418664935314397013742853192664987533721894069428 143411852015801412334482801505
13996942901534830776445690990731524332782882698646 027898643211390835062170950025
97389863554277196742822248757586765752344220207573 630569498825087968928162753848
86339690995982628095612145099487170124451646126037 902930912088908694202851064018
21543994571568059418727489980942547421735824010636 774045957417851608292301353580
81840096996372524230560855903700624271243416909004 153690105933983835777939410970
02775347200000000000000000000000000000000000000000 000000000000000000000000000000
00000000000000000000000000000000000000000000000000 000000000000000000000000000000
00000000000000000000000000000000000000000000000000 000000000000000000000000000000
000000000000000000
Liczba cyfr potrzebnych do zapisania 2568
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: bartsob5 w 11 Październik 2006, 08:49
a znasz jakas funckje wczytujaca obrazek, i rysujaca wykres funkcji? (tj. kreske miedzy dwoma punktami?)
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: marcin20_21 w 11 Październik 2006, 17:28
Cytat: "bartsob5"a znasz jakas funckje wczytujaca obrazek, i rysujaca wykres funkcji? (tj. kreske miedzy dwoma punktami?)

To nie takie proste. W standardzie C/C++ nie ma (o ile mi wiadomo) takich funkcji, więc wszystko zależy tu od konkretnego środowiska, w którym piszesz. Można np użyć komponentu TShape i Canvas w Borland C++ 6.0, do rysowania w okienku windowsa, można użyć OpenGL dla jakichś bardziej zaawansowanych grafik... W czym programujesz?
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: kshonek w 11 Październik 2006, 17:51
Cytat: "marcin20_21"
Cytat: "bartsob5"a znasz jakas funckje wczytujaca obrazek, i rysujaca wykres funkcji? (tj. kreske miedzy dwoma punktami?)

To nie takie proste. W standardzie C/C++ nie ma (o ile mi wiadomo) takich funkcji, więc wszystko zależy tu od konkretnego środowiska, w którym piszesz. Można np użyć komponentu TShape i Canvas w Borland C++ 6.0, do rysowania w okienku windowsa, można użyć OpenGL dla jakichś bardziej zaawansowanych grafik... W czym programujesz?

to moze ja wyjascnie, bo bartka nie bylo na lekcji....

nasz nauczyciel kazał nam wykonac zadanie na lekcji przez 45minut:
wczytujesz z pliku tekstowego 4 liczby, sa to wspolrzedne 2 punktow pomiedzy ktorymi masz narysowac prostą w pliku graficznym 480x640 16 kolorow.

W ciagu 5 minut wylozyl nam operacje na plikach, czyli wszytkie funkcje fxxx (fopen fclose itd) razem z parametrami w r wb rb itd i podal ze do przejscia w tryb grafiuczny nalezy uzyc initgraf (moze initgraph, nie wiem jak to zapisac, bo tylko to powiedzial ;] ) niekomu sie programy nie kompilowaly, szukalismy w helpach i kursach, ale nc o tym tajemniczym initgraf.

Jak sie zapytalem o to czy ta prosta jest rownolegla lub prostopadla do krawezi to otrzymalem odpowiedz ze mze byctez po skosie... troche mnie to zdziwilo, bo nie mam  pomyslu jak to zapisac, ale podobo jest funkcja ktora rysuje wektor od punktu poczatkowego do punktu (x,y) i trzeba wie pierwsze wczyta jako poczatkowy a 3 i4tą jako punkt drugi.

Jak na nasze 'umiejetnosci' to troche duzo i nie wiem jakbysmy sobie poradzili bez Twojej pomocy (btw ze spr z sortowania dostałem 75%, wiec zle nie jest)
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: marcin20_21 w 11 Październik 2006, 18:48
InitGraph to funkcja z Pascala :P  Nie wiem, jak to można połączyć z C :) Może gość coś

A z tymi punktami to proste, jest coś takiego, jak układ współrzędnych OXY (matemtatyka się kłania), wczytuje się dwa punkty A(xa,ya) B(xb,yb) z pliku, a potem rysuje linię, szczegóły np tutaj. :

http://free.of.pl/t/tpdoodek/kurs/6.html
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: kshonek w 11 Październik 2006, 19:01
Cytat: "marcin20_21"InitGraph to funkcja z Pascala :P  Nie wiem, jak to można połączyć z C :) Może gość coś

A z tymi punktami to proste, jest coś takiego, jak układ współrzędnych OXY (matemtatyka się kłania), wczytuje się dwa punkty A(xa,ya) B(xb,yb) z pliku, a potem rysuje linię, szczegóły np tutaj. :

http://free.of.pl/t/tpdoodek/kurs/6.html

takie bledy to norma u goscia.....

uklad wspolrzdnych to obejmuje, ale gorzej z tym jak to zapisac w c ;]
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: marcin20_21 w 11 Październik 2006, 19:14
Cytat: "kshonek"
takie bledy to norma u goscia.....
To "fajnie" macie....

Cytat: "kshonek"
uklad wspolrzdnych to obejmuje, ale gorzej z tym jak to zapisac w c ;]
Mniej profesjonalne podejście : cztery int'y np xa,xb,xc,xc.
Bardziej profesjonalne podejście : stworzenie struktury (albo klasy, jeśli programujesz w C++) opisującej punkt na płaszczyźnie.
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: bartsob5 w 11 Październik 2006, 20:13
ja ejszcze wroce do wczytywania z pliku:
co oznacza w praktyce atrybut otwierania w trybie binarnym a tekstowym?
jakie moga byc przyczyny nie otworzenia sie pliku?
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: marcin20_21 w 11 Październik 2006, 21:13
W praktyce, jeśli zapiszesz w trybie tekstowym dane, które powinny być zapisane w trybie binarnym, np liczby float, int, double, a potem próbujesz je wczytać, to możesz otrzymać coś zupełnie innego. Preferuję zapis i odczyt w trybie binarnym, chyba że to ma być typowo plik tekstowy, np plik NA PEWNO zawiera tekst zawierający cztery liczby i tylko tyle.
Nie wiem, czy widzisz różnicę: plik z zapisanymi czterema cyframi tekstem ma zawartość np "4 10 23 347" a plik, w którym te same liczby są zapisane binarnie, może po otwarciu np przez notatnik zawierać jakieś dziwne znaczki.

Jeśli otwierasz w albo wb, i nie otworzy się, to może np oznaczać, że plik taki istnieje, i ma atrybut "tylko do odczytu", inny program otworzył ten plik do zapisu,  albo np plik taki nie istnieje i mógłby zostać stworzony, ale brak miejsca na dysku.
Jeśli otwierasz r,rb i wystąpi błąd, to znaczyć może, że plik taki nie istnieje.
Jest jeszcze np taka możliwość, że system ma pewną maksymalną liczbę plików, które można otworzyć, stąd posiadanie naraz otwartych wielu plików nie jest dobrym rozwiązaniem.
Nic więcej nie przychodzi mi do głowy.
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: Mchl w 11 Październik 2006, 23:17
Cytat: "marcin20_21"
Nie wiem, czy widzisz różnicę: plik z zapisanymi czterema cyframi tekstem ma zawartość np "4 10 23 347" a plik, w którym te same liczby są zapisane binarnie, może po otwarciu np przez notatnik zawierać jakieś dziwne znaczki.

Konkretnie będzie zawierał szesnastkową reprezentację tych liczb.
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: bartsob5 w 12 Październik 2006, 20:20
a czy i jak mozna wbic do tablicy 250 zer i jedynek, tak zeby jeden znak byl w jednej komorce tablicy, i zeby to 1 i 0 bylo integerem? (to znaczy zeby bylo gotowe do dzialan matematycznych?)
domyslam sie ze fgetsem, ale wtedy jak mozna sie odwolac do konkretnej komorki tablicy? (bo jak sie odwolam normalnie a
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: marcin20_21 w 12 Październik 2006, 23:18
nie wiem, czy dobrze rozumiem... mak.txt zawiera 256 cyfr wpisanych np w notatniku i chcesz je wczytać do tablicy a?
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: bartsob5 w 13 Październik 2006, 04:09
chce miec x cyfr wpisanych w notatniku. jak bedzie zczytywal to chce, jak bedzie np 10, to chce zeby wgral do tablicy a[0] liczbe int=1 i a[1]=0 itd... i tak dlugo az bdzie to 255 znak, koniec zadeklarowanej tablicy, albo w nottatniku znak entera...
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: marcin20_21 w 13 Październik 2006, 17:26
Ponieważ jesteś ograniczony liczbą znaków (konkretnie cyfr), to chyba lepiej użycz fgetc, powtórzyć wywołanie 255 razy.
FILE * fp;
char plik[255]={"mak.txt"};  //na nazwe mozna dac mniej znakow !!
char znak;
int a[255],i,L;

fp = fopen(plik,"rb");
if(fp == NULL) printf("Nie udalo sie otworzyc pliku %s do odczytu",plik);
else
  {
   for (i=0;i<255;i++)
   {
    znak = fgetc(fp); /*wczytuje jedna literkę, albo cyferkę,
                      albo znaczek z pliku */
    if ((znak < '0') || (znak >'9')) break; /*jesli nie cyfra,
                                            */koniec wczytywania
    a[i] = znak - 48; /* zero ma kod 48 dziesietnie, czyli w kodzie
                   szesnastkowym, kazda nastepna cyferka kod o 1 wiekszy*/
   }
   L = i; //zapamiętanie, ile znakow wczytano
   fclose (fp);
  }
printf("Wczytalem z pliku:\n");
for(i=0;i<L;i++)
   printf("%d",a[i]);


Na uwagę zasługuje, że cyfry są kodowane w ASCII wartościami:
'0' to 48 (30 HEX), '1' to 49(31HEX) itd. Stąd jeśli wiesz, że masz znak jakiejś cyfry, a chcesz mieć gdzieś jej wartość, wystarczy od tego znaku odjąć 48.

W petli for najpierw wczytywany jest jeden znak z pliku, jesli jest on inny niz cyfra, zachodzi wyjscie z petli for. jeśli jednak jest to cyfra, wyliczam jej wartość (znak-48 ) i wpisuję do tablicy a; ponieważ for jest ograniczony wartością 255, to nie wczyta się wiecej, niż 255 cyfr. Potem jest już tylko wyświetlanie  :lol:

Musze jeszcze o jednym napisać. Zasięgnąłem języka i kolegi (lepszy programista). InitGraph to nawet nie jest funkcja samego Pascal'a, ale kompilatora Borland Pascal, często jednak właśnie jego się używa. Być może kompilator Borland Turbo C++, czy jakoś tak się on nazywa, ma tą funkcję, więc jeśli jego używacie, to może ona tam być.
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: bartsob5 w 28 Październik 2006, 16:49
no dobra, a teraz pytanie, jak sie tworzy wlasne biblioteki?

bo tak przejrzalem biblioteki z deva i stwierdzam, ze kompletnie nie wiem o co chodzi...

czy to wystarczy tak, jak jest w NQC, ze piszesz wszystkie funkcje normalnie tylko ze bez glownej funkcji 'main', i zapisujesz jako jakis plik *.h???

i jak sie takie funkcje definiuje? piszerz

nazwa_funkcji();
{
instrukcja;
}

czy musisz dopisac przed nazwa jakis ciag znakow?
np void albo int?
i na jakiej zasadzie sie wpisuje w te nawiasy po nazwie funkcji jakies zmienne?
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: kshonek w 28 Październik 2006, 19:35
Cytat: "bartsob5"no dobra, a teraz pytanie, jak sie tworzy wlasne biblioteki?

bo tak przejrzalem biblioteki z deva i stwierdzam, ze kompletnie nie wiem o co chodzi...

czy to wystarczy tak, jak jest w NQC, ze piszesz wszystkie funkcje normalnie tylko ze bez glownej funkcji 'main', i zapisujesz jako jakis plik *.h???

i jak sie takie funkcje definiuje? piszerz

nazwa_funkcji();
{
instrukcja;
}

czy musisz dopisac przed nazwa jakis ciag znakow?
np void albo int?
i na jakiej zasadzie sie wpisuje w te nawiasy po nazwie funkcji jakies zmienne?

widze ze tez nic_nie_robisz w ten weekend ;]

wnioskuje ze jestes pod koniec prac skoro juz dodajesz funcje do bibliotek O_o ładnie, ja sie zabieralem caly dzien, ale jakos nic nie zrobilem dzisiaj :/
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: bartsob5 w 28 Październik 2006, 19:48
zeby ci uswiadomic na jakim jestem etapie:

zrobilem ladowanie labiryntu na podstawie wczytywania 0 i 1 z pliku, dodatkowo walnalem klilkadziesiat voidow do pliku naglowkowego, ale mimo wszystko chce sie dowiedziec o mozliwosciach tych plikow naglowkowych (bo na voidach daleko nie zajade...)
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: marcin20_21 w 29 Październik 2006, 02:50
Z własnymi bibliotekami funkcji to jest tak, że tworzy się, oprócz głównego pliku z main, dodatkowe pliki. Załóżmy, że tworzysz bibliotekę funkcji do odczytu z klawiatury, tworzysz wtedy nie jeden :!: ale dwa pliki, np. klawiat.c i klawiat.h. (Ważne, żeby różniły się tylko rozszerzeniem.) Jeśli programujesz w C++, wtedy możesz dać rozszerzenie cpp zamiast c.
klawiat.c powinien zawierać Twoje funkcje związane z obsługą klawiatury, ewentualne zmienne globalne, których używasz w tych funkcjach.
klawiat.h powinien zaś zawierać same deklaracje funkcji :!: Nie powinien zawierać ciała żadnej funkcji. Dodatkowo plik .h powinien mieć pewną strukturę:
#ifndef __klawiat__h__
#define __klawiat__h__

//deklaracje funkcji

#endif

To z # to derektywy preprocesora, w skrócie chodzi o to,żeby nie includować dwa razy tych samych funkcji...
W każdym razie w głównym pliku programu (tym z main) include'uje się tylko klawiat.h. (klawiat.h można też includować w klawiat.c)
Wszystko to działa bez problemu, o ile kompilator widzi te trzy pliki jako należące do jednego projektu, jeśli jednak ich tak nie traktuje, wtedy pojawiają się problemy. Zazwyczaj w kompilatorze jest jakis file manager, add to project... albo coś takiego :)
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: bartsob5 w 29 Październik 2006, 12:56
hmmm to dziwne...
a jak jest tylko jeden taki plik to tez chyba dziala, co nie? (tylko kompilator daje ostrzezenia?)

bo mi sie to takie skomplikowane wydaje...
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: kshonek w 29 Październik 2006, 13:12
Cytat: "bartsob5"hmmm to dziwne...
a jak jest tylko jeden taki plik to tez chyba dziala, co nie? (tylko kompilator daje ostrzezenia?)

bo mi sie to takie skomplikowane wydaje...

ja mam jeden plik i nic sie nie wywala...... z tym ze ja daje include lab.c a nie lab.h
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: marcin20_21 w 29 Październik 2006, 14:14
Może nie opisałem tego jasno, ale nie chciałem się wgłębiać. Będzie działać, jeśli się napisze funkcje w lab.c, bez używania lab.h. Nie jest to jednak ładnie zrobione. Jeśli piszecie projekt, a gość ma o tym jakiekolwiek pojęcie, to Wam to wypomni. Ja tak miałem przy pierwszym z projektów kilkuplikowych :lol:
Podejście z dwoma plikami ma taką zaletę, że jeśli napisze się raz bibliotekę (np. lab.c) i nie zmienia jej, kompilator nie kompiluje pliku lab.c za każdym razem, jak kompiluje się cały program, kompilacja trwa krócej. I jeszcze jedno - używając takiej techniki można nie udostępniać komuś ciała swoich funkcji, ale gotową bibliotekę (.lib) i plik .h z deklaracjami tych funkcji (albo np. klas). Jeśli używacie jakichś standardowych funkcji, to nie inkludujecie plików .c ale .h.
Po szczegółowe iformacje odsyłam do książek, np "Symfonia C++" str 102 i dalej.

Podkreślam: to będzie działać (choć w pewnych sytuacjach jednak nie), ale nie jest to do końca poprawnie.
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: kshonek w 29 Październik 2006, 15:01
Cytat: "marcin20_21"Jeśli piszecie projekt, a gość ma o tym jakiekolwiek pojęcie, to Wam to wypomni.

Uwierz, że nie ma :lol:
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: bartsob5 w 29 Październik 2006, 15:06
czyli jesli dobrze zrozumialem...

plik biblioteka.h

#ifndef __biblioteka__h__
#define __biblioteka__h__

#define __linia

#endif


a plik biblioteka.c

#include <biblioteka.h>
void linia()
{
line(0,0,100,100);
}


czy jak?
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: marcin20_21 w 29 Październik 2006, 18:52
Inaczej:) Deklaracja funkcji to zadeklarowanie, żę jakaś nazwa to funkcja (również podanie jej parametrów i tego, co zwraca). Dla podanego przykładu byłoby to:

#ifndef __biblioteka__h__
#define __biblioteka__h__

void linia();   // pierwsza linia funkcji i średnik
#endif
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: bartsob5 w 29 Październik 2006, 19:26
no dobra... a czy i jak sie takie biblioteki kompiluje?

bo jak mam tak na sucho te biblioteki, to mi sie sypie program (jeszcze gorzej niz gdybym mial normalnie w innym pliku wypisane je...)
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: marcin20_21 w 29 Październik 2006, 22:37
Cytat: "bartsob5"no dobra... a czy i jak sie takie biblioteki kompiluje?

bo jak mam tak na sucho te biblioteki, to mi sie sypie program (jeszcze gorzej niz gdybym mial normalnie w innym pliku wypisane je...)

Nie wiem, co rozumiesz, pod pojęciem "sucho".
To kompilator dba o to, że jak zmienisz plik .c, to go kompiluje, a jak go nie zmieniasz i znowu uruchamiasz kompilację, to NIE kompiluje go znowu.
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: kshonek w 05 Listopad 2006, 11:05
Mam stosunkowo prosty problem, ale nie ma pojecia jak go rozwiazac.

Napisalem program (dokladnie zegarek), ktory sobie liczy ładnie, ale ustawiam w petli for ilosc sekund, a chce zeby mozna to bylo przerwac w dowolnym momencie poprzez nacisniecie klawisza esc. W dowolnym momencie moze byc np po kazdej sekundzie, ale problem mam taki ze nei wiem jakiej fynkcji do tego uzyc. scanf czeka za kazdym razem, wiec odpada, ale mysle ze ejst taka funkcja ktora co przebieg petli for (1sekunda) sprawdzi czy byl nacisniety esc i przerwie. Niby jest to proste, ale za nic nie wiem jak to wykonac. Pytalem sie bartka na gg to tez kombinuje jak ja [;

pozdrawiam i z gory dzieki za pomoc
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: marcin20_21 w 05 Listopad 2006, 12:05
Ja używałem funkcji kbhit

#include <conio.h>

int main(void)
{
   cprintf("Nacisnij jakis klawisz,aby kontynuowac");
   while (!kbhit()) /* Nic nie rob */ ;
   cprintf("\nNacisnales klawisz\n");
   return 0;
}


Możno też chyba użyć coś związanego z cin, ale jeszcze o tym nie czytałem.
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: kshonek w 05 Listopad 2006, 13:53
Cytat: "marcin20_21"Ja używałem funkcji kbhit

#include <conio.h>

int main(void)
{
   cprintf("Nacisnij jakis klawisz,aby kontynuowac");
   while (!kbhit()) /* Nic nie rob */ ;
   cprintf("\nNacisnales klawisz\n");
   return 0;
}


Możno też chyba użyć coś związanego z cin, ale jeszcze o tym nie czytałem.

dzieki, pomogło ;)

tez walczylem z cin, ale to od cpp, czyli mnie nie urządza.
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: marcin20_21 w 05 Listopad 2006, 15:03
Skoro czyste C, to nie widzę innego rozwiązania :)
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: bartsob5 w 12 Listopad 2006, 16:20
jaka jest roznica miedzy C a C#??? taka sama jak miedzy C a C++ i miedzy C# a C++???
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: marcin20_21 w 12 Listopad 2006, 23:29
Cytat: "bartsob5"jaka jest roznica miedzy C a C#??? taka sama jak miedzy C a C++ i miedzy C# a C++???

Najpierw było C, potem C++, a potem C#:)
Czyli im nowszy, tym ma więcej możliwości, bardziej rozbudowany, i takie tam:)
W C# (czyt. C szarp) jeszcze nie programowałem.
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: Mchl w 13 Listopad 2006, 07:30
C# jest jeszcze bardziej obiektowy niż C++.
Jak zwykle można poczytać w Wikipedii (http://pl.wikipedia.org/wiki/C_Sharp)
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: bartsob5 w 13 Listopad 2006, 18:42
Cytat: "Mchl"C# jest jeszcze bardziej obiektowy niż C++.


yyyyyyyyyyyyyyyyyyy aha  :oops:  :?
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: marcin20_21 w 13 Listopad 2006, 20:47
Cytat: "bartsob5"yyyyyyyyyyyyyyyyyyy aha
Spróbuj sprecyzować, jakiej odpowiedzi potrzebujesz, to może Ci jakoś pomożemy  :wink:
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: bartsob5 w 18 Listopad 2006, 14:02
---------- 20:06 17.11.2006 ----------

probuje sobie skonfigurowac msvc++ tak, zeby byl on zdolny do pisania aplikacji do boinca (najlepiej w c, ale nie obraze sie na c++) i powiem wam ze mnie to przerasta....

mam to zrodlo programu hello BOINC world (http://www.spy-hill.com/help/boinc/hello.C) i wszystkie biblioteki w nim zawarte juz zdobylem (czyli te wszystkie boincowe..) przy probie kompilacji mi wywala blad, ze nie moze znalezc windows.h (z tego co widze to w kodzie go nie ma, wiem musi byc w jakiejs bibliotece..) i nie wiem co z tym zrobic..
Cytatc:\program files\microsoft visual studio 8\vc\include\boinc_win.h(72) : fatal error C1083: Cannot open include file: 'windows.h': No such file or directory


edit_______

skopiowalem wszystkie mozliwe biblioteki z borlanda i wkleilem do katalogu msvc... efekt jest takui ze mam 53 ostrzezenia

Cytatwarning C4068: unknown pragma

i blad
Cytaterror C2440: '=' : cannot convert from 'LPWSTR' to 'LPSTR'
       Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

---------- 14:02 18.11.2006 ----------

teraz mam bledy w stylu:

Cytat------ Build started: Project: hello, Configuration: Debug Win32 ------
Linking...
winmm.lib : fatal error LNK1107: invalid or corrupt file: cannot read at 0x1B2E
Creating browse information file...
Microsoft Browse Information Maintenance Utility Version 8.00.50727
Copyright (C) Microsoft Corporation. All rights reserved.
BSCMAKE: error BK1506 : cannot open file '.\Build\Debug\obj\boinc_api.sbr': No such file or directory
Build log was saved at "file://c:\Program Files\Microsoft Visual Studio 8\VC\bin\hello.d\Build\Debug\obj\BuildLog.h tm"
hello - 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: marcin20_21 w 18 Listopad 2006, 17:36
Skopiowanie plików nagłówkowych *.h z Borlanda nie było najlepszym pomysłem -> to są tylko deklaracje (czyli zapowiedzi) różnych funkcji. Może masz za starą wersję msvc?
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: bartsob5 w 18 Listopad 2006, 21:01
wersja 2005 express edition... (moze dlatego)

ale generalnie juz chodzi, tylko teraz mam problem z tym winmm.lib i boinc_api.sbr :\
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: marcin20_21 w 20 Listopad 2006, 22:34
Ja raczej za bardzo Ci nie pomogę, szukaj informacji u źródeł, czyli tam, gdzie to ktoś zrobił:)
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: bartsob5 w 27 Listopad 2006, 22:19
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...
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: bartsob5 w 22 Maj 2007, 22:34
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 (http://www.toni.neostrada.pl/pics/gupie/images/polskihiphop.jpg)

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++
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: D_T_G w 22 Maj 2007, 22:48
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++?
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: bartsob5 w 22 Maj 2007, 22:54
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 (http://dione.ids.pl/~pborys/xfaq/sectionVI/8/index-2.html), 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"
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: D_T_G w 22 Maj 2007, 23:07
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
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: bartsob5 w 22 Maj 2007, 23:54
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;) )
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: bartsob5 w 25 Maj 2007, 22:04
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?
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: bartsob5 w 03 Lipiec 2007, 21:29
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 ;)
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: Mchl w 03 Lipiec 2007, 22:52
No ładnie :)
Ja chętnie potestuje na sudoku generowanych przez mojego palma.
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: AL w 04 Lipiec 2007, 04:17
No to mam tu jeszcze coś dla Was: A new Boinc project "Sudoku" will start here very soon... (http://dist2.ist.tugraz.at/)
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: bartsob5 w 04 Lipiec 2007, 15:51
Cytat: "Mchl"No ładnie :)
Ja chętnie potestuje na sudoku generowanych przez mojego palma.

sudoku.rar (http://ftpbempes.republika.pl/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 ;)
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: Mchl w 04 Lipiec 2007, 18:19
To może powiesz jeszcze, jak działa Twój algorytm? ;)
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: bartsob5 w 04 Lipiec 2007, 19:03
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)
Tytuł: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: bartsob5 w 15 Lipiec 2007, 21:27
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 (http://ftpbempes.republika.pl/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
Tytuł: Odp: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: Rysiu w 19 Sierpień 2009, 20:15
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:
Tytuł: Odp: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: Rysiu w 20 Sierpień 2009, 12:29
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.
Tytuł: Odp: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: Rysiu w 20 Marzec 2010, 16:18
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?
Tytuł: Odp: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: Mchl w 21 Marzec 2010, 00:31
Multithreading?
Tytuł: Odp: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: 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);
Tytuł: Odp: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: Rysiu w 21 Marzec 2010, 12:27
Zatrybiło ale z biblioteką unistd.h, a na Windows ponoć to jest w windows.h.

Działa jak należy  ;)
Tytuł: Odp: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: Mchl w 21 Marzec 2010, 14:54
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 ;)
Tytuł: Odp: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: sesef w 21 Marzec 2010, 18:17
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.
Tytuł: Odp: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: Rysiu w 30 Marzec 2010, 21:16
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?  %)
Tytuł: Odp: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: sesef w 30 Marzec 2010, 22:39
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.
Tytuł: Odp: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: 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ł?  %)
Tytuł: Odp: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: sesef w 30 Marzec 2010, 22:45
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.
Tytuł: Odp: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: Rysiu w 31 Marzec 2010, 12:03
Tylko gdzie... Nie mam pojęcia.
Tytuł: Odp: kącik pomocy C/C++ czyli tlumaczenie przy uzyciu łopatologii
Wiadomość wysłana przez: Rysiu w 01 Kwiecień 2010, 21:41
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ć,