
Polar
Stały użytkownik-
Postów
1875 -
Dołączył
-
Ostatnia wizyta
-
Wygrane w rankingu
4
Treść opublikowana przez Polar
-
[php:1:e5b281a47d] #include <iostream> #include <dir.h> #include <stdlib.h> using namespace std ; int main() { char *p; char nazwa[255]; //char nazwa[] = "c:\\windows" ; //lub na stale podane cout << "podaj - nazwa katalogu do sprawdzenia: " ; cin >> nazwa ; cout << "szukanie katalogu... " << endl; while(1) // można bez while jeśli to ma się odbyć tylko raz { p = searchpath(nazwa); if (p == NULL) cout << "katalog nie istnieje" << 'r' ; else cout << "katalog istniejet" << 'r'; } // tak jak wcześniej cout << 'n' ; system("pause"); return 0; } [/php:1:e5b281a47d] Wszyskto jest w biblitece standardowej trzeba tylko to wykorzystać na różne sposoby. Ścieżke sobie albo podajesz albo ustalasz na stełe w tablicy znakowej albo w stringu. Jeśli wpisujesz/podajesz nazwę to może to być albo sama nazwa katalogu albo ścieżka np. "c:windows"...
-
Ich głównym zadaniem jest nadwanie wartości początkowej dla danych ( obiektów danej klasy , tablic , zmiennych ) w klasie, przy jednoczesnym ( a może właśnie dlatego ) tworzeniu obiektu. Konstruktor jest w klasie zawsze nawet jeśli nie zadeklarujesz go sobie, zawsze jest deklarowany konstruktor i destruktor domyślny który nic nie robi ( NAZWA_KLASY() && ~NAZWA_KLASY() ) z praktycznego punktu widzenia... :)
-
1. A po co ? Object Pascal w niczym nie ustępuje C++ , jest równie szybki. 2. Co chcesz od VCL, to jest ogólnie mówiąc najbardziej user-friendly biblioteka (MFC i WinApi, jest bleee) 3. Jak słyszę gadanie o dużym .exe to smutno mi się robi :) To nie te czasy już, bo teraz nie liczy się +400 kB kodu więcej tylko jego szykość i stabilność , a dam se głowę uciąć że te + 400kb kodu (czy ile tam jest w Delphi) sprawia że program wykonuje się szybciej mając to w sobie na stałe zintegrowane niż jakby miał to tworzyć dynamicznie przez MSWirusa czy odczytywać z jakiegoś pliku biliotek. Większy .exe , .dll ale szybszy i bezproblemowy. Ja nie gość :wink: ja tu już od dawna jestem :) :x
-
Można też tak różnica jest subtelna , ale jednak nie wpływa to zupełnie na szybkość działania... :lol: A przetestowałem to na moim sprzęcie i na int tablicy[50000], odwróconej od 49999 do 0 , czyli na maxa :twisted: i wynik to ~3 sec. [php:1:e8f8089fde] #include <stdio.h> #include <stdlib.h> void SortW(int * x , int ile) ; //------------------------------------------------------------------------------ int main() { int ile, i; const int rozmiar = 1000; int x[rozmiar]; printf ("podaj ilosc liczb które chcesz posortowac n"); scanf ("%d", &ile); printf ("podaj liczby n"); for (i=0;i<ile;i++) scanf ("%d", &x); SortW(x , ile); for ( int i = 0 ; i < ile ; i++ ) printf("posortowane liczby: %d n", x); system ("nPAUSE"); return (0); } //------------------------------------------------------------------------------ void SortW(int * x, int ile) { int i,j; int rob; for (i=1;i<ile;i++) { rob = x; j = i-1; while ((j>=0) && (x[j]>rob)) { x[j+1] = x[j]; j--; } x[j+1] = rob; } } //------------------------------------------------------------------------------ [/php:1:e8f8089fde]
-
Nie bede się rozwodzić nad niektórymi zapisami w tym kodzie (jak na moje oko to nie może wypisać liczb). Można to rozwiązać na wiele sposobów. Ja bym to zrobił tak: [php:1:573528eb40] #include <stdio.h> #include <stdlib.h> int * SortW(int x[] , int ile) ; //------------------------------------------------------------------------------ int main() { int ile, i; int x[1000]; printf ("podaj ilosc liczb które chcesz posortowac n"); scanf ("%d", &ile); printf ("podaj liczby n"); for (i=1;i<ile;i++) scanf ("%d", &x); int * wsk = SortW(x , ile); // *wsk jest ustawiony do tego co zwraca // funkcja sortujaca ( na talicy ) for ( int i = 0 ; i < ile-1 ; i++ ) printf("posortowane liczby: %d n", wsk); system ("nPAUSE"); return (0); } //------------------------------------------------------------------------------ int * SortW(int x[], int ile) // funkcja zwraca wskaznik int { int i,j; int rob; for (i=1;i<ile;i++) { rob = x; j = i-1; while ((j>=0) && (x[j]>rob)) { x[j+1] = x[j]; j--; } x[j+1] = rob; } return x ; // czyli wlasciwie zwraca talice , bo nazwa tablicy } // to wskaźnik do jej zerowego elementu //------------------------------------------------------------------------------ [/php:1:573528eb40]
-
Jednym takie coś odpowiada innym nie jest tyle kompilatorów C++ że każdy może wybrać coś dla siebie, kiedyś były wojny między zwolennikami MS i Borlanda teraz już to wszystko ucichło bo każdy kompilator ma swoje wady i zalety i żaden nie jest doskonały... :)
-
Może byś się podzielił tym co wiesz ? Bo zawsze znajdzie się ktoś komu sie to przyda. :)
-
Masz piękny kompilator Dev-C++ który jest 100% zgody z obecnym standardem ANSI C++ a przy tym darmowy i do celów zarobkowych może być uzywany nawet - Full GNU public license - i jest pozatym bardzo wygodny. Wadą jest to że nie ma tylu bibliotek co Borland i nie może robić aplikacji 16 bitowych. Funkcje sleep() można napisać samemu np: ( trzeba dodać na początek #include <time.h> ) void sleep(int czas){ clock_t start; while(start = clock() <= czas);} Może jest trochę chamska ( ta pentla pracuje cały czas ) ale dla upartego moze być. :) Albo poprostu dodać na początek #include <windows.h> i kodzie programu wstawić z wybrany czasem Sleep(czas).
-
Jeśli zadanie ma być w ANSI C no to pierwsze może być np. tak : #include <conio.h>#include <stdio.h>int dodawanie(void);int odejmowanie(void);//------------------------------------------------------------------------------int main(){ char i; printf("wcisnij 'o' dla odejmowania 'd' dla dodawania :"); while( (i = getch())!=27 ) { switch(i) { case 'd': dodawanie(); break; case 'o': odejmowanie(); break; default : printf("nzly wybor"); } }return 0;}//------------------------------------------------------------------------------int dodawanie(void){ int a = 2 , b = 8; printf("na + b = %i" , a+b); return 1;}//------------------------------------------------------------------------------int odejmowanie(void){ int a = 2 , b = 8; printf("na - b = %i" , a-b); return 2;}//------------------------------------------------------------------------------ Naciśnięcie ESC kończy program. (Chociaż nie mam pewności czy jest on w 100% zgodny z ANSI C)
-
True truth , Dev-C++ to chyba najlepszy w tej chwili kompilator C++ , szybki , stabilny, zgodny ze standardami i co najważniejsze darmowy, ale powinni poprawić współpracę z plikiem conio.h , bo jest on bardzo uzyteczny, przynajmniej dla mnie :) (dla tych co nie wiedzą Dev-C++ jest pisany w Delphi :D , znaczy edytor)
-
-
getchar(); musisz wstawić przed linijką return 0 ; i wtedy an pewno zadziała. Możesz sobie też dostawić na początek : #include <stdlib.h> // i zamiast getchar(); // wstawić sobie system("pause") ; Ale jednak jak dla mnie getch() ; jest chyba najbardziej uniwersalną funkcją do tego i wielu innych rzeczy. Chwała plikowi conio.h :)
-
Pomoże mi ktoś zrobić parę programów na zaliczenie?
Polar odpowiedział(a) na ms-trex temat w Programowanie
Takie kursy internetowe to jakby dodatek do tego co możesz nauczyć się z ksiązek , nie znam jeszcze nikogo kt o by sie nauczył języka z kursów w necie ( JA nie znam ). Jeśli chcesz się nauczyć porządnie, to tylko książki w wersji papierowej :) -
Pomoże mi ktoś zrobić parę programów na zaliczenie?
Polar odpowiedział(a) na ms-trex temat w Programowanie
Dlatego że w twoim programie można było tylko raz podać wartość zmiennej na samym początku a potem tej zmiennej nie można było już zmienić wpisać tam coś nowego ( innego ). Program kończył wyrażenie warunkowe - switch a ponieważ to switch było w środku while to rozpoczytał je od nowa mając ciągle tą samą zmienną którą wpisałeś na początku programu np. 33 i ciągle pisał wykrzyknik i tak w kółko w nieskończoność bo znał tylko jedną liczbę czyli np. 33. Tak jak to podał wojtt, wystarczyło tylko wstawić do wnętrza while cin >> x ; i po kłopocie. Sam możesz sobie zrobić , bardzo łatwo : for ( int i = 0; i< 256; i++) { cout << i << " to znak " << char(i) << endl; } Jak nie, jak tak :) -
Enigmatycznie :) Hehe trudno powiedzieć to zależy od kompilatora, ( konkretnie od programu ) . Np. w C++ Builder trzeba było zmienić jeden wpis w rejestrze aby działały polskie znaczki. A w Dev-C++ może jest coś innego, albo nie ma wcale takiej opcji ( i polskie znaczki nie są zalecane ).
-
To zależy od ustawienia kompilatora , musisz zabaczyć czy jest takie ustawienie w opcjach które to umożliwi. Ewentualnie zaciągnąc jakiegoś patcha z netu albo zmienić coś w rejestrzse systemu windows. Wszystkie kompilatory jaki znam mają z tym problemy , trzeba to ustawić poprostu. Pogooglaj sobie na pewno coś jest.
-
No asm trza znać chociażby do samych wstawek w pascalu , c++ bo to dużo daje na szybkości i wogóle... :P
-
Cały czas mam Delfina na dysku, ale z przepisaniem będzie trudno bo zapomniałem pascala prawie... Ale na pewno ktoś tu zna go...
-
C++Przekazywanie wskaznika tabeli wielowymiarowej do funkcji
Polar odpowiedział(a) na Budzix temat w Programowanie
Co??!! Paliłeś jakieś zioła razor?? Albo niekoniecznie... Dobra rada, może warto ją samemu zastosować? Nawaliłeś parę kilo kodu ale co z tego skoro błędnego? Czy dla Ciebie char tab[15][15] ma tylko 15 elementów? Wygląda, że tak, bo w Twoim kodzie jest: [php:1:2baaf680da] //... for ( int i = 0 ; i < 15 ; i++) wskaznik1 = wskaznik2; //... [/php:1:2baaf680da] Następnym razem sprawdź kod dla CAŁEJ tablicy, a nie tylko dla [0][0] i [0][1]. Nie prościej używać biblioteki standardowej, zamiast wygibasów ze wskaźnikami do tablic??? [php:1:2baaf680da] void wypelnij(char sz[][15]) { memcpy( zrudlo, sz, 15*15*sizeof(char) ); } [/php:1:2baaf680da] Oczywiście, czy tak czy tak, podejście nie jest zbyt piękne... Za dużo rzeczy jest wpisane na sztywno (rozmiar tablicy), brak hermetyzacji w klasach, itd. A wystarczyło tylko(?) napisać, że w C/C++ przekazywanie tablic można zrobić nie przez deklarację wskaźnika do tablicy(!) ale wystarczy parametr zadeklarować jako tablicę, mając na uwadze to, że pierwszy wymiar tablicy wielowymiarowej (w tym przypadku!) nie jest kompilatorowi do niczego potrzebny i można go pominąc, np. wypelnij(char tab[][15]);. Niestety to na programiście spoczywa obowiązek pamiętania o rozmiarach tablic. Następnie elementy tablicy należy skopiować. Tutaj jeszcze należy wspomnieć o dogodności C++ jaką jest sprawdzanie zgodności typów; Budzix jeżeli dokładnie spojrzysz na błędy pokazywane przez kompilator to możesz(?) domyśleć się jak należy zadeklarować parametr żeby dla kompilatora był on ok (uwaga:nie zawsze to logicznie ma sens...). Wracając do wkaźników: dla Twojego przypadku można użyć wskaźnika, tzn. wywołać metodę: wypelnij( &sz.pole ); jeśli zadeklarujesz: wypelnij(char sz[][15][15]) {...} wtedy typy zgadzają się, bo jest wskaźnik do tablicy dwuwymiarowej! Natomiast char *tab[][] oznacza tablicę wskaźników i dlatego nie działało. I co razor1 można czy nie można deklarować jako wskaźnika?! Oczywiście, że można: char (*sz)[15][15] jest równoważne char sz[][15][15]. Programując w C++ rozważył bym jeszcze możliwość wykorzystania wzorca klasy vector<> z biblioteki STL, wtedy mógłbyś używać konstrukcji vector1 = vector2; zamiast ręcznego kopiowania tablicy :). Wzorce (czy też szablony) są może troszkę zakręcone ale do używania klasy vector czy string nie potrzeba wcala wiedzieć "jak to się robi", a jedynie "jak tego używać". Po co się tak pieklisz ? Nerwowy jesteś czy co... :P :?: W tych 15 elementach chodziło mi o samo pokazanie ich kopiowania, mając na uwadze że wcześniej wpisaliśmy ich też 15. -
Tak wiem i pamiętam cały czas o inicjalizacji lokalnej zapomniałem zmienić na int tablica[100][100] = {0} ; przy dodaniu tego opisu :) . Wskaźnik ma to do siebie że łatwo go przestawić na chciane miejsce. :) Wiem o co ci chodzi ale stosując zapis tablicowy dla wskaźników czyli np. wskaznik[j] nie trzeba ustawiać go spowrotem na początek bo ta metoda gwarantuje jego normalne przesuwanie. Co innego gdyby to był zapis *wskaznik++ czyli z przyrostem , to wtedy by trzeba było pomiędzy for ustawić go na poczatek.
-
O ile dobrze rozumiem twój problem to będzie tak : #include <iostream>#include <conio>int main(){ int tablica[100][100]; int *wskaznik = &tablica[0][0] ; // ustawienie wskaźnika na tablice int m , n; cout << "podaj n (do ilu liczb): "; cin >> n; cout << "podaj m (od jakiego miejsca): "; cin >> m; for ( int i = m-1, k = 1; i < n+m-1; i++ , k++) wskaznik[i] = k; // wpisanie do tablicy for ( int j = 0; j < n+m-1; j++) cout << wskaznik[j] << endl ; // odczyt z tablicy getch(); return 0;} Te początkowe wartości które zostają opuszczone zainicjowane są zerami, chyba że wcześniej sam do nich czegoś nie wpiszesz i są oczywiście takie caly czas. Jak podasz że w tablicy ma być 5 el. a zaczynać się ma od 3, to czy wyświetlenie i zapis ma być tak : 0 0 1 2 3 4 5 // tu zapisze i pokaże 5 el. od 3 miejsca czy tak : 0 0 1 2 3 // a tu pokaże i zapisze 5 el od początku tablicy I jeszcze to: Czyli podając m = 4 on zacznie wypełniać od tablica[3] , a element tablicy 0 , 1 , 2 zostawi w spokoju. Czyli mówiąc krótko najmniejsza podaną liczba m ma być 1 , bo zera nie chcesz. O to chodzi ???
-
Mógłbyś zapodać kod na forum wtedy może to rozkminimy
-
MS VS .NEt ? czy normalne ? ( dlatego nie lubię kompilatorów od MS bleee :P )
-
W C++ odpowiednikiem jest int64_t , lub uint64_t ( co kto woli ), tylko trzeba dodać na początek #include <stdint>
-
C++Przekazywanie wskaznika tabeli wielowymiarowej do funkcji
Polar odpowiedział(a) na Budzix temat w Programowanie
Można jeszcze tak :P #include <iostream>#include <conio>class A {public:char pola[15][15];char * wskaznik ; void takie() { // wskaznik = &pola[0][0]; // to bedzie pozniej jako dowod ze wpis jest wykonany for ( int i = 0; i < 15; i++) cin >> wskaznik[i]; } //};class B {char zrodlo[15][15];public: void wypelnij(char sz[][15]) { char * wskaznik1 = &zrodlo[0][0]; char * wskaznik2 = &sz[0][0]; for ( int i = 0; i < 15; i++) wskaznik1[i] = wskaznik2[i]; cout << "nn1 pierwszy element : "<< zrodlo[0][0]; cout << "n2 calosc "; cout << wskaznik1; }};int main() { A sz; B m; sz.takie(); // to jest wywolanie tego wczesniejszego dowodu cout << "wypis z klasy: "; for ( int i = 0; i < 15; i++) cout << sz.wskaznik[i]; // wypis przez wskaznik cout << 't'; for ( int i = 0; i < 15; i++) cout << sz.pola[0][i]; // a tu przez tablice m.wypelnij(sz.pola); // wywolanie funkcji w klasie B ze zmienionym parametrem klasy A getch(); return 0;}