Zaloguj się, aby obserwować  
Bartuc

Język C / C++ / C# / Java - pytania, problemy...

1979 postów w tym temacie

Najprościej takie rzeczy robi się przez dodanie dodatkowego parametru do funkcji - w wywołaniu rekurencyjnym ustawiasz go zawsze na false, tylko przy głównym wywołaniu (z main) ustawiasz na true. Ale ogólnie wrzucanie do quicksorta zapisu do pliku, to błąd projektowy. Funkcje/metody powinny z założenia robić jedną rzecz, więc jeśli da się rozbić logikę danej funkcji na mniejsze części, to się to robi. Tutaj możesz oddzielnie napisać quicksorta i dodatkowo funkcję, która tylko go wywołuje i wynik zapisuje do pliku.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Problem w tym, że w jednym programie implementuję 5 różnych algorytmów i każdy musi zapisywać do innego pliku. Jeśli więc robiłbym oddzielną funkcję do zapisu musiałbym w niej rozpoznawać, który algorytm został użyty i na tej podstawie zbudować warunek zapisujący do odpowiedniego pliku. A że jak dotąd [bubble, Shell, wstawianie] nie było nic rekurencyjnego, takie rozwiązanie wydało mi się prostsze. Wiem, że nie jest najlepsze, ale kiedy mam masę pracy, idę po najmniejszej linii oporu. ;p

Ok, rozumiem zamysł, ale nadal - jak rozpoznać, że dane wywołanie jest główne, a nie rekurencyjne? Przecież niezależnie od tego, gdzie funkcję wywołam, działa ona tak samo. Zmieniają się tylko parametry, tutaj więc szukam sposobu, jednak póki co mi nie idzie.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 21.06.2014 o 16:40, JayL napisał:

Ok, rozumiem zamysł, ale nadal - jak rozpoznać, że dane wywołanie jest główne, a nie
rekurencyjne? Przecież niezależnie od tego, gdzie funkcję wywołam, działa ona tak samo.
Zmieniają się tylko parametry, tutaj więc szukam sposobu, jednak póki co mi nie idzie.


int wywolanie=0;

int funkcja_rekurencyjna)
{
wywolanie++;
}

Może niezbyt piękne ale wywolanie=0 będzie tylko przy pierwszym uruchomieniu tej funkcji.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ok, dzięki za pomoc, działa. Tylko teraz kolejny problem. ;p Mianowicie, znacie jakiś sposób na mierzenie czasu wykonywania algorytmu prócz biblioteki time.h? Musze pomierzyć bardzo krótkie czasy [mikrosekundy?] i ta niestety nie daje rady i np. sortowanie posortowanego pliku zajmuje dla niej po prostu 0ms.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 21.06.2014 o 18:29, JayL napisał:

Ok, dzięki za pomoc, działa. Tylko teraz kolejny problem. ;p Mianowicie, znacie jakiś
sposób na mierzenie czasu wykonywania algorytmu prócz biblioteki time.h? Musze pomierzyć
bardzo krótkie czasy [mikrosekundy?] i ta niestety nie daje rady i np. sortowanie posortowanego
pliku zajmuje dla niej po prostu 0ms.


Mikrosekundy to już dość skomplikowana kwestia - musiałbyś mieć jakiś punkt odniesienia. Na przykład taktowanie swojego procesora.

#include <iostream>
#include <windows.h>
#include <vector>
#include <cmath>
void superfunkcja() // Jakas losowa funkcja.
{
std::vector<int> giantwektor;
for (int j=0; j<1000; j++)
{
giantwektor.push_back(j);
giantwektor[j]=sin(giantwektor[j])*cos(giantwektor[j]);
}
}

int main()
{
LARGE_INTEGER start, end, freq;

QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&start);

superfunkcja();

QueryPerformanceCounter(&end);

std::cout << "Dokladnosc zegara: " << freq.QuadPart << " Hz." << std::endl;
std::cout << "Czas sprawdzenia jak dlugo dziala superfunkcja(): "
<< (end.QuadPart - start.QuadPart) * 1000000 / freq.QuadPart
<< " mikroSekund" << std::endl;
}

http://puu.sh/9EaiR/74b0e6e21e.png

Chyba większej dokładności na kompie nie będziesz mieć.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Sorry za post pod postem, ale radość była przedwczesna. Zmierzyłem spokojnie czasy dla 1000 i 10 000 danych wejściowych, ale biorąc się za 100 000 zauważyłem pewien problem. Mianowicie nie wiem czemu, ale program wczytuje z pliku tylko 20 000 danych. Potem w tablicy, do której wrzucam te dane, mam same 0. Plik wejściowy jest poprawny, mam tam 100 000 losowych liczb. Kod wygląda tak:

int i, x;
int input1[100000], input2[100000], input3[100000], input4[100000], input5[100000];
FILE *data, *input;


input = fopen("wejscie.txt", "w");
data = fopen("plik105rand.txt", "r");
x = 0;

while(!feof(data))
{
fscanf(data, "%d", &input1[x]);
fscanf(data, "%d", &input2[x]);
fscanf(data, "%d", &input3[x]);
fscanf(data, "%d", &input4[x]);
fscanf(data, "%d", &input5[x]);
x++;
}

for(i = 0; i <= 99999; i++)
{
fprintf(input, "%d\n", input1);
}

Wcześniej była wersja feof(data) == 0, ale taka kosmetyczna zmiana nic nie zmieniła. Danych nie jest chyba za dużo, skoro program losujący, który też sam napisałem, nie ma problemów z załadowaniem 100 000 liczb do pliku. Natomiast tuaj nie wiedzieć czemu pętla while kończy się po 20 001 obrotach. Zmiana int na long nic nie daje.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

/.../
Um, 5 tablic po 100000 elementów deklarowanych na stosie? Nie jestem pewny czy nie przekraczasz limitów pamięci w tym momencie. Ja to bym raczej już używał tablic dynamicznych i malloca.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

To tylko do pomiarów, bo później odpalam 5 algorytmów sortujących jednocześnie dla każdej. Później przerobię to na switcha z wyborem algorytmu i zostanie 1 tablica.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 23.06.2014 o 20:07, JayL napisał:

To tylko do pomiarów, bo później odpalam 5 algorytmów sortujących jednocześnie dla każdej.
Później przerobię to na switcha z wyborem algorytmu i zostanie 1 tablica.


Nie no, po prostu wyrażam wątpliwość czy ci starczy pamięci na stosie - tam jest do dyspozycji od 16KB do 7MB zależnie od kompilatora.... a jeśli wyłazisz poza limit to pętla nie wykonująca się do końca jest najmniejszym z twoich problemów.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

No cóż, w tym na pewno problemu nie było. Zrobiłem test dla 1 tablicy, nadal to samo. Wszystkie inne zakomentowane.

EDIT: A jednak miałeś rację, kajam się. Oprócz zakomentowania reszty zmieniłem typ iteratora na long int i teraz jest pięknie w pliku 100 000 liczb. Dzięki. :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Pytanie (wciąż) początkującego - jak zamienić pojedyńczy plik java pisany tradycyjnie (np. w Notepadzie ++) w początek projektu w Netbeansie? Zwykłe przeniesienie kodu chyba nie jest najlepszym rozwiązaniem?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 28.06.2014 o 14:55, Boguslav4 napisał:

Pytanie (wciąż) początkującego - jak zamienić pojedyńczy plik java pisany tradycyjnie
(np. w Notepadzie ++) w początek projektu w Netbeansie? Zwykłe przeniesienie kodu chyba
nie jest najlepszym rozwiązaniem?


jeśli zapisałeś to jako plik nazwa.java to wystarczy go otworzyć

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

#Java

Mam do napisania projekt na zaliczenie ("baza urządzeń mobilnych ala GSMArena")
W tym projekcie mam wymaganie
- Aplikacja musi korzystać z min 1 ogólnodostępnej usługi sieciowej.

I czy ma ktoś jakieś podpowiedzi jaka to usługa może być ?
Myślałem o Google Transtale API ale z tego co udało mi się wygooglać jest za free tylko dla ogólnodostępnych webowych aplikacji

Jak można to coś prostego w implementacji :-)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 28.12.2014 o 17:13, gracz_155 napisał:

#Java

Mam do napisania projekt na zaliczenie ("baza urządzeń mobilnych ala GSMArena")
W tym projekcie mam wymaganie
- Aplikacja musi korzystać z min 1 ogólnodostępnej usługi sieciowej.

I czy ma ktoś jakieś podpowiedzi jaka to usługa może być ?
Myślałem o Google Transtale API ale z tego co udało mi się wygooglać jest za free tylko
dla ogólnodostępnych webowych aplikacji

Jak można to coś prostego w implementacji :-)


Google Maps jest spoko. Korzystałem z tego przy projekcie na Androida. Dla Javy desktopowej też powinno być. Jeśli uda Ci się znaleźć zastosowanie to klepie się bardzo miło :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 28.12.2014 o 17:13, gracz_155 napisał:

I czy ma ktoś jakieś podpowiedzi jaka to usługa może być ?

Youtube, Twitter, FB, praktycznie każdy powszechniej używany badziew ma swoje publiczne API. :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Witam mam do zaliczenia test z jezyka c . Czy jest ktos w s tanie rozwiązać go :) oczywiście szczegóły do obgadania:)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Utwórz konto lub zaloguj się, aby skomentować

Musisz być użytkownikiem, aby dodać komentarz

Utwórz konto

Zarejestruj nowe konto na forum. To jest łatwe!


Zarejestruj nowe konto

Zaloguj się

Masz już konto? Zaloguj się.


Zaloguj się
Zaloguj się, aby obserwować