ďťż

Ładny brzuch

musze zaimplementowac funkcje ktora zwroci mi jak dluga jest tablica tzn ile bajtow zostalo wczesniej przy alokacji przeznaczone
W tablicach znakowych uzylbym strlen ale dla tablic int lub double nie ma takiej funkcji (chyba )
gdyby istanialo takie cos jak znak konca tablicy '\0' tak jak to jest w stringach byloby po klopocie

moze ma ktos jakies pomysly <_<



Możesz zrobić tak jak napisałeś - zamieszczać na końcu zero (lub jakąś inną liczbę, której nie będziesz używał) przy alokacji i napisać funkcję, którą będzie sprawdzała, na którym miejscu ono jest.
Ale tak poza tym to wielkość tablicy należy przechowywać sobie gdzieś, jeśli chce się wiedzieć ile zajmuje.
Napisz do czego Ci to potrzebne, bo może istnieje jakieś inne łatwe rozwiązanie Twojego problemu.

postaram sie :)

mam strukture wielomianu
typedef struct Poly
{
unsigned deg;
Value_t *rate;
} Poly;

i funkcje ktora zwyczajnie alokuje mi pamiec tyle ile jest stopien wiel +1 (na wyraz wolny ) ale potem uzywam fukncji Resize ktora mi to tabilce wydluzy o tyle ile bede chcial kod tej funkcji jest taki

int Poly_Resize(Poly_t x, const int capacity)
{
Value_t *temp;
if (capacity < x->deg)
return -1;

temp=alok(x->deg);
memcpy(&temp,&x->rate,x->deg+1);
free(x->rate);
x->rate=alok(capacity-1);
memcpy(&x->rate,&temp,capacity);
return 0;
}

wiec musze teraz wiedziec ile ma ta moja tablica juz po wydluzeniu

Możesz to w tej funkcji wpisywać do struktury opisującej wielomian po prostu, czyli:
x->deg = capacity - 1;
albo coś podobnego.
Poza tym wydłużać tablicę możesz przy pomocy realloc, ale to już taka uwaga podobczna. ;)

Swoją drogą dlaczego używasz typedef przy definicji struktury?
Użytkownik Chmurek edytował ten post 22 marzec 2006, 19:10


Aby sprawdzić długość tablicy możesz użyć takiego zapisu:
sizeof(tablica)/sizeof(tablica[0])
To wyrażenie zwróci ilość elementów w tablicy.

sansali: Nieprawda. Takie coś zadziała tylko dla tablic zadeklarowanych statycznie i tylko jeśli będzie to w tej samej funkcji.
Użytkownik Chmurek edytował ten post 22 marzec 2006, 22:38
Racja, mój błąd. Przeoczyłem jakoś, że to ma być dynamiczne. W tej sytuacji chyba najprościej umieścić na końcu jakieś oznaczenie, tak jak już to było wspomniane.

Ja bym jednak był za zapisywaniem długości w strukturze - zajmowałoby to tyle samo lub nawet mniej pamięci niż wprowadzenie oznaczenia, a nie ograniczało by liczb jakie można wpisać do tablicy.
Ewentualnie można użyć listy.

tyle tylko ze zalozenie projektu jest takie ze ta struktrua jest swieta i nie wolno jej zmieniac :( tez myslalem o liscie ale na to nie pozwala projekt

Ale przecież masz w strukturze zmienną deg, która określa wielkość tablicy.
Użytkownik Chmurek edytował ten post 22 marzec 2006, 23:34
ale ona jest nie do tego
deg nie okresla wielkosci tablicy tylko stopien wielomianu. Wiec na samym poczatku tablica ma dlugosc deg + 1 ale po zastosowaniu funkcji Poly_Resize() tablica bedzie dluzsza i chodzi o to zeby w innej funkcji wiedziec jak ona jest dluga
zrobie to na przykladzie
niech bedzie wiel 2 stopnia
rate[0] = 1
rate[1] = 3
rate[2] = -5 wiec deg = 2 a order deg +1 = 3 i capacity == order

do funkcji Poly_Resize przekazuje nowy rozmiar tablicy - niech bedzie 5
wiec
rate[0] =1
rate[1] = 3
rate[2] = -5
rate[3] = ?
rate[4] = ? deg dalej jest rowny 2 order dalej jest rowny 3 ale capacity nie jest juz rowny order tylko capacity jest teraz 5
teraz problem polega na tym zeby w innej funkcji wiedziec jakie jest to capacity

A co określają dane zawarte w tablicy?

ta sa wspolczynniki wielomianu przy odpowiednich potegach
np indeks 0 tablicy to jest x do potegi zero
..... indeks 3 to jest wspl[3]*x^3

Tak sądziłem. Więc jak widać możesz użyć deg do przechowywania rozmiaru tej tablicy, bo przecież jej wielkość jest uzależniona od stopnia wielomianu.

no nie do konca :) deg to stopien wielomianu a nie dlugosc tablicy :)
tablica moze byc dluzsza a deg dalej bedzie taki sam

Nie jestem pewien kiedy miałoby tak być. Podaj jakiś przykład, jeśli możesz. ;)

juz podalem wczesniej

mam tablice 4 elemntowa wypelniana wspolczynnikami

przekazyje ja do funkcji resize i robie z niej 20 elementowa
ale nie ruszam zmiennej deg
potem w innej funkcji chce wiedziec jaki jest rozmiar nowy po zapodsniu funkcji resize()

Ale nie o to pytam.
Pytam o to dlaczego miałbyś tak robić? Jeśli struktura ma opisywać wielomian to po co zmieniać tablicę współczynników tego wielomianu bez zmiany ich ilości?

o to samo zapytalem Pana doktora na zajeciach :) ale uslyszalem tylko ze to bedzie pozyteczna funkcja w bibliotece

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