ďťż

Ładny brzuch

Witam wszystkich!

Napisałem sobie mały algorytm, który wspomaga moją stronę w PHP (różne rzeczy robi, a co najważniejsze jest szybszy niż strona w PHP), który wygląda w ten sposób

[color="#008000"]#include [color="#8B0000"]<iostream>[/color] #include [color="#8B0000"]<math.h>[/color] #define [color="#000000"]DEBUG_LISTS 0[/color] #define [color="#000000"]DEBUG_LIST_LENGTHS_ONLY 0[/color] using [color="#000000"]namespace std;[/color][/color] [color="#4169E1"]const int[/color] A = 40; [color="#4169E1"]const int[/color] B = 40; [color="#4169E1"]int[/color] Z[ A * B ] = { 1,9,1,1, 1,9,9,1, 1,1,9,9, 1,1,1,1, };

dalej następuje deklaracja klasy, która korzysta z tych zmiennych.

Chcę do środka w postaci zmiennych przekazywać dane według wzoru (w PHP);

<?php [color="#4169E1"]$a[/color] = 3; [color="#4169E1"]$b[/color] = 3; [color="#4169E1"]$z[/color] = [color="#008080"]'1 1 1 9 9 1 1 1 1 '[/color]; [color="#4169E1"]$tabelica[/color] =[b] exec[/b] ([color="#006400"]'[i]sciezka_do_programu[/i]'[/color].$ a.' '.$b.' '.$z); [color="#C0C0C0"][i]//i tu sobie obrabiam wynik zwrócony przez aplikację[/i][/color] ?>

I teraz mój problem. Nie mogę sobie poradzić ze zmianą tych zmiennych na dynamiczne, żeby powstało coś na zasadzie

[color="#4169E1"]int[/color] main( [color="#4169E1"]int[/color] argc, [color="#4169E1"]char[/color] *argv[] ) { [color="#4169E1"]const int[/color] A1 = atoi( argv[0] ); [color="#4169E1"]const int[/color] B1 = atoi( argv[1] ); [color="#4169E1"]char[/color] sz_pattern_char[ 2 * A1 * B1 ] [color="#4169E1"]int[/color] sz_pattern_int[ A1 * B1 ]; [color="#4169E1"]int[/color] stringoffset; [color="#4169E1"]char[/color] *intermediate; [color="#4169E1"]for[/color] ([color="#4169E1"]int[/color] i = 0; i < A1 * B1; i++) { stringoffset = i * 2; intermediate = &sz_pattern_char[stringoffset]; sz_pattern_int[i] = atoi(intermediate); }

I teraz pytanie czy ktoś mógłby mi pomóc poradzić sobie z tym problemem? Będę wdzięczny za każdą pomoc.

Wydaje mi się, że dobrze opisałem problem, ale w razie czego piszcie - jak coś niejsane to wyjaśnię.
Użytkownik j-mail edytował ten post 30 maj 2009, 09:07


Użyj dynamicznej alokacji pamięci. Np.:

unsinged int A1 = atoi( argv[0] ); unsinged int B1 = atoi( argv[1] ); unsigned int size = A1 * B1; if (size) { char* sz_pattern_char = new char[2 * size]; int* sz_pattern_int = new int[size]; // tutaj wykonaj operacje na danych delete sz_pattern_char; delete sz_pattern_int; }
Użytkownik Kozack edytował ten post 30 maj 2009, 10:05
Możesz również używać wektora, wtedy nie trzeba się martwić o usuwanie pamięci.
#include <vector> using std::vector; ... ... unsinged int A1 = atoi( argv[0] ); unsinged int B1 = atoi( argv[1] ); unsigned int size = A1 * B1; vector<int> sz_pattern_int; vector<char> sz_pattern_char; if (size > 0) { sz_pattern_char.resize(2*size); sz_pattern_int.resize(size); // tutaj wykonaj operacje na danych }

no i właśnie teraz się zorientowałem, że zapomniałem dodać informację. te dane z A1 B1 i Z docelowo muszą być dostępne dla klasy tak samo jak dostępne są dane A B i Z.

Kozack -> Co do wykonania operacji o których wspominasz już się za to biorę i napiszę jak dam radę sobie z tym poradzić.

twono -> też niezłe, ale nadal nie wiem jak zmusić, żeby te dane były dostępne dla klasy :D
Użytkownik j-mail edytował ten post 30 maj 2009, 10:48



twono -> też niezłe, ale nadal nie wiem jak zmusić, żeby te dane były dostępne dla klasy :D
Nie zauważyłem tych zasłoniętych linii kodu. W tym przypadku vector<char> odpada, bo atoi nie będzie dobrze działać. Można natomiast próbować stringa.
string sz_pattern_char; ... stringoffset = i * 2; sz_pattern_int[i] = atoi(sz_pattern.char.c_str() + i);
Co do dostępności danych: co konkretnie chcesz robić na tych "tablicach" wewnątrz tej klasy? Dostęp do pojedynczych elementów nie różni się zbytnio od zwykłej tablicy, natomiast jeśli chcesz skakać po wskaźnikach i coś robić tak jak w tym main'ie, to może być gorzej. Pewnie jest możliwe, ale nie warte zachodu. Łatwiej na dynamicznych tablicach tak jak Kozack pokazał.

Dziękuję za pomoc wszystkim. Problem został rozwiązany. Zmęczony niepowodzeniem i nie mając żadnej koncepcji na to jak to rozwiązać zacząłem krążyć wokół rozwiązania .NET (bliskie memu sercu) i ostatecznie napisałem moduł ładowany do PHP ;) C# jest jednak bardziej idioto odporny ^^ i przewiduje, ze takie bzdury można robić.

Temat do zamknięcia.

Jeszcze raz dziękuję.

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •