• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Tablice - C++

Object Storage Arubacloud
0 głosów
933 wizyt
pytanie zadane 7 lipca 2015 w Nasze projekty przez Dragonet.17 Pasjonat (19,630 p.)
Witam serdecznie,

mam pewien problem z tablicami. Mianowicie tablica alkowana dynamicznie sklada sie z liczb dodatnich i ujemnych.
Chciałbym ją jednak podzielić na dwie tablice z wartościami dodatnimi i ujemnym( rowniez alkokowane dynamicznie)i, jednak o konkretnej liczbie miejsc,tzn:
W głównej tablicy posiadam przykladowo 10 liczb: 6 dodatnich i 4 ujemne, tak więc te dwie tablice powinny skladac sie z kolejna 6 i 4 elementow.

Sedno tkwi w tym, aby wielkości tych dwóch tablic dawały w sumie wielkość pierwszej.
Chodzi o to, że w alokowaniu dynamicznym jestem zmuszony do podania wartości liczbowej a nie wyliczeniowej., ponieważ kompilator odczyta to jako błąd

Czy jest na to  jakaś rada ? Może istnieje jakieś inne rozwiązanie?

2 odpowiedzi

+1 głos
odpowiedź 7 lipca 2015 przez MrWeb Stary wyjadacz (10,200 p.)

Czyli chcesz zrobić

  • trzy tablice,
  • w pierwszej będzie n liczb o różnych znakach,
  • a dwie kolejne tablice mają być stworzone na podstawie tej głównej tablicy,
  • jedna z tych mniejszych tablic ma mieć wszystkie liczby dodatnie z głównej tablicy
  • a kolejna z tych mniejszych tablic ma mieć wszystkie liczby ujemne z głównej tablicy
  • łączny rozmiar dwóch mniejszych tablic ma być równy tej głównej tablicy

 O takie założenia Ci chodziło?

 

Jeśli tak, to wystarczy policzyć w pętli ile jest wartości dodatnich i ujemnych w głównej tablicy i na podstawie tych obliczeń zaalokować nowe, mniejsze tablice a potem przepisać do nich wartości z głównej tablicy.

 

Eh, masło maślane, sorry, ale nie wiem jak to inaczej opisać.

komentarz 7 lipca 2015 przez Dragonet.17 Pasjonat (19,630 p.)
Ciesze sie ze Ty mnie zrozumiales, ale ja zrozumialem rowniez Ciebie :D
Tak wlasnie zrobilem i okazuje się, że aby zaalokowa tablice, liczba musi byc okreslona, ewentualnie wchodzic z cin
Nie moze byc wyliczeniowa.
Tutaj caly problem
komentarz 7 lipca 2015 przez MrWeb Stary wyjadacz (10,200 p.)
Jaka wyliczeniowa? używasz enum'a? Nie rozumiem... Pokaż kod, lub poczekaj chwilę to ja coś napiszę.
komentarz 7 lipca 2015 przez MrWeb Stary wyjadacz (10,200 p.)
Moje rozwiązanie tego problemu - http://wklej.org/id/1752818/
komentarz 7 lipca 2015 przez Dragonet.17 Pasjonat (19,630 p.)
Zrobilem dokladnie cos podobnego,uzywajac wlasnych zapisow, opieralem sie na wskazikach.
Jednak problem polegal na tym, ze code bloks wyhaczyl blad zwiazany z deklaracja nowych tablic.
Pisalem powyzej
komentarz 7 lipca 2015 przez Dragonet.17 Pasjonat (19,630 p.)
Mógłbyś pokrótce powiedzieć jak działa nullptr ?
komentarz 7 lipca 2015 przez Dragonet.17 Pasjonat (19,630 p.)
To jest to samo co null?
komentarz 7 lipca 2015 przez MrWeb Stary wyjadacz (10,200 p.)
W C++11 używa się nullptr zamiast makra NULL bo to makro jest niejednoznaczne i przestażałe.

masz dwie funkcje

foo(int* p);

foo(int n);

a teraz wywołasz jedną z nich w ten sposób foo(NULL) to tak naprawdę wywołasz funkcję foo(int n). Powstaje niejednoznaczność, a jeśli użyjesz nullptr to wszystko będzie działało.
komentarz 7 lipca 2015 przez Dragonet.17 Pasjonat (19,630 p.)
Tak, już wiem na czym polegał błąd.
Po prostu skupiłem się nie na tym co trzeba.
Ogromne dzieki za pomoc :)
+1 głos
odpowiedź 7 lipca 2015 przez adrian17 Ekspert (344,860 p.)

Chodzi o to, że w alokowaniu dynamicznym jestem zmuszony do podania wartości liczbowej a nie wyliczeniowej., ponieważ kompilator odczyta to jako błąd

Dla tablic statycnych rozmiar tablicy faktycznie musi być znany podczas kompilacji, ale dla dynamicznych nie jest to konieczne, możesz spokojnie pisać rzeczy typu "new int[a * 2 + 100]".

(choć oczywiście najpoprawniejszym rozwiązaniem będzie użycie std::vector'a.)

komentarz 7 lipca 2015 przez Dragonet.17 Pasjonat (19,630 p.)
pracowalem wlasnie na wskaznikach i wyskoczyl mi taki blad.
masz racje, vectory...
komentarz 7 lipca 2015 przez adrian17 Ekspert (344,860 p.)
Musiałbyś pokazać dokładniej ten błąd, bo wątpię żeby o to chodziło.
komentarz 7 lipca 2015 przez Dragonet.17 Pasjonat (19,630 p.)
Natomiast teraz mam taki błąd :
http://shoxteam.net/img/9e9751.png
komentarz 7 lipca 2015 przez adrian17 Ekspert (344,860 p.)
Błąd mówi wszystko - pisząc new int[z], z musi być typu całkowitego - czyli nie może być floatem ani doublem.

Podobne pytania

+3 głosów
1 odpowiedź 813 wizyt
0 głosów
1 odpowiedź 209 wizyt
pytanie zadane 1 grudnia 2022 w C i C++ przez Pysa6 Nowicjusz (220 p.)
0 głosów
1 odpowiedź 260 wizyt
pytanie zadane 7 września 2022 w C i C++ przez benny13 Obywatel (1,150 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,965 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...