zadanie na sortowanie liczb w strukturach

0

Witam serdecznie, bardzo proszę o pomoc w zaliczeniu zadania :
Dane wejściowe to ciąg co najwyżej50,80-cyfrowych liczb całkowitych ze znakiem (nie mogą być one reprezentowane wewnętrznie nawet jako żaden typ liczbowy). Wynikiem powinien być wyświetlony ciąg liczb uporządkowany według rosnącej wartości. Zastosować sortowanie metodą prostego wybierania.

zadanie polega na posortowaniu liczb długości do 80 cyfr co wskazuje na użycie " char " w którym to mam użyć struktur, troche już sam zrobiłem i błagam o pomoc.
nie mam wprowadzania tych liczb a takze wyświetlania ,proszę o krótki kod lub pomoc. Dziekuję z góry .

int const maxLiczb = 50;
int const maxCyfr = 80;

struct Liczba
{
	int cyfry[maxCyfr];
	int liczba_cyfr;
	bool dodatnia;
};


struct Liczby
{
	struct Liczba liczby[maxLiczb];
	int liczba_liczb;

};

bool dodatnia(Liczba* cyfry)
{
	
	if (cyfry >= 0)
		return true;
	else
		return false;
}

int main()
{

	
}
2
  1. Zamiast int cyfry[maxCyfr]; rozsądniej było użyć std::vector<int> (albo std::string jeśli trzymasz cyfry w postaci ASCII).
  2. Napisz funkcję porównującą Liczby
  3. Potem możesz użyć tej funkcji by zdefiniować operator: bool operator<(const Liczby& a, const Liczby& b)
  4. Sortowanie potem będzie proste jak konstrukcja cepa
0

dalej zrobiłem jeszcze to :
bool wczytajLiczbe(Liczba *tab ,int liczba_cyfr)
'{
char c[80];

for (int i = 0; i < liczba_cyfr; ++i)
	std::cin >> c;


return true;

}'

1

To ma być C czy C++?
Bo ten kod mas strukturę charakterystyczną dla C, a używa funkcji z C++.
Radziłby wpisać pełną treść zadania i cały kod jaki masz i jaki sam napisałeś, tak żeby było jasne co sknocił autor zadania, a co ty. Szczególnie, że piszesz:

niestety nic z tego nie moge przerabiać, musi zostać jak jest ponieważ projekt został złożony z pod problemów

0

ta treść to cała a kod napisalem sam na podstawie podproblemów i struktur które juz zostały mi zaliczone , problem mam z samym kodem ponieważ muszę użyć 'char' a także tych struktur które już zostały zaakceptowane przez wykładowce i który uczy nas w ten sposób kod to : z tym że nie wiem czy dobrze zrobiłem funckje bool wczytajLiczbe a nie chcĘ zeby ktoś mnie wyśmiał :P

int const maxLiczb = 50;
int const maxCyfr = 80;

struct Liczba
{
int cyfry[maxCyfr];
int liczba_cyfr;
bool dodatnia;
};

struct Liczby
{
struct Liczba liczby[maxLiczb];
int liczba_liczb;

};

bool dodatnia(Liczba* cyfry)
{

if (cyfry >= 0)
	return true;
else
	return false;

}

bool wczytajLiczbe(Liczba *tab ,int liczba_cyfr)
{
char c[80];

for (int i = 0; i < liczba_cyfr; ++i)
	std::cin >> c;


return true;

}

int main()
{

}

1

To powinno pomóc:

#include <iostream>
#include <string>
using namespace std;

string toNumber(string number,size_t maxcount)
{
	if((number.size()<=0)||((number[0]!='+')&&(number[0]!='-'))) number.insert(0,1,'+');
	number.insert(1,maxcount+1-number.size(),'0');
	return number;
}


int main()
{
	cout<<toNumber("-3",12)<<endl;
	cout<<toNumber("10",12)<<endl;
	return 0;
}
0

Niestety musi być to zrobione w stylu w jakim to robie czyli strukturami i CHAR'em. Natomiast bardzo doceniam pomoc za co dziękuję

0

Jestem początkujący i naprawde mało mi mówią te podpowiedzi, liczyłem na to że to będzie proste zadanie dla specjalistów wypełnienie paru struktur. Cóż jakoś sobie muszę z tym sam poradzić. Dziękuję wszystkim.

4

To jest dla nas dość proste zadanie. Rzecz w tym, że to jest Twoje zadanie.

0

Mimo wszystko nikt nie potrafi tego uzupełnić liczyłem na pomoc w krytycznej sytuacji, jednak radzić sobie trzeba samemu

1

Nie "nie potrafi", tylko daje wskazówki jak możesz zrobić to samodzielnie. Regulamin forum zabrania pomagania w oszukiwaniu w zadaniach domowych ;​)

0

Eh, szkoda, czlowiek mial juz to zadanie rozwiazane, juz chcialem wkleic wszystko do odpowiedzi, ale jak jednak rezygnujesz, to trudno :-\

1

@Kamlan:

Ciężko będzie przeskoczyć brak podstaw.
Można mieć wrażenie, że przespałeś coś.

funkcja dodatnia jest zbędna, gdybyś czytał podobno swój własny kod. I błędna.
funkcja wczytajLiczbe błędna itd
Spostrzeżenie tego nie wymaga wybitnej znajomości języka, tylko PODSTAW czytania kodu

Przypadkowe wklejki z googla, z zupełnie innych zagadnień.

w meritum tematu: sortowanie jabłek się nie różni od sortowania pomarańczy

1

Ja widzę jeszcze inne przeszkody:

  1. nie ma przykładu danych wejściowych, żeby było jasne czego się spodziewać (konkrety jak dla zadań ze SPOJ itp).
  2. zadanie ma jakieś dziwne więzy na implementację, które po prostu nie przechodzą przez moją klawiaturę ;). (przypuszczalnie wynika to z ograniczeń prowadzącego zajęcia).
1

A tu taki celowy overkill: https://godbolt.org/z/nKf8a3

0

ZADANIE
Dane wejściowe to ciąg co najwyżej 50,80-cyfrowych liczb całkowitych ze znakiem (nie mogą być one reprezentowane wewnętrznie nawet jako żaden typ liczbowy). Wynikiem powinien być wyświetlony ciąg liczb uporządkowany według rosnącej wartości. Zastosować sortowanie metodą prostego wybierania.

to cała treść zadania do tego mam zrobić podział na podproblemy i struktury danych które mam już zaliczone które dołączam:

*wczytanieLiczb:
	-określenie liczby liczb 
	-wczytywanie pojedynczej liczby:
		-usuwanie zer nie znaczących
		-określenie liczby cyfr
		-wczytanie pojedynczej cyfry:	
			- zamiana znaku na wartość cyfry


*sortowanieLiczb:
	-porównywanie dwóch liczb ze sobą
	-zamiana miejscami dwóch liczb


*wyświetlenieLiczb:
-wyświetlenie liczby
- zamiana cyfry na znak

int const maxLiczb = 50;
int const maxCyfr = 80;					

struct Liczba
{
	int cyfry[maxCyfr];
	int liczba_cyfr;
	bool dodatnia;
};


struct Liczby
{
	struct Liczba liczby[maxLiczb];
	int liczba_liczb;

};

a że zostało już to zaliczone , mam na tej podstawie napisać reszte programu który będzie sortował liczby a raczej zestaw cyfr który jest reprezentowany przez "CHAR" czyli jako tablica , które to tablice (MAX 50) mają być posortowane...

0

przykład...
użytkownik wpisuje liczby 45635624345562462465 - jest to ciąg za długi na int , long int czy long long int wiec musi byc traktowany jako char
takich ciągów może być do 50 czyli:
324534524352345
234523453425
234523452345345
23452345532
i to ma byc posortowane

0

No ok, to teraz z czym masz problem?

Jeśli masz reprezentację każdej cyfry jako char to na 99% używasz ASCII gdzie cyfry mają przypisane kolejne wartości rosnąco - możesz łatwo porównać ze sobą znaki i będzie się zgadzało.

Na początku sprawdzasz znak liczby, o ile jest zdefiniowany i trzymasz go w swojej strukturze, normalizujesz swój char[] żeby nie było problemów z porównywaniem (np. nie trzymasz w nim w ogóle symbolu znaku liczby +/- skoro już masz od tego flagę).

Obcinasz (lub pomijasz) wiodące zera, jeśli dopuszcza je treść zadania lub obawiasz się, że prowadzący będzie oceniał takie rzeczy.

Jeśli po obcięciu zer obie są puste, to muszą być równe. Chyba, że zadanie z jakichkolwiek przyczyn zakłada że +0 > -0.

Jeśli jedna liczba jest dodatnia a druga ujemna, większa jest dodatnia.

Jeśli długości są równe, porównujesz kolejno cyfry zaczynając od najbardziej znaczącej. Przy pierwszej napotkanej różnicy większa jest

  • liczba z większą cyfrą - gdy są dodatnie
  • liczba z mniejszą cyfrą - gdy są ujemne

Jeśli długości są różne, większa jest

  • liczba z większą liczbą cyfr - gdy są dodatnie
  • liczba z mniejszą liczbą cyfr - gdy są ujemne

Mając takie regułki możesz już całkiem prosto napisać sobie funkcję porównującą liczby przez nieskomplikowane sprawdzenia na tych strukturach, które już masz. A jak już będziesz mieć funkcję porównującą dwie liczby, wykorzystanie jej w dowolnym sortowaniu będzie trywialne.

0

Masz ładnie podzielone na podzadania.
Które z nich już zrobiłeś?
Z którymi masz problem (i jaki)?

0
int const maxLiczb = 50;
int const maxCyfr = 80;

struct Liczba
{
	int cyfry[maxCyfr];
	int liczba_cyfr;
	bool dodatnia;
};


struct Liczby
{
	struct Liczba liczby[maxLiczb];
	int liczba_liczb;

};

bool dodatnia(Liczba* cyfry)
{
	
	if (cyfry >= 0)
		return true;
	else
		return false;
}
void liczbaCyfr(Liczba* liczba_cyfr)
{
	int n;

	std::cout << "ile liczb chcesz posortowac?";
	std::cin >> n;

}


bool znakNaLiczbe()



bool wczytajLiczbe(Liczba *cyfry , int liczba_cyfr)
{
	char c[80];
	
	for (int i = 0; i <= liczba_cyfr; ++i)
	{
		std::cout << "Wpisz liczbe i zatwierdź klawiszem ENTER";
		std::cin >> c;
	}

	if (!(std::cin >> c))
		return false;
	
	return true;
}
bool wczytajLiczby(Liczby* liczby)
{

	return 0;

}
void wyswietlLiczbe(Liczba* cyfry)
{

	

}
void wyswietlLiczby(Liczby* liczby)
{
	std::cout << "wpisane liczby" << &liczby;
	
}

int main()
{
	

	struct Liczba cyfry;
	struct Liczby liczby;
	wczytajLiczbe(&cyfry);
	wyswietlLiczby(&liczby);

}

to wszystko co na razie zrobiłem , dużo się nie zgadza, cały czas coś nowego dodaje , może za kilka dziesiąt godzin będzie to lepiej wyglądało , póki co niektóre funkcje są dodane żeby mi ułatwić spojrzenie na ogół sytuacji mimo że są puste nie wiem czy dobrze czy nie , natomiast mam problem ze wszystkim , ale staram się czerpać ze wszystkiego co mam

0

Ok , dziękuję za udzielanie się , proszę moderatora o usunięcie postu w takim razie. To kolejny raz kiedy nic z tego forum nie wynoszę . Powodzenia

6
Kamlan napisał(a):

Ok , dziękuję za udzielanie się , proszę moderatora o usunięcie postu w takim razie. To kolejny raz kiedy nic z tego forum nie wynoszę . Powodzenia

W mojej głowi zrodził się taki dowcip:

Przychodzi baba do lekarza:

  • Panie doktorze, boli mnie tu pod lewym żebrem.
  • Ok spokojnie zaraz spytam na forum o co chodzi.
  • ...
  • O te h..je nie chcą pani pomóc. Piszą, że mam przebadać.
0

Jakbyś był inteligentny to wiedział byś że ja jestem tą "babą" a to pan doktor jest "forum" , idzie się do niego ja się ma problem i on sprawę rozwiązuję , czasem nie do końca bo leki trzeba kupić samemu ... żegnam

3

Powiedziano, ci jakie leki - przeczytać byle kurs z podstawami, po czym wróć tu i będziesz rozumiał wszystko co podaliśmy.
Z tym że baba nie chcę leki kupować i krzyczy na doktora że doktor ma sam kupić te leki i jej podać.
To jeżeli chodzi o twoje rozumienie kawału od @MarekR22.

Natomiast w kawale chodzi o twoją przyszłość i w nim ty jesteś tym lekarzem.

3

Wstrzymajmy plz wycieczki osobiste zanim zaczną się na dobre ;​)

Forum działa na takiej zasadzie, że staramy się dawać wędkę, a nie rybę - w szczególności w przypadku zadań edukacyjnych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1