Gwóźdź w głowie



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "ZbychJ" <zbigzdroje1_at_nospam_wp.pl>
Subject: Gwóźdź w głowie
Date: Thu, 8 Jun 2006 05:32:35 +0200


Witam
Ten gwóźdź to algorytm programu w C51 z którym nie mogę sobie poradzić. To
co napisałem zajmuje koszmarnie dużo pamięci a sądzę i jestem pewien, że
jest prostsze rozwiązanie.(siedzi mi to w głowie jak ten gwóźdź, którego
nie mogę wyciągnąć).
Chodzi o to, że mam ciąg liczb naturalnych powiedzmy: 3,4,5,6,7,8,9,10,11.
Jeśli je ponumerujemy od 1 to mamy ich razem 9. Do numeru liczby jest
przyczepione okno o szerokości np. 5. Ilość liczb jak i szerokość okna są
dowolnie wybierane(oczywiście szerokość okna nie może być większa od ilości
liczb. To tytułem wprowadzenia. Załóżmy, że numer liczby jest 3 to w oknie
widzimy 5,6,7,8,9. W tym momencie jest to proste, ale sytuacja komplikuje
się, gdy numer liczby osiągnie np. 8. Wtedy w oknie będziemy widzieli:
10,11,3,4,5. Itd. itp.
Może ktoś rozpracował podobny problem i pomoże wyciągnąć mi ten gwóźdź.
Z góry dzięki za podpowiedzi.
--
Pozdrowienia ZbychJ




Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr Pitucha" <piotrpitucha_at_nospam_poczta.onet.pl>
Subject: =?iso-8859-2?B?UmU6IEd387xkvCB3IGezb3dpZQ==?=
Date: Thu, 8 Jun 2006 08:35:21 +0200


Użytkownik "ZbychJ" <zbigzdroje1_at_nospam_wp.pl> napisał w wiadomości
news:e685p9$nt5$1_at_nospam_atlantis.news.tpi.pl...
Witam
Ten gwóźdź to algorytm programu w C51 z którym nie mogę sobie poradzić.
To
co napisałem zajmuje koszmarnie dużo pamięci a sądzę i jestem pewien, że
jest prostsze rozwiązanie.(siedzi mi to w głowie jak ten gwóźdź, którego
nie mogę wyciągnąć).
Chodzi o to, że mam ciąg liczb naturalnych powiedzmy: 3,4,5,6,7,8,9,10,11.
Jeśli je ponumerujemy od 1 to mamy ich razem 9. Do numeru liczby jest
przyczepione okno o szerokości np. 5. Ilość liczb jak i szerokość okna są
dowolnie wybierane(oczywiście szerokość okna nie może być większa od
ilości
liczb. To tytułem wprowadzenia. Załóżmy, że numer liczby jest 3 to w oknie
widzimy 5,6,7,8,9. W tym momencie jest to proste, ale sytuacja komplikuje
się, gdy numer liczby osiągnie np. 8. Wtedy w oknie będziemy widzieli:
10,11,3,4,5. Itd. itp.
Może ktoś rozpracował podobny problem i pomoże wyciągnąć mi ten gwóźdź.
Z góry dzięki za podpowiedzi.
--
Nie wiem w czym problem z tą pamięcią, nie piszesz jak duży jest ten ciąg,
jeśli ładujesz go do jakiejś tablicy, to sprawa jest banalna, deklarujesz
tablicę , a potem w pętli powtarzasz funkcję succ( ) , która poda Ci
następny element ciągu.
Jeśli ciąg jest za wielki na sensowną tablicę, to robisz pętlę w pętli,
jedna zwiększa liczbę wynikającą z szerokości okna, a w dugiej sprawdzasz
czy osiągnąłeś max liczbę w ciągu, jeśli tak to zmieniasz ją na min liczbę w
ciągu i kontynuujesz ....
Piotr
Ps. sprawdź składnię bo succ używałem kilkanaście lat temu :)


Poprzedni Następny
Wiadomość
Spis treści
From: "Andrzej" <dydelf02_at_nospam_op.pl>
Subject: Re: Gwóźdź w głowie
Date: Thu, 8 Jun 2006 08:53:35 +0200


Użytkownik "ZbychJ" <zbigzdroje1_at_nospam_wp.pl> napisał w wiadomości
news:e685p9$nt5$1_at_nospam_atlantis.news.tpi.pl...
W tym momencie jest to proste, ale sytuacja komplikuje
się, gdy numer liczby osiągnie np. 8. Wtedy w oknie będziemy widzieli:
10,11,3,4,5. Itd. itp.
Jak duża jest ta tablica? Jeśli masz miejsce w pamięci to może wpisać ją do
pamięci dwa razy tzn:
3,4,....11,3,4..11 i szukać tylko do połowy.(Jesli okno bedzie max. wielkośc
tablicy)
pozdrawiam,
Andrzej



Poprzedni Następny
Wiadomość
Spis treści
From: "bartekLTG" <bartekltg_at_nospam_op.ciach.pl>
Subject: =?windows-1250?B?UmU6IEd387xkvCB3IGezb3dpZQ==?=
Date: Thu, 8 Jun 2006 09:05:13 +0200



Użytkownik "ZbychJ" <zbigzdroje1_at_nospam_wp.pl> napisał w wiadomości
news:e685p9$nt5$1_at_nospam_atlantis.news.tpi.pl...
Witam
Ten gwóźdź to algorytm programu w C51 z którym nie mogę sobie poradzić.
To
co napisałem zajmuje koszmarnie dużo pamięci a sądzę i jestem pewien, że
jest prostsze rozwiązanie.(siedzi mi to w głowie jak ten gwóźdź, którego
nie mogę wyciągnąć).
Chodzi o to, że mam ciąg liczb naturalnych powiedzmy: 3,4,5,6,7,8,9,10,11.
Jeśli je ponumerujemy od 1 to mamy ich razem 9. Do numeru liczby jest
przyczepione okno o szerokości np. 5. Ilość liczb jak i szerokość okna są
dowolnie wybierane(oczywiście szerokość okna nie może być większa od
ilości
liczb. To tytułem wprowadzenia. Załóżmy, że numer liczby jest 3 to w oknie
widzimy 5,6,7,8,9. W tym momencie jest to proste, ale sytuacja komplikuje
się, gdy numer liczby osiągnie np. 8. Wtedy w oknie będziemy widzieli:
10,11,3,4,5. Itd. itp.
Może ktoś rozpracował podobny problem i pomoże wyciągnąć mi ten gwóźdź.
Z góry dzięki za podpowiedzi.


Uzyj modulo;> W X masz adresa tablicy, w Y przesuniecie.

y<- numer liczby -1 (-1 bo numerujesz liczby od 1)
'wypiszujesz', dodajesz jeden, liczysz mod, 'wypisujesz'.. i tak 5 razy

pozdr
bartekltg


Poprzedni Następny
Wiadomość
Spis treści
From: "Darek" <energetyka_at_nospam_op.pl>
Subject: =?windows-1250?B?UmU6IEd387xkvCB3IGezb3dpZQ==?=
Date: Thu, 8 Jun 2006 14:08:45 +0200


Mo=BFe kto=B6 rozpracowa=B3 podobny problem i pomo=BFe wyci=B1gn=B1=E6 =
mi ten gw=F3=BCd=BC.
Z g=F3ry dzi=EAki za podpowiedzi.

A co znaczy "zabiera koszmarn=B9 ilo=9C=E6 pami=EAci"?
20 bajt=F3w czy 500bajt=F3w?

Masz tablic=EA, je=BFeli to tablica element=F3w jednobajtowych
o rozmiarze <256 to jaki problem?

Ustawiasz wska=9Fnik na konkretny element tablicy i odczytujesz
dane pocz=B9wszy od wska=9Fnika do zadanej d=B3ugo=9Cci okna.
Wska=9Fnik po inkrementacji poddajesz operacji modulo=20
(rozmiar tablicy) i masz obliczony aktualny wska=9Fnik,
albo sprawdzasz warto=9C=E6 wska=9Fnika <rozmiar tablicy+1, jesli=20
nie to go zerujesz.=20

Pozdrawiam
Darek

Poprzedni Następny
Wiadomość
Spis treści
From: MariuszC <marcukr_at_nospam_.op.toskasuj.pl>
Subject: Re: =?ISO-8859-2?Q?Gw=F3=BCd=BC_w_g=B3owie?=
Date: Thu, 08 Jun 2006 22:24:51 +0200


ZbychJ wrote:

Witam
Ten gwóźdź to algorytm programu w C51 z którym nie mogę sobie poradzić. To
co napisałem zajmuje koszmarnie dużo pamięci a sądzę i jestem pewien, że
jest prostsze rozwiązanie.(siedzi mi to w głowie jak ten gwóźdź, którego
nie mogę wyciągnąć).
Chodzi o to, że mam ciąg liczb naturalnych powiedzmy: 3,4,5,6,7,8,9,10,11.
Jeśli je ponumerujemy od 1 to mamy ich razem 9. Do numeru liczby jest
przyczepione okno o szerokości np. 5. Ilość liczb jak i szerokość okna są
dowolnie wybierane(oczywiście szerokość okna nie może być większa od ilości
liczb. To tytułem wprowadzenia. Załóżmy, że numer liczby jest 3 to w oknie
widzimy 5,6,7,8,9. W tym momencie jest to proste, ale sytuacja komplikuje
się, gdy numer liczby osiągnie np. 8. Wtedy w oknie będziemy widzieli:
10,11,3,4,5. Itd. itp.
Może ktoś rozpracował podobny problem i pomoże wyciągnąć mi ten gwóźdź.
Z góry dzięki za podpowiedzi.

unsigned char tab[] = { 3, 4, 5, 6, 7, 8, 9, 10, 11 };
unsigned char okno = 5;
unsigned char numElements = sizeof( tab ) / sizeof( tab[0] );

void wypisz_okno( unsigned char index )
{
unsigned char i;
if ( --index >= numElements )
{
// Blad, index spoza dozwolonego zakresu <1, numElements>
return;
}

for ( i = 0; i < okno; ++i )
{
printf( "%u", tab[index] ); // wypisz wartosc elementu
if ( ++index >= numElements )
index = 0;
}
}

zamiast kodu
if ( ++index >= numElements )
index = 0;
mozesz zastosowac jednolinijkowca
index = ( index + 1 ) % numElements;
ale tamten pierwszy nie ma dzielenia wiec wykona sie szybciej, no chyba
ze masz wartosc numElements rowna potedze 2 wtedy kompilator moze
zoptymalizuje to do wyrazenia AND bitowe np numElements = 4 ->
index = ( index + 1 ) & 0x03;

Mariusz