KULL [ Gladiator ]
Programowanie w C/C++ i nie tylko ------ dla laików i ekspertów [cz.3]
---[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://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
---[Literatura dla programisty]---
Symfonia C++ J.Grębosza
Pasja C++ J.Grębosza
Mój pierwszy program wydawnictwa HELP
Troche mniej polecana literatura :) :
- książki jakie napisał prof. Bielecki.
---[Ś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
Esqualante [ Jyhad Baghadyr ]
pierwszy? :]
Po.Om >>>>>>
teraz zdecydiwanie cala grafike robie w OpenGL, a okienka windows
To bardzo mnie zaciekawiłeś, bo OpenGL strasznie mnie kręci, tylko nie wiem, jak się za niego zabrać. Możesz powiedzieć, z czego się go uczyłeś? Jakieś książki, kursy w necie? Jakie środowisko? Zawsze chciałem pisać w OpenGL, ale nigdy nie było czasu, albo jakoś motywacji zabrakło...
Regis [ ]
Esqualante --> Ja polecam Visual C++ (sorry, ale nie znam naprawde dobrych narzedzi programistycznych, dostepnych za darmo - DevCpp sie nadaje do wielu rzeczy, ale OpenGL nia nie jest... A debugger w Visualu... Tam mozna porzadnie pracowac :) ). Co do kursow:
nehe.gamedev.net
warsztat.mmogspot.pl [forum]
Po.Om [ Legionista ]
Eh :D Kursów w necie pełno. JA sie uczyłem z ksiązki opengl programowanie gier ( helion ) i bardzo mi to przypadło do gustu. Z publikacji w necie nie kozystalem o dziwo zdecydowanie wole papier. Tak wiec moge polecic tylko jedno :D ale o opengl duzo juz zostało napisane, szkoda ze tak kiepsko (of coze po polsku ) jesli jednak znasz angielski to siegnij do nehe, super super wielkie kompendium wiedzy :D na temat opengl.
co do spcyfikacji openka :D winxp , vc++, Programowanie Gier opengl Helionu i tyle ;D
net jesli znasz angielski to nehe a jesli nie to polski przeklad nehe :D ( szkoda ze nie wszystkie lekcje zostaly przetlumaczone ( przynajmniej od mojej ostatniej wizyty )).
KTo wywola main() w mainie ???? ( podac kod ) ( mi sie udało )
Esqualante [ Jyhad Baghadyr ]
Regis, Po.Om >>>> dzięki, zaraz po sesji zabieram się za nehe :), z językiem nie powinno być problemu, z vc++ też nie, więc myślę, że jakoś sobie poradzę :)
main w mainie? Nigdy się nad tym nie zastanawiałem. Dziś robię stronę w xml, ale jutro może spróbuję :]
Maevius [ Czarownik Budyniowy ]
Prosze o pilna pomoc!
Potrzebuje pomocy, bo fiola juz dostaje. Napisalem kalkulator binarny ktory musze
pilnie dostarczyc. Jest on napisany w jezyku C++. Zrodlo znajdziecie w linku,
skompilowanego exec'a - takze.
90% wyrazen liczy poprawnie. Np. 01010-01010*((1010+10101)-111)*11 wyliczy prawidlowo.
Ale ..
Przy np (10111-111)/111 sie wykrzacza. Zdaje sie, ze pomija drugi nawias przy dokonywaniu obliczen. Albo robi problemy podczas wykonywania dzielenia.
Czy moglibyscie mi pomoc ? Ja juz sie poddaje, nie wiem gdzie jest blad.
Pozdrawiam!
Po.Om [ Legionista ]
Maevius ---> Wytlumacz mi tylko w czym tkwi problem. Mianowicie to ma dodawac bity jak bity+ bity cz ma to zamieniac na liczby i dodawac ? moze to lamerskie pytanie ale sie nie orjentuje poniewaz nie stoje jeszcze przed takimi problemami ( szkoła srednia posiada zubozały material w ramach programowania...) jak napiszesz cos wiecej moe uda mi sie napisać cos podobnego, bo problem wyglada ciekawie.
Maevius [ Czarownik Budyniowy ]
To kalkuluje jedynie wyrazenia binarne. Jak widzisz, kraczy sie przy typie wyrazen (wyrazenie+wyrazenie)-wyrazenie, bo nie bierze pod uwage 2 nawiasu. I nie wiem dlaczego wlasnie tylko tak sie krzaczy :(
Arxel [ SperMan ]
w DevC++ jak daje zeby mi kompilowal i potem urochomil to pisze ze plik nie jest skopilowany a zadnego bledu nie ma w kodzie:/juz nawet przeinstlowalem i nic
nawet to co bylo w progsie - czyli przyklady np. Jackpot nie chce sie skompilowac a dawniej robil to bez problemu - co jest grane??
Po.Om [ Legionista ]
Arxel ---> kim ty jesteś ??? :D o co ci chodzi ??? :D
Maevius ---> postaram sie dziś jeszcze posiedzieć, przypomne sobie liczby binarne i dzialania na nich. Jednak nic nie obiecuje ( oprocz tego ze sie postaram ).
Hu hu.... Giera ktoś moze w Tibie ???? tak sie pytam dla towarzystwa :D
Maevius [ Czarownik Budyniowy ]
Dzieki wielkie Po.Om !
Zauwaz ze:
float oblicz(int odkad, int dokad)
label0:
int n=0,b=0;
float tmp;
for (int i=odkad; i<=dokad; i++)
if (nawias>0) b=i; /*Sprawdza czy sa nawiasy, jesli sa to zaglebia sie
coraz bardziej w wyrazenie, az napotka na wyrazenie bez nawiasow, wtedy idzie
dalej i wykonuje najpierw mnozenie/dzielenie a pozniej dodawanie/odejmowanie*/
if (nawias<0)
wywalilem && b!=0. i teraz bezproblemowo liczy np (0101-01010)/101.
Ale juz w ogole nie liczy wyrazen typu 01010-(((010+010101)-111)+111-1010)+1010.
Po prostu staje.
Maevius [ Czarownik Budyniowy ]
A gdy jest:
float oblicz(int odkad, int dokad)
label0:
int n=0,b=0;
float tmp;
for (int i=odkad; i<=dokad; i++)
if (nawias>0) b=i; /*Sprawdza czy sa nawiasy, jesli sa to zaglebia sie
coraz bardziej w wyrazenie, az napotka na wyrazenie bez nawiasow, wtedy idzie
dalej i wykonuje najpierw mnozenie/dzielenie a pozniej dodawanie/odejmowanie*/
if (nawias<0 && b!=0)
nawias--;
nawias++;
tmp=oblicz(b,i-1);
dokad -= i-1-b;
goto label0;
To wtedy liczy dlugie wyrazenia z zagniezdzonymi nawiasami, ale wykrzacza sie przy tych typu (wyrazenie+wyrazenie)/wyrazenie. Pomija drugi nawias.
Oczywiscie luknij na reszte kodu bys zczail ten kawaleczek ;-)
Didier z Rivii [ life 4 sound ]
wiem ze to wątek o C, ale moze jednak ktos z was mi pomoze.
Potrzebuje napisac w Pascalu kalkulator dzialajacy w RPN, tyle ze teraz jest okres kolokwiow i nie mam na to za duzo, czasu, moze ktos z was widzial gdzies kod źródłowy takiego programu, albo chociaz algorytma dzialania...?
_Robo_ [ Generaďż˝ ]
Maevius -> za uzywanie 'goto' powinno sie strzelac to taka uwaga do kodowania. Czasy BASIC-a juz minely.
Po.Om [ Legionista ]
Zdecydowanie za mało nowości....dla mnie ten wątek umarł :(
cya....zdecydowanie wiecej mnie juz tu nie bedzie ( lubie mieć wybór np co do problemów )
fifalk [ fifalkowiec ]
proste pytanie :-)
mam strukcture:
struct Str
int liczba;
char tablica[20];
i zmienna:
Str struk;
jak zapisac (i odczytac) "struk" do pliku binarnego? w "write" jako pierwszy parametr w definicji jest char*, wiec mi nie dziala takie cos: plik.write(struk, sizeof(Str)) :-( w necie tez nic znalezc nie moge...
Kubol [ Pretorianin ]
fifalk -> jak to nie dziala ?
znaczy nie kompiluje sie ?
sproboj tak:
plik.write( (char*)(&struk), sizeof(Str));
char ma dlugosc 1 bajta, dlatego za pomoca wskaznika do char mozna zapisac adres dowolnej stroktury i castowac go na prawo i lewo ;-).
przykladowo, majac np. char tablica[20] mozna zrobic
int* i_Tablica = (int*)tablica i czytac sobie po 4 bajty naraz ;-).
Nalezy tylko pamietac, ze i_Tablica ma rozmiar 5 (20/4).
Kubol [ Pretorianin ]
BTw, zauwżyłem panowie, że brakuje tu najważniejszej (bo free ;-) ) pozycji w literaturze !
Polecam 'Thinking in C++'
To fajna książka przede wszystkim dla zrozumienia idei programowania obiektowego. Nie takie same myczki jak w symfonii, ale powolny i rzeczowy wstęp.
Ale na początek radzilbym się zaopatrzyć w egzemplarz 'ANSI C' i postarać sie zrozumieć ideę wskaźników. Nie rozumiesz C, nie zrozumiesz C++ (to tylko moja prywatna opinia)
I jeszce jedno (a może 2 ;-))
1. Visual Studio można zdaje się pobrać za free od microsoftu (jets taka wersja okrojona bez zdaje się dokumentacji)
2.Chcialbym zdementować pogłoski, jakoby DevCpp nie nadawało sie do opengl'a. DevCpp używa MinGW (port linuxowych bibliotek gnu, w tym kompilatora gcc, na winde), a w mingw spokojnie sobie kompilowałem opengla.
Generalnie Visual Studio jest fajne, ale ukrywa przed uzytkownikiem pare rzeczy i szczerze mowiac lepiej zaczac od kompilowania pod linuxem lub z uzyciem MinGW pod winde. Wiem, bo zaczynalem swoja kariere od VS.
fifalk [ fifalkowiec ]
aale ja glupi jestem :-) probowalem tak: plik.write( (char*)struk, sizeof(Str)) - zapomnialem o & :-) dzieki wielkie :-)
Maevius [ Czarownik Budyniowy ]
Robo -> Pomoglbys mi zamiast marudzic :)
https://dracul.kill.pl/~veiun/binarny
Nie wiem czemu tak liczy jak liczy..
wstaw sobie zamaist goto 'continue;' i bedzie lzej, huh ? ;)
Maevius [ Czarownik Budyniowy ]
Poradzilem sobie. Liczy swietnie.
Aziss [ Centurion ]
Znalazłem Wasz miły wątek ...
Mam książeczkę o ANSI C ...
I zaczynam, ale mam pytania:
... czy kompilatory pod C++ kompilują również samo C ?? Dla przykładu taki "Dev C++". Teoretycznie stoi jak byk: "Bloodshed Dev-C++ is a full-featured Integrated Development Environment (IDE) for the C/C++ programming language." Pytam, bo kiedyś ktoś się w tej kwestii oburzył tutaj, że czemu Dev C++, jak to samo C ...
... czy Dev C++ to dobry start ... na razie tylko kiedyś z kartką kompilowałem wersję quake'a pod linuksa itp. ??
Podtrzymujcie okresowo ten wątek, wydaje mi się potrzebny, taki jakiś "bez zadęcia".
Maevius [ Czarownik Budyniowy ]
owszem, dev ma podczas otwierania nowego projektu opcje kompilowania w czystym c
chreo [ I love dorotka_l ]
Witam, może wy mi pomożecie z moim problemem?
Albo może wiecie gdzie się zwrócić z nim.
Sorry, że dopiero zauważyłem wasz wątek, bo wcześniej zrobiłem swój.
Proszę - zajrzyjcie do niego i odpiszcie jeśli coś wiecie.
OTO LINK:
Kubol [ Pretorianin ]
Aziss-->
Generalnie można założyć, że kompilator c++ kompiluje kod napisany w ansi C.
Dev cpp jest dobry bo damowy i używa sportowanego na windowsa bardzo popularnego kompilatora gcc, więc dodatkowym bonusem jest to, że nie ma potem niemiłych niespodzianek poprzesiadce na jakiegoś linuxa.Kompilatory borlanda (przynajmniej te starsze) i Microsoft Visual C++ maja braki w zgodności ze standardem C++ np. w borlandzie jest zdaje sie domyslnym typ int, a MSVC 6.0 zle uzywa scopa zmiennej zadeklarowanej wewnatrz bloku, przykładowo, w mscv 6.0 taki numer:
for(int i=0; i<size;i++)
i=costam;
i=1;
przejdzie, a nie jest zgodny z ansi c++ i juz wiekszosc innych kompilaotrów powie, że "i" nie jest zadeklarowane, bo jego zasięg ogranicza się do fora i poza forem powinien byc niewidoczny.
hotDog [ Outsider ]
Witam programistów :-)
Czy ktoś z was czytał może "Język C++" Stroustrupa? Książka trochę zamotana dla początkujacych (czyli dla mnie), ale jestem już na 70 stronie i zaczynam czytać Dział 1 :-) Ale nie o tym chciałem...
Przeczytałem w niej, że w C++ są dostępne kolekcje. Są to jakieś tam gotowe klasy itd. I czy w tym przypadku klasa MAP to to samo co tablica asocjacyjna? Czy używanie MAP jest lepsze niż zwykłych tablic asocjacyjnych?
I po trzecie: czy ktoś mógłby mi jakoś krótko przykładowo napisać jak poprawnie zdefniować takie coś? wiem, że powinno być: #include <map> oraz <string> a później: map<string, inc> tablica; Ale co dalej? elementy się wstawia poprzez tablica.push_back(); ? Chcę sobie stworzyć taką tablicę i ją wypełnić.. ale jakoś mi to nie wychodzi :-/
Pozdr.
Kubol [ Pretorianin ]
hotDog-->
Google najlepszym przyjacielem programisty !
Kubol [ Pretorianin ]
A, jedna uwaga:
w książce, do której link podałem powyżej używa się starego sposobu importowania. Nie należy go używac, zamiast #include <map.h> lepiej użyć #include<map>, ale uwaga:
po inkludach trzeba (no, nie trzeba, ale dla początkujących to lepiej tak) umieścić linijke
using namespace std;
Kubol [ Pretorianin ]
Wspominałem gdzieś o thinking in c++, radze sobie zassać !
Apropos map, to zobacz tutaj (wycinek z Thinking In C++ Vol.2)
Zajcef [ Konsul ]
2. Dany jest plik fizyczny towary.dat o następującej strukturze
3456 Mleko 1.50
1987 Maslo 2.80
….. …… …..
….. ……. …..
Zawierający następujące dane o towarach: kod towaru, nazwe i cene. Napisz program, który otwiera plik, wyswietla na ekranie dane zawarte w pliku, a na koncu drukuje (srednia cene towaru oraz ilość wszystkich towarow w sklepie.
Nie oczekuje gotowego rozwiazania. Chodzi mi jedynie o sam schemat tego zadania jak ma mneij wiecej wygladac. Z jedna dana bylbym sobie poradzic, ale z kilkoma moze byc trudniej. Jakby ktos mial chwilke, bede bardzo wdzieczny i powtarzam nie chodzi o gotowe rozwiazanie bo i tak musze sie nauczyc robic to sam na zaliczenie.
Narazie splodzilem cos takiego ..
int main()
int kod;
char nazwa;
float cena;
int ile=0;
cout<<"wyswietlam dane z pliku towary.dat"<<endl;
cout<<"nacisnij dowolny klawisz"<<endl;
getch();
ifstream plik;
plik.open("c:\\towary.dat");
if (!plik)
cout<<"otwarcie pliku nie powiodlo sie"<<endl;
getch();
Sadze, ze do tego momentu raczej nic nie schrzanilem :)
Tu zaczynaja sie schody i brak pomyslu...
while (plik>>kod>>nazwa>>cena)
double cena_tab[1000],kod_tab[1000],nazwa_tab[1000];
ile_kod=0,ile_cen=0,ile_nazw=0;
kod_tab[ile_kod]=kod;
ile_kod++;
cena_tab[ile_cen]=cena;
ile_cen++;
nazwa_tab[ile_nazw]=nazwa;
ile_nazw++;
Dalsza czesc bedzie raczej prosta...ale samej petli nie potrafie zrobic jakos ...
znany-banita [ Pretorianin ]
powie mi ktoś dlaczego ten program nie działa??????????????????????????
#include <stdio.h>
#include <conio.h>
#include "stdafx.h"
void main()
char* path ="D:\\plik.txt";
char* mode;
FILE* file;
struct
char imie[10];
char nazwisko[10];
char telefon[9];
char ulica[10];
int numer;
char co[10];
int kwota; os1;
printf ("Dane osoby pierwszej\n");
printf ("podaj imie ---->\t");
scanf ("%s", os1.imie);
printf ("podaj nazwisko ---->\t");
scanf ("%s", os1.nazwisko);
printf ("podaj numer telefonu ---->\t");
scanf ("%s", os1.telefon);
printf ("podaj nazwe ulicy---->\t");
scanf ("%s", os1.ulica);
printf ("podaj numer domu---->\t");
scanf ("%d", os1.numer);
printf ("co wypozyczyl?---->\t");
scanf ("%s", os1.co);
printf ("Za jaką kwotę?---->\t");
scanf ("%d", os1.kwota);
mode = "w";
file = fopen(path, mode);
fprintf(file, "Imie\t\t Nazwisko\t\t Nr.Tel.\t Ulica\t\t Numer\t\t Przedmiot\t Kwota(zl)\n%s,%s,%s,%s,%d,%s,%d", os1.imie, os1.nazwisko, os1.telefon, os1.ulica, os1.numer, os1.co, os1.kwota);
getch();
return;
znany-banita [ Pretorianin ]
sie powklejalo jakoś chamsko, nie wiem jak to wkleic zeby nawiasiki sie powklejaly
znany-banita [ Pretorianin ]
niech sie ktoś odezwieeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
aka [ Chor��y ]
scanf ("%s", &os1.imie);
tak powinny wygladc funkcje scanf, zapomniales o &
Regis [ ]
Kurde, panowie, moze wy bedziecie wiedziec w czym rzecz - otoz mam taki problem, ze mam straszny mlyn z liczbami podczas pisania programu. Juz tlumacze o co mi biega: mam sobie jakiegos tam int-a - moge na nim wykonywac dowolne operacje i wszystko hula jak nalezy. Natomiast kiedy definiuje sobie zmienna typu double czy long, to wszystko sie wkrzacza i zamiast np. 34.42 mam 132423454353 czy cos takiego... Wiecie moze w czym rzecz? Dosc dawno nie pisalem w C i moze robie jakis glupi blad, ale z drugien strony - napisalem program skladajacy sie TYLKO z jednej deklaracji zmiennej typu double (wraz z wartoscia) i printf-a ktory ma ja wypisywac i ten program wlasnie m.in. tak zle dziala, a przeciez w nim chyba nie da sie popelnic bledu :P Wogole nigdy nie mialem takiego problemu, wiec kompletnie nie wiem co moze byc winne... Czy to moze byc wina kompilatora? Korzystam z DevC++ 4.9.9.0. Help! Musze napisac progsa na informatyke :P
Kubol [ Pretorianin ]
Regis-->
Byłoby pomocne, gdybyś jednak zamieścił kod tego programu.
Jakiego używasz formatu w printfie ?? do double %f, do inta i longa: %d.
Jeśli nie to, to jak inicjalizujesz zmienną ? może problem polega początkowej wartości.
Ale bez kodu NIC nie da się powiedzieć
jmail [ Pretorianin ]
widziałem tu jakąś wypowiedź o dobrym debuggerze w Visual C++. Nie da się go porownać z SoftIcem.
"Daj człowiekowi a, a jutro będzie głodny. Naucz go ować, a już nigdy nie będzie głodny"
Kubol [ Pretorianin ]
Debugger to straszne zło ;-) Osobiście pracuję ostatnio na 64 bit HP-UX-ie i jest tam tylko gdb. I ilość
błędów spadła mi o 200%, bo sprawdzam każdy kawałek kodu 2x przed uruchomieniem ;-).
Perspetywa debugowania z gdb chyba wpłyneła na moją podświadomość - boję się robić błędy - LOL
Regis [ ]
Kubol --> Tak jak sie spodziewalem - debilny blad... Chcialem wypisac doubla za pomoca %d - przy %f dziala idealnie :) Dzieki :)
Moja pokuta:
for(int i=0; i<1000; i++) printf("Jestem lamerem!");
;)
Kubol [ Pretorianin ]
Regis--> Wierz mi, pracuję z naprawdę wymiatającymi goścmi i oni też popełniają kretyńskie błędy i też potrzebuja pomocy innych. Poza tym lamerzy nie piszą w C tylko w pascalu i visual basicu, względnie w delphi ;-)
ronn [ moralizator ]
Pilnie prosze o jakiegos linka, ktory wyjasnia tworzenie listy dynamicznej, kasowanie elemetow tej listy, sortowanie.. dodawanie itp. Nie chodzi mi tylko o kod zrodlowy, ale zdecydowanie bardziej o dokladne wyjasnienie, bez kodu moge sie obejsc. Z gory dzieki :)
[wiem, ze sa adresy w tytule, ale moze akurat ktos pamieta dokladne miejsce i nie bede musial szukac :)]
Kubol [ Pretorianin ]
Tak mnie naszło (po kilku piwkach robie sie wylewny ;-)), ze C i Java to najpiękniejsze języki. C++ jest już troszkę zbyt przekombinowany (ktoś kiedyś powiedział, że C++ przypomina skrzyżowanie psa z ośmiornicą. Z jednej strony jest obiektowy, z drugiej strony można w nim pisać koszmarnie nieobiektowo). Delphi to żenada. Jak mówi mój kolega, który ma ostatnio nieprzyjemność pracować w Delphi, jest ot język niedeterministyczny ;-) i nigdy do końca nie wiadomo co tak naprawdę nasz program robi ;-)
ronn [ moralizator ]
Wlasnie zapomnialem dodac, ze chodzi mi o jezyk C :)
Regis [ ]
ronn --> A tu nie ma: www.algorytm.cad.pl ? Strzelam w ciemno, bo nie chce mi sie sprawdzac, ale to naprawde porzadna strona i jest tam kupe rzeczy :P
Kubol --> Zgadzam sie w 100% jesli o Jave chodzi - rozbudowana, czytelna (choc poki sie nie zaczalem jej uczyc, to uwazalem cos dokladnie odwrotnego :P ), "wzorcowo" obiektowa :) Ma tylko dwie wady - jest zdeka zbyt wolna oraz wymusza oboiektowosc przy problemach, ktorych rozwiazywanie w sposob obiektowy jest utrudnianiem sobie zycia :P Ale bez dwoch zdan - to jest jezyk z przyszloscia, dlatego sie go od jakiegos czasu ucze (choc szkola skutecznie mi to utrudnia ;))
Kubol [ Pretorianin ]
Regis-->
Java już nie jest taka znowu wolna. Niestety jest okropnie pamięciożerna, a ponieważ windows swapuje wszysko co tylko może, nawet jak ma 500M wolnego ramu, to niestety wydaje sie czasami powolna.
Masz rację, Java wymusza podejście obiektowe. Ale jak masz problem nieobiektowy, to uzywasz np. C, a potem przez JNI podpinasz sobie do Javy ;-) I juz. Poprostu trzeba używać właściwych narzędzi do właściwej pracy. C++ też się do wszystkiego nie nadaje. Poza tym zawsze możesz w Javie zrobić wszystko na staticach. A w 1.5 można zaimportować (static import) metody statyczne z klas i używać ich jak funkcji w C (zamiast System.currentTimeMillis() poprostu currentTimeMillis() )
Regis [ ]
O tym podpinaniu to szczerze mowiac nie wiedzialem :P
A co do szybkosci - ja niestety nie dysponuje 0,5 giga ramu, a jedynie polowa tego (a i procesor nie za szybki mam) i strasznie mnie owa powolnosc w Javie wkurza - nie wiem jak jest na innych komputerach, ale mnie interesuje to jak dziala u mnie a nie u innych ;) Skoro C moze dzialac szybko, to Java tez by mogla :P Oczywiscie zartuje, ale nie zmienia to faktu, ze u mnie Java dziala za wolno jak na moje oczekiwania :)
Kubol [ Pretorianin ]
Cóż, faktycznie Java niestety słabo nadaje się do programów działąjących przez stosunkowo krótki czas. Brakuje tutaj kompilowania całego programu do kodu natywnego, jak to ma miejsce w .NET. Po pierwsze, zchodzi czas na uruchomienie samej maszyny, ktora musi zaalokować dla siebie pamięć i przygotować wszystko pod uruchomienie aplikacji.
Potem kod uruchamiany jest przez interpreter. W Nowoczesnych maszynach wirtualnych typu hotspot, kod, który jest wielokrotnie wykonywany (np. ciało jakiejs pętli) jest kompilowany do kodu natywnego (sic !). Teoretycznie jest to super sposób, bo kod może być optymalizowany w czasie działania programu (jest z tym związany jeszce jeden fajny motyw - tzw Ascpect Oriented Programming, ale to zamotane i skomplikowane). Fajne jest to dla aplikacji serwerowej, która działa nieprzerwanie wiele dni czy miesięcy. Jednak jest to zbyt czasochłonne dla aplikacji która jest uruchamiana jednorazowo na kilka sekund czy minut. Są kompilatory Javy do programu natywnego, ale nie widzialem takiego na windowsa niestety.
WindowsXP [ Konsul ]
Pobrałem kod programu z SourceForge i mam problem.
Podczas kompilacji wypluwa mi trzy błędy:
c:\docume~1\windows\pulpit\keylog~1.0-s\keylog~1.0-s\keylog~1.cpp:10: Message.h: No such file or directory
In file included from c:\docume~1\windows\pulpit\keylog~1.0-s\keylog~1.0-s\keylog~1.cpp:11:
c:\docume~1\windows\pulpit\keylog~1.0-s\keylog~1.0-s\KeyloggerFilter.h:10: StorageKit.h: No such file or directory
c:\docume~1\windows\pulpit\keylog~1.0-s\keylog~1.0-s\KeyloggerFilter.h:11: InputServerFilter.h: No such file or directory
Sęk w tym, że wszystkie powyższe pliki istnieją i są w dokładnie tej lokalizacji, którą mi wypluwa. Co jest?
Mogę poczęstować pełnym źródłem jeśli ktoś chętny. Program to "Keylogger 1.0", niestety nie widzę go teraz na SourceForge.
WindowsXP [ Konsul ]
Kubol, aż tak bardzo C różni się od C++? Niby czytam te kursy, ale patrzę na daty aktualizacji - x.x.2000/1997 itd. i myślę, że coś tu jest nie tak... :-) Czyli zaczynać od C? Zabieram się od dupy strony? :-)
Regis [ ]
Napisalem sobie dzisiaj z nudow programik szyfrujacy teksty algorytmem 'PlayFair' - jak ktos jest zainteresowany, to moze sobie zobaczyc - linka daje ponizej :) Program jest jeszcze nieco ograniczony, ale moze za jakis czas go nieco ulepsze - wczytuje dane z klawiatury i wypisuje na ekran. Obok na screenie macie przyklad dzialania:
Dla klucza
REGIS
tekst
TAKIE SOBIE NIECO PRZYDLUGIE HASELKO DO ZASZYFROWANIA
(oczywiscie pozbawiony spacji) zostaje zaszyfrowany do
ODMEGEPASGMSGBPQSVDMNQISRKFRGKHPATVFFFZDAVVBMSCV
Program poki co tylko szyfruje, bez mozliwosci deszyfracji, wiec jest srednio uzyteczny, ale jak ktos bedzie chcial sie pobawic, albo dowiedziec sie jak dziala ten szyfr, to mu sie przyda ;)
P.S. Dla wszystkich, ktorzy nie wiedza jak dziala Playfair - wszystkie litery J sa zamieniane na I, wiec sie nie dziwcie, ze cos wam znika :P
Interface [ Legionista ]
nie bijcie, jestem poczatkujacy ;)
mam problem, pisze sobie programik ktory bedzie sortowal wg 3 algo.
zatrzymalem sie na jednym, quicksort...
w skrócie wyglada to tak:
#define tablica 100
int part (int t[], int l, int r)
....
....
void qsort (int t[], int l, int r)
...
...
//inne sortowania
main()
....
....
qsort(tab, 0, tablica-1);
....
....
problem w tym ze przepisuje mi liczby, nie chce sortować :| algorytm jest ok
o co chodzi?
Kubol [ Pretorianin ]
windowsXP
Co do różnicy pomiędzy C a C++ - to zależy czy chcesz pisać obiektowo, czy nie. w C nie można pisać obiketowo, więc jest pewna różnica. A różnica pomiędzy programowanim obiektowym a nieobiektowym jest kolosalna. Ale naprawdę dobrze jest zacząć od C ( Jeśl interesuje Cie tylko programowanie obiektowe, to zacznij od Javy)
Dobrze jest zacząć od C ponieważ C++ rozszerza C. I podstawowe elementy typu funkcje, pętle, operatory (podstawowe) są takie same. IMO, chcąc uczyć się C++ trzaba przynajmniej z miesiąc spędzić nad C. Ale nie za długo, bo chociaż syntaktycznie języki są podobne, to idea programowania obiektowego jest zasadniczo inna. Podałem gdzies linka do Thinking in C++, przeczytaj sobie. Jak nie znasz angielskiego to problem. Jest polskie tłumaczenie, ale to wydatek pewnie ok 70 złotych.
Poza tym uważaj na stare borlandy, bo nie są one kompatybilne z obecnymi standardami C++.
Interface
1. Kod, kod, kod ! To, że myślisz, że jest dobrze, to nic nie znaczy !
2.Co znaczy "przepisuje mi liczby" ?
Ramz [ Konsul ]
Jak by wykonac program na odchylenie standadowe ? (link do wzoru podaje nizej.
PS.Nie prosze o gotowy program tylko jais pomysl.
Ramz [ Konsul ]
^UP
Regis [ ]
Ramz --> Ale moze konkretniej? Przeciez jak masz wszystkie dane ze wzoru, to nie problem obliczyc σ ... Czego konkretnie dotyczy Twoj problem? Moze podaj jakas specyfikacje programu i co on ma robic...
Esqualante [ Jyhad Baghadyr ]
Ramz >>>> jeżeli chodzi o implementację wzoru:
policzenie średniej: robisz for'a od 1 do n, w którym do sumy dodajesz za każdym razem (x - m)^2, a następnie dzielisz przez n, dokładnie tak, jak jest zapisane...
jeżeli chodzi o sam wzór: jest on nie do końca prawdziwy, mianowicie przyjmuje, że dane podlegają rozkładowi normalnemu. W rzeczywistości (dla dowolnego rozkładu) wzór wygląda trochę inaczej.
Ramz [ Konsul ]
Esqualante - o taka odpowiedz mi chodzilo. Moglbyc podac poprawny wzor, oraz (w podobnysposob) jak wykonac program.
MGS_Saladin [ ]
siema
wie ktoś jak edytować proces w pamięci by zbudować typowy trainer? Przyda mi się wszystko na ten temat (kursy, źródła itp...) o ile takie są :|
Esqualante [ Jyhad Baghadyr ]
Ramz >>>> to tak czy inaczej, tak jak napisał Regis, powinieneś podać jakieś info o programie, który piszesz: w jakim języku, jakie masz dane wejściowe, co dokładnie ma program obliczać itd
Co do wzoru, to jest to wymagana jest elementarna znajomość rachunku prawdopodobieństwa.
odchylenie to pierwiastek kwadratowy wariancji.
wariancja to E(X^2) - (EX)^2, gdzie EX to wartość oczekiwana zmiennej losowej X.
EX oblicza się według wzoru
x1*p(x1) + x2*p(x2) + ... + xn*p(xn)
gdzie x1, x2, ... , xn to kolejne wartości zmiennej losowej a p(xi) - prawdopodobieństwo, że zmienna losowa X będzie miała wartość xi.
Co do implementacji tego wzoru, to nie wiadomo (nie podałeś) w jaki sposób podany jest rozkład prawdopodobieństwa (wzór, tablica wartości, jaki ro rozkład - np. równomierny), ani nic nie napisałeś o zmiennej losowej, więc nie wiem, co napisać.
aka [ Chor��y ]
MGS_Saladin --> w linku znajdziesz źródła trainerów napisane w asemblerze.
Ogólnie zainteresuj się tymi funkcjami:
FindWindow
GetWindowThreadProcessId
OpenProcess
WriteProcessMemory
oraz ewentualnie:
CreateThread
Ramz [ Konsul ]
Esqualante- program ma byc pisany w c++, dane wejsciowe nie mam pojecia jakie maja byc (ma byc to ponoc na egzaminie :P)- ale domyslam sie ze moze to byc tablica jednowymiarowa z elementami; program ma liczyc tak jak juz mowilem odchylenie standardowe.
Jesli dobrze rozumiem wzor jest taki sqr((E(Xi-Xo)^2)n-1)
gdzie
Xi - dane wprowadze przez uzytkwonika
Xo - srednia artmetyczan dotychczasowo wprowadzonych elementow
n - ilosc wprowadzanych elementow
i tak majac dane 1,2,8,4 i korzystajac ze wzoru bedzie:
sqr(((1-1)^2+(2-3/4)^2+(8-11/3)^2+(4-15/4)^2)/(4-1))=
Oczywiscie robione ze wzoru z wikipedji.
Czy dobrze to rozumiem ??
Esqualante [ Jyhad Baghadyr ]
Jeżeli ma to być rozkład równomierny i do policzenia odchylenie standardowe, to dla Twojego przykładu będzie tak:
wartość oczekiwana:
m = (1 + 2 + 8 + 4) / 4 (zwykła średnia arytmetyczna)
suma będzie wyglądać tak:
S = (1 - m)^2 + (2 - m)^2 + (8 - m)^2 + (4 - m)^2
sumę dzieli sie przez N = 4 i jeszcze liczy pierwiastek. (to jest wzór pierwszy z wikipedii)
WindowsXP [ Konsul ]
Jak skompilowac pliki Turbo Pascala do EXE? Jestem legalny, uzywam TP 5.5 i kompiluje on (ALT+F9) jedynie do formatu .PAS.
Regis [ ]
WindowsXP --> Hmmm... A moze jest gdzies opcja build?
A teraz JA mam pytanie - jak w C++/C wczytac PO JEDNYM ZNAKU/CYFRZE liczbe z stdin?
Musze zapisac kolejne cyfry liczby w tablicy (tak zeby zamiast np. 546 miec w osobnych polach tablicy 5, 4 i 6) ? Ew. jak po wczytaniu calego inta do jednej zmiennej "rozparcelowac go" na pojkedyncze cyfry ktore bede mogl wstawic to tablicy?
Esqualante [ Jyhad Baghadyr ]
Regis >>>> getcharem
int c;
c = getchar();
c -= 48;
c - pobrana cyfra
Regis [ ]
DZieki - zapomnialem o tym ze mozna odjac 48 i dostac liczbe i zamiast tego bawilem sie funkcjami konwertujacymi string do inta (atoi() ) i mi sie sypalo wszystko :P Tylko moze jeszczce mi powiesz jaki warunek mam postawic, zeby getchar wczytywal mi tylko dopoki nie natrafi na puste pole (to umiem), a potem przeszedl do kolejnej linii (z tym mam problem)? ze scanf to jest proste, bo od razu pobiera ciag do spacji, jak nic nie ma, to przechodzi do nastepnej linii, a tu nie wiem jak jest, ale wydaje mi sie, ze trzeba mu "nakazac" przejsc do nastepnej linii. Ogolnie chodzi mi o to, zeby wczytac z stdin dwie liczby bedace pod soba (niestety dlugosc moze byc dowolna) i zapisac je do tablicy., Tzn wczytuje liczbe pierwsza, cyfra po cyfrze i zapelniam nia tablice, a potem przechodze do nastepnej linii i zapelniam druga liczba druga tablice.
Esqualante [ Jyhad Baghadyr ]
Regis >>>>> przecież wszystkie znaki w ASCII mają swój kod, enter też :) i tak naprawdę wszystko podawane jest w jednym ciągu, więc wystarczy, że np po odejmowaniu
c -= 48;
zrobisz sprawdzenie, czy c < 0. Jeżeli jest - wtedy przeskakujesz ten znak i idziesz dalej. Albo możesz wczytywanie liczby zrobić w pętli, i gdy c < 0 lib > 9, wtedy wyskakujesz z niej i zaczynasz następną.
Robiłem coś takiego do algorytmu Karatsuby, jak chcesz, mogę Tobie wkelić wczytywanie danych, tak aby cyfra jedności była w indeksie 0 :) (trochę pokomplikowane ale było potrzebne, aby algorytm był odpowiednio szybki)
Regis [ ]
Esqualante --> Mozesz wkleic, chociaz akurat tym razem potrzebuje kolejnosci odwrotnej, czyli takiej jaka jest przy wczytywaniu :) A za pomoc dzieki - zajme sie dalej pisaniem po obiedzie :>
Esqualante [ Jyhad Baghadyr ]
Tak to się odbywa w moim programie (pisany w C). W dalszej częsci programu korzystam z pPierwsza i pDruga. Było jeszcze parę rzeczy w iteracjach, ale dla czytelności je usunąłem :>
#define K 10000
// maksymalna dlugosc liczby
int i,D1,D2,znak,
Pierwsza[K], // tablice statyczne, D1 - dlugosc pierwszej, D2 - dlugosc drugiej
Druga[K],
* pPierwsza = NULL, // pPierwsza i pDruga staja sie wskaznikami do tablic
* pDruga = NULL;
D1 = 0;
D2 = 0;
for (i = K-1; i >= 0; i--)
znak = getchar()-48;
if (znak<0 || znak>9) break;
Pierwsza = znak;
D1++;
pPierwsza = Pierwsza+K-D1;
for (i = K-1; i >= 0; i--)
znak = getchar()-48;
if (znak<0 || znak>9) break;
Druga = znak;
D2++;
pDruga = Druga+K-D2;
Esqualante [ Jyhad Baghadyr ]
[edit]
Zapomniałem, że cenzura wcina [ i ] :)
#define K 10000
// maksymalna dlugosc liczby
int j,D1,D2,znak,
Pierwsza[K], // tablice statyczne, D1 - dlugosc pierwszej, D2 - dlugosc drugiej
Druga[K],
* pPierwsza = NULL, // pPierwsza i pDruga staja sie wskaznikami do tablic
* pDruga = NULL;
D1 = 0;
D2 = 0;
for (j = K-1; j >= 0; j--)
‹
znak = getchar()-48;
if (znak<0 || znak>9) break;
Pierwsza[j] = znak;
D1++;
›
pPierwsza = Pierwsza+K-D1;
for (j = K-1; j >= 0; j--)
‹
znak = getchar()-48;
if (znak<0 || znak>9) break;
Druga[j] = znak;
D2++;
›
pDruga = Druga+K-D2;
Dewey [ Konsul ]
Witam. Miałbym do Was wielką prosśbę. Czy znacie może adresy stron www na których miałbym ładnie i klarownie (ale w miarę rozwięźle) wypisane takie pojęcia jak STOS, ASEMBLER, KODOWANIE, KODOWANIE STRATNE, REKURENCJA? Jestem kompletnie zielony w dziedzinie programowania i nie wiem czy np. pojęcie stosu i asemblera odnosi się w identyczny sposób do wszystkich języków programowanie. Na zajęciach ćwiczymy Basica (nie visual basica tylko tego podstawowego) na emulatorze ZXSpectrum i stąd moja niepwność. Nie wiem czy np. informacje o tych zagadnieniach znalezione na stronie poświęconej c++ będę mógł wykorzystać na egzaminie z Basica. Wy siedzicie w tym wszystkim dość głębko więc na pewno znacie jakieś ciekawe strony poświęcone tym pojęciom, które wymieniłem na początku. Proszę o pomoc.
Pozdrawiam.
KULL [ Gladiator ]
Dewey --> poszukaj w linkach na poczatku tego watku. Ale z tego co sie orientuje, to stos zwsze jest stosem, a rekurencja to rekurencja ;).
orientujecie sie jak wyglada sprawa z microsoft visual studio 6.0 ?? To jest trudniejsze od czystego pisania w Borlandzie C++ ??
Kubol [ Pretorianin ]
a co chcesz pisac ? Kompilator jak kompilator. Robisz projekt, piszesz kod, klikasz run ...
Jesli chodzi o pisanie gui, no, to juz moze byc trudniejsze. Generalnie trzeba zapozanc sie z MFC (Microsoft Foundation Classes). Przewaznie bedzie to trudniejsze w uzyciu niz biblioteki borlanda. Ale pisac sie da, sam na sobie sprawdzalem ;-) .
hopkins [ Wieczny Optymista ]
Ooo jak ladnie chyba przeczytam sobie te kursy i sie poucze troszke, tymbardziej ze nie mam zielonego pojecia o programowaniu =P
Esqualante [ Jyhad Baghadyr ]
Mam tu linka, który koniecznie powinien znaleźć się we wstępniaku, tak dobrego opracowania nt C++ (między innymi różnic pomiędzy nim a C) nie czytałem chyba nigdy, do tego zawiera całkiem pokaźne kompendium wiedzy... Polecam! (I jak się nie znajdzie we wstępniaku to zabiję ;)).
slowik [ Legend ]
zajmowal sie ktos z was pisaniem programow zajmujacych sie konwersja jednego formatu na inny ??
moze macie jakies przykladowe aplikacje ?? :-) (dobrze by bylo gdyby byl w python'ie)
KULL [ Gladiator ]
Kubol --> ok, microsoft visual studio 6.0 juz nieaktualne ;), teraz pracujemy na uczelni w Dev-C++, ale cholerstwo jest strasznie nieprzyjane :). Np. nie chce zaakceprowac "void main ()', musi byc "int main()". No i jakies problemy ze spacjami pomiedzy sformulowaniami. ale nic, wlasnie to sciagam, trzeba sie do tego przyzwyczaic, zawsze to ladniej wyglada niz Borland C++ pod dosem ;)
btw: sciagam to z https://sourceforge.net/projects/dev-cpp/ (Dev-C++ - licencja freeware), moze komus sie link przyda.
Esqualante --> bedzie, bedzie, kolejny do sporej ilosci nowych linkow, jakie dojda w nowym watku. dobrze, ze sie watek ruszyl, bo byl maly przestoj :). wracam do programowania po leniowaniu, na uczelni z C przeszlismy na C++.
slowik --> niedawno szukalem takiego cuda :), ale z tego co wiem, to nie ma dobrego zamieniacza formatow.
slowik [ Legend ]
KULL===>sa jest tego wiele no ale niestety do automata robiacego na mase duuuzo plikow niema :/ a jesli juz sa to jedynie z graficznych na tego samego typu itd ....
slowik [ Legend ]
o i jakby ktos sie bardziej interesowal Python'em moja mala aplikacja w tym jezyku :-)
wymagany python+wxpython ("skompilowana" wersja zajmuje kolo 3 mb ..)
niestety nie wszystko dziala do konca tak jak powinno ...
Kubol [ Pretorianin ]
KULL --> ale jestes rozpieszczony !!! ;-)
jak bym mial z wami zajecia, to bym wam kazal pisac w Vi pod linuxem, a jako debugere uzywalibyscie GDB ;-) Moze byscie mnie nienawidzili, ale wiedzielibyscie co to make, linker, itp.
KULL [ Gladiator ]
Kubol --> a slyszales kiedys o bezstresowym nauczaniu ?? :) pani od infy jest zreszta taka mloda, ze trudno byloby mi sie skupic na C++ :). a ze Pani Profesor ma lagodne podejscie, coz, bede chodzil na konsultacje :), problem tylko, ze ona ma chyba meza, ktory uczy na tej samej uczelni :/.
BTW: co to za OT w powaznym watku o programowaniu ??!! Zawsze jakies "dupy" sie pojawiaja, nawet tutaj ;). Zagladam tutaj aby sie nauczyc cos o C++ a zaczynam gadac o panienach :/. ;)... nic wracajac do programowania .... ;)
ronn [ moralizator ]
Devcpp jest super.. my robimy w najzwyklejszym edytorze tekstowym pod solarisem.. beznadzieja.. makefile.. gcc.. blee.. chcialbym uzywac devcpp :)
Vasago [ spamer ]
Wlasnie grzebie w programie,ktory troche mnie przerasta.
Jest to prosty arkusz kalkulacyjny. Niestety kod nie jest moj i paru rzeczy w nim nie lapie.
Calosc wyglada tak:
#include <string>
#include <vector>
#include <algorithm>
#include <map>
#include <climits>
#include <sstream>
#include <cstdio>
#include <iostream>
using namespace std;
struct CELL
string data;
int value;
bool circular;
bool compute;
CELL()
value = INT_MAX;
circular = false;
;
struct BOARD
int rows, cols;
map<string, CELL> cells;
// output the board
void print()
bool circ = false;
for (map<string, CELL>::iterator mi = cells.begin(); mi != cells.end(); mi++)
if (mi->second.circular)
circ = true;
std::cout << mi->first << ": " << mi->second.data << "\n";
if (!circ)
// 0 1
//A 3 5
//B 3 -2
cout << " ";
for (int i = 0; i < cols; i++)
printf("%6d", i);
cout << endl;
for (int r = 0; r < rows; r++)
cout << char('A' + r);
for (int c = 0; c < cols; c++)
ostringstream os;
os << char('A' + r) << c;
printf("%6d", cells[os.str()].value);
cout << endl;
cout << endl;
// evaluate each cell, print out circular references
void solve()
for (int r = 0; r < rows; r++)
for (int c = 0; c < cols; c++)
ostringstream os;
os << char('A' + r) << c;
pair<bool, int> ans = eval(cells[os.str()], vector<string>(1, os.str()));
cells[os.str()].circular = ans.first;
if (!ans.first)
cells[os.str()].value = ans.second;
//cout << endl;
pair<bool, int> eval(CELL& c, vector<string> computing)
if (c.circular)
return make_pair(true, 0);
if (c.value != INT_MAX)
return make_pair(false, c.value);
// actual eval
if (c.data[0] == '-')
return make_pair(false, atoi(c.data.c_str()));
// tokenize by signs
string s;
for (int i = 0; i < c.data.length(); i++)
if ('+' == c.data)
s += " ";
else if ('-' == c.data)
s += " ";
s += c.data;
else if ('*' == c.data)
s += " ";
else
s += c.data;
//cout << c.data << ": " << s << endl;
istringstream in(s);
string token;
int value = 0;
while (in >> token)
int mult = 1;
if ('-' == token[0])
mult = -1;
token = token.substr(1);
if (token[0] >= '0' && token[0] <= '9')
value += mult * atoi(token.c_str());
else
if (find(computing.begin(), computing.end(), token) != computing.end())
return make_pair(true, 0);
vector<string> c2 = computing;
c2.push_back(token);
pair<bool, int> tmp = eval(cells[token], c2);
if (tmp.first)
return make_pair(true, 0);
value += mult * tmp.second;
return make_pair(false, value);
;
int main()
BOARD b;
cin >> b.rows >> b.cols;
while (!(b.rows == 0 && b.cols == 0))
b.cells.clear();
for (int r = 0; r < b.rows; r++)
for (int c = 0; c < b.cols; c++)
ostringstream os;
os << char('A' + r) << c;
CELL cell;
cin >> cell.data;
b.cells[os.str()] = cell;
// solve everything
b.solve();
b.print();
cin >> b.rows >> b.cols;
Mnie interesuje fragment dotyczacy wykonywanych dzialan,czyli:
string s;
for (int i = 0; i < c.data.length(); i++)
if ('+' == c.data)
s += " ";
else if ('-' == c.data)
s += " ";
s += c.data;
else
s += c.data;
Co mam tu dopisac zeby dodac mnozenie i dzielenie?
Analogicznie powinno to byc chyba cos w stylu:
if ('*' == c.data) //MNOZENIE
//i to niestety nie mam pojecia
Bylbym dozgonnie wdzieczny,gdyby ktos zechcial dorzucic konieczny fragment kodu. Sam niestety nie dam sobie rady
hotDog [ Outsider ]
Witam, mam problem - muszę napisać funkcję która jako parametr przyjmuje referencję do tablicy 10-elementowej. Wszystko jest ok, do czasu gdy chcę się odwołać we funkcji do jakiegoś elementu tej tablicy, np. poprzez tab w pętli for przy szukaniu elementu max czy min.
wkleję ją tutaj, ale zaznaczam, ze t u mnie nie działa :-/
Wyskakuje błąd:
invalid types `int[int]' for array subscript
int max(int & t, int n)
int max = t[0];
for(int i=0; i < n; i++)
if (max < t)
max = t;
return max;
Pomóżcie mi i napiszcie jak można się odwoływać do elementów tej tablicy w tej funkcji ;-)
acha, wywołuję ją takim poleceniem:
int &tab_ref = tab[0];
cout << "Element maksymalny to: " << max(tab_ref, 10) << endl;
Qbaa [ Generaďż˝ ]
czyżbyś chciał napisać:
...tej tablicy, np. poprzez tab[i]...
to jest eksperyment więc się nie śmiać jakby mi też się skopało ;)
a jak będzie jak powinno, to następnym razem wyłącz opcję "znaczniki" :)
ps. niestety rozwiązania twojego problemu nie znam
Kubol [ Pretorianin ]
hotDog-->
Tez Ci sie zachcialo referencji do tablicy ;-). Nie mam w tej chwili mozliwosci sprawdzenia
jak sie robie referencje do tablicy, bo referencji raczej nie uzywam, wole wskazniki (pisze
duzo w C).
Wiec, Ty pobierasz referencje do pierwszego elementu, a nie do tablicy.
Njproscie zrobic to tak:
int max(int* t, int n) /*moze tez byc int[] t*/
int max = t[0];
for(int i=0 ; i<n ; i++)
if(max < t)
max = t;
return max;
....
int tab[10]=1,2,3,4,5,6,7,8,9;
cout<<"Max to "<<max(tab,10)<<endl;
Kubol [ Pretorianin ]
Hehe, to 10 ta ja liczyc juz nie umiem ;-)
aka [ Chor��y ]
Wydaje mi się, że bardziej naturalnym sposobem jest przekazywanie tablicy do funkcji przez wskaźnik.
wywołanie:
cout << "Element maksymalny to: " << max(tab, 10) << endl;
funkcja:
int max(int t[], int n)
int max = t[0];
for(int i=0; i < n; i++)
if (max < t[i])
max = t[i];
return max;
Kubol [ Pretorianin ]
znaczy DO 10 ;-)
hotDog [ Outsider ]
Qbaa --> jakie znaczniki?? ;-)))
Kubol --> Nie mnie się zachciało tylko prowadzącemu laborki ;-) Niestety muszę użyć referencji, bo mam za zadanie napisać 3 funkcję, które będą pobierać parametry (tzn tablicę) na 3 różne sposoby: wskaźnik, referencja, wartość (nazwa tablicy). No i teraz tylko mi została referencja ;-/
Pobieram referencję do pierwszego elementu:
int &tab_ref = tab[0];
bo przy zapisie:
int &tab_ref = tab;
kompilator się burzy.
Przez wskaźnik zrobiłem pierwszą funkcję, bo faktycznie najprościej ;-) Ale wyczyn to odwołoanie sie wewnątrz tej funkcji do jakiegoś elementu przekazanej tablicy, np. t[5]. Próbowałem nawet użyć (t + i) ale to tylko dodawało 1 do wartości 0-elementu tablicy a nie dawało efektu podobnego do *(t+1) ;-/
Chodzi mi tylko o możliwość odwołania się do konkretnego elementu tablicy wewnątrz funkcji ;-)) Resztę mam zrobioną.
aka --> mnie też się tak wydaje ;-) Ale niestety teraz muszę użyć referencji.
aka [ Chor��y ]
w takim razie deklarujesz referencje w ten sposob:
int (&tab_ref)[] = tab;
a funkcje tak
int max(int (&t)[], int n)
int max = t[0];
for(int i=0; i < n; i++)
if (max < t[i])
max = t[i];
return max;
Qbaa [ Generaďż˝ ]
hotDog ---> w okienku dodawania postu, nad przyciskami Opublikuj i Podgląd jest taki checkbox, który można odznaczyć jeśli kod który chcesz wkleić zawiera znaki: [i] [b] [u]
hotDog [ Outsider ]
aka --> niestety to nie działa ;-/ Próbowałem podobnych zapisów, ale nic z tego ;-/ Acha, jakby co to mam DevC++
Qbaa --> aaa... o to Ci chodzi.. ;-)) No cóż, kursywa sama się dodała, bo ja nic nie wciskałem :-P
KULL [ Gladiator ]
hotDog --> z DevC++ to bywa roznie :)
hotDog [ Outsider ]
KULL -->No i co ja mam biedny teraz zrobić? ;-P Builder jak i Visual są dla mnie na razie zaprofesjonalnymi środowiskami ;-)
Nikt nie zna odpowiedzi na moje pytanie? Kurczę jutro muszę to oddać... ;-) F1!
robal [ Pretorianin ]
Czesc
Dla mnie C++ to jeszcze czarna magia i niestety na przyszly tydzien a dokladnie na wtorek mam oddac projket moze znajdzie sie osoba sklonna mi go zrobic w C++ Builder. Bede bardzo wdzieczny osobie ktora poswieci pare minut.
Deklaracja funkcji
int szukaj(char *p, char *s);
Opis funkcji
szukaj odnajduje w łańcuchu p łańcuch s.
Wartość zwracana
szukaj zwraca nr indeksu w łańcuchu p od którego rozpoczyna się odnaleziony łańcuch s. W przypadku, gdy łańcuch s nie został znaleziony, szukaj zwraca wartość –1
robal [ Pretorianin ]
Dobra to juz nie robcie bo i tak wiem ze nikt nie zrobi a program juz mam. Pozdrawiam
KULL [ Gladiator ]
robal --> bo i tak wiem ze nikt nie zrobi - te slowa mnie zabolaly :(. Dzieki temu watkowi, temu forum i ludziom tutaj zagladajacym, jakies kilka miesiecy temu, nie majac zielonego pojecia o programowaniu "napisalem" rekami i umyslem innych program na zaliczenie semestru.
Powiem Ci, ze nikt nikomu nie pomoze jak ktos pisze tutaj z nastawieniem: moze znajdzie sie osoba sklonna mi go zrobic . Tutaj mozna pomoc, zasugerowac itp., ale nie odwalic cala robote za kogoc (mimo, iz za mnie kiedys to zrobiono, o czym napisalem wyzej ;)). No i jeszcze dajesz termin na za kilka dni :). trzeba troche wlasnej inicjatywy... program masz bo sam napisales, czy ktos Ci pomogl ?? :)
KULL [ Gladiator ]
Znajdywanie najmniejszej liczby z tablicy to banal:
int min=tablica[1];
for (a=2; a<10 ; a++)
if (tablica[a]<min) min=tablica[a];
ale jak zrobic, aby posortowac wszystkie od min. do max ?? myslelame nad czym takim, ale jakos nie dziala :/
int tab[10];
for (int c=1; c<10 ; c++)
int min=tablica[1];
for (a=2; a<10 ; a++)
if (tablica[a]<min) min=tablica[a];
tablica[a]=9999999; //zakladam, ze w tabeli nie bedzie wiekszych
// liczb od tej, wiec ta komorka odpadnie
tab[c]=min;
cout << tab[1] << tab[2] << tab[3] << tab[4]; // itd.
robal [ Pretorianin ]
---> Kull. Nie sadzilem ze moje slowa Cie zabola tylko widze czesto ze sa zakladane watki z prosba o pomoc a jedyna odpowiedz w tych watkach to uwaga na temat gramtayki czy zlego zlozenia zdan. A z zadaniem pomogl mi kolega i wytlumaczyl troche o jezyku C++. Pozdrawiam
Pamir [ Generaďż˝ ]
KULL >>>
void bubblesort( double tab[], int n )
int i;
double tmp;
bool change;
do
//wykonuj wszystko poniżej
change = false; // reset znacznika zmiany
for( i = 1; i < n; i++ )
if( tab[i-1] > tab ) // jeżeli zła kolejność
tmp = tab; // to zamieniamy elementy miejscami
tab = tab[i-1];
tab[i-1] = tmp;
change = true; // i zapamiętujemy, że cokolwiek w tym przebiegu się zmieniło
while( change ); // kończymy jeśli w danym przebiegu Z nie zostało ustawione na true, czyli jeśli nic się nie zmieniło
Chyba najprostrze możliwe sortowanie tablicy :)
POzdrawiam Pamir
Kubol [ Pretorianin ]
KULL - zaimpelemntuj sobie sortowanie przez wstawianie/wybor (powyzej), popatrz na to i zapomnij na zawsze.
qsort z stdlib.h i juz. Pisac sorty sobie mozna dla zabawy, ale jak cos jest gotowe, to trzeba to wykorzystac.
Szczegolnie, za paru dobrych gosci sie meczylo, zeby ten algorytm wymiatal.
Kubol [ Pretorianin ]
Hehem, jakzwsze nie przygladnalem sie dostatecnzie poprzednim postom ;-) Tak jakios wygladalo mi to na za duze, zeby byl tylko bubble. Oczywiscie powyzej nie ma sortowania przez wstawianie/wybor.
Pamir [ Generaďż˝ ]
qsort to bardzo fajna sprawa, ale w wielu wypadkach nie zdaje egzaminu (za mała stabilność ) buble są za to bardzo fajnym przykładem jeśli ktoś się uczy :) przynajmniej nie będzie musiał się wysilać myśląc jak to działa :)
POzdrowienia Pamir
Esqualante [ Jyhad Baghadyr ]
Kubol >>>>>> prawda, nie należy wyważać otwartych drzwi, ale tak się dziwnie składa, że wszyscy nauczyciele, wykładowcy itp upierają się, aby przedstawić popularne metody sortowania i kazać biednemu uczniowi/studentowi je implementować... ;)
KULL >>>>> myśl myśl, w necie i książkach jest tego mnóstwo :)
A poza tym sortowanie jest fajne, szczególnie w brainf**k'u :]
(męczę się teraz nad nim :))
Kubol [ Pretorianin ]
Pamir-->...ale w wielu wypadkach nie zdaje egzaminu (za mała stabilność )...
Nie rozumiem o co Ci chodzi. Ze niby dla niekorzystnego przypadku ma zlozonosc kwadratowa ?
Buble i inne proste maja kwadratowa zlozonosc zawsze. Poza tym wierz mi, da sie zrobic to tak, ze wymiata w 99,99%. Poza tym w glibc (impl GNU) czesto zamiast qsorta uzywa mergesorta (ale wywolujesz qsort). Sciagnij sobie zrodelka i popatrz.
Aczkolwiek stabilnosc w sortowaniu to cos troszke innego. Zgaduje, ze chodzilo Ci o to powyzej, bo sortowanie albo jest stabilne, albo nie.
Esqualante--> Nie mowilem, zeby nie implementowac. Powiedzialem, zeby zaimplementowac raz (w celach dydaktycznych) a potem juz uzywac gotowego.
KULL [ Gladiator ]
Pamir --> Chyba najprostrze możliwe sortowanie tablicy :) to marnie ze mna, bo nic z tego prawie nie kapuje :), ale thx.
Kubol --> to juz brzmi lepiej, gotowce - to jest to !! :D
Samemu sie pomeczylem i cos wymodzilem, ale program sortuje mi jak chce. raz kilka 3 pieresze liczby dobrze, raz 4 dobrze posortuje, a jak wpisze liczby wieksze nic 10 to wywala mi blad lub zamienia liczbe na 8. A algorytm wydaje sie ladny i madry. Ale ze sam go wymyslilem wiec na 100% jest bledny. Sami zobaczie, wklejam caly program.
(a moze to problem, ze pisze program w devC++ ?? :) )
#include <conio.h>
#include <iostream.h>
int main()
int i;
int tablica[10];
// wpisywanie liczb ****************************
for (i=0 ; i <10 ;)
cout << "podaj liczbe numer" << ++i <<endl;
cin >> tablica;
getchar();
// wyswetlanie tych liczb tak dla sprawdzenia ****************************
cout << "Liczby w kolejnosci wpisania:" << endl;
for (i=0 ; i<10 ;)
cout << "liczba" << ++i << "to: " << tablica <<'\n';
getchar ();
// sortowanie od najmniejszego ****************************
int c;
long int tab[10];
int a;
int b;
for (int c=0 ; c<10 ; c++)
int min=tablica[0];
for (a=0; a<10 ; a++)
if (tablica[a]<min)
min=tablica[a];
b=a;
tab[c]=min;
tablica=9999;
// wyswetlanie liczb od najmn. ****************************
getchar();
for (int g=0 ; g<10 ;g++)
cout << tab[g] << endl;
getchar();
return 1;
Kubol [ Pretorianin ]
KULL--> to sie nazywa sortowanie przez proste wybieranie (a raczej prosta wersja tego prostego sortowania).
Zainicjuj b na zero, tam gdzie inicjujesz min !
KULL [ Gladiator ]
Kubol --> racja, dzieki, dziala juz wysmienicie !! :) ponizej caly program, moze sie komus przyda.
Teraz musze napisac to samo ale na wskaznikach. A te wskazniki to mi cos nie ida, wiec jak co znow zglosze sie po pomoc ;).
btw: forum GOLa jest niekompatybilne z rozmowami o programowaniu. Po pierwsze problemy z nawiasami, ktore sa zamieniane na < i >. Po drugie, wstawiajac zmienna b w nawiasach [], np. przy tablicach, jest to brane jako pogrubienie txtu :).
#include <conio.h>
#include <iostream.h>
int main()
int i;
int tablica[10];
for (i=0 ; i <10 ;)
cout << "podaj liczbe numer" << ++i <<endl;
cin >> tablica;
getchar();
cout << "Liczby w kolejnosci wpisania:" << endl;
for (i=0 ; i<10 ;)
cout << "liczba" << ++i << "to: " << tablica <<'\n';
getchar ();
int c;
long int tab[10];
int a;
int s;
for (int c=0 ; c<=10 ; c++)
int min=tablica[0];
for (a=0; a<=10 ; a++)
if (tablica[a]<min)
min=tablica[a];
s=a;
tab[c]=min;
tablica[s]=9999;
s=0;
getchar();
for (int g=0 ; g<10 ;g++)
cout << tab[g] << endl;
getchar();
return 1;
KULL [ Gladiator ]
Post z serii znalezione na Allegro :))
aukcja pt."PROGRAMY NA ZAMÓWIENIE W C/C++/PASCAL".
p.s. to nie jest forma reklamy z mojej strony. to ani nie moja aukcja, ani mojego znajomego :). nie, powiem, moze sie kiedys przyda taka aukcja ;).
Qbaa [ Generaďż˝ ]
KULL ---> ja już niedawno napisałem co zrobić żeby się nie zamieniały [b], [i] oraz [u] na pogrubienie, pochylenie oraz podkreślenie ;)
KULL [ Gladiator ]
Qbaa --> a racja. wylaczyc wystarczy "Znaczniki bold". musze uwazniej czytac watek.
KULL [ Gladiator ]
No i mam takie pytanie. Co to w ogóle znaczy, aby zrobić sortowanie liczb na wskaźnikach ?? To ma być tez z tabela, tylko ze wskaznikami ?? nie rozumiem polecenia: „aby wpierw zrobic sortowanie liczb w tabelce (zrobilem), a pozniej to samo na wskaznikach”.
Esqualante [ Jyhad Baghadyr ]
Podejrzewam, że zamiast min = tablica[0], powinieneś zrobić
int * min = tablica;
oraz int * a = tablica+1;
a następnie sprawdzać
if (* a < * min)
min = a;
itd jak leci w Twoim programie...
Kubol [ Pretorianin ]
KULL --> fakt, dziwne to. W koncu operacje na tablicach to nic innego jak tylko operacje na
wskaxnikach tylko z inna skaldnia.
Mozna to jeszce interpretpwac w ten sposob, ze masz 2 tablice - 1 z jakimis danymi, i druga o takiej samej dlugosci ze wskaznikami na nie. I sortujesz wskazniki, ale wartosci do porownan pobierasz "z pod wskaznika" - czyli z danej.
Czasem sie stosuje taki numer, gdy dane sa duze, i ich przepisywanie moze zajmowac duzo czasu.
Wskaznik zajmuje zawsze na 32 bitowym systemie 32 bity, wiec stosunkowo malo.
Nazywa sie to sortowanie zewnetrzne.
Jest zarabiscie fajny algorytm, ktory pozwala posortowac oryginalna tablice w miejscu, majac posortowana tablice wskaznikow, ale to juz wyzsza szkola jazdy.
Hiacynt. [ Centurion ]
Mam do napisania prosciutki program w C, z wykorzystaniem funkcji. Nie jestem super biegly w programowaniu wiec jesli ma ktos chwilke czasu, przejrzy ponizszy kod. Program kompiluje sie bezblednie jednak funkcje B i C nie licza tego co powinny.
/* Dana jest tablica kwadratowa. Funkcje:
A)Druk
B)Obliczenie sumy elementow na glownych przekatnych
C)Obliczanie sredniej arytmetycznej wyrazow parzystych
Tablica typu int */
#include<stdio.h>
#include<conio.h>
#include<string.h>
#define K 10
#define czyt(k) printf("\nPodaj rozmiar tablicy k: \n"); scanf("%d", &k);
#define tekst printf("\nPodaj k*k elementow tablicy: \n");
int A[K][K], pom, i, j, k, s=0, d=0;
float sr=0;
druk(x,T)
int x;
int T[K][K];
int i, j;
for(i=0; i<x; i++)
printf("\n");
for(j=0; j<k; j++) printf("%4d", T[j]);
return(0);
int suma(x,T)
int x;
int T[K][K];
int i, j, s=0;
for(i=0; i<x; i++)
for(j=0; j<x; j++)
if((i==j) && (i+j==x-1)) s=s+T[j];
return(s);
float srednia(x,T)
int x, T[K][K];
int i, j, d=0;
float sr=0;
for(i=0; i<x; i++)
for(j=0; j<x; j++)
if(T[j]%2==0) sr=sr+T[j]; d++;
sr=sr/d;
return(sr);
main()
clrscr();
czyt(k);
tekst;
for(i=0; i<k; i++)
for(j=0; j<k; j++) scanf("%d", &pom); A[j]=pom;
clrscr();
druk(k,A);
suma(k,A);
srednia(k,A);
printf("\nSuma wynosi %5d , a srednia %2.2f", s, sr);
getch();
return(0);
Qbaa [ Generaďż˝ ]
proponuję dodać do wstępniaka, na samą górę, że gdy wkleja się jakiś kod, to żeby wyłączać opcję "znaczniki" w okienku dodawania postu ;)
Hiacynt. [ Centurion ]
Qbaa <-- dzieki za przypomnienie, teraz powinno byc juz chyba poprawnie:
/* Dana jest tablica kwadratowa. Funkcje:
A)Druk
B)Obliczenie sumy elementow na glownych przekatnych
C)Obliczanie sredniej arytmetycznej wyrazow parzystych
Tablica typu int */
#include<stdio.h>
#include<conio.h>
#include<string.h>
#define K 10
#define czyt(k) printf("\nPodaj rozmiar tablicy k: \n"); scanf("%d", &k);
#define tekst printf("\nPodaj k*k elementow tablicy: \n");
int A[K][K], pom, i, j, k, s=0, d=0;
float sr=0;
druk(x,T)
int x;
int T[K][K];
int i, j;
for(i=0; i<x; i++)
printf("\n");
for(j=0; j<k; j++) printf("%4d", T[j]);
return(0);
int suma(x,T)
int x;
int T[K][K];
int i, j, s=0;
for(i=0; i<x; i++)
for(j=0; j<x; j++)
if((i==j) && (i+j==x-1)) s=s+T[j];
return(s);
float srednia(x,T)
int x, T[K][K];
int i, j, d=0;
float sr=0;
for(i=0; i<x; i++)
for(j=0; j<x; j++)
if(T[j]%2==0) sr=sr+T[j]; d++;
sr=sr/d;
return(sr);
main()
clrscr();
czyt(k);
tekst;
for(i=0; i<k; i++)
for(j=0; j<k; j++) scanf("%d", &pom); A[j]=pom;
clrscr();
druk(k,A);
suma(k,A);
srednia(k,A);
printf("\nSuma wynosi %5d , a srednia %2.2f", s, sr);
getch();
return(0);
Hiacynt. [ Centurion ]
nadal ucina niektore reczy :)
Qbaa [ Generaďż˝ ]
a nie powinno. ale i tak wiadomo, że GOL nie lubi żadnych źródeł :)
znów test ;)
i[i]b[b]u[u]stop :)
KULL [ Gladiator ]
ale z nawiasami dalej problem ?! :/
‹ › ‹› ‹› ‹› ‹› ‹› ‹›
trzeba to zglosic MOderatorom, niech to naprawia :).
Wypowiedź została zmodyfikowana przez jej autora [2005-03-19 22:56:49]
KULL [ Gladiator ]
Moze sie komus przyda :).
oto nowa, poprawiona wersja mojego programu do sortowania liczb, od najmn. do najw. :)
wersja 1.01.; trwaja prace nad jej ulepszeniem... za kilka miesiacy bedzie full wypas, a program bede sprzedawal w wersji box :P.
#include <conio.h>
#include <iostream.h>
int main()
int i;
int tablica[10];
for (i=0 ; i <10 ; i++)
cout << "podaj liczbe numer" << i+1 <<endl;
cin >> tablica[i];
getchar();
cout << "Liczby w kolejnosci wpisania:" << endl;
for (i=0 ; i<10 ;i++)
cout << "liczba" << "to: " << tablica[i] <<'\n';
getchar ();
/* szuka jaka jest najwieksza liczba */
int max;
int a;
for (a=0; a<10 ; a++)
if (tablica[a]>max)
max=tablica[a];
max++;
/* sortowanie */
int c;
long int tab[10];
int b;
for (int c=0 ; c<=10 ; c++)
int min=tablica[0];
for (a=0; a<10 ; a++)
if (tablica[a]<min)
min=tablica[a];
b=a;
tab[c]=min;
tablica[b]=max;
b=0;
getchar();
for (int g=0 ; g<10 ;g++)
cout << tab[g] << endl;
getchar();
return 1;
//wszystkie prawa zastrzezone - by KULL
KULL [ Gladiator ]
Kupiłem sobie najnowsze wydanie biblioteczki Komputer Swiat o programowaniu C++. Nawet fajne, ale tylko dla początkujących. Opis wszystkiego od początku, ale ładnie wytłumaczone ... o grafice cos napisali w C++ itp. Nawet spox, polecam, glownie tym, co nie maja zielonego pojecia o C++ lub tym co jak ja, mysla ze cos umieja, ale jak się okazuje gowno wiedza :)
wiecej info w linku :)
fanlegii79 [ Konsul ]
KULL -> Pomijajac brak inicjacji niektorych zmiennych i kwadratowy czas dzialania, z ciekawosci zapytam dlaczego zawsze zwracasz kod bledu 1?
Regis [ ]
fanlegii79 --> Ja tez tak dlugo robilem, bo po prostu nikt mi nie powiedzial (a w ksiazkach roznie bylo 1 albo 0) ze powinno byc 0 - program dzialal, to mi to zwisalo co zwraca :) Dopiero jak sie na tym nacialem na Wielkiej Przesmyckiej (konkurs organizowany przez Uniwerek Wroclawski), to zapamietalem raz na zawsze ;)
fanlegii79 [ Konsul ]
Zamieszcze jesze swoje sortowanie :
#include <iostream>
#include <algorithm>
using namespace std;
int main()
int tablica[10] = 23, 1, 33, -20, 6, 6, 9, 23, 45, 56;
sort(tablica, tablica+10);
for (int i=0; i<10; i++)
cout << a << " ";
return 0;
KULL [ Gladiator ]
fanlegii79 --> to jest wersja 1.01, pracuje jeszcze nad nia ;). czego nie zainicjowalem ?
co do return to mam podobnie jak Regis :). teraz bede tam pisal 0.thx za uwage!
W ksiazeczce Komputer Swiat :) pisza, aby wpisywac tam: "return EXIT_SUCCESS;".
fanlegii79 [ Konsul ]
To dziwne z tym EXIT_SUCCESS, zwracanie 0 jest bardzo fundamentalne. Np w kodzie linuksa nie widzialem zeby gdzies byla stala na sukces, zwykle pisza 0 z palca, natomiast bledy maja swoje kody.
Dodam jeszcze sortowanie w c.
#include <stdio.h>
#include <sys/types.h>
int compare (const void * a, const void * b)
return ( *(int*)a - *(int*)b );
int main(int args, char * argv[])
int tablica[10] = ‹23, 1, 33, -20, 6, 6, 9, 23, 45, 56›;
int j;
qsort(tablica, 10, sizeof(int), compare);
for (j=0;j<10;j++)
printf("%d\n",tablica[j]);
return 0;
KULL [ Gladiator ]
wytlumaczy mi ktos jeszcze dokladnie to using namespace std; ?? bo ja i bez tego pisze bez problemu i wszystko dziala.
Kubol [ Pretorianin ]
KULL-->
Bo używasz przestarzalych headerów. Powinno sie używać #include<iostream> a nie
#include <iostream.h>. Jesli uzywasz kompilatora niezgodnego z ansi C++, to musisz uzywac starych, jesli uzywasz np/ g++, czy VS studio 6.0 i +, to mozesz uzywac nowych.
Używając nowych, uzywasz biblioteki standardowej c++. Biblioteka ta jest cała zawarta
w namespacie st, stąd, każdy element powinno się tak prefixoweć, czyli powinno być
std::cout<<, std::string, std::endl itp. Aby sie tyle nie napisac, uzywa sie dyrektywy using, która
to dopisuje standardowo do wszystkiego czego nazwy nie da sie zrezolvovac std::, wiec
mozesz sobie wtedy napisac cout zamiast std::cout a kompilator to zamieni na std::cout.
Namespacy uzywa sie, bo nazwa funkcji, klasy itp musi byc unikalna w calym skompilowanym programie. Jesli mialbyc 2 biblioteki, i kazada mialaby funkcje create(), to linker by sie wywalil, bo nie mialby zielonego pojecia, ktora implementacje podlinkowac. W C++ zatem wprowadzono namespacy, ktore ten problem roziazuje. Biblioteka 1 ma namestace ns1, dwa ma ns2 i mozesz sie wtedy odwolac ns1::create() i ns2::create() i linker bedzie wiedzial o ktorej konkretnie funkcji mowisz. To jest jedno z rozszerzen w stosunku do C
KULL [ Gladiator ]
Kubol --> wielkie dzieki za wytlumaczenie !!!
PikiMar [ Pretorianin ]
Hej!
Mam napisac dosc prostacki programik, ale wszystkie moje proby spelzly na niczym ;) Otoz nie wiem jak utworzyć klasę zawierającą tablicę 5 liczb tworzoną za pomocą operatora new.
Probowalem takich kombinacji:
class tabl
private:
int tab[5]; <---Tak zadziala
int *tab=new int[5]; <--- Przy tym wywali blad 'Cannot initialize a class member here'
...
Czy ktos kto rozumie moj problem i wie jak go rozwiazac moglby napisac poprawna deklaracje tej tablicy?
Z gory dziekuje.
Kubol [ Pretorianin ]
Piki-->
Tak sie nie da, to nie Java. Musisz napisać konstruktor i wnim zrobic new, czyli
class tabl
‹
private:
int *tab;
public:
tabl(int size)
tab = new int[size];
;
~tabl()
delete[] tab;
;
...
›
Mam nadzieje, ze tak sie da, jak nie to zadeklaruj konstruktor i destruktor poza definicja klasy w pliku .cpp
tabl::tabl() ...
i potem
tabl a(10);
i masz obiekt ...
robert2k4 [ Pretorianin ]
nie mam zielonego pojecia na temat c/c++, a chcialbym sie nauczyc tego jezyka od ktorego kursu njalepiej zaczynac? Powinien bys jak najprosciej napisany i po polsku. Ktory polecacie?
KULL [ Gladiator ]
robert2k4 --> ja polecam ten co jest od kilku numerow w KS Expert, no i ta ksiazeczke KS C++. Aby nie bylo, ze robie reklame czasopisma :) to zapraszam na sama gore watku tam jest sporo fajnych linkow. Osobiscie duzo sie nauczylem z tego adresy --> https://www.keeller.kompozytor.net/
Kubol [ Pretorianin ]
Coz, jesli ktos chce zaczac programowac, powinien jak najwczesniej zaczac czytas WSZYSTKO po angielsku. Bez tego nigdy nie beda z was programisci ! To absolutna podstawa. Bo samego jezyka to sie po polsku nauczysz z ksiazek, ale jezyk to dopiero poczatek. Zeby cos napisac trzeba korzystac z gotowych bibliotek, a ich dokumentacja jest prawie zawsze po angielsku.
Potem zeby sie dowiedziec czegos, co jest w 100 miejscach opisane w necie bedziecie musieli kupowac ksiazki po polsku za gruba kaske.
PikiMar [ Pretorianin ]
Kubol --> Dzieki za podpowiedz, przydala sie :)
Pozdrawiam
Didier z Rivii [ life 4 sound ]
moze nie do konca odpowiedni watek, ale srodowisko programistow moze bedzie moglo mi pomoc ;)
niewiecie czy mozna gdzies znalezc elektroniczna wersje ksiazki "Linux programowania" Mattew i Stones'a ?
Esqualante [ Jyhad Baghadyr ]
Didier >>>> a to jest książka Heliona? Kumpel ma coś na ftpie, ale nie wiem, czy to to :/
Bereek [ Junior ]
Cześć,
czy mógłby ktoś naprowadzić mnie jak napisać taki program w pythonie ?
Napisz program, który zamieni wprowadzony przez użytkownika ciąg cyfr na formę tekstową:
a. znaki nie będące cyframi mają być ignorowane
b. konwertujemy cyfry, nie liczby, a zatem:
i. 911 to „dziewięć jeden jeden”
ii. 1100 to „jeden jeden zero zero”
KULL [ Gladiator ]
Bereek --> w C++ bym chyba potrafil cos takiego zrobic :). a bez odmiany slow to chyba nie jest duzy problem. python - co to za rodzaj jezyka ?? do czego jest podobny ??
hotDog [ Outsider ]
Polecam wykład mojego wykładowcy, jest przykład w Pythonie :-)
fanlegii79 [ Konsul ]
Ostatnio wielu pytonistow szalalo w watkach o tym jak rozpoczac przygode z programowaniem. Python to jezyk podobny do ocamla ale z dynamicznym sprawdzaniem typow a nie statycznym. W ocamlu bym umial, jezeli do jutra zaden pytonista sie nie odezwie to zerkne w skladnie pythona i cos skrobne.
Bereek [ Junior ]
Dzięki za zainteresowanie, może ten link pomoże. Ja wciąż nie mam pomysłu jak napisać taki program mimo przestudiowaniu poniższego linka.
https://sus.univ.szczecin.pl/~jakubs/py5.html
aka [ Chor��y ]
taka konstrukcja w mieszance c i pythona ktorego nie znam ale ide jest taka:
wczytanie do napis
for (i=0; i < len(napis); i++)
switch napis
case '1':
print "jeden "
break;
case '2':
print "dwa "
break;
case '3':
print "trzy "
break;
i tak dalej
aka [ Chor��y ]
nie odznaczylem poprzedni znacznikow
napis = raw_input("Podaj liczbe:")
for (i=0; i < len(napis); i++)
switch napis
case '1':
print "jeden "
break;
case '2':
print "dwa "
break;
case '3':
print "trzy "
break;
i tak dalej
aka [ Chor��y ]
ok teraz jest w pytonie i dziala i nie zaznaczam znacznikow :)
napis = raw_input("Podaj liczbe:")
out = ""
for i in napis:
if i=='1':
out+="jeden "
elif i=='2':
out+="dwa "
elif i=='3':
out+="trzy "
elif i=='4':
out+="cztery "
elif i=='5':
out+="piec "
elif i=='6':
out+="szesc "
elif i=='7':
out+="siedem "
elif i=='8':
out+="osiem "
elif i=='9':
out+="dziewiec "
elif i=='0':
out+="zero "
print out
Bereek [ Junior ]
aka: Dziękuję bardzo, działa :)
Innym też dziękuję za pomoc i zainteresowanie.
Bereek [ Junior ]
Jednak mam jeszcze jeden kłopot, chcę by program przyjmował inne znaki jako błąd, czyli
wpisuję po znaczniku else: out = 'miales podac liczbe'
Problem pojawia się wtedy jak podaję coś co ma na końcu liczbę np "ouik78", wtedy wynik programu wygląda tak "miales podac liczbe siedem osiem". Oczywiście chcę sam tekst "miales podac liczbe". W innych przypadkach jest dobrze.
aka [ Chor��y ]
else:
out="babol"
break
Z tym, że teraz jest to niezgodne z poleceniem. Bo należy ignorowac inne znaki, ale jak uważasz.
Dziwny język swoją drogą z tego pythona, gdyż istotne są tabulacje na początku linii.
Bereek [ Junior ]
Dziękuję.
Wiem że niezgodne z poleceniem ale chciałem wiedzieć.
Co do samego języka to nie bardzo mnie przekonuje szczególnie ze względu na znikomą ilość literatury. A może ktoś poleci jakąś książkę dotyczącą pythona?
KULL [ Gladiator ]
na dniach zrobie nowy watek, bo ten juz jest dosc duzy. Przez weekend bede siadzial nad programem na inf. z C++, wiec bede mial pewnie kilka pytan ;). No i jak macie to dajcie nowe fanjne linki zwiazane z programowaniem (ja mam juz ich troche) co by mozna bylo w pierwszym poscie zaszpanowac duza iloscia linkow ;).
KULL [ Gladiator ]
Pytanie:
mam
cout << "Ile liczb chcesz posortowac?" << endl;
cin >> ilosc;
jak uzyskac efekt, aby po wpisaniu wybranej liczby, zostala ona zpisana do zmiennej ilosc, ale aby wartosc ta nie pokazala sie na ekranie po wybraniu jej z klawiatury ?? bo to robi balagan.
Sir Skull [ Know your enemy ]
KULL --> AFAIK w C++ nie ma takiej możliwości.
char bufor[10];
int i;
printf("Ile liczb chcesz posortowac ?\n");
for (i = 0; i < sizeof (bufor) - 1; ++i)
bufor = _getch();
if (bufor == '\r')
break;
bufor = '\0';
To natomiast zadziała.
fanlegii79 [ Konsul ]
No powiedzenie ze w c++ nie da rady wczytac znaku bez wypisywania na konsole to chyba duza przesada. Pewnie nie mzona tego zrobic operatorami obiektu ostream, ale getch() jest takze w c++. (zaleznie od kompilatora i biblotek nazywa sie getch(), getchar(), czy _getch())
Sir Skull [ Know your enemy ]
fanlegii79 --> W standardzie C++ nie ma funkcji do pobierania znaku bez echa (getch nie ma tam). Oto mi chodziło w pierwszym zdaniu poprzedniego post'a.
Mała poprawka do kodu, bo zapomniałem wyłączyć znaczniki ;)
char bufor[10];
int i;
printf("Ile liczb chcesz posortowac ?\n");
for (i = 0; i < sizeof (bufor) - 1; ++i)
bufor[i] = getch();
if (bufor[i] == '\r')
break;
bufor[i] = '\0';
Mam nadzieje, że widać teraz. powinno być bufor_od_i a nie samo bufor.
fanlegii79 [ Konsul ]
Rzeczywiscie trudno to zrobic w ansi c++ (w turbo c++ i visual c++ jest getch).
konioz [ Konsul ]
Mam pewien problem z moim programem. Prosze was o pomoc.
Mam klase wielomianow. Wielomian przechowywany jest w tablicy 't' typu float (z rozmiarem przydzielanym dynamicznie) w taki sposob, ze wolny wyraz jest t[0], wspolczynnik przy x^1 w t[1] i tak dalej. Musze przeladowac operator zczytywania tak zeby po podaniu na ekranie wielomianu on zczytal odpowiednie wspolczynniki do odpowiednich elementow tablicy. Jak to zrobic?
Mialem taki pomysl zeby wprowadzac wielomian jako serie danych w nawiasach (potega, wspolczynnik).
Czyli np.
(5,1) (4,-2) (0,1) odpowiadalo by wielomianowi x^5 - 2x^4 + 1
No wlasnie tylko jak wtedy poradzic sobie z wczytaniem minusa z nawiasu itd.
Prosze o pomoc. Wszelki pomysly beda mile widziane.
Z gory dzieki.
Kubol [ Pretorianin ]
Hmm, mogę Ci pomóc jedynie w sparsowaniu tego, nie pamiętam jak sie przeładowywało operatory.
Generalnie nic nie stoi na przeszkodzie, żeby wczytywać to w formie x^5 + ... wymaga to jednak kilku zabiegów.
Najproście byłoby to zrobić używając werażeń regularnych, ale to wiązałoby się z wykorzystaniem jakiejś dodatkowej biblioteki.
Mógłbyś to parsować z ręki - typu wczytywać po kolei stringi oddzielone bialymi znakami i przestać na takim który nie ma 'x' w środku. A potem sprawa jest prosta, bo zakładając, za postać jest <wsp>"x""^"<pot> to szukasz w stringu 'x' i to co po lewej traktujesz jako wartość wspolczynika, to co na prawo od '^' jako wykładnik potęgi. Na początek to będzie najlepsze rozwiązanie
No i w końcu można zrobić prawdziwy parser ;-)
Romanujan [ Konstruktor Katapult ]
Do parsowania polecam duet flex+bison :-)
Kubol [ Pretorianin ]
Flex + bison daje rade, ale po co wyciągać armatę na mrówkę ?
Nie każdy jest na studiach i zna choć troszke teorię jezyków formalnych, a niestety napisanie gramatyki nigdy nie jest proste. Zanim gość załapie o co chodzi w parserach LR i lexerach to 3 razy to z ręki napisze ;-)
picuś [ Generaďż˝ ]
Witam.
Czy ktos wie jak zrobic cos takiego w C++ ?
Mam tablice 4 elementowa do ktorej wpisuje dowolne liczby calkowite z przedzialu od 0 do 255.
Teraz program powinien liczby z tej tablicy zlozyc w jedna liczbe i zapisac w zmiennej typu int.
Ma to wygladac mniej wiecej tak :
00000001 00000100 00000011 00000010 = 17040130
tab[3]=1 tab[2]=4 tab[1]=3 tab[0]=2
Czyli jesli do kolejnych elementow tej tablicy wprowadzilismy liczy 2341 to nasza nowa zmienna typu int a wiec 4 bajty powinna je ulozyc na tych bajtach i "stworzyc" z tego nowa liczbe.
Jesli ktos wie jak to zrobic to prosze o jakas wskazowke, zakladajac ze w ogole da sie to zrobic.
picuś [ Generaďż˝ ]
W skrocie jak te liczby z 4 elemenotowej tablicy umiescic w kolejnych 4 bajtach zmiennej typu int.
fanlegii79 [ Konsul ]
char tab[4];
int i;
tab[0]=1;
tab[2]=2;
...
i = (int) tab[0];
Jakos tak. nie mam czasu pobawic sie kompilatorem zeby sprawdzic.
Esqualante [ Jyhad Baghadyr ]
#include <iostream>
using namespace std;
int main()
char tab[] = 2,3,4,1;
int i = tab[3];
i = i << 8; //przesuniecie liczby o 8 bitow w lewo
i += tab[2];
i = i << 8;
i += tab[1];
i = i << 8;
i += tab[0];
cout << i;
return 0;
dziala w MVC++6
hotDog [ Outsider ]
Witam, potrzebuję pilnej pomocy z moim problemem :-)
Muszę zapisać liczny (int) do pliku poprzez funkcje fopen(), fputs(), fclose() itd (nie mogę korzystać z fstream). I mam problem: czy puts przyjmuje tylko stringi do zapisu na strumień? Jaką funkcję wybrać żebym mógł zapisać liczby całkowite na strumień? :-)
SEW [ Generaďż˝ ]
Prosilbym o pomoc. Mam do wykonania niby prosty program w assemblerze. Lecz jako początkujący nie wiem jak wogole się za niego wziasc. Oto co program musi umiec:
-konwersja kodu binarnego na BCD,
-w CL ma być informacja z ilu cyfr sklada się liczba która wpisze (np. jeżeli liczba ta to 1243 to w CL ma być 4)
-umiescic ta liczbe która wpisze na stosie w taki sposób , jeżeli będzie to liczba 2137 to na stosie ma to tak wyglądać:
2
1
3
7
(do tego ostatniego należy uzyc rozkazu push ale tez jeszcze nie wiem jak dokladnie)
Jeżeli ktos by był w stanie mi pomoc bylbym bardzo wdzieczny ,a jeżeli ktos by to jeszcze wytłumaczył co i jak to wogole było by super.
Z gory wielkie dzieki.
hotDog [ Outsider ]
Hmm... nie wiem czy dobrze trafiłem, bo na razie nie mogę skompilować całego kodu, ale wybrałem funkcję fputc() i kompilator już się nie pluje... :-)
fanlegii79 [ Konsul ]
No coz poprzednie nie chcailo dzialac. To dziala:
#include <iostream>
using namespace std;
int main()
char tab[] = 0,0,2,2;
int *k;
k = (int *) &tab[0];
int i= *k;
cout << i;
return 0;
Daje odpowiedz na moim procesorze spodziewana odpowiedz 514 (0,1,0,0) daje 65536, wiec tez spoks. Niestety ja nie ma intela tylko mam apple, wiec mam procesor o innej edianowsci. Jezeli kots moglby sprawdzic jak to dzial na intelu. Powinno skalddac chyba w druga strone.
hotDog [ Outsider ]
Mam strukturę TMacierz, a w niej tablicę wskaźników (macierz) int **tab;
Czy jak stworzę dwa obiekty tej struktury: TMacierz Macierz1 oraz TMacierz Macierz2 to czy ten int **tab z Macierz1 ma coś wspólnego z int **tab z Macierz2 ??
Bo jak próbuję dodać te dwie macierze ze sobą, to zamiast poprawnych wyników wyskakuje mi informacja: "Windows XP... itd itd" w trybie MS-DOS :-/
Próbuję zrobić coś takiego (w pętli for): Macierz1.tab[i][j] += Macierz2.tab[i][j]
Proszę mnie wyprowadzić z błędu jeśli robię coś nie tak :-)
fanlegii79 [ Konsul ]
Co to za wiadomosc "Windows Xp i tak dalej". Nigdy zaden program w c kotry kompilowalem na linuksie ano mac os x nie pokazal mi takiego bledu? Na moj gust dodajesz wskazniki.
Esqualante [ Jyhad Baghadyr ]
SEW >>>> rozumiem, że liczbę w kodzie binarnym masz np w AX i musisz po zamianie na BCD zapisać każdą cyfrę osobno na stosie?
Jeżeli tak, to:
CL = 0
dzielisz liczbę przez dziesięć
resztę zapisujesz na stosie
inkrementujesz CL
znowu dzielisz przez dziesięć
resztę zapisujesz na stosie
inkrementujesz CL
...
jak wynik dzielenia będzie równy 0 (a reszta ileśtam), to otrzymałeś wynik, a w CL masz podaną liczbę cyfr.
Esqualante [ Jyhad Baghadyr ]
fanlegii79 >>>>> Twoje rozwiązanie u mnie działa tak:
dla
char tab[] = 0,0,1,0;
daje 65536
a dla
char tab[] = 2,3,4,1;
daje
17040130
czyli tak, jak potrzebował picuś.
hotDog [ Outsider ]
fanlegii79 --> wiesz, mnie się wydaje, że to Windows pokazuje gdy jakiś program naruszy pamięć albo coś w tym stylu, bo gdy pojawiał się ten komunikat, to kończył program i po prostu pojawiał się znak zachęty na trybie MS-DOS.
Wrzucę screena z moim aktualnym problemem.. może mi pomożecie, bo ja już lekko zgłupiałem.
a tutaj metoda odpowiadająca za dodawanie macierzy:
TMacierz TMacierz::DodajDwieMacierze(TMacierz Macierz1, TMacierz Macierz2)
// kod dodający dwie macierze do siebie
if (Macierz1.Liczba_wierszy == Macierz2.Liczba_wierszy &&
Macierz1.Liczba_kolumn == Macierz2.Liczba_kolumn)
for (int i=0; i < Macierz1.Liczba_wierszy; ++i)
for (int j=0; j < Macierz1.Liczba_kolumn; ++j)
Macierz1.tab[i][j] =+ Macierz2.tab[i][j];
else
cout << "Tych macierzy nie mozna ze soba dodac!" << endl;
return Macierz1;
hotDog [ Outsider ]
Nie wiem dlaczego obrazek się nie wkeił :-/
hotDog [ Outsider ]
Ehh... coś forum nawala ;-/
Link do screena:
Esqualante [ Jyhad Baghadyr ]
Nie wiem na ile ma to znaczenie, ale zamiast '=+' napisz '+='.
hotDog [ Outsider ]
Niestety :-/ Nic to nie dało.
Przeciążanie operatora też daje taki efekt, ale nie wiem czy dobrze napisałem:
TMacierz TMacierz::operator+(TMacierz dod)
TMacierz kopia = *this;
for(int i=0; i < kopia.Liczba_wierszy; ++i)
for (int j=0; j < kopia.Liczba_kolumn; ++j)
kopia.tab[i][j] += dod.tab[i][j];
return (kopia);
Esqualante [ Jyhad Baghadyr ]
hmmm, nie wiem, wklej cały program, albo pobaw się debuggerem...
Kubol [ Pretorianin ]
TMacierz kopia = *this;
A zdajesz sobie sprawę z tego że to nie kopiuje tej tablicy w której trzymasz kolumny ?
To kopiuje tylko wskaznik. Musisz jeszce zaalokowac pamiec na nowa tablice, bo inaczej
te obiekty beda mialy wspolne wartości.
SEW [ Generaďż˝ ]
Esqualante --> dzieki za zainteresowanie ale mam co do tego rozwiazania kilka pytan.
1. A co z zamiana na BCD?
2. Gdy podziele np liczbe 2345 przez dziesiec wtedy gdy wzuce na stos reszte to bede mial na SP 5, to jest dobrze, ale jak mam pozniej dzielic ktora liczbe?? Cos tego nie czaje (a to chyba prosta matematyka jest)
3. Jak rozumiem do odczytania liczby z klawiatury mam uzyc pierwszej funkcji tak (bez echa)??
Pewnie to co napisalems jest poprawne ale zrozum - moje poczatki :]
Esqualante [ Jyhad Baghadyr ]
1. No zamiana z binarnego na BCD polega na tym aby w każdym bajcie (albo w każdych 4 bitach) była zakodowana informacja o jednej cyfrze dziesiętnej, czyli z
211D = 11010011B = 0010 0001 0001 BCD
Wiec, jak podzielisz 211 przez dziesiec, otrzymasz 21 i reszta 1. Resztę zapisujesz na stosie zgodnie z trescia programu, a 21 znowu dzielisz przez 10. Wynik = 2, reszta 1. Reszte zapisujesz na stosie, 2 dzielisz przez 10. Wynik = 0 (czyli koniec), reszta 2 - zapisana na stosie. Ponieważ 3 razy zapisywałeś na stosie, CL = 3.
2. samo dzielenie jest proste, bo jak masz liczbę w DX:AX i podzielisz przez SI = 10
MOV SI,10
DIV SI
to wynik będziesz miał w AX, a resztę w DX. Wrzucasz wartosc DX na stos (PUSH DX), zerujesz DX i znowu mozesz dzielić
DIV SI
3. Nie wiem, bo to Ty podałeś treść zadania :), a w niej nic nie było o pobieraniu liczby, więc stwierdziłem, ze masz ją już daną w rejestrze AX. Poza tym pobieranie najpierw liczby cyfra po cyfrze, zapis w postaci binarnej, a potem zamiana spowrotem na BCD wydaje mi się dziwna....
Tak samo jak nie wiem, czy dobrze piszę o zapisie na stosie, gdyż na stosie nie można zapisywac pojedynczych bajtów,a co za tym idzie, albo tak ma być (czyli zapis co 2 bajty), albo trzeba podczas jednego zapisu umieszczać na stosie 2 cyfry.
KULL [ Gladiator ]
nowy watek!! tutaj sie juz nie da gadac bo sie dluzej wczytuje niz sie czyta posty ;). ostatnie posty mozecie skopiowac, aby w nowym watku ktos na nie odpowiedzial :)
zapraszam:
https://forumarchiwum.gry-online.pl/S043archiwum.asp?ID=3620101&N=1