
KULL [ Gladiator ]
Programowanie w C/C++ i nie tylko ------ dla laików i ekspertów [cz.4]
---[Przydatne strony]---
[PL]:
[!!!] https://www.keeller.kompozytor.net/ [Kurs C++]
[!!!] https://www.physd.amu.edu.pl/~tomekkaz/ [Podstawy C++]
[!!!] https://3miasto.net/~chq/ [Kurs C++]
[!!!] https://www.avocado.risp.pl/ [m.in. kursy C++: /pliki do pobrania/teksty/.../]
[!!!] https://www.kursc.terramail.pl/kursc/ [Kurs C++]
https://www.playcom.republika.pl/ - duzo ciekawych, gotowycgh programow (pascal i c++)
https://stud.wsi.edu.pl/~webber/czarny/?link=cpp
https://www.phys.uni.torun.pl/~kgrabcze/zajecia/
https://www.elektronet.prv.pl/
https://www.intercon.pl/~sektor/cbx/
https://stud.wsi.edu.pl/~sistudem/ [Podstawy C++]
https://lisek99.w.interia.pl/ [Programowanie w C/C++ pod DOS, WIN, LINUX]
https://maczek.info.bielsko.pl/~zbiju/ATH/ [Ciekawe rzeczy do ściągnięcia]
https://www.sztolnia.pl/?p=faq_pcp
https://www.algorytm.cad.pl/
https://www.republika.pl/piotrciskowski/dydaktyka/materialy.zima.htm#Informatyka3L
https://sprocket.ict.pwr.wroc.pl/~jablonski/
https://www.wemif.pwr.wroc.pl/labc/
[ANG]:
https://www.gametutorials.com/Tutorials/c++/Cpp_Pg1.htm
https://www.cprogramming.com/cgi-bin/source/source.cgi
---[DOWNLOAD]---
https://sourceforge.net/projects/dev-cpp/ (Dev-C++ 4.9.9.0 PL - kompilator C/C++)
---[Literatura dla programisty]---
Symfonia C++ J.Grębosza
Pasja C++ J.Grębosza
Mój pierwszy program wydawnictwa HELP
Książeczka "Programowanie w C++" od Komputer Swiat - Dla BARDZO początkujących
(https://www.komputerswiat.pl/informacje/archiwum/bk0105.html)
---[Środowisko Borland C++ 3.1 oraz instrukcja jego uruchomienia i konfiguracji: ]---
https://www.wemif.pwr.wroc.pl/labc/labc/lab1/lab1a.html
---[Poprzednie wątki]---
[1] https://forumarchiwum.gry-online.pl/S043archiwum.asp?ID=3073834&N=1
[2] https://forumarchiwum.gry-online.pl/S043archiwum.asp?ID=3124999&N=1
[3] https://forumarchiwum.gry-online.pl/S043archiwum.asp?ID=3228514&N=1

KULL [ Gladiator ]
od razu pytanie :)
czy da sie w C++ deklarujac dynamiczne alokacje tablicy, alokowac tablice wielopoziomowa?
bo tutaj np. wywala mi blad, a jak wpisze tablica [ilosc]; to juz dziala:
int main ()
int *tablica;
int ilosc=3;
tablica = new int [4][ilosc];
getchar();
return 0;
Esqualante [ Jyhad Baghadyr ]
Hej! Nigdyś to dałem linka do bardzo fajnej strony o C++, ale KULL widać się nie zastosował ;), to teraz znowu daję i lepiej żeby następnym razem się znalazł w pierwszym poście ;]
Kijano [ Konsul ]
Ja mam pytanie czy da sie stworzyc tablice wielopoziomowa ale zeby kazdy z czlonow byl inna zmienna tzn
int*tablica[5],char*[5] ??
Da sie takie cudo zrobic ?
The Dragon [ Eternal ]
A ja moge polecic ksiazke "C++ Styl Programowania" Tom'a Cargill'a.
A z C, to oczywiscie "Język ANSI C" Kernighan, Ritchie.
A ze swojej strony mam pytanie: czy ktos z Was widzial ladnie i przejrzyscie (niekoniecznie najlepiej pod wzgledem pamieci i szybkosci) oprogramowane drzewa AVT?
KULL [ Gladiator ]
Esqualante ---> na pewno nie dalem ?? :D lepiej abys nastepnym razem lepiej czytal wstep ;)

Esqualante [ Jyhad Baghadyr ]
KULLL >>>>> Zwracam honor, chyba za bardzo zróciłem uwagę na linki z wykrzynikami ;). Co do Twojego pytania, nie wiem, mało się bawiłem wielowymiarowymi tablicami.
KULL [ Gladiator ]
mam kurcze zrobic najprostrza baze danych, ale nie chce mi alokowac takich tablic :/
btw: wiecie cos moze o ksiazce Thinking in C++ ?? to jest dla zaawansowanych czy raczej od poczatku ??
Esqualante [ Jyhad Baghadyr ]
A co ma byc w tej bazie, może da się to inaczej zaimplementować?
The Dragon [ Eternal ]
Polecal mi ja gosc, ktory sie zna, poza tym uczy programowania bardzo fajnie i profesjonalnie, wiec ksiazka jest ok :) (choc sam jej nie czytalem, wiec to taka informacja lekko z drugiej reki). Pierwszy tom jest bardziej poczatkujacy, drugi bardziej zaawansowany.
A co do tablicy, to moze zadziala odwrotnie? tzn [ilosc][4]? O ile w ogole to Twoj problem w jakims stopniu rozwiaze?
hotDog [ Outsider ]
KULL --> nie wiem czy dobrze Cię zrozumiałem z tymi tablicami, ale to chyba chodzi o to:
int main ()
‹
int **tablica;
int ilosc=3;
tablica = new int* [4];
for (int i=0; i < 4; i++)
tablica = new int [ilosc];
getchar();
return 0;
›
dla kolejnego poziomu dodajesz * przy deklaracji tablicy i robisz nową pętlę zagnieżdżoną.
A co do Thinking in C++ - to wszyscy mi ją polecają, wiec chyba jest tego warta i w sam raz dla początkujących jest tom 1, tom 2 jest o programowaniu obiektowym bardziej.
Sam bym ją kupił gdybym wcześniej nie zakupił Stroustrupa :-)

Regis [ ]
A ja slyszalem o takim rozwiazaniu dynamicznie alokowanych tablic - podobno wygodny (na oko widze tylko ze pomaga unikac glupich bledow, ale wygody "na oko" nie ocenie ;) ), ale sam jeszcze go nie sprtawdzalem - nie mialem potrzeby:
alokujemy obszar pamięci:
double *t;
t=malloc(wysokosc*szerokosc*sizeof(double));
wtedy "element tablicy" o współrzędnych x,y jest pod adresem
(t+y*width+x)
The Dragon [ Eternal ]
Ale to dla zwyklego C, a nie C++ - tu przeciez zadnych malloc'ow stosowac nie wypada ;)

Regis [ ]
A tam :P Ja niby pisze w C++, ale do operacji input-output ciagle uzywam printfow i scanfow (bo wole - pomijam juz nawet to ze sa szybsze niz cin i cout) oraz malloc do operacji na pamieci :P
Kijano [ Konsul ]
Ponawiam pytanie
Czy da sie stworzyc tablice wielopoziomowa ale zeby kazdy z czlonow byl inna zmienna tzn
int*tablica[5],char*[5] ??
Jesli sie da takie cos zrobic to bardzo prosze o wtlumaczenie :)
Esqualante [ Jyhad Baghadyr ]
Kijano - masz na myśli wielopoziomową tablicę (np macierz), czy też tablicę struktur, tj tak, aby każdy element w tablicy miał i chara, i inta, i coś tam jeszcze?

SEW [ Generaďż˝ ]
Esqualante -->
1. OK
2. SI ?To rejestr ogolnego przeznaczenia nie?
3. Wlasnie chodzi o to aby liczba ta mogla byc wybrana przez uzytkownika (tylko 4 cyfrowa ale tego nie jestem pewien bo nie bylo mnie przy zadawaniu tego programu , jutro bede wiedzial na 100%), ,zle napisalem, chodzilo mi aby napisac ten program jako uniwersalna procedure, a nie procedure do konkretnej liczby. Juz dziekuje za wskazowki :]
Ramz [ Konsul ]
Kijano - jesli chodzi ci o to ze np. kazdy wiersz macierzy (tablicy dwuwymiarowej) mial inny typ to nie (wedlug sposobu podanego wyzej)- no chyba ze juz kumasz programowanie obiektowe :D.. a wynika to z:
int **tab;
tab=new int *[a]; <----- wskaze wskaznik typu int
przez co:
tab[0]=new char;
tab[1]=new int ;
tab[2]= new float ;
.
.
.
tab[a-1]=new int ;
nie ma prawa istniesc (niezgodnosc typow).
PS.Jesli juz to chyba tablice wielowymiarowe :P (macierze)
PS2. U ciebie jest > int *tablica[5] <-- to nie jest tablica wielowymiarowa.
Tak jak podane wczesniej powinno byc:
int **tab;
tab=new int *[a];
for(int i=0; i<a;i++)
tab=new int;
gdzie a i b to zmienne typu int, okreslajace rozmiar tablicy.
PS3. Po co mieszac wskaznikami jesli znasz rozmiar tablicy ( w tym wypadku 5), no chyba ze ci sa potrzebne :P
hotDog [ Outsider ]
Kijano --> chodzi Ci o coś takiego?
int **tab = new int* [5];
tab[0] = new double [5];
tab[1] = new float [5];
tab[2] = new char* [5];
tab[3] = new int [5];
tab[4] = new bool [5];
Bo jak tak to niestety nie da rady.
Esqualante [ Jyhad Baghadyr ]
SEW >>>>>
SI jest rejestrem ogólnego przeznaczenia, a dzielenie wygląda tak, że dzielną jest albo EDX:EAX, albo DX:AX, albo samo AX, natomiast dzielnikiem - operand DIVa i od niego zależy, jak wygląda dzielna.
Ad 3. Hmmmm, w assemblerze często pisałem same procedury w stylu 'odczytaj z klawiatury liczbę dziesiętną 32bitową i umieść ją w rejestrze EAX", "mając daną liczbę binarną w AX, wyświetl ją w postaci hex" itd, tak że dla testowania można było wybrać sobie jakąś wartość i po prostu wpisać ją do rejestru, ale też, po uzbieraniu kilku procedur, można było je łączyć, szczególnie "wczytaj" i "wyswietl" :), i tworzyc bardziej uniwersalne programy. Twój problem 'zamiana binarnej na BCD' został omówiony (mam nadzieję poprawnie :)), ale jeżeli chcesz wczytywać wartości z klawiatury (inaczej niż cyfra po cyfrze się nie da, zależy jeszcze w jakim systemie), to zamiana BIN na BCD trochę mija się z celem, gdyż najpierw musiałbyś zapisać je binarnie, a potem odtworzyć każdą cyfrę (i ewentualnie odpowiednio ustawić, aby otrzymać postać BCD). Chyba że będziesz wczytywał z klawiatury od razu wartość binarną, tj na wejsciu musi być np "10011010", a nie "154"...
Czyli, reasumując, napisz co dokładnie ma program robić, a wtedy będę mógł coś więcej powiedzieć.
Kijano [ Konsul ]
No chodzilo mi o cos takiego
Imie Nazwisko Wiek Karany
Jan Kowalski 23 Nie
Piotr Nowak 41 Tak
I teraz tablica[1][1][1][1]
czyli jesli numer sie zgadza tzn wszedzi jedynka to sie wyswietli
Jan Kowalski 23 Nie
tablica[2][2][2][2]
Piotr Nowak 41 Tak
Ale juz sobie poradzilem :D Ale thx za pomoc

SEW [ Generaďż˝ ]
Esqualante--> oki to zacznijmy od poczatku. CHodzi o napisanie uniwersalnej procedury ktora by :
1. robila konwersje z binarnego na BCD
2. w CL byla podana liczba z ilu cyfr sklada sie przykladowa liczba
3. na stosie ma byc tak: jezli liczba 2137 to na stosie: 2
1
3
7
Mozemy wpisac obojetnie jaka liczba 4 cyfrowa, maxymalna liczba to 9999.
Ok 2 i 3 punkt juz wiem jak zrobic, ale 1 tez nie czaje, bo najpierw musialbym z ASCII zrobic to na binarny a potem na BCD, a to troche bez sensu. Postaram sie zrobic program ktory bedzie realizowal 2 i 3 wymaganie a jutro pogadam z psorem i dowiem sie czegos wiecej. Mam tylko pytanie :
1. przy dzieleniu w jakim rejestrze zapisywany jest zapisywana reszta?
2. czy jezeli bede chcial wyslac liczbe do rejestru mam uzyc MOV czy PUSH
3. jakim rozkazem mam przeprowadzic inkrementacje CL?? takim POP CL ?? (nie mam pojecia strzelam)
Z gory wielkie dzieki i jeszcze raz dzieuje Ci za zainteresowanie moim problemem, wiem ze dosc chaotycznie wszystko pisze, postaram sie dokladniej wszystko opisywac.
Esqualante [ Jyhad Baghadyr ]
1.
div cl; operand 8 bitowy, wynik AL := (AX div CL), reszta AH := (AX mod CL)
div bx; operand 16bitowy, wynik AX := (DX:AX div BX), reszta DX := (DX:AX mod BX)
div edi; operand 32 bitowy, wynik EAX := (EDX:EAX div EDI), reszta EDX := (EDX:EAX mod EDI)
2. PUSH
można wysyłać tylko zawartość rejestrów 16 lub 32 bitowych i (chyba) zawartości w pamięci operacyjnej (też 16 lib 32bit)
3. inkrementację CL przeprowadza się za pomocą instrukcji
INC CL
P.S. W necie jest dużo na temat assemblera, spis instrukcji na pewno znajdziesz (to o DIVie np szukałem 0,31 sek, wg google, bo nie byłem pewny), więc nie pytaj więcej oto, jaką instrukcją coś zrobić, a prędzej jak coś zrobić :)
Esqualante [ Jyhad Baghadyr ]
Kijano >>> czyli trzeba było strukturę zrobić...
struct Dane
char[MAX_IMIE] Imie;
char[MAX_NAZW] Nazwisko;
int Wiek;
int Karany;
;
a póżniej zadeklarować
struct Dane Baza[50];
KULL [ Gladiator ]
Na razie to sie musze nauczyc o klasach, czytam i czytam o nich i jakos nie mam do tego wyczucia, robie to po omacku wciaz. Macie moze jakiegos lnka gdzie to dobrze jest wytlumaczone ?
A moje zadanie brzmi:
Proszę napisać program obsługujący prostą bazę danych zawierającą spis publikacji. W programie powinna być zdefiniowana klasa, której definicja umieszczona będzie w osobnym pliku nagłówkowym np. klasa.h oraz jej zmienne i funkcje składowe w pliku klasa.cpp.
Zdefiniowana klasa publikacja powinna mieć następujące składniki:
- autor(zy) publikacji,
- tytuł publikacji,
- nazwa czasopisma, wolumin, numer strony
- rok wydania.
Funkcje składowe klasy powinny umożliwić wpisanie danych, kasowanie, wyświetlanie.
Program powinien mieć krótkie menu wyboru umożliwiające:
- wprowadzanie nowej pozycji,
- kasowanie,
- edycję,
- wyświetlanie w postaci listy, np.:
1. Domaradzki J., Prociow E.L., Kaczmarek D., Berlicki T., Podhorodecki A., Kudrawiec R., Misiewicz J.,
X-ray, optical and electrical characterization of doped nanocrystalline titanium oxide films,
Mat. Sci. Eng. B, vol. 109, 2004, s. 249-251,
2. Domaradzki J., Prociow E. L., Kaczmarek D., Berlicki T., Kudrawiec R., Misiewicz J., Mielcarek W.,
Structural, optical and electrical characterization of Co-Pd doped TiO2 semiconducting thin films sputtered on silicon,
Opt. Appl., vol. XXXIII, nr 4, 2003, s. 661 – 668,
3. Kaczmarek D., Domaradzki J.,
The method for the reconstruction of complex images of specimens using backscattered electrons,
Scanning, vol. 24, nr 2, 2002, s. 65-69,
- wyjście z programu.

KULL [ Gladiator ]
hotDog -> a wiecie moze czy "Thinking in C++" w wersji ang, da sie zrozumiec ze srednio zaawansowana umiejetnoscia ang. ?
hotDog [ Outsider ]
KULL --> Thinking ENG jest za friko dostępna, więc możesz sobie sprawdzić :-)
Link do tomu 2:
https://www.webhostgalaxy.com/mirrors/eckelbooks/TICPP-2nd-ed-Vol-two.zip
Link do tomu 1:

KULL [ Gladiator ]
hotDog --> wieklie dzieki, linki trafia na sama gore watku, a ja postaram sie podszkolic jezyk, bo wyglada to bardzo ciekawie :). dzieki !!
hotDog [ Outsider ]
No problem :-)
Inne książki Bruce'a Eckel'a (seria Thinking in):

KULL [ Gladiator ]
hotDog -> hehe, wlasnie mialem zapytac o Thinking in Java :). dzieki, genialne linki!!
wlasnie zaczynam sobie uzmyslawiac, ze znajomosc jezyka to duza oszczednosc.
Kubol [ Pretorianin ]
KULL -->
Hehe, jednak coś przeoczyłeś, linka do Thinking In C++ dalem w poprzednim lub zapoprzednim wątku.
Książka jest dobra, natomiast angielski na średnim poziomie może nie wystarczyć (ale to zależy co to średni poziom ;-). Naprawdę polecam, bo daje ona pojęcie o programowaniu obiektowym w ogóle, poza tym omawia troszkę bibliotekę standardową C++.
Kijano [ Konsul ]
Esqualante -> Big thx :)

hotDog [ Outsider ]
Kubol --> właśnie szukałem Twojego postu, bo widziałem ten link, ale nie mogłem znaleźć i podrzuciłem własne linki :-)
A wersja papierowa jest o tyle przydatna, że gdy nagle przebudzisz się w nocy z nowym pomysłem to zazwyczaj nie chce Ci się włączać kompa to można sięgnąć po książkę i skonfrontować własne imaginacje w C++ :-P
Esqualante [ Jyhad Baghadyr ]
KULL >>>> A na co Tobie tablice wielowymiarowe w tym zadaniu ? :>
Kubol [ Pretorianin ]
Hehe, mam wydrukowane TIC++, zajmuje 2 segregatory ;-))))

KULL [ Gladiator ]
Esqualante --> myslalem ze sie przyda :). ale rzeczywiscie, wystarcza tutaj zwykle tablice. Na razie musze skapowac te klasy :].
Co do TIC++ w wersji papierowej -> mozna kupic gdzies w polsce za niewielkie pieniadze wersje ANG? bo segregatory to jakos mi sie nie widza ;). Na allegro czy w sklepach (helion.pl), jak juz jest to pl.
Esqualante [ Jyhad Baghadyr ]
KULL >>>>> masz problem z zadeklarowaniem klasy i metod (czyt. nie wiesz, jak się za to zabrać ;)), czy też napotykasz trudności implementacyjne? ^^

KULL [ Gladiator ]
Esqualante --> nie kumam czaczy :). Czytam o tym czytam i niby wszystko rozumiem, a jak siadam aby samemu cos napisac, to nie wiem jak sie za to zabrac. Jakos nie do konca kapuje zastosowania tych klas, cos podobnego mam ze wskaznikami, choc z nimi jestem juz na Ty ;P.

hotDog [ Outsider ]
KULL --> Traktuj klasy jako pewnego rodzaju obiekty (przedmioty), które składają się z jakiś części (zmiennych).
Np. klasa Rower składa się ze zmiennych: kierownica, koło, marka itd
Metody (funkcje działające na klasach) to odpowiedniki czynności wykonywanych na tym Rowerze, np. Rower.wsiadz(); Rower.jedz(); Rower.skrec(w_prawo);
itd
konstruktory wypełniają dane klasy danymi podanymi przez Ciebie, tzn budują rower z takimi parametrami jakie podałeś itd :-)
destruktor - niszczy rower gdy jest już nie używany i zwalnia pamięć po nim.
dziedziczenie klas to tak jak u ludzi :-) Syn zawsze coś odziedziczy po ojcu.
Np. nowa klasa BMX może dziedziczyć po klasie Rower jej metody i niektóre elementy (zmienne) które są dla nich wspólne. Oczywiście klasa BMX może mieć własne elementy, których nie ma klasa Rower itd :-)
czysta abstrakcja! :-))
Esqualante [ Jyhad Baghadyr ]
Dodałbym jeszcze, że obiekt jest jak czarna skrzynka - wiesz że jest czarna, ale nic poza tym :)
Tzn nie masz pojęcia o tym, jak wygląda w środku i co się tam dzieje.
To trochę tak jak z samochodem: Wsiadasz do niego, przekręcasz kluczyk i nie obchodzi Ciebie, czy to diesel czy na prąd (to się nazywa polimorfizm :)), ważne że się uruchamia. Kręcisz kierownicą i koła skręcają - nie obchodzi Cię, jaki mechanizm za to odpowiada. Włączasz kierunkowskaz i lampa zaczyna mrugać, itd można wymieniać i wymieniać, grunt że nie musisz wiedzieć, jak to się dzieje, że silnik się zapala, jak wprawia w ruch koła, po co jest skrzynia biegów (taki niewygodny interfejs - ale nie wiesz, co robi...) jak jest rozmieszczona elektronika w samochodzie, ani po co się wymienia olej. Po prostu wlewasz benzynę i jedziesz :).
Czyli samochód można określić tak:
class Samochod
public:
void PrzekrecKluczyk();
void KrecKierownica(int kierunek);
void WlaczMigacz();
int Get_Max_Predkosc(); //nie mozesz zmieniac max predkosci, ale mozesz sprawdzic, ile wynosi
int Get_Ilosc_Paliwa();
private:
engine Silnik; //inna klasa
int Kolor;
int Max_Predkosc;
int Max_Pojemnosc_Zbiornika;
int Ilosc_Benzyny;
//itp itd
;

KULL [ Gladiator ]
hotDog & Esqualante --> hehehe GEnialne !! zaraz to skopiuje i pokaze wykladowcy jak powinien tlumaczyc :). Ci na polibudzuie informatycy to debile, co nic nie umieje wytlumaczyc, nic im sie nie chce i nic nie umieja, bo co sie zapytam o cos to sie zastanawiaja i kreca :).
dzieki.
btw: ten watek sie zmienia powoli w biseksualno (rowerki i czesci ;) - motoryzacyjny :p.
pozdrawiam i dzieki za wyjasnienie, zaraz to sobie wydrukuje :D.

Esqualante [ Jyhad Baghadyr ]
To Ty chyba masz dziwnych wykładowców, bo nasz postawił na środku audytorium dwóch studentów i mówił: "Obiekt1.Rusz(), Obiekt2.Rusz(), Obiekt2.PodajWzrost(), Obiekt2.PodajWzrost() :D. O, widzicie? To jest polimorfizm - mają głowy i ręce, jak im powiesz, aby zrobili krok to przodu, to podobnie się zachowają, ale jak zapytasz o wzrost, to odpowiedzą inaczej." :)

SEW [ Generaďż˝ ]
mov ax,6387
pocz:
mov dx,0
mov bx,10
div bx
push dx
mov cx,ax
inc cl
cmp ax,48
jnc pocz
Sorki ze wkleilem ale mam pytanie, co tu cholera jest zle?? :] Chodzi o ta procedure.Ma ona tak dlugo wykonywac dzielenie az ax bedzie rowny 0, pomoze ktos??Acha reszta ma byc zapisywana na stosie a tyle ile dzielen tyle ma byc inkrementacji CL.
Esqualante -->licze na Ciebie.
Esqualante [ Jyhad Baghadyr ]
SEW >>>>> W jakim celu porównujesz ax do 48? Po co robisz mov cx,ax? Przeciez to zmienia wartosc cl.

SEW [ Generaďż˝ ]
moj tok rozumowania jest taki:
1. ja pierdziele masz racje, przciez powinienm to porownac do 0, a wiesz dlaczego porownuje do 48 - przyzwyczajenie z ASCII gdzie 48 to 0. Jaki blad !
2. w sumie to tez nie wiem czemu prznosze to :( czyli powinno to wygladac tak:
mov ax,6387
pocz:
mov dx,0
mov bx,10
div bx
push dx
inc cl
cmp ax,0
jnc pocz
i tu pytanie, ma byc jnc czy jc ??
Esqualante [ Jyhad Baghadyr ]
Żadne :P
Po co sprawdzać przeniesienie, skoro interesuje Cię, czy w AX jest zero? Lepiej zrobić
JNE pocz

SEW [ Generaďż˝ ]
(sorki za drugi pod rząd)
z jc procedura nie dziala :(ale za to z jnc dziala poprawnie prawie,tzn dzieli tak dlugo az w ax bedzie zero, ale nawet jak je osiagnie to dalej wraca do pocz: :( Czegos zapomnialem wstawic?
_Robo_ [ Generaďż˝ ]
SEW -> po co tak kombinujesz, skorzystaj z "loop" i skojarzonego z nim CX. Poza tym po co j(n)c ? gdzie tam wykrywasz przeniesienie? To chyab bez sensu korzystaz z warunkowego skowku w zaleznosci od wystopieniea carry przy zwyklum porownymwamiu czy cos ==0?
SEW [ Generaďż˝ ]
jne - po wzuceniu tego dziala bez problemow, ladnie wszystko liczy. ale kolejne pytanka.
1, co dokladnie robi jne (wiem mialem nie pytac ale jakos nie umiem znalezc)
Esqualante [ Jyhad Baghadyr ]
Jump Not Equal
Więc kup sobie jakąś książkę ze spisem rozkazów.
Maevius [ Czarownik Budyniowy ]
Hej
Jaka jest komenda w c++ ktora wstrzymuje wykonywanie programu an 5 sec ?
Np
cout << Laduje ..
halt(5s)
cout << zaladowalem
itp ?
Kubol [ Pretorianin ]
Nie ma standardowej funcji sleep w c++, co więcej żadko kiedy sleepuje się program główny, chyba, że masz jakiś wątek odpalony. Najprościej i najdokładniej jest to zrobić funkcją clock().
(w jaki naglowku to zalezy juz na jakim systemie operacyjnym, nie wiem czy jest w windzie). W kazdym razie ta funkcja pozwala na pobranie ilosci tykniec zegara procka od poprzedniego wywolania clock() (to jest mylace, pierwsze wywolanie zawsze zwraca 0).
Generalnie przykład, który podałeś jest mylący. W tym sensie, że jak nie masz wątku lub nie wykonujesz jakieś nieblokującej operacji, to zatrzyma to cały program (włącznie z tą operację na którą chcesz czekać, chyba, że wykonuje się ona w osobnym wątku lub procesie).
Funkcje sleep zazwyczaj wykorzystuje się w wątkach pobocznych programu, a nie w głownym.
Jakbyś określił dokładniej problem i system operacyjny, to może mógłbym Ci bardziej pomóc.
Maevius [ Czarownik Budyniowy ]
Ok, wiec:
System oparty jest na win32 (windows xp pro) i chcialbym by komunikaty wyswietlaly sie po chwili. W sensie, na poczatku tekst, program czeka kilka sekund, potem inny tekst lub nastepna czesc poprzedniego. Zeby nie bylo to natychmiastowe..
Wiec ktora funkcja za to odpowiada ?

Kubol [ Pretorianin ]
Ok, za dużo programuję pod unixem. Akurat w winapi jest sobie funcja Sleep(miliseconds) ktora powinna wystarczyć.
Maevius [ Czarownik Budyniowy ]
Dzieki, ale nadal mam problem. Chyba cos psuje. Prosciutki programik:
#include <cstdlib>
#include <iostream>
#include <windows.h>
using namespace std;
main()
char b;
cout << "1" << endl;
void sleep(
DWORD dw5000
);
sleep();
cout << "2";
cin >> b;
return 0;
;
Ma wywalac 2 po 5 sekundach. Wywala ja od razu. Hm
Kubol [ Pretorianin ]
[i
]void sleep(
DWORD dw5000
);
sleep();
Chyba coś Ci sie źle wkleiło.
powinno być
Sleep(5000);
zwróć uwagę na wielkość literek
Maevius [ Czarownik Budyniowy ]
[Linker error] undefined reference to `Sleep(unsigned long)'
ld returned 1 exit status
dev wywala mi takie cudo.. hm. Jak wg Ciebie wygladalby prosciutki / krociutki programik, ktory
wywala 1, a po 5 sekundach kolejna cyfre ?
Kijano [ Konsul ]
Maevius - sprobuj _sleep(500);
Kubol [ Pretorianin ]
Znaczy, że nie masz tej biblioteki dolinkowanej.
W czym to kompilujesz ?
w opisie funcji jest:
Header
Declared in Winbase.h; include Windows.h.
Library
Link to Kernel32.lib.
potrzeba Ci więc Kernel32.lib.
Jeśli piszesz w devc++, to (nie używałem niestety) albo trzeba dodać w makeu do linijki kompilacji
-lKernel32 (l to male L). Choć pewnie jest jakiś prostszy sposób. W każdym razie musisz pliczek Kernel32.lib namierzyć w katalogu devc++sa. Zakładając, że jest on w katalogu C:/devc++/lib
to kompilacja powinna wyglądac tak:
g++ zrodlo.c -o program.exe -lKernel32 -LC:/devc++/lib
Jeśli natomiast używasz VisualC++ to dziwne, że ta biblioteka nie jest linkowana automatycznie. Ustawia się to gdzieś w opcjach projektu (powinno być takie pole z masą pliczków .lib wylistowanych i tam trzebaby dopisać Kernel32.lib)
Maevius [ Czarownik Budyniowy ]
Wlasnie.. Ucze sie, ale jestem glupi. Niepotrzebnie wstawialem definicje, skoro jest juz windows.h .. blah. Dziala najzwyklejsze Sleep(5000); dzieki za pomoc i cierpliwosc

KULL [ Gladiator ]
ucza sie na poniedzialkowe kolokwium z informatyki z C++ (test)i przegladam stronke z informacjami na podstawie czego sa prowadzone nasze zajecia. Taki szkolny kursik, sporo fajnych informacji (glownie dla poczatkujacych) moze sie komus przyda :)
[edit] --> link do strony glownej
https://jdomaradzki.republika.pl/cw.html
Wypowiedź została zmodyfikowana przez jej autora [2005-04-24 13:23:12]

captain_nemo [ Generaďż˝ ]
Wybaczcie ze o banal pytam,ale nie wiem dlaczego nie chce mi sie odpalic pewien prosciutki program. Jest to prosty kalkulator na switchu, wczytuje 2 argumenty, wczytuje znak dzialania i zawsze wyswietla mi ze wynik = 0.00000 . Podejrzewam, ze jest gdzies blad w wykorzystaniu funkcji scanf i getch. Czy ktos mi moze rozjasnic jaka jest miedzy nimi roznica, jak one dokladnie dzialaja?
oto kod:
#include <stdio.h>
#include <conio.h>
main ()
float a,b,c;
char z;
printf("Wprowadz 2 liczby do dzialania\n");
scanf("%f",&a);
scanf("%f",&b);
printf("\nWprowadz znak dzialania: ");
getch();
z=getch();
scanf("%c",&z);
switch(z)
case '+':
c=a+b;
break;
case '-':
c=a-b;
break;
case '*':
c=a*b;
break;
default:
c=a/b;
break;
printf("\nWynik %f",c);
getch();
Maevius [ Czarownik Budyniowy ]
// kopiowanie calego pliku do wektora lancuchow
#include <string>
#include <iostream>
#include <fstream>
#include <vecotr>
using namespace std;
int main()
vector<string> v;
ifstream in("wektor.cpp");
string line;
while(getline(in, line))
v.push_back(line); //dodanie wiersza na koncu
//dodanie numerow wierszy:
for (int i = 0; i < v.size(); i++)
cout << i << ": " << v << endl;
;
Musze zmienic ten kod w taki sposob, by drukowal wiersze od konca - od ostatniego do pierwszego. Ale jak zdefiniowac tu ostatni wiersz?
The Dragon [ Eternal ]
captain_nemo -
...
printf("\nWprowadz znak dzialania: ");
fflush(stdout); <-------- zeruje bufor i zalatwia sprawe (u mnie przynajmniej)
z=getchar();
...
Jesli moge cos doradzic, to wpisuj jak najwiecej printf'ow we wszystkie newralgiczne miejsca programu - wtedy bedziesz wiedzial gdzie sie krzaczy. O ile oczywiscie nie jestes zaprzyjazniony z debuggerem.
Sir Skull [ Demnogonis ]
captain_nemo --> Poprawiona wersja kodu.
#include <stdio.h>
#include <conio.h>
main ()
float a,b,c;
char z;
printf("Wprowadz 2 liczby do dzialania\n");
scanf("%f",&a);
scanf("%f",&b);
printf("\nWprowadz znak dzialania: ");
z=getch();
switch(z)
case '+':
c=a+b;
break;
case '-':
c=a-b;
break;
case '*':
c=a*b;
break;
case '/':
c=a/b;
break;
default:
c=0;
printf("\nWynik %f",c);
getch();
The Dragon [ Eternal ]
Aha... stosowanie bibilioteki conio.h nie jest zbyt dobrym pomyslem, jako, ze uniemozliwia latwe portowanie programow pomiedzy systemami (ba nawet pomiedzy srodowiskami kompilatorow). Tym bardziej, ze ten program znakomicie bez niej sobie radzi :)
Kubol [ Pretorianin ]
Maevius:
for(i=v.size()-1; i>=0; i--)
cout<<v[i]<<endl;
jeśli to miałeś na myśli
Maevius [ Czarownik Budyniowy ]
Kubol
Dzieki, rany, czemu ja na to nie wpadlem..
Kubol [ Pretorianin ]
Maevius
Wybrałeś sobie chyba najtrudniejszy normalny (C-podobny) język na start ;-).
Np. takie niewinne v[i] to przeładowany operator zwracający referencję to elementu.
W C++ dzieje się naprawdę sporo rzeczy pod spodem (szczególnie używając biblioteki
standardowej opartej na temlate'ach). Fajnie się tego używa, dopuki nie przyjdzie czas kiedy
trzeba dokładnie wiedzieć co tak naprawdę się tam dzieje i dlaczego mój program nie robi/
wywala windowsa ;-)
Maevius [ Czarownik Budyniowy ]
Kubol, ucze sie i ide wedlug ksiazki Bruca Eckela, Thinking in C++. Ale on troche zbyt konkretnie podaje wiedze i uzywa duzo skrotow myslowych nie popartych wczesniejszymi przykladami. Np zrobilem przed chwila wektor vector<float> i wyswietlilem jego zawartosc i ok, jestem z siebie dumny, sukces. Ale patrze na nastepne cwiczenie: "zmien program wektor (moj powyzszy kod tu) w taki sposob, by laczyl wszystkie elementy znajdujace sie w wektorze w pojedynczy lancuch jeszcze przed jego wydrukowaniem, ale nie proboj dodawac numeracji wierszy." No i stanalem na miejscu, gdzie po push_back do wektora mam polaczyc w pojedynczy lancuch...
Kubol [ Pretorianin ]
Maevius - znajdź sobie na necie jakies reference do biblioteki standardowej c++. Problem polega tu na tym, że deklaracje tych templatów są koszmarne i cieżko czasami zajarzyć o co chodzi ;-)
Co do laczenia w jeden łańcuch, to ja bym to tak zrobił:
string line;
string all;
while(getline(in, line))
all += line+'\n'; //przeładowany operator konkatenacji stringów
cout<<all<<endl;
popatrz np. na link. Google najlepszym przyjacielem programisty.
captain_nemo [ Generaďż˝ ]
The Dragon
Dzieki, juz poprawilem i smiga jak trzeba. Rozumiem tez ze na 'scanie' sie tego nie zrobi gdyz program od razu po nim wywoluje switcha i wypisuje wartosc 'c' dla niego, a gdy dajemy getch() czeka az cos wpiszemy ? i to jest ta roznica miedzy scanem i getch ?
Maevius [ Czarownik Budyniowy ]
mamy prosciutki programik w c, ktory przelicza wartosc dolara na funty, jako przelicznik przyjmujac 1.6
#include <stdio.h>
#include <stdlib.h>
float przelicz(void);
int main(void)
float dolar, funt
printf("podaj wartosc w dolarach");
scanf("%f", &dolar);
funt = przelicz ();
printf("funt: %f", funt);
return 0;
float przelicz(void);
funt = dolar * 1,6
scanf("%f", funt);
return funt;
Czemu dev wywala mi syntax error przy printf("podaj wartosc w dolarach"); ?
I czy ogolnie ten program jest dobrze napisany ?

Salado [ Pretorianin ]
Mam problem jak podzielić liczbę na cyfry.
Tzn. po wprowadzeniu liczby:
cin >>x;
Teraz chcę odwrócić cyfry. Potrzebne do obliczenia polidromu.
Moja znajomość C++ - średnio-słaba. Wiecie?
Kubol [ Pretorianin ]
Maevius:
1. nie masz srednika po funt, ale to pewnie juz wiesz.
2. Program jest zle napisany, bo nie przekazujesz do przelicz() zmiennej dolar.
zmienne zadeklarowane w main nie beda widoczne w przelicz(). Poza tym
scanf("%f",funt); jest strasznie zle i jakby sie skompilowalo (a sie nie skompiluje, bo
nie ma w przelicz deklaracji funt a nie jest widoczny tu funt zadeklarowany w main)
to by wywalilo access violation, bo scanf potrzebuje wskaznika, czyli
scanf("...",&funt);
Salado:
prawa jest prosta, zalozmy, ze masz w x zmienne, wtedy:
x%10 to najmniej znaczaca cyfra, zapisujesz, potem robisz
x=x/10
i znowu x%10 dopuki x!=0 i masz po kolei cyfry od najmniej do najbardziej znaczacej np.
x=23
x%10 -> 3
x=x/10 czyli x==2
x%10 -> 2
x=x/10 czyli x==0 - i koniec
Maevius [ Czarownik Budyniowy ]
No wlasnie mam chwilowe zacmienie i zaciach z przekazaniem do przelicz(); zm dolar
Maevius [ Czarownik Budyniowy ]
Heh to bylo proste..
Czy moze mi ktos wyjasnic pewna anomalie ?
Otoz. Program, z ktorym funkcja wyp_licz() przyjmuje jako argument liczbe calkowita i wypisuje ja na ekranie. Ponizej moj kod.. Tylko dlaczego, w zaleznosci od cyfry wklepanej w wyp_licz();
program po kompilacji wywala rozne wartosci ?
#include <stdio.h>
#include <windows.h>
void wyp_licz(int i);
int main(void)
wyp_licz('25');
Sleep(5000);
return 0;
void wyp_licz(int i)
printf("%d", i);

banan [ Leniwiec Pospolity ]
witajcie
mam pytanie na poziomie początkującym.
napisalem taki program jak ponizej. ma on zapisac linijki z pliku tekstowego do tablicy wskaznikow..
problem w tym ze po wczytaniu (petla FOR z funkcja fgets) przy wypisywaniu , wszystkie znaczniki ( tablica[od 1 do 25] ) wskazuja na ostatnia wczytana linie...
gdzie tkwi blad??
int main()
FILE *txt;
char *tablica[26];
int i;
char bufor[81];
txt=fopen("plik.txt","r");
for(i=0;i<25;i++)
fgets(bufor,81,txt);
tablica=bufor;
fclose(txt);
getchar();
return 0;
The Dragon [ Eternal ]
Maevius - nie wiem, czy dobrze zrozumialem Twoje pytanie, ale tu przekazujesz w nawiasie nie liczbe 25, a najprawdopodobniej kod ascii dwojki? Tak bym obstawial bez kompilacji.
The Dragon [ Eternal ]
banan - hm, ale w petli for chyba do kazdego elementu tablicy wskaznikow powinno byc osobne przypisanie, czyli tablica=bufor. A efekt, ktory opisales jest dziwny ?
banan [ Leniwiec Pospolity ]
fakt, robnalem sie w kodzie przy kopiowaniu tego tutaj...co nie zmienia faktu, ze nadal nie dziala tka jak powinno:)
powinno byc:
int main()
‹
FILE *txt;
char *tablica[26];
int i;
char bufor[81];
txt=fopen("plik.txt","r");
for(i=0;i<25;i++)
‹
fgets(bufor,81,txt);
tablica=bufor;
›
fclose(txt);
getchar();
return 0;
banan [ Leniwiec Pospolity ]
edit: (
int main()
‹
FILE *txt;
char *tablica[26];
int i;
char bufor[81];
txt=fopen("plik.txt","r");
for(i=0;i<25;i++)
‹
fgets(bufor,81,txt);
tablica=bufor;
›
fclose(txt);
getchar();
return 0;
banan [ Leniwiec Pospolity ]
przepraszam za spam:)
int main()
‹
FILE *txt;
char *tablica[26];
int i;
char bufor[81];
txt=fopen("plik.txt","r");
for(i=0;i<25;i++)
‹
fgets(bufor,81,txt);
tablica[i]=bufor;
›
fclose(txt);
getchar();
return 0;

_Robo_ [ Generaďż˝ ]
banan -> jak juz korzystasz ze wskaznikow to poczytaj o _przedzielaniu pamieci_ i _dokladnie_ zrozum dzialanie wskaznikow. Twoj program tworzy tablice wskaznikow na ostatnia zwartosc 'bufor'a i tyle (wszystkie wskazuja na dokaldnie to samo).
banan [ Leniwiec Pospolity ]
Robo---> byc moze:)) na moje usprawiedliwienie powiem, ze prowadzacy cwiczenia z programowania na politechnice rozlozyl na to rece;)
banan [ Leniwiec Pospolity ]
a zamiana
fgets(bufor,81,txt);
tablica=bufor;
na
fgets(tablica,81,txt);
nie zda egzaminu?:)

The Dragon [ Eternal ]
haha prosta sprawa a ile sie najeb* zeby to zobaczyc ;))
char* tablica[25] zamiast char *tablica[25] :))
_Robo_ [ Generaďż˝ ]
banan -> nie zda, musisz przydzielic pamiec za kazdym razem - prosta modyfikacja ponizej:
(w kodzie brakuje m.in. zwalniania pamieci, sprawdzania czy przydzial sie powiodl ale na potrzeby przykaldu styknie:) )
#include <stdlib.h>
int main(int argc, char* argv[])
FILE *txt;
char *tablica[26];
int i;
char bufor[81];
char *buf;
txt=fopen("plik.txt","r");
for(i=0;i<25;i++)
buf = (char *)malloc(81*sizeof(char));
fgets(buf,81,txt);
tablica=buf;
for(i=0;i<25;i++)
printf( tablica);
fclose(txt);
getchar();
return 0;
banan [ Leniwiec Pospolity ]
Dragon---> Dzieki,ale to chyba nie to:PP Zreszta, doszedlem juz, ze blad tkwi w mojej niewiedzy nt znacznikow :)
_Robo_ [ Generaďż˝ ]
ehh to forum ;) oczywiscie wszedzie gdzie jest "tablica" ma byc tez indeksowanie elementow tablica(i) <- w kwadratowych nawiasach
_Robo_ [ Generaďż˝ ]
Dragon Ty tez poczytaj o przydzielaniu pamieci ;)
The Dragon [ Eternal ]
Robo - tak napisany program dziala poprawnie. chyba, ze nie zrozumialem o co mialo w nim chodzic.. w kazdym razie dzieki za rade, ale nie sadze, abym musial cos na ten temat czytac
The Dragon [ Eternal ]
aha... no dobra.gadalem przez telefon i nie wcisnalem jednego guzika... a zdziwilo mnie, ze to cos takiego :) hihi :)
to lepiej w takim razie wstawic int j=fgets(...) i alokowac tyle pamieci ile wczytano znakow
Api15 [ Konsul ]
wiem, że to o co sie teraz spytam jest lamerskie ale powiedzcie mi co to jest to C++??
chcialbym sie dowiedziec też jak sie to obsługuje i jakie to ma mozliwości
prosze nie wdeptujcie mnie w glebe:)

_Robo_ [ Generaďż˝ ]
Dragon -> chyba jednak nie zrozumiales co program ma robic (albo ja). Wydaje mi sie ze mial stworzyc tablice wskaznikow na _rozne_ stringi wczytane z pliku tekstowego. Bez przydzialu pamieci ten program zawsze bedzie wskazywal wszystkimi wskaznikami w to samo miejsce (na miejsce pamieci gdzie zaczyna sie bufor ) (zrob sobie copy paste, i sprawdz co zawiera tablica pod kazdym z indeksow to zoabczysz).
A co do -> "haha prosta sprawa a ile sie najeb* zeby to zobaczyc ;)) char* tablica[25] zamiast char *tablica[25] :))"
Naprawde uwazasz, ze roznica w polozeniu * tu cokolwiek zmienia?

Kubol [ Pretorianin ]
_Robo_ oczywiscie ma racje. Na kazdy string musisz zaalokowac osobna tablice. Bo niby jak zmiescisz 25 81-dno elementowych strinow w tablicy o 81 elementach ?
Api15 - normlanie tak sformuowales to pytanie, ze prawie sie usmialem ;-) To obiektowy jezyk programowania i sie go nie obsluguje ;-)
Api15 [ Konsul ]
Kubol ==> nie wiedzialem jak mam sie spytać:)a chce sie nauczyć wszystkiego bo mam
zamiar sie wybrać do techników informatycznego a tam jest C++:D
.oliwka. [ Chor��y ]
Mam problem z plikiem, chodzi konkretnie o C++ w builderze borlanda.
Mam więc np
fstream InFile;
InFile.open("jakisplik.txt");
while ( !InFile.eof())
InFile.getline( bufor, sizeof(bufor))
//no i rózne rzeczy robi na poszczegolnych linijkach, i wszytsko slicznie działa
I teraz moje pytanie, co zrobić aby po tym jak dojdzie do końca pliku, przesunąć kursor ponownie na początek pliku, żeby od nowa mógł przeglądać linijka po linijce ?
Próbowałam zamknąć plik i ponownie go otworzyć, ale to nie zdaje egzaminu.
Może jest jakieś polecenie ?
Z góry dziękuję :-))
Kubol [ Pretorianin ]
.oliwka. -->
nie wiem jak w builderze, ale w ansi c++ powinno byc cos takiego jak
seekg. czyli :
InFile.seekg(0, ios::beg);
co powinno przewinac wskaxnik odczytu do poczatku.
Teraz moja uwaga do wszystkich - najlepszym przyjacielem programisty jest google. Tam znalazlem odpowiedz na to pytanie, i tam wy tez ja mozecie znaleac. Nie chodzi tu o to, zeby komus wytykac, ze powinien najpierw sam poszukac, a potem sie pytac. Poprostu zywot programisty sklada sie glownie z poszukiwania gotowych rozwiazan. I ta umiejetnosc jest tez konieczna do programowania, bo przeciez nikt nie pamieta wszystkich obiektow i metod w bibliotekach.

.oliwka. [ Chor��y ]
Kubol, dziękuje za cenne uwagi, niestety seekg również nie działa, ale postaram sie znaleźć gdzieś indziej rozwiązanie, więc już więcej nie będę zabierała ci twojego cennego czasu.
The Dragon [ Eternal ]
_Robo_ - wiem wbrew pozorom o co chodzi(lo); bardzo fajnie, ze rozwiazales problem (szczegolnie w tak zwiezly sposob). oczywiscie ze mial wczytywac rozne stringi i to co napisalem nie mialo z oczywistych powodow prawa zadzialac we wlasciwy sposob. polozenie gwiazdek w ogolnosci moze czasami byc zrodlem bledow, choc nie w takim przypadku. ot wlaczylem program i wydawalo mi sie ze zadzialal (problem w tym, ze pomiedzy wpisywaniem, a drukowaniem z tablicy zostawilem tego getchara i oczywiscie nie nacisnalem klawisza), wiec bez myslenia nad jego trescia napisalem posta.
W ramach rekompensaty za straty moralne wszystkich, ktorzy musieli czytac mojego glupiego posta moge tylko zaproponować, zeby przejechac przez plik dwa razy - za pierwszym zliczajac dlugosci wiersza do unsigned shortow, a pozniej po rewindzie alokowac tylko tyle pamieci. Jakby miejsce na tablice intow zaalokowac dynamicznie, to pozniej moznaby ja skasowac i program w efekcie koncowym zuzywalby znacznie mniej pamieci.
.oliwka. - ja jako osoba kompromitujaca sie tu tylko moge tylko powiedziec, ze w C jest funkcja rewind, oraz fseek z odpowiednim parametrem tez moze przewinac plik do poczatku. ew. moglabys ew zapisac wskaznik pliku na poczatku i pozniej go ustawic. w C sa funkcje fgetpos i fsetpos. W C++ oczywiscie tez sie ich da uzyc, ale nie wiem jak to sie ma do buildera - ale pewnie tam sa jakies odpowiedniki tych funkcji.
The Dragon [ Eternal ]
Jesli cos pomoze:
rewind
Repositions the file pointer to the beginning of a file.
void rewind( FILE *stream );
Routine Required Header Compatibility
rewind <stdio.h> ANSI, Win 95, Win NT
For additional compatibility information, see Compatibility in the Introduction.
Libraries
LIBC.LIB Single thread static library, retail version
LIBCMT.LIB Multithread static library, retail version
MSVCRT.LIB Import library for MSVCRT.DLL, retail version
Return Value
None
Parameter
stream
Pointer to FILE structure
Remarks
The rewind function repositions the file pointer associated with stream to the beginning of the file. A call to rewind is similar to
(void) fseek( stream, 0L, SEEK_SET );
However, unlike fseek, rewind clears the error indicators for the stream as well as the end-of-file indicator. Also, unlike fseek, rewind does not return a value to indicate whether the pointer was successfully moved.
To clear the keyboard buffer, use rewind with the stream stdin, which is associated with the keyboard by default.
Example
/* REWIND.C: This program first opens a file named
* REWIND.OUT for input and output and writes two
* integers to the file. Next, it uses rewind to
* reposition the file pointer to the beginning of
* the file and reads the data back in.
*/
#include <stdio.h>
void main( void )
FILE *stream;
int data1, data2;
data1 = 1;
data2 = -37;
if( (stream = fopen( "rewind.out", "w+" )) != NULL )
fprintf( stream, "%d %d", data1, data2 );
printf( "The values written are: %d and %d\n", data1, data2 );
rewind( stream );
fscanf( stream, "%d %d", &data1, &data2 );
printf( "The values read are: %d and %d\n", data1, data2 );
fclose( stream );
Output
The values written are: 1 and -37
The values read are: 1 and -37
/*************** teraz fgetpos *****************/
fgetpos
Gets a stream’s file-position indicator.
int fgetpos( FILE *stream, fpos_t *pos );
Function Required Header Compatibility
fgetpos <stdio.h> ANSI, Win 95, Win NT
For additional compatibility information, see Compatibility in the Introduction.
Libraries
LIBC.LIB Single thread static library, retail version
LIBCMT.LIB Multithread static library, retail version
MSVCRT.LIB Import library for MSVCRT.DLL, retail version
Return Value
If successful, fgetpos returns 0. On failure, it returns a nonzero value and sets errno to one of the following manifest constants (defined in STDIO.H): EBADF, which means the specified stream is not a valid file handle or is not accessible, or EINVAL, which means the stream value is invalid.
Parameters
stream
Target stream
pos
Position-indicator storage
Remarks
The fgetpos function gets the current value of the stream argument’s file-position indicator and stores it in the object pointed to by pos. The fsetpos function can later use information stored in pos to reset the stream argument’s pointer to its position at the time fgetpos was called. The pos value is stored in an internal format and is intended for use only by fgetpos and fsetpos.
Example
/* FGETPOS.C: This program opens a file and reads
* bytes at several different locations.
*/
#include <stdio.h>
void main( void )
FILE *stream;
fpos_t pos;
char buffer[20];
if( (stream = fopen( "fgetpos.c", "rb" )) == NULL )
printf( "Trouble opening file\n" );
else
/* Read some data and then check the position. */
fread( buffer, sizeof( char ), 10, stream );
if( fgetpos( stream, &pos ) != 0 )
perror( "fgetpos error" );
else
fread( buffer, sizeof( char ), 10, stream );
printf( "10 bytes at byte %ld: %.10s\n", pos, buffer );
/* Set a new position and read more data */
pos = 140;
if( fsetpos( stream, &pos ) != 0 )
perror( "fsetpos error" );
fread( buffer, sizeof( char ), 10, stream );
printf( "10 bytes at byte %ld: %.10s\n", pos, buffer );
fclose( stream );
Output
10 bytes at byte 10: .C: This p
10 bytes at byte 140:
FIL
/************* fsetpos **********************/
Sets the stream-position indicator.
int fsetpos( FILE *stream, const fpos_t *pos );
Function Required Header Compatibility
fsetpos <stdio.h> ANSI, Win 95, Win NT
For additional compatibility information, see Compatibility in the Introduction.
Libraries
LIBC.LIB Single thread static library, retail version
LIBCMT.LIB Multithread static library, retail version
MSVCRT.LIB Import library for MSVCRT.DLL, retail version
Return Value
If successful, fsetpos returns 0. On failure, the function returns a nonzero value and sets errno to one of the following manifest constants (defined in ERRNO.H): EBADF, which means the file is not accessible or the object that stream points to is not a valid file handle; or EINVAL, which means an invalid stream value was passed.
Parameters
stream
Pointer to FILE structure
pos
Position-indicator storage
Remarks
The fsetpos function sets the file-position indicator for stream to the value of pos, which is obtained in a prior call to fgetpos against stream. The function clears the end-of-file indicator and undoes any effects of ungetc on stream. After calling fsetpos, the next operation on stream may be either input or output.
Example
/* FGETPOS.C: This program opens a file and reads
* bytes at several different locations.
*/
#include <stdio.h>
void main( void )
FILE *stream;
fpos_t pos;
char buffer[20];
if( (stream = fopen( "fgetpos.c", "rb" )) == NULL )
printf( "Trouble opening file\n" );
else
/* Read some data and then check the position. */
fread( buffer, sizeof( char ), 10, stream );
if( fgetpos( stream, &pos ) != 0 )
perror( "fgetpos error" );
else
fread( buffer, sizeof( char ), 10, stream );
printf( "10 bytes at byte %ld: %.10s\n", pos, buffer );
/* Set a new position and read more data */
pos = 140;
if( fsetpos( stream, &pos ) != 0 )
perror( "fsetpos error" );
fread( buffer, sizeof( char ), 10, stream );
printf( "10 bytes at byte %ld: %.10s\n", pos, buffer );
fclose( stream );
Output
10 bytes at byte 10: .C: This p
10 bytes at byte 140:
FIL
.oliwka. [ Chor��y ]
Dragon, dziękuję , ale to co wkleiłes dotyczy FILE, ja mam fstream, i tego sie nie da przekonwertować, ale ok, jeszcze coś poszukam, może ktoś miał kiedyś podobny problem do mojego :)

Kubol [ Pretorianin ]
.oliwka.
Tu naprawde nie chodzilo o moj czas, tylko o to, ze umijetnosc poszukiwania odpowiedzi to bardzo cenne cecha infomrmatyka. Jakbym nie mial czasu to bym nie odpowiadal ;-)
The Dragon [ Eternal ]
.oliwka. - no to sorry, moze chociaz komus innemu sie przyda.
The seekg and tellg Functions
Input file streams keep an internal pointer to the position in the file where data is to be read next. You set this pointer with the seekg function, as shown here:
#include <fstream.h>
void main()
char ch;
ifstream tfile( "payroll", ios::binary | ios::nocreate );
if( tfile )
tfile.seekg( 8 ); // Seek 8 bytes in (past salary)
while ( tfile.good() ) // EOF or failure stops the reading
tfile.get( ch );
if( !ch ) break; // quit on null
cout << ch;
else
cout << "ERROR: Cannot open file 'payroll'." << endl;
To use seekg to implement record-oriented data management systems, multiply the fixed-length record size by the record number to obtain the byte position relative to the end of the file, then use the get object to read the record.
The tellg member function returns the current file position for reading. This value is of type streampos, a typedef defined in IOSTREAM.H. The following example reads a file and displays messages showing the positions of spaces.
#include <fstream.h>
void main()
char ch;
ifstream tfile( "payroll", ios::binary | ios::nocreate );
if( tfile )
while ( tfile.good() )
streampos here = tfile.tellg();
tfile.get( ch );
if ( ch == ' ' )
cout << "\nPosition " << here << " is a space";
else
cout << "ERROR: Cannot open file 'payroll'." << endl;
.oliwka. [ Chor��y ]
Tak, ale seekg działa tylko jeśli wcześniej kursor nie doszedł do końca pliku. U mnie sytuacja jest taka , ze juz eof() jest prawdziwy, czyli mamy koniec, i teraz chce kursor przesunąc na początek, i w takim wypadku seekg(0) niestety nie działa, i nadal eof() jest prawdziwy.

Kubol [ Pretorianin ]
Niestety, mimo manipulacji flagami strumienia nie udalo mi sie go zmusic, aby odczytal go od poczatku. Wydaje sie wiec, ze poprosto po osiagnieciu eof nie da sie juz przewinac strumienia ...
Doprowadzilem nawet do sytuacji, ze seekg przewija do pozycji 0, ale czyta po 0 bajtow. Przypadek jest pasjonujacy, ale niestety jutro kolos i moj czas juz sie skonczyl ...
The Dragon [ Eternal ]
Wiem, ze to takie rozwiazanie na lamusa, ale moze dopisz poprostu linijke, czy znak na koniec pliku i jak do tego dojdzie wtedy przewijaj?
.oliwka. [ Chor��y ]
Już sobie poradziłam, po prostu zamin jest eof robię tego seekg, bo po eof to już nic sie nie da , jak już wcześniej pisałam, dzieki wszystkim za pomoc :) sprawa zakończona, już nie męczę więcej
Maevius [ Czarownik Budyniowy ]
Pamieta ktos z Was jeszcze pascala ? Jesli tak, prosze o pomoc.
1. napisz program na ktory sklada sie 100 rekordow zawierajacych pola naz i tel program ma zawierac procedury wprowadzania danych, zapisu do pliku, odczyt danych z pliku, i wyswietlac je na ekranie.
2. baza samochodow z 50 rekordow zawierajacych pola marka i rok program ma zawierac procedury, wprowadz inf, listuj inf, szukaj, inf, zapisz, inf, laduj inf, sortuj inf, kasuj inf, wyjscie z progrm.
Nie chodzi mi o pelne programy, ale moze jakies wskazowki. Geez, nie pamietam tego badziewiastego jezyka..
Kubol [ Pretorianin ]
Mae --> widze, ze dopadl cie syndrom programisty C ;-) Mianowicie niechec do czegokolwiek podobnego do pascala ;-)
moje kondolencje, pascal to straszny badziew imho.
Maevius [ Czarownik Budyniowy ]
Kubol
W C bym podolal, ostro nad tym ostatnio pracuje i nad soba tez. Nie ma to jak koncentracja lepsza z dnia na dzien :)
Ale Pascala nigdy nie lubilem, nienawidze tego jezyka, mimo ze zadanie wydaje sie proste.. Nic z niego nie pamietam ;]
pozdrawiam
sYs|yavor [ Generaďż˝ ]
Panowie, nikt jeszcze nie wpadł na pomysł, aby polecić podstawową lekturę dla programisty C++? No dobra, odwalę czarną robotę :-P
"Język C++", Bjarne Stroustrup
Sugerowałbym dopisać do pierwszego posta.
Maevius [ Czarownik Budyniowy ]
sYs|yavor, dobre spostrzezenie, ale ..
.. imo ta ksiazka dla poczatkujacych odpada, mozna ja traktowac raczej jako encyklopedie c++ :)

BEERman [ Pretorianin ]
Ja też mam mały problem:
Nie wiedzieć czemu Devc++ wywala się podczas kompilacji takiej linijki kodu:
pivot = d[ipp + (rand()%(ipk - ipp + 1))];
wyświetla:
implicit declaration of function `int rand(...)'
W visualu chodzi normalnie, błąd programu?
Esqualante [ Jyhad Baghadyr ]
BEERman >>>>>>>> Coś nie tak jest z dołączaniem bibliotek? Sprawdź, czy DevC++ dołącza wszystkie potrzebne bliblioteki, czy masz w kodzie zapisane odpowiednie #include...

Pablito [ Legionista ]
oprócz Stroustrupa:
Charles Petzold "Programowanie Windows", co prawda trochę z czasów Windows 98/NT, ale to klasyka, naprawdę wiele można się nauczyć
Charles Petzold "Programowanie Windows w jezyku C#"
"Perełki programowania gier" wszystkie tomy
"Fizyka dla twórców gier"
to dla tych, co chcą zająć się grami :)

KULL [ Gladiator ]
Jak ja nie cierpie klas :/. mozecie sprawdzic mi czy to jest ok ?? bo devi mi raz wariuje raz nie.
czesc pliku cpp:
#include <iostream.h>
#include <conio.h>
#include <string.h>
#include "C:/klasa.h"
void wpisz();
int ilosc=10;
int wybor;
klasa obiekt[ilosc];
int licznik=0;
void klasa::wpisz()
cout<<"Autor:";
cin >> obiekt[0].autor;
cin >> obiekt[0].tytul;
cin >> obiekt[0].pismo;
cin >> obiekt[0].rok;
;
plik klasa.h:
class klasa
private:
char autor[100];
char tytul[100];
char pismo[100];
char rok[10];
public:
void wpisz();
;
Bledy devi:
[Warning] no newline at end of file
variable-size type declared outside of any function

hotDog [ Outsider ]
Nie wiem. Podmieniłem Twój kod - tzn wstawiłem drobne poprawki i u mnie działa :-)
#include <iostream>
#include <conio.h>
#include <string.h>
using namespace std;
/*
komentarz
*/
class klasa
private:
char autor[100];
char tytul[100];
char pismo[100];
char rok[10];
public:
void wpisz();
;
void klasa::wpisz()
cout<<"Autor:";
cin >> this->autor;
cout << "Tytul:";
cin >> this->tytul;
cout << "Pismo:";
cin >> this->pismo;
cout << "Rok:";
cin >> this->rok;
;
int main()
/*
void wpisz();
int ilosc=10;
int wybor;
klasa obiekt[ilosc];
int licznik=0;
*/
klasa obiekt[10];
obiekt->wpisz();
system("PAUSE");
return 0;
KULL [ Gladiator ]
hotDog --> dziala dzieki.
tylko 2 pytana: co to jest to: this-> (czemu this?) i jak sie teraz odwolac do tego co tam wpisalem ??
hotDog [ Outsider ]
this-> można uzywać, ale nie trzeba. Weź go usuń i powinno działać tak samo.
Jest to odwołanie się do danego obiektu, tzn wyłuskany wskaźnik - ja się tak nauczyłem bo jest mi łatwiej to jakoś sobie wyobrazić :-) Inni tego nie piszą i też żyją.
I nie rozumiem za bardzo do czego chcesz się odwoływać? Trochę jaśniej :-)
Aaaa wiem, masz na myśli te dane które zostały właśnie wpisane? Jeśli to tak napisz po prostu metodę ktora będzie robić to co chcesz (odczytywać itd) i użyj jej tak samo, np. obiekt->twoja_metoda();
KULL [ Gladiator ]
hotDog : tak, np. do autor wpisalem cos i jak to pozniej zobaczyc ??
mozesz napisac przyklad ??
KULL [ Gladiator ]
ok, przerobilem jeszcze troche moj kod, mam prosbe abys popoatrzal na to i zobaczyl czy dobrze mysle. A oto moj tok myslenia:
Mam 10 obiektow "obiekt", w ktorych znajduja sie cztery dane: autor, tytul, pismo, rok. W funkcja wpisz sluzy tylko do wpisywania tych danych do obiektu. tak ?? taka rozbudowana kilkuwymiarowa tabela ??
#include <iostream.h>
#include <conio.h>
#include <string.h>
#include "C:/klasa.h"
using namespace std;
int i=0;
klasa obiekt[10];
void klasa::wpisz()
cout<<"Autor:";
cin >> obiekt.autor;
cout << "Tytul:";
cin >> obiekt.tytul;
cout << "Pismo:";
cin >> obiekt.pismo;
cout << "Rok:";
cin >> obiekt.rok;
;
int main()
void wpisz();
int wybor;
int licznik=0;
cout<<"---------MENU---------\n";
cout<<"1. Dodaj nowy wpis\n";
cout<<"2. Wyswietl baze\n";
cout<<"3. Koniec\n";
cin>>wybor;
switch(wybor)
case 1: obiekt->wpisz();
break;
case 2: ;
break;
case 3: break;
default: cout<<"Nie ma takiej opcji"<<endl;
break;
;
cout<<obiekt[0].autor<<endl;
cout<<obiekt[0].tytul<<endl;
cout<<"koniec";
getch();
return 0;
hotDog [ Outsider ]
np. tak:
void klasa::pokaz()
cout << "Autor:" << endl;
cout << autor;
// lub tak: cout << this->autor;
oczywiście musisz dopisać
void pokaz(); w deklaracji struktury
i potem wywołujesz w main:
obiekt->pokaz();
KULL [ Gladiator ]
hotDog --> za zobacz na mojego posta wyzej, mi tam dziala tak jak mam, tak tez jest ok /?

hotDog [ Outsider ]
Najlepiej stwórz sobie tablicę takich struktur. Będzie Ci łatwiej.
np.
klasa *tab[10];
i będziesz miał 10 struktur typu "klasa".
Podaj maila to Ci wyślę mój programik, który jest bardzo podobny do tego co teraz robisz :-)
hotDog [ Outsider ]
chyba nie jest dobrze, bo "obiekt" to klasa (struktura) a nie tablica.
Spróbuj np. odwołać się do obiekt[1] lub do innego niż 0 i będą krzaki - tak mi się wydaje.
Nie spotkałem się nigdy z takim zapisem nawet, tzn. klasa[indeks].cos_tam
Podeślę Ci za kilka minut kod to sobie zobaczysz jak ja to robię na laborkach :-)

KULL [ Gladiator ]
mam zadanie napisac najprostrza mozliwie baze danych (z tymi autorami itd.) z uzyciem klas. Glownie chodzi o te klasy i funkcje w klasie.
moj mail: [email protected]
Kubol [ Pretorianin ]
hotDog -->
Tablica moze byc czegokolwiek, przyznac trzeba, ze w C najbardziej zamotane se deklaracje tablic.
Np.
klasa tab[10] to bedzie tablica 10 obiektow (o ile masz konstruktor bezparametrowy w swojej klasie)
odwolujesz sie tab[0].pole_obiektu
klasa* tab[10] to tablica 10 wskaznikow na obiekty klasy klasa. Tu odwolujesz sie przez tab[0]->pole_obiektu, oczywiscie pod ten wskaznik trzeba przypisac istniejacy obiekt lub zaalokowac nowy, np. tak:
for(int i=0; i<10; i++)
tab[i] = new klasa; /*dynamiczna alokacja nowego obiektu*/
ciekawostka jest, ze deklaracja typu
klasa (*tab)[10] (a moze (tab*)[10] ? nigdy nie pamietam) to deklaracja wskaznika do 10 el. tablicy obiektow ;-). chociaz to akurat malo przydatne.
KULL [ Gladiator ]
A to nie sa tablice obiektow??:
cytat z jednego z kursow:
"
5) Tablice obiektów
Tablice obiektów deklarujemy na takiej samej zasadzie jak tablice dowolnych zmiennych, np.:
class klasa //definicja klasy
public:
int liczba1;
...
;
int ilosc=10;
klasa obiekt1[ilosc]; //definicja tablicy obiektów
obiekt1[0].liczba=1;
obiekt1[2].liczba=234;
itp.
"
U mnie dziala takie cos :) --->
#include <iostream.h>
#include <conio.h>
#include <string.h>
#include "C:/klasa.h"
using namespace std;
int i=0;
klasa obiekt[10];
int a=0;
void klasa::wpisz()
while (i<3)
cout<<"Wpis nr"<< i << endl<<endl;
cout<<"Autor:";
cin >> obiekt.autor;
cout << "Tytul:";
cin >> obiekt.tytul;
cout << "Pismo:";
cin >> obiekt.pismo;
cout << "Rok:";
cin >> obiekt.rok;
cout<<endl;
i++;
;
void klasa::wyswietl()
cout<<"--------------WPISY W BAZIE--------------\n";
while (a<3)
cout<<"---------- wpis nr" << a <<endl;
cout<<"autor: ";
cout<<obiekt[a].autor<<endl;
cout<<"tytul: ";
cout<<obiekt[a].tytul<<endl;
cout<<"pismo: ";
cout<<obiekt[a].pismo<<endl;
cout<<"rok: ";
cout<<obiekt[a].rok<<endl<<endl;
a++;
int main()
void wpisz();
void wyswietl();
int wybor;
int licznik=0;
while(1)
cout<<"---------MENU---------\n";
cout<<"1. Dodaj nowy wpis\n";
cout<<"2. Wyswietl baze\n";
cout<<"3. Koniec\n";
cin>>wybor;
switch(wybor)
case 1: obiekt->wpisz();
break;
case 2: obiekt->wyswietl();
break;
case 3: goto end;
default: cout<<"Nie ma takiej opcji"<<endl;
break;
;
end:
cout<<"koniec";
getch();
return 0;
hotDog [ Outsider ]
Ja mam takie samo zadanie, z tym że oparte na strukturach :-) Mala różnica.
kod masz już na skrzynce.

KULL [ Gladiator ]
hotDog --> dzieki za program. przy wpisywaniu trzeciej danej o osobie wywala mi matrixa :) i sie program sypie.
zaraz go dokladnie ogladne. teraz ide na Kube Wojewodzkiego :). tez mam na jutro ten program :/

KULL [ Gladiator ]
ok, naczytalem sie troche o tych klasach i chyba troche kapuje. Ale nie rozumiem np. tych oto zadan jakie musze zrobic na pon: :(. z zaprzyjaznionymi funkcji cos tam jakos zrobie, ale to pierwsze to niezbyt rozumiem. macie moze przyklady takiego czegos ? hotDog ?? :) Ty widze idziesz podobnym programem jak ja :P
-----------------------------------------------
1. Zadanie:
Zdefiniować 2 jednakowe klasy (o różnej nazwie !) w oddzielnym pliku nagłówkowym, zawierające, np.
różne składniki liczbowe i łańcuchowe, const, stanic oraz funkcje składowe do wpisywania,
wyświetlania zawartości obiektów.
W jednej z klas zdefiniować konstruktory domniemane oraz z listą inicjalizacyjną.
Napisać program wyświetlający zawartość zdefiniowanych składników, w zależności od wywołanych konstruktorów.
2. Zadanie
1. Dla podanych dwóch klas, proszę napisać niezależną funkcje zaprzyjaźnioną wyświetlającą wartości zadeklarowanych składników (wartości powinny być incjalizowane za pomocą konstruktorów).
2.Deklarację napisanej funkcji zaprzyjaźnionej umieścić jako funkcję składową w ciele jednej z klas i zadeklarować ją jako zaprzyjaźnioną dla drugiej klasy.
Kubol [ Pretorianin ]
1. Podoba mi sie to sformuowanie. Chodzi o konstruktor bez agumentow (domniemany-normalnie ludzie mowia domyslny) i konstruktor z jakimis argumentami. No i 2 pliczki .h, potem jeden pliczek .cpp, ktory te dwa includuje i po sprawie.
2. Boze, kto wam pisze te zadania ? Funkcja skladowa, to rozumiem metoda obiektu ? (koles normalnie jest zalosny, nikt tak nie mowi ...). Chodzi o to, ze ma to byc metoda typu friend, czyli zdaje sie, deklarujesz metode normalnie w klasie A, a potem w klasie B deklarujesz ja jako friend, czyli ze ma dostep do prywatnych skladowych klasy B. Funckja powinna wiec miec w argumencie referencje do klasy B, bo do czegos sie dostac musi ;-). Sorki, ze nie napisze dokladnie, ale nie mam pod reka zadnej ksiazki, a skladni juz nie pamietam.

KULL [ Gladiator ]
podobnie genialne stwierdzenia i wytlumaczenia sa na stronie owego profesorka: https://www.jdomaradzki.republika.pl - NIE polecam :]
Kubol --> thx!
Wypowiedź została zmodyfikowana przez jej autora [2005-05-22 11:39:27]

Kubol [ Pretorianin ]
"Funkcje otwarte (inline) " - aaaaaaaa, koles mnie zabil normalnie. BIG LOL dla tego pana. Ja pierdziele, po co wymyslac polskie nazwy takich rzeczy, skoro cala dokumentacja i tak jest po angielsku ? Chyba zeby studenci mieli wiecej pracy.
Poza tym trzeba sie bardzo dlugo glowic, zeby inline przetlumaczyc jako otwarte ;-)
Regis [ ]
Domaradzki? Z Wroclawia? Mam kolezanke (z przedszkola) o takim samym nazwisku - musze podpytac ja czym sie tatus zajmuje ;)

KULL [ Gladiator ]
z tak duzym zapalem wzialem sie do zabawy w cpp, a tutaj nic mi nie dziala .wrrrrr :/.
co ja tutaj robie zle ?? banalzny program a mam problemy.
----- plik: zad3.cpp ------
#include <conio.h>
#include <iostream.h>
#include "C:/zad2b.h"
KLASA KLASA(int ile);
void main()
‹
KLASA KLASA(34);
getchar();
›
----- plik: zad2b.h ------
class KLASA
‹
public:
int pole;
KLASA(int ile);
~KLASA();
›;
KLASA::KLASA(int ile)
‹
pole=ile;
cout << pole;
›
----- Dev i wywal mi bledy:------
In fynction 'int main()':
syntex error before '[' token
i wskazuje na KLASA KLASA(34);
:///
Wypowiedź została zmodyfikowana przez jej autora [2005-05-22 19:26:29]
KULL [ Gladiator ]
ok, rozwiazalem problem, powinno byc tak jak ponizej :).
ale mam pytanie, z tym ~KLASA(); --> to sie tylko wpisuje w class czy pozniej gdzies jeszcze tez ??
zad2.cpp
#include <conio.h>
#include <iostream.h>
#include "C:/zad2b.h"
KLASA klasa(int ile);
int main()
KLASA klasa(34);
getchar();
return 0;
zad2b.h
class KLASA
public:
int pole;
KLASA(int ile);
;
KLASA::KLASA(int ile)
pole=ile;
cout << pole;

Llordus [ Generaďż˝ ]
KULL --> polecam przyswoic sobie wiedze o konstruktorach i destruktorach, to bedziesz wiedziec o tym ~KLASA to co trzeba :]

KULL [ Gladiator ]
teraz znow sie zamieszalem z zaprzyjaznionymi klasami.
---------tak dziala:
plik CPP:
#include <iostream.h>
#include <conio.h>
#include <string.h>
#include "C:/zad3.h"
int main()
KLASA obiekt;
dodaj(obiekt);
getchar();
return 0;
plik .H
class KLASA
int y;
int x;
public:
friend void dodaj(KLASA &k);
;
void dodaj(KLASA &k)
k.y+=k.x;
cout <<k.y;
------ No i teraqz jak w pliku .h przypisze
int y=2;
int x=1;
to wywala tysiace bledow. No ale przeciez po to jest zaprzyjaznienie funkcji aby funkcja dodaj mogla uzywac tych wartosci. :/
Kijano [ Konsul ]
Witam
Mam kilka pytan
1. czy da sie stworzyc strukture ktorej nie znam wielkosci.
2. Mam plik tekst.txt i on tak wyglada
Imie = "Kuba"
Telefon = "45342345"
Imie = "Paweł"
Telefon = "34344334"
Jak zrobic aby mi odczytywal tylko wartosci wpomiedzy "" ?
Kijano [ Konsul ]
aha i jeszcze jedno jak zamknac program po system("pewienprogram.exe");
zeby nie dzialal w tle ?
PikiMar [ Konsul ]
Hej.
Czy da sie zrobic konwersje z AnsiString do typu char? Istnieja funkcje StrToInt() i podobne ale nie znalazlem odpowiedniej do zmiany typu na char. Czy wogole istnieje cos takiego?
Pozdrawiam
Kijano [ Konsul ]
PikiMar-> sprobuj poprzez stringstream.
ze swoimi problemami sobie juz poradzilem ale teraz mam kolejny. Czy ktos wie jak mozna odczytywac pakiety tzn. wycuagnac z pakietu header , co jest wyslane itp ??
fanlegii79 [ Konsul ]
jakiego pakietu?
Raf [ Pretorianin ]
PikiMar -> Tu masz przyklad:
AnsiString tekst="Ala ma kota";
char * charTekst = tekst.c_str();
PikiMar [ Konsul ]
Witam.
Czy ktos moze mi wytlumaczyc, dlaczego do jasnej cholery ten za***** Builder gdy wstawiam Glyph do BitBtn robi mi cos takiego??---->
Dwie dolne strzalki zrobilem w Image Editorze, roznia sie one tylko tym ze sa odwrotne, robilem je taka sama metoda. Na gorze pokazane jest jak Builder wstawia owe strzalki na Buttona. Dlaczego lewa wstawia dobrze a ta po prawej, jakby nie tym kolorem?? Jakies pomysly?
ps. Gdy wstawiam lewa strzalke do prawego buttona, tez wyglada normalnie.
pozdrawiam

PikiMar [ Konsul ]
Rysunek....
aka [ Chor��y ]
Być może, że któryś z lewych rogów oznacza kolor przezroczysty i nastepuje jakby negacja obrazka.
PikiMar [ Konsul ]
aka --> dzieki :) zrobilem nowe obrazki, ale zostawilem ramke o grubosci jednego pixela i juz jest dobrze. Pozdrawiam

Arxel [ SperMan ]
mam pytanie
tzn problem
wlasnie zaczalem se czytac Symfonie C++ Grębosza..
i zaczalem i zostalem zmuszony przerwac
mianowicie:
na poczatek pisze ze niby pierwszy program
no i walsnie jak wpisuje
#include <iostream>
main()
cout << "Witamy na pokladzie";
i daje F9 - kompiluj i uruchom
to wszystko jest pieknie tyle ze okno sie pojawia i znika
co mam dopisac zeby nie znikalo?
bo np. jak uruchamiam jakis przykladowy projekt i hgo uruchamiam to wszystko jest ok
aha i uzywam Dev-C++
wiem ze to troche lamerski pytanie ale jestem poczatkujacy :P
KULL [ Gladiator ]
Arxel -->
#include <iostream>
main()
‹
cout << "Witamy na pokladzie";
getchar();
›
Regis [ ]
Mi czasami getchar() dzialalo w dziwny sposob (ale w bardziej rozbudowanych programach, wiec duze prawdopodobienstwo, ze z mojej winy) wiec osobiscie wole uzywac while(1) :)

Mindlord [ Konsul ]
a moze ktos przez przypadek pisze w c#?
potrzebuje kompilator do tego gowna =/
KULL [ Gladiator ]
Mindlord --> na samej gorze masz sporo linkow
m.in. -->
https://www.wemif.pwr.wroc.pl/labc/labc/lab1/lab1a.html
Regis [ ]
To Borland 3.1 kompiluje C# ? Watpie :D

KULL [ Gladiator ]
Regis -->a no na pewno nie kompiluje, wielki byk mlodego adepta C++ :P.
w zamian polecam inna stronke :)
Mindlord [ Konsul ]
dzieki =]
szukam jakiegos kompilatora zewnetrznego bo c# ma jakas dziwna ceche... po skompilowaniu dziala tylko na kompach z zainstalowanym .net - korzysta widocznie z bibliotek ktorych nie ma normalnie w windzie ale kure z jakich =/
Llordus [ Generaďż˝ ]
Mindlord --> jak znam zycie to korzysta z Microsoft .NET Framework. Pewnie da sie to zciagnac ze strony MS i to za free :)
Kubol [ Pretorianin ]
C# podobnie jak Java kozysta z maszyny wirtualnej, wiec oczywiscie jak Llordus slusznie zauwazyl, potrzebny jest .NET framework, ktory jest za free. Natomiast kompilator - zdaje sie, za MS ostatnio upubliczni swoj kompilator (ale tylko kompilator, wiec zapomnij o srodowisku z okienkami). Mozesz tez looknac na projekt MONO, ktory proboje implementowac .NET na roznych platformach i jest open source.
KULL [ Gladiator ]
niech to, nie kapuje tego zadania zbytnio nadal:
Zdefiniować 2 jednakowe klasy (o różnej nazwie !) w oddzielnym pliku nagłówkowym, zawierające, np.
różne składniki liczbowe i łańcuchowe, const, stanic oraz funkcje składowe do wpisywania,
wyświetlania zawartości obiektów.
W jednej z klas zdefiniować konstruktory domniemane oraz z listą inicjalizacyjną.
Napisać program wyświetlający zawartość zdefiniowanych składników, w zależności od wywołanych konstruktorów.
moze mi ktos podac najprostrzy tego przyklad ??
KULL [ Gladiator ]
Czy to jest mniej wiecej odpowiedz na zadanie ?? :)
Prog1.cpp
#include <iostream.h>
#include <conio.h>
#include <string.h>
#include "C:/prog1/klasy.h"
int main()
KLASA1 cos;
cos.a=5;
cout << "cos.a=" << cos.a << endl;
cos.dodaj();
cout << "cos.a=" << cos.a << endl;
KLASA KLASA(34);
getchar();
return 0;
klasy.h
class KLASA1
public:
int a;
void dodaj();
;
void KLASA1::dodaj()
a++;
class KLASA
public:
int a;
void dodaj();
int pole;
KLASA(int ile);
~KLASA();
;
KLASA::KLASA(int ile)
pole=ile;
KLASA::~KLASA()

Arxel [ SperMan ]
sory ze dopiero tera ale dopieor tera postanowilem wyszukac..
KULL, Regis - dzieki :)
PikiMar [ Konsul ]
Hej.
Jak sie w Builderze robi porzadna biblioteke zeby program ktory napisze dzialal na kompach bez zainstalowanego Borlanda? Bo wywala blad, ze nie ma vcl.bpl (czy jakos tak, nie pamietam).
banan [ Leniwiec Pospolity ]
Mam program, który odczytuje zawartość pliku tekstowego i służy do jego przeglądania..
Poszczególne linie pliku są zapisywane do:
char *tab[X];
I teraz pytanie.. Jak w "czystym" C wprowadzić dynamiczną tablicę, tj żeby ilość X określać w programie... Funkcję do wyliczenia X już mam....
W C++ doczytalem sie ze mozna to zrobic funkcja new.
I tu tez pytanie - czy funkcja ta tworzy jakos cala tablice wskaznikow?
Tj. czy ten sam efekt, ktory mam juz teraz da wywolanie:
char **tab=new tab[ile];
czy też trzeba iterować dla każdego wskaźnika??
Llordus [ Generaďż˝ ]
banan -->
jesli idzie o czyste C to sprawdz sobie funkcje malloc (alokacja) oraz free (dealokacja).
Niemniej jesli mozesz pisac w C++ to zapomnij o tym i pobaw sie operatorem new/delete.
Odnosnie drugiego pytania - musisz iterowac po kazdym wskazniku - w koncu skad kompilator mialby wiedziec, jakiej wielkosci macierze ma Ci zaalokowac?
banan [ Leniwiec Pospolity ]
Llordus-->
jesli idzie o czyste C to sprawdz sobie funkcje malloc (alokacja) oraz free (dealokacja).
ale o ile rozumiem to co czytam, to funkcja malloc alokuje pamiec na "pod-wskazniki"
czyli tab[i]=malloc(strlen(costam))
a w deklaracji char *tab[X] muszę podać jakąś ilość wskaźników na wskaźniki :)
przynajmniej jesli chodzi o C
Niemniej jesli mozesz pisac w C++ to zapomnij o tym i pobaw sie operatorem new/delete.
oficjalnie projekt jest w C wiec powinienem pisać w C
Odnosnie drugiego pytania - musisz iterowac po kazdym wskazniku - w koncu skad kompilator mialby wiedziec, jakiej wielkosci macierze ma Ci zaalokowac?
no to nastepuje chyba w pozniejszym etapie za pomoca funkcji malloc...
oto dokladny fragment z mojego programu[na obecna, stałą formę tablic, działa]:
int odczyt(char nazwa[], char *tablica[])
/* ODCZYT WIERSZY Z PLIKU O DANEJ NAZWIE I ZAPISANIE DO TABLICY WSKAZNIKOW */
FILE *txt;
int i=0;
char bufor[81];
txt=fopen(nazwa,"r");
if (txt==NULL) return i;
for(i=0;i<MAX;i++)
fgets(bufor,81,txt);
if (feof(txt)!=0) break;
tablica[i]=malloc(strlen(bufor)+1);
strncpy(tablica[i],bufor,81);
fclose(txt);
return i;
banan [ Leniwiec Pospolity ]
a nie można użyć tutaj funkcji calloc ?
z tego co wyczytalem na stronce z kursem C:
"Funkcja calloc alokuje na stercie w jednym ciągłym obszarze numberOfElements elementów, z których każdy ma rozmiar elementSize (czyli przydzielane jest numberOfElements * elementSize bajtów). Przed zwróceniem wskaźnika funkcja calloc wypełnia zerami przydzielony obszar pamięci. Obie funkcje zwracają wskaźnik do zaalokowanego miejsca w pamięci lub NULL jeśli alokacja się nie powiodła (zbyt mało wolnej pamięci)."
chociaz nadal pozostaje problem koniecznosci wpisania X w char *tab[X] przy kompilacji:)

Llordus [ Generaďż˝ ]
ale o ile rozumiem to co czytam, to funkcja malloc alokuje pamiec na "pod-wskazniki"
czyli tab=malloc(strlen(costam))
ja bym raczej zrobil: tab = (char*) malloc(strlen(costam))
a w deklaracji char *tab[X] muszę podać jakąś ilość wskaźników na wskaźniki :)
przynajmniej jesli chodzi o C
Masz racje. W takim razie moze pomysl o tym, zeby wstepnie deklarowac sobie jakas okreslona tablice tab (zakladasz np. 100 wierszy z pliku).
Nastepnie odczytujesz kolejno plik i jesli ilosc wierszy jest wieksza niz rozmiar tab to mozesz zaalokowac sobie tab1 o rozmiarze 2x wiekszym.
Nastepnie przepisujesz wszystkie elementy z tab do tab1, i tab dealokujesz (przez free). Zauwaz ze 'podtablic' nie musisz w tym przypadku ruszac, wiec operacja nie powinna byc zbyt wolna. A do kopiowania elementow z tab do tab1 mozesz:
- uzyc zwyklej petli for
- pomyslec o wykorzystaniu np. memcpy.
To tyle z wymadrzania sie - szczegoly implementacji pozostawiam Tobie ;)
mysiek [ @#mysieks@# ]
#include <iostream.h>
main()
float a, b, wynik;
int operacja;
cout << " Witamy w prostym kalkulatorze \n";
cout << " Podaj 2 liczby \n ";
// wczytuje liczby
cout << "Pierwsza liczba: ";
cin >> a ;
// druga liczba
cout << " Podaj druga liczbe: ";
cin >> b;
cout << "\nAby dodac liczby kliknij 1 \n Aby pomnozyc liczby kliknij 2 \n Aby odjac liczby kliknij 3 \n Aby podzielic liczby kliknij 4 \n";
cin >> operacja;
switch(operacja)
case 1:
wynik = a + b;
cout << " Wynik dodawania a + b: " << wynik << "\n";
break;
case 2:
wynik = a * b;
cout << " Wynik mnozenia a i b: " << wynik << "\n";
break;
case 3:
wynik = a - b;
cout << " Wynik odejmowania a - b: " << wynik << "\n";
break;
case 4:
wynik = a / b ;
cout << "Wynik dzielenia a i b: " << wynik << "\n";
break;
default:
cout << "Wybierz 1,2,3,4 albo 5 losiu pasiasty";
break;
Z cyklu gdzie jest blad :D
Regis [ ]
mysiek --> A moze tak powiesz co jest nie tak? Jakies bledy kompilacji? Czy moze zle dodaje?
mysiek [ @#mysieks@# ]
--->
mysiek [ @#mysieks@# ]
no nie zaduzy obrazek :D
Nie wiem w czym tkwi blad, uzywam dev c++ moze teraz obrazek wypali --->
mysiek [ @#mysieks@# ]
no w kazdym razie jak klikam zeby pokazal gdzie jest blad otwiera swoj dokument backward_warning.h i wskazuje na linie :
#warning This file includes at least one deprecated or antiquated header. \

Sir Skull [ Demnogonis ]
mysiek --> pewnie używasz Dev-C++ - ostrzega Cię, że używasz "starego stylu" - wg nowego standardu powinieneś includować <iostream> a nie <iostream.h>
Program działa dobrze, tylko sprawdzaj czy drugi argument działania nie jest zerem i będzie super :)
Sir Skull [ Demnogonis ]
aha, nie przeczytałem posta z 17:56 - używasz Dev'a :) Tak więc na 100% to rozwiąże twój problem.
mysiek [ @#mysieks@# ]
hehe teraz kal dalem #include <iostream> to pisze ze cout i cin sa niezdeklarowane :DDDD
Sir Skull [ Demnogonis ]
to jeszcze po includach dopisz "using namespace std;" :) lub pisz za każdym razem std::cin albo std::cout :)
mysiek [ @#mysieks@# ]
thx dziala :D
duch22 [ Junior ]
Mam do napsiania program na zaliczenie dotyczacy algorytmu genetycznego pewna czesc programu juz mam ale nie moge sobie poradzic z dalsza czescia moglby mi ktos pomoc ??? czekam na odpowiedz hej musze miec to na ten piatek co bedzie PROSZE O POMOC Confused
KULL [ Gladiator ]
duch22 ---> staraj sie bardziej precyzowac pytania.
duch22 [ Junior ]
Więc mam do napsiania program na zaliczenie dotyczacy algorytmu genetycznego pewna czesc programu juz mam tzn wylosowuje losowa populacje w postaci 5 bitow liczb zero jedynkowych nastepnie obliczam ich "przystosowanie" polegajaca na tym jak mam osobnika 11001= 1*1+1*8+1*16=25 nalezy to podniesc do potegi nastepnie zapisuje sie to na kole fortuny i pisze sie algorytm ktory losowo wybierze 4 popolucje ktore sie krzyzuje a potem mutuje załacze linka z opisem https://www.xasa.com/wiki/pl/wikipedia/a/al/algorytm_genetyczny.html ale nie moge sobie poradzic z dalsza czescia tzn z tym kolem aby napsiac algorytm do losowego wybrania??? czekam na odpowiedz PROSZE O POMOC Confused
fanlegii79 [ Konsul ]
Jezeli masz populacje ktora sie skalda sie np z 10 osobnikow. Obliczasz dla nich wagi np te twoje 25. Podnosisz je do kwadratu 625, Potam inny osobik ma np 3 podnosisz do kwadratu. I zapisujesz to w tabeli sumujac np 0->625, 1->634 (625+9) itd. Na koniec sumujesz wszystkie wagi 10 osobnikow i losujesz liczbe w tym zkaresie np. wylosowales 627. Teraz sprawdzasz w tableki kotry to osobnik. Zeorwy ma przedzial do 625, wiec to nie on, pierwszy ma od 626-6234, wiec wylosowales go. Losowanie powtarzasz tak dlugo az wylosujesz 4 roznych osobnikow. Teraz ich krzyzujesz kazde z kazdym i otrzymujesz 24 w kolejnym pokoleniu. Krzyzowanie polega na wybraniu podzialu. wiec np masz osobika 11001 i 01100. Jako podzial wylosowale 2. Wiec jego potomkowie to beda 11-100 oraz 01-001. nastepnie losowo zmienasz jeden bit i otrzymujesz np 1110-1 oraz 0-0-001. No i z tak otrtzymanych 24 znowu liczysz wagi, sumujesz je, losujesz liczbe ktora wskaze ci wybranego osbnika, wybierasz 4 krzyzujesz i tak w kolko. Na koniec oceniasz swoja populacje. Nie umiem tlumaczyc chyba. Daj jakiegos linka do kodu. W czym piszesz?
abu [ Senator ]
czy tu wszystko gra? bo nie chce mi sie skompilowac, a przeciez jest zwycem z tutoriala :/
#include <<iostream.h>
void funkcja(float liczba1, float liczba2);
int main()
float l1, l2;
funkcja(l1, l2);
//odczyt pierwszej liczby
cout << "Podaj pierwsza liczbe: ";
cin >> l1;
//odczyt drugiej liczby
cout << "Podaj druga liczbe: ";
cin >> l2;
//wywołujemy naszą funkcję
return 0;
void funkcja(float liczba1, float liczba2)
//wyświetlamy sumę
cout << "suma podanych liczb to: " << liczba1 + liczba2
<< "\n";
//wyświetlamy różnicę
cout << "roznica podanych liczb to: " << liczba1 - liczba2
<< "\n";
//wyświetlamy iloczyn
cout << "iloczyn podanych liczb to: " << liczba1 * liczba2
<< "\n";
//wyświetlamy iloraz, jeśli liczba2 != 0
if(liczba2)
cout << "iloraz podanych liczb to: " << liczba1 / liczba2
<< "\n";
else
cout << "nie mozna dzielic przez zero\n";
Arxel [ SperMan ]
1 linijka
#include <<iostream.h>
a nie ma byc
#include <iostream.h>
Arxel [ SperMan ]
kurde malo zagladam do tego watku...
dlaczego wszystkich wzielo na kalkulatory?
sma zem zrobil nawet! bez zadnych tutoriali
tzn zaczalem czytac symfonie C++
ale sam robie!
mam pliki:
kalkulator.dev-c++
kaklulator.exe
main.c++
main.o
makefile.win
chcialbym wam zapodac moj kalkulator ale nie wiem ktore pliki wrzucic? wg mnie powinny to byc
kaklulator.exe
main.o
makefile.win
abu [ Senator ]
Arxel --> racja :P dzieki!
a jak stworzyc plik wejsciowy .exe?
Regis [ ]
Arxel --> Samo exe starczy

KULL [ Gladiator ]
nowy watek, zapraszam --->
https://forumarchiwum.gry-online.pl/S043archiwum.asp?ID=3847852&N=1
duch22 [ Junior ]
Hej co do tego algorytmu to pisze w C++ i musze to zrobic na klasach fanlegii79 mam tu kawelek programu ale nie ejste zrobiony w c++ tylko w czystym C #include <time.h>
#include <iostream>
#include <cstdlib>
#include <math.h>
using namespace std;
void zaladuj(int tab[][5])
for(int i=0;i<4;i++)
for(int j=0;j<5;j++)
tab[j]=rand()%2;
void odczytaj(int tab[][5])
for (int i=0;i<4;i++)
for (int j=0;j<5;j++)
cout << tab[j];
if(j==4) cout << endl;
void oblicz(int we[][5],int wy[][1])
int liczba=0;
for (int i=0;i<4;i++)
for (int j=0;j<5;j++)
switch(j)
case 0:liczba+=we[j]*16;break;
case 1:liczba+=we[j]*8;break;
case 2:liczba+=we[j]*4;break;
case 3:liczba+=we[j]*2;break;
case 4:liczba+=we[j]*1;break;
wy[0]=liczba;
if(j==4)
cout << endl;liczba=0;
void odczytajwynik(int wy[][1])
for (int i=0;i<4;i++)
cout << wy[0];
cout << " Po podniesienu do potegi wynosi = " <<pow(wy[0],2)<< endl;
cout << "\n";
int main()
srand(time(NULL));
int tab[4][5];
int wy[4][1];
zaladuj(tab);
odczytaj(tab);
oblicz(tab,wy);
odczytajwynik(wy);
system("pause");
return 0;