
Polar
Stały użytkownik-
Postów
1924 -
Dołączył
-
Ostatnia wizyta
-
Wygrane w rankingu
4
Treść opublikowana przez Polar
-
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;} -
C++Przekazywanie wskaznika tabeli wielowymiarowej do funkcji
Polar odpowiedział(a) na Budzix temat w Programowanie
Raczej tak to powinno wyglądać class A {public: char pola[15][15];};class B { char zrudlo[15][15]; public: void wypelnij(char sz[15][15]) { char * wskaznik1 = &zrudlo[0][0]; char * wskaznik2 = &sz[0][0]; for ( int i = 0; i < 15; i++) *wskaznik1++ = *wskaznik2++; }};int main() { A sz; B m; m.wypelnij(sz.pola); return 0;} A tak wygląda na konkretnym przekładzie. #include <iostream>#include <conio>class A {public:char pola[15][15]; void takie() // { // to bedzie pozniej jako dowod ze wpis jest wykonany pola[0][0]= 'X'; // pola[0][1]= 'Z'; // }};class B {char zrodlo[15][15];public: void wypelnij(char sz[][15]) { char * wskaznik = &zrodlo[0][0]; // to jest ustawienie wskaznika na tablice zrodlo char * wskaznik2 = &sz[0][0]; for ( int i = 0; i < 15; i++) wskaznik[i] = wskaznik2[i]; //kopiowanie wszystkiego z sz[][] // do zrodlo[][] cout << "pokazanie wyslanej z klasy A do klasy B litery: "<< zrodlo[0][0]; cout << "npokazanie wyslanej z klasy A do klasy B litery: "<< zrodlo[0][1]; //tylko tu mozna sprawdzic czy nastapil zapis do np. char zrodlo [0][1] i [0][0] }};int main() { A sz; B m , k; sz.takie(); // to jest wywolanie tego wczesniejszego dowodu cout << "wpisanie do tablicy litery X i jej odczyt z main : " << sz.pola[0][0] << endl; // a to jest pokazanie ze zapis faktycznie wykonal sie na tablicy char pola[0][0] m.wypelnij(sz.pola); // wywolanie funkcji w klasie B ze zmienionym parametrem klasy A //cout << k.zrodlo[0][0]; //tak by mozna bylo gdyby w class B tablica char zrodlo[15][15] byla public getch(); return 0;} Tablicy wielowymiarowej nie przesyła się do funkcji jako wskaźnika ani nie odbiera się przesyła się ją jako nazwę tablicy i tak samo odbiera a potem wewnątrz funkcji ustawia się na nią wskaźnik i operuje nim , albo niekoniecznie. Jeśli jesteś początkującym to nie zajmuj się takimi rzeczami tylko podszkol się w podstawach takich jak tablice / tablice wielowymiarowe , wartości w argumentach funkcji i inne. Bo nic się nie nauczysz. A takie rzeczy : m.wypelnij(&sz.pola); zrudlo=sz;Nie wiem co chciałeś osiagnąć przez to drugie (zrudlo=sz;) ale widać, że chyba nie rozumiesz tablic i wskaźników do końca. :) -
Jakiś ułamek sekundy 2^31 == 2147483648 ... od razu widać że dzieli się przez 2 czyli na pewno nie jest LP :) W sumie tu nie chodzi nawet o sprzęt tylko o dobrze napisany algorytm który już przy tych powiedzmy najmniejszych dzielnikach 2,3,5,7,11,13,17 to powie :x
-
No faktycznie zapomniałem że Pascal jest jeszcze na 16 bitach , kompilator :D. Ehh te stare czasy :roll:
-
A dlaczego tylko do 2^30 ??? . Czy chodzi ci o moc procesora czy o typ liczbowy ?. Jakby co to w c++ w bibliotece stdint.h jest coś takiego jak int64 (–2^63..2^63–1) a także uint64 (0..2^64-1) Dodajesz na początku #include <stdint> , a potem w programie delkarujesz sobie int64_t nazwa_zmiennej ; Nie wiem jaki masz algorytm ale obliczenie czy 2^63 jest czy nie jest pierwszą trochę by trwało :) .
-
Musiałby nic nie robić tylko czytać książki do programowania całymi dniami i nocami a i tak nie zostanie biegłym. A dlaczego ??? Dlatego że biegły programista to właśnie taki co ma duże doświadczenie. Taki co nie ma doświadczenia nie jest biegły. Żeby być biegłym potrzeba wielu lat ciężkiej pracy na różnych projektach :P Gdzieś słyszałem że programista w C++ po dwóch latach sądzi że wie wszystko po 4 latach sądzi że już nic nie wie a dopiero po 6 latach staje się prawdziwym programistą.
-
Zgadza się, najlepiej zacząć od C++ stopniowo i powoli oczywiście. Jeśli jesteś maniakiem to możesz zacząć też od c a potem przejść na c++ , ale w sumie i tak będziesz tylko używać konstrukcji z c++ , które w porównaniu do c są łatwiejsze i skuteczniejsze. Potem będziesz mógł spróbować coś z .NET powiedzmy c++ , java albo na c# ( bo w sumie będziesz już znać te języki z nauki c++ ) Polecam książki , na początek : Symfonia C++ , Thinking in C++ , potem dopiero Pasja C++ , i inne jakieś... No to jest kilka ładnych lat nauki przed tobą... :)
-
Parę rad na przyszłość : 1 #include <iostream>#include <fstream>#include <string>using namespace std; Pod dyrektywami zawsze dodawaj using namespace std ; dzięki temu nie będziesz musiał pisać std:: na początku np. strumieni cin i cout , co mocno zwiększy czytelność kodu i szybkość pisania. 2 std::cout<< "********** menu **********n";std::cout << "[1] Read from a filen";std::cout << "[2] Enter data from a keyboardn";std::cout << "[3] Exit programn"; Nie wal tyle cout bo to można załatwić jednym , co jest znacznie czytelniejsze i przejemniejsze dla oka jeszcze w kompilatorze. cout << "********** menu **********n" "[1] Read from a filen" "[2] Enter data from a keyboardn" "[3] Exit programn"; 3. Stosuj raczej // << endl ; na przejście do nowej lini bo jest czytelniejsze, a jak jest dużo // 'n' to czasami jest ciężko połapać. 4. Nie wiem czy robisz (bo forum ściąga wszystko do lewej strony ) dużo wcięć bo jak wszyskto zaczyna się od lewej strony to ciężko się połapać o co chodzi. 5. Funkcję int main() zawsze staraj się dawać jako pierwszą . Nie dlatego że tam musi stać ale dlatego że od niej wszystko się zaczyna ( czyli wywoływanie pozostałych funkcji ) ktoś chce sprawdzić co ona uruchamia to musi jechać na sam dół . :lol: 6. Zawsze oddzielaj wszystkie funkcje aby można się było łatwo połapać która gdzie się kończy a gdzie zaczyna następna: //-------------------------------------------------------------------------------void text(){ cout << "Enter degree of the polynomial (max " << max << ")n";}//-------------------------------------------------------------------------------void manual(){int string1[25];cout << "Enter degree of the polynomial (max " << max << ")n";cin >> degree; for(int i=0; i<=degree; i++) { cout << "Enter coefficient for x^" <<i<< "n"; cin>>string1[i]; }strncpy(string,string1,25);} //-------------------------------------------------------------------------------
-
Plik nagłówkowy dos.h :)
-
A widzisz jak Diabeł potrafi kusić , lepiej nie rób tego bo możesz sobie totalnie s.p.i.e.r.d.o.l.i.ć. kartę :x .
-
Sztuczki i kruczki w C - czyli jak zagmatwac kod programu.
Polar odpowiedział(a) na czara temat w Programowanie
Mam takie pytanie odnośnie tego C#asza jaki jest tu odpowiednik funkcji getch() czyli czekanie na naciśnięcie klawisza ??? Bo bym se oblukał , ale nie chce mi się szukać :lol: Albo lepiej kupić książkę C# dla pasjonatów C++ hehe warto się pouczyć :P -
Sztuczki i kruczki w C - czyli jak zagmatwac kod programu.
Polar odpowiedział(a) na czara temat w Programowanie
Na C# po wpisanie takiego kodu zamiana się nie dokona. Chociaż praktycznie nie znam tego języka ( my first time 8) ) ale nie było tak trudno to sprawdzić. using System;namespace Project1{ public class Ex1 { public static void Main(string[] args) { int x = 123, y = 456; Console.WriteLine( "najpierw x ="+ x + " a y = " + y ); x ^= y ^= x ^= y; Console.WriteLine( "a teraz x ="+ x + " a y = " + y ); } }} A takie jest rezultat, czyli ta zamiana tu nie działa. najpierw x =123 a y = 456a teraz x =0 a y = 123 Oczywiście w C++ wszystko jest bajecznie zgodne. #include<conio.h>#include<iostream.h>//------------------------------------------------------------------------------main(){int x = 123, y = 456; cout << "najpierw x = " << x << " y = " << y << endl; x ^= y ^= x ^= y; cout << "a potem x = " << x << " y = " << y;getch();}//------------------------------------------------------------------------------ Wynik jest jak to powszechnie wiadomo spodziewany :) . -
Znalazłem jeszcze coś innego funkcję ecvt() która zmienia ułamek na na string i od razu zapisuje jako całość , trzeba skonwetować na liczbe, dokładność zamiany jest na sztywno. :x W sumie to tylko mój wcześniejszy zmodyfikowany kod o ecvt(). #include<conio.h>#include<iostream.h>#include<math.h>#include<stdlib.h>main(){double ulamek, calosc; // zmienne do modfdouble liczba = 123.456; // liczbaint pozycja, znak;char * string;ulamek = modf(liczba , &calosc);cout << "liczba = " << liczba << "ncalosc = " << calosc << "nulamek = " << ulamek;string = ecvt(ulamek, 3 , &pozycja , &znak); // zamienia double na stringcout << endl << "calosc z ulamka = " << string;getch();}
-
Różnica jest subtelna, taka że { char * wskaźnik = "coś tam" } zostaje zapisane w pamięci w sposób ciągły jedno za drugim. A { char tablica [] = "coś tam" } jako stos. A wiadomo że nazwa tablicy jest jednocześnie adresem jej zerowego elementu czyli zapisy te oznaczją to samo , różnica jest tylko w sposobie zapisu ( ułożenia ) elementów w pamięci.
-
Człowieku i ty się jeszcze dziwisz ??? 8O :o Przecież taka mieszanka rozwali każdy komp , głównie symantec + creative :o
-
Ja bym to zrobił tak ( ale druga liczba "ulamek" wyjdzie w przedziale od 0 do 1 ) : Twój kod działal by podobnie gdybyś zamiast int czesc_ulamkowa dał float czesc_ulamkowa.
-
Rundll32.exe w windowsxp,spis komend do sterowania systemem
Polar odpowiedział(a) na Polar temat w Microsoft Windows
ok dzieki za pomoc chlopaki wszstkiego nie wiedzialem :P te z poloceniem shutdown sie przydaly :P -
Outlook Express i załaczniki brak mozliwosci zapisu
Polar odpowiedział(a) na -=Ewoks=- temat w Microsoft Windows
dajesz na NARZĘDZIA/OPCJE zakładka ZABEZPIECZENIA i tam odznaczasz pole NIE ZEZWALAJ NA ZAPISYWANIE ZAŁĄCZNIKÓW..... -
Rundll32.exe w windowsxp,spis komend do sterowania systemem
Polar opublikował(a) temat w Microsoft Windows
potrzebny mi spis komend do sterowaniem systemu , komendy wysyłane do pliku rundll32.exe np przez linię poleceń , np restart systemu itd... -
tu masz link do naprawdę dobrego FAQ ... http://80.53.21.162/~speed/download/faq_builder.rar