Ciag n wyrazow

Awatar użytkownika
Pniaq
Użytkownik
Użytkownik
Posty: 39
Rejestracja: 5 kwie 2006, o 18:01
Płeć: Mężczyzna
Lokalizacja: Dąbrowa Górnicza
Podziękował: 3 razy
Pomógł: 2 razy

Ciag n wyrazow

Post autor: Pniaq »

Program do napisania w C++

Dana jest ilosc wyrazow ciagu n oraz wyrazy tego ciagu a[0],a[1],..... a[n-1].
Napisac program rozdzielania podanego ciagu na 2 ciagi , jeden zlozony z elementow nieujemnych , drugi z elementow ujemnych.

Dzieks z gory!
Awatar użytkownika
amdfanatyk
Użytkownik
Użytkownik
Posty: 98
Rejestracja: 27 mar 2005, o 14:59
Płeć: Mężczyzna
Lokalizacja: /dev/zero
Podziękował: 9 razy
Pomógł: 7 razy

Ciag n wyrazow

Post autor: amdfanatyk »

w czym konkretnie jest problem?

najpierw tworzysz sobie tablice na stercie, pozniej dwie listy liniowe lub nawet lepiej, pobierasz od razu do listy i przepinasz, zeby polaczyc ze soba elementy ujemne w jedna liste, nieujemne w druga.
Awatar użytkownika
Pniaq
Użytkownik
Użytkownik
Posty: 39
Rejestracja: 5 kwie 2006, o 18:01
Płeć: Mężczyzna
Lokalizacja: Dąbrowa Górnicza
Podziękował: 3 razy
Pomógł: 2 razy

Ciag n wyrazow

Post autor: Pniaq »

W tym ze mam to zrobic za pomoca dwoch petli for wypelniajac tablice
Niestety nie mam pojecia co to jest sterta ani lista liniowa ...
Bylbym wdzieczny gdybys mi to pokazal krok po kroku.
Awatar użytkownika
amdfanatyk
Użytkownik
Użytkownik
Posty: 98
Rejestracja: 27 mar 2005, o 14:59
Płeć: Mężczyzna
Lokalizacja: /dev/zero
Podziękował: 9 razy
Pomógł: 7 razy

Ciag n wyrazow

Post autor: amdfanatyk »

masz tutaj najkrocej jak mozna o strukturach dynamicznych:
... /spis.html

oczywiscie, ze mozna sie bawic z tablica, tylko trzeba albo przyjac z gory staly rozmiar i marnowac pamiec albo zapytac uzytkownika na poczatku o ilosc elementow i utworzyc tablice na stercie; z lista jest elegancko i bez marnowania pamieci, nie ruszasz elementow, jedynie zmieniasz ich polaczenia miedzy soba.
Xfly
Użytkownik
Użytkownik
Posty: 174
Rejestracja: 13 mar 2006, o 20:44
Płeć: Mężczyzna
Lokalizacja: Nowogard
Podziękował: 33 razy
Pomógł: 10 razy

Ciag n wyrazow

Post autor: Xfly »

hmm a moze skorzystac z jakiegos kontenera ? - nie musisz podawac jego wielkosci sam sie powieksza jak trzeba i jest bardzo latwy w obsludze - np vector

dolacz plik naglowkowy i do dziela
Fibik
Użytkownik
Użytkownik
Posty: 971
Rejestracja: 27 wrz 2005, o 22:56
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 11 razy
Pomógł: 75 razy

Ciag n wyrazow

Post autor: Fibik »

Kod: Zaznacz cały

typedef int typ;

#define N    333
typ *a; // nasza tablica liczb, można użyć float lub coś tam...

typ *neg; // tablica wynikowa
int nneg; // liczba ujemnych

void wypelnij(typ *s=a, int cnt=N) // wypełniamy tablicę (losowo lub inaczej)
{
  while( --cnt >= 0 ) *s++= 777/2 - random(777);
}

int rozdziel(typ *o, typ *s, int cnt=N)
{
  typ *e = o, *p = e+cnt; // dodatnie i zera idą od końca
  
  while( --cnt >= 0 )
   *(*s < 0 ? e++ : --p) = *s++;

  return e-o; // ilość ujemnych
}

main()
{
  a = new typ[N];
  neg = new typ[N];
   
  wypelnij();

  nneg = rozdziel(neg, a); // neg[0..nneg-1] < 0, neg[nneg..N-1] >= 0
  
  cout << "ujemnych jest: " << nneg << endl;

  delete []neg;
  delete []a;
  
  return 7;
}
Xfly
Użytkownik
Użytkownik
Posty: 174
Rejestracja: 13 mar 2006, o 20:44
Płeć: Mężczyzna
Lokalizacja: Nowogard
Podziękował: 33 razy
Pomógł: 10 razy

Ciag n wyrazow

Post autor: Xfly »

z calym szacunkiem ale poznizszy kod jest napisany w stylu C a nie C++ jak na poczatku prosil postodawca

ja postaram sie w wolnej chwili napsiac kod w c++ i powtarzam przydantne sa tu kontenery ze standoarodwej biblioteki C++
Awatar użytkownika
amdfanatyk
Użytkownik
Użytkownik
Posty: 98
Rejestracja: 27 mar 2005, o 14:59
Płeć: Mężczyzna
Lokalizacja: /dev/zero
Podziękował: 9 razy
Pomógł: 7 razy

Ciag n wyrazow

Post autor: amdfanatyk »

niezbyt tu widze styl "c", define jest dyrektywa preprocesora i jako taka do c/c++ niewiele ma; gdyby to bylo c, zamiast new byloby malloc lub calloc a zamiast delete - free.
Awatar użytkownika
kadiii
Użytkownik
Użytkownik
Posty: 642
Rejestracja: 20 gru 2005, o 21:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Pomógł: 130 razy

Ciag n wyrazow

Post autor: kadiii »

Moim zdaniem nie ma co udziwniać i należy uprościć to jak najbardziej.
1) Zczytaj n
2) policz pętlą liczbę liczb(wyrazów) nieujemnych
ujemne = N-nieujemne
3) Alokujemy dynamicznie-->patrz kod Fibika dwie tablice o rozmiarach odpowiedających liczbie wyrazów nieujemnych i ujemnych.
4) Drugą pętlą robimy podział jak wyraz jest ujemny to do ujemnych jak nie to do nieujemnych
5) W tablicach mamy porodzielane liczby
Rozumiem, że sposób zbliżony do twojego Fibik, lecz taki będzie chyba łatwiejszy do zrozumienia i modzielnego zaprogramowania.
Na upartego można też posortować tablicę i znależć pierwszą liczbę ujemną bądź nieujemną. Rozumiem, że zależy tu jednak na kolejności wyrazów ciągu(w zastosowaniu to np. dwie 'granice' w ciągu).Pozdrawiam
:wink:
ODPOWIEDZ