Sortowanie binarne z C na C++

0

/*
Podsumowanie: Wyszukiwanie binarne porównuje wartość wyszukiwania z wartością środkowego elementu tablicy. Jeśli się zgadzają, zostanie znaleziony element dopasowujący i jego pozycja jest zwracana. W przeciwnym razie, jeśli wartość wyszukiwania jest mniejsza od wartości elementu środkowego, wówczas algorytm powtarza działanie na pod-tablicę na lewo od elementu środkowego lub, jeśli wartość wyszukiwania jest większa, w podklasie po prawej stronie.
Złożoność - O(log n)
*/

#include <stdio.h>
void main()
{
int array[10];
int i, j, num, temp, keynum;
int dol, srodek, gora;

printf("Podaj ilosc liczb do posortowania: \n");
scanf("%d", &num);

printf("Podaj wartosci tych liczb jedna po drugiej: \n");
for (i = 0; i < num; i++)
{
	scanf("%d", &array[i]);
}

    /*  Bubble sorting begins */
for (i = 0; i < num; i++)
{
	for (j = 0; j < (num - i - 1); j++)
	{
		if (array[j] > array[j + 1])
		{
			temp = array[j];
			array[j] = array[j + 1];
			array[j + 1] = temp;
		}
	}
}

printf("Posortowana tablica wyglada nastepujaco...\n");
for (i = 0; i < num; i++)
{
	printf("%d\n", array[i]);
}

printf("Wprowadz element ktory ma zostac znaleziony: \n");
scanf("%d", &keynum);
/*  Binary searching begins */
dol = 1;
gora = num;
do
{
	srodek = (dol + gora) / 2;
	if (keynum < array[srodek])
		gora = srodek - 1;
	else if (keynum > array[srodek])
		dol = srodek + 1;
} while (keynum != array[srodek] && dol <= gora);
if (keynum == array[srodek])
{
	printf("WYSZUKIWANIE ZAKONCZONE \n");
	printf("Wprowadzona wartosc znajduje sie na pozycji:%d ",srodek+1);
}
else
{
	printf("WYSZUKIWANIE ZAKONCZONE BLEDEM! \n Numer pozycji nie zostal znaleziony.");
}
getch();

}

/*
Input: EPodaj ilosc liczb do posortowania:
5
Podaj wartosci tych liczb jedna po drugiej:
23
90
56
15
58
Posortowana tablica wyglada nastepujaco...
15
23
56
58
90
Wprowadz element ktory ma zostac znaleziony:
58
*/

0

Mógłby mi ktoś pomóc zamienić to z C na C++? Mniej więcej potrafię to zrobić, zaciąłem się jednak na linijce z "scanf("%d", &array[i]);" przejdzie cin >> &array[i] czy trzeba bez operatora referancji (ampersanda [&])? Byłbym wdzięczny za pomoc i wstawienie gotowego całego kodu powyższego programu - nie z nygustwa bo mi się nie chce wstawiać tylko aby uniknąć ewentualnych błędów. Będę bardzo wdzięczny za pomoc i chętnie się odwdzięczę osobie która mi pomoże za pomoc. Muszę oddać to zadanie aby zaliczyć przedmiot a nie chcę go uwalić a ze względu na pracę nie miałem czasu aby uczyć się jeszcze C. Wiem że samo rozwiązanie (to że ktoś dla mnie i innych użytkowników przerobi i wstawi ten program) jest tylko czasowym rozwiązaniem bo i tak będę musiał się tego nauczyć i zdaję sobie sprawę tylko nie chcę płacić ogromnych pieniędzy za poprawki bo teraz dopadł mnie kryzys z hajsem :/ Będę wdzięczny za pomoc...

1

przeciez ten kod prawie sie kompiluje w C++

Wiec ten kod jest poprawny w C++ (prawie)

a jezeli chcesz zeby napisac z biblotekami c++ to zaplac, nikt za darmo nie bedzie robil cos za Ciebie. Ja zrobie za 200zl

0
fasadin napisał(a):

przeciez ten kod prawie sie kompiluje w C++

Wiec ten kod jest poprawny w C++ (prawie)

a jezeli chcesz zeby napisac z biblotekami c++ to zaplac, nikt za darmo nie bedzie robil cos za Ciebie. Ja zrobie za 200zl

Z wyrazem szacunku - dla Ciebie to jest 10 minut roboty a ja męczę się z tym ponad godzinę. Mogę Ci 30 zł przelać bo to Twój czas. Jeszcze raz z całym szacunkiem nie wyceniam Twojego czasu na 30 zł tylko niestety mam tylko tyle w tej chwili

0

Z wyrazem szacunku - dla Ciebie to jest 10 minut roboty a ja męczę się z tym ponad godzinę

ja sie uczylem pewnie razem sumujac pare tysiecy godzin by zrobic to w 10 min. Wiec ta Twoja godzina jest niczym (wiec nie porownuj czasu)

moja stawka to 200zl i ani zlotkowki mniej ;)

0

Dziękuję wszystkim za poświęcony czas, znalazłem odpowiedź.
Przepraszam za zaspamowanie forum tematem który trwał 10 minut.
Temat do usunięcia.
Pozdrawiam i dziękuję za pomoc.

0

MarekR22
w podziękowaniu mogę Ci wysłać kod programu na niskim poziomie

0
Wybitny Mleczarz napisał(a):

"scanf("%d", &array[i]);" przejdzie cin >> &array[i]

&array[i] to wskaźnik, array[i] to lvalue element. operator>> dla istream oczekuje tego drugiego.

0

Jednak nie odnalazłem błędu tak jak myślałem. Wyskakuje mi error w linijce cout << array[i];
Pomoże ktoś? :/ KOD:

'''c++

'''
/*
Podsumowanie: Wyszukiwanie binarne porównuje wartoœæ wyszukiwania z wartoœci¹ œrodkowego elementu tablicy. Jeœli siê zgadzaj¹, zostanie znaleziony element dopasowuj¹cy i jego pozycja jest zwracana. W przeciwnym razie, jeœli wartoœæ wyszukiwania jest mniejsza od wartoœci elementu œrodkowego, wówczas algorytm powtarza dzia³anie na pod-tablicê na lewo od elementu œrodkowego lub, jeœli wartoœæ wyszukiwania jest wiêksza, w podklasie po prawej stronie.
Z³o¿onoœæ - O(log n)
*/

#include <stdio.h>

#include <iostream>

using namespace std;

void main()
{
int array[10];
int i, j, num, temp, keynum;
int dol, srodek, gora;

cout << "Podaj ilosc liczb do posortowania: \n";
cin >> num;

cout << "Podaj wartosci tych liczb jedna po drugiej: \n";
for (i = 0; i < num; i++)
{
	cin >> array[i];
}

    /*  Bubble sorting begins */
for (i = 0; i < num; i++)
{
	for (j = 0; j < (num - i - 1); j++)
	{
		if (array[j] > array[j + 1])
		{
			temp = array[j];
			array[j] = array[j + 1];
			array[j + 1] = temp;
		}
	}
}

cout << "Posortowana tablica wyglada nastepujaco...\n";
for (i = 0; i < num; i++)
{
	cout << array[i];
}

cout << "Wprowadz element ktory ma zostac znaleziony: \n";
cout << keynum;
/*  Binary searching begins */
dol = 1;
gora = num;
do
{
	srodek = (dol + gora) / 2;
	if (keynum < array[srodek])
		gora = srodek - 1;
	else if (keynum > array[srodek])
		dol = srodek + 1;
} while (keynum != array[srodek] && dol <= gora);
if (keynum == array[srodek])
{
	cout << "WYSZUKIWANIE ZAKONCZONE \n";
	cout << "Wprowadzona wartosc znajduje sie na pozycji:%d " << srodek+1;
}
else
{
	cout << "WYSZUKIWANIE ZAKONCZONE BLEDEM! \n Numer pozycji nie zostal znaleziony.";
}

return 0;

system("PAUSE");

}

/*
Input: EPodaj ilosc liczb do posortowania:
5
Podaj wartosci tych liczb jedna po drugiej:
23
90
56
15
58
Posortowana tablica wyglada nastepujaco...
15
23
56
58
90
Wprowadz element ktory ma zostac znaleziony:
58
*/
'''

0

Mam :) Oto rozwiązanie:

/*
Podsumowanie: Wyszukiwanie binarne porównuje wartoœæ wyszukiwania z wartoœci¹ œrodkowego elementu tablicy. Jeœli siê zgadzaj¹, zostanie znaleziony element dopasowuj¹cy i jego pozycja jest zwracana. W przeciwnym razie, jeœli wartoœæ wyszukiwania jest mniejsza od wartoœci elementu œrodkowego, wówczas algorytm powtarza dzia³anie na pod-tablicê na lewo od elementu œrodkowego lub, jeœli wartoœæ wyszukiwania jest wiêksza, w podklasie po prawej stronie.
Z³o¿onoœæ - O(log n)
*/

#include <stdio.h>

#include <iostream>

using namespace std;

int main()
{
int array[10];
int i, j, num, temp, keynum;
int dol, srodek, gora;

cout << "Podaj ilosc liczb do posortowania: \n";
cin >> num;

cout << "Podaj wartosci tych liczb jedna po drugiej: \n";
for (i = 0; i < num; i++)
{
	cin >> array[i];
}

    /*  Bubble sorting begins */
for (i = 0; i < num; i++)
{
	for (j = 0; j < (num - i - 1); j++)
	{
		if (array[j] > array[j + 1])
		{
			temp = array[j];
			array[j] = array[j + 1];
			array[j + 1] = temp;
		}
	}
}

cout << "Posortowana tablica wyglada nastepujaco...\n";
for (i = 0; i < num; i++)
{
	cout << array[i] << endl;
}

cout << "Wprowadz element ktory ma zostac znaleziony: \n";
cin >> keynum;
/*  Binary searching begins */
dol = 1;
gora = num;
do
{
	srodek = (dol + gora) / 2;
	if (keynum < array[srodek])
		gora = srodek - 1;
	else if (keynum > array[srodek])
		dol = srodek + 1;
} while (keynum != array[srodek] && dol <= gora);
if (keynum == array[srodek])
{
	cout << "WYSZUKIWANIE ZAKONCZONE \n";
	cout << "Wprowadzona wartosc znajduje sie na pozycji: " << srodek+1;
}
else
{
	cout << "WYSZUKIWANIE ZAKONCZONE BLEDEM! \n Numer pozycji nie zostal znaleziony.";
}

return 0;

}

/*
Input: EPodaj ilosc liczb do posortowania:
5
Podaj wartosci tych liczb jedna po drugiej:
23
90
56
15
58
Posortowana tablica wyglada nastepujaco...
15
23
56
58
90
Wprowadz element ktory ma zostac znaleziony:
58
*/

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