Diskuze: maximum
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 43 zpráv z 43.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Nemyslím porovnání dvou hodnot, ale vyhledání největší a nejmenší hodnoty z 16 čísel.
To je jedno. Jestli je máš třeba v poli, udělej to asi takhle:
int i, nejvetsi;
for(i = 0; i < delkaPole; i++) {
if (pole[i] > nejvetsi)
nejvetsi = pole[i];
}
Můžeš také kouknout sem: http://www.itnetwork.cz/…axima-v-poli
Prosím, nemohl by mi někdo pomoci najít chybu?
for(i = 0; i < n; i++)//n=počet prvků v poli
{
for(j = 0; j < n; j++)
{
if (vstup[j] < vstup[used] && (vstup[j] > vstup[c] || c == -1))
{
c = j;
}
}
vystup[i] = vstup[c];
used = c;
}
for(i = 0; i < n; i++)
{
cout << vystup[i] << " ";
}
Co to má dělat nepovíš?
PS: Trošku ty zdrojáky formátuj, ať se v tom dá vyznat
Má to setřídit pole čísel. (-1 pro c je počáteční hodnota)
Problém je v tom, že to najde maximum a všechny hodnoty v poli
vystup nastaví na něj.
PS: Co myslíš tím formátováním?
Cykly - nač? LINQ...
int
max = xxx.Max(),
min = xxx.Min();
Vidím 2x tu samou řídící proměnnou cyklu u vnořených cyklů... Kdybys používal normální jazyk, napsal bys pole.Sort a měl bys hotovo.
Ano - a proč by jsi tam nemohl použít LINQ?
from s in xxx orderby s.xxx descending group s by s.name into g where g.Count() > 1 select g.First();
Protože používat řízené knihovny v C++ nemá žádný smysl. Zase píšeš někam, kam nemáš.
Oprav si tu řídící proměnnou, máš tam 2x íčko.
Nepomáhá... A ten kód se tu zobrazil nějak divně, měl jsem to takhle:
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
if (vstup[j]<vstup[used] && (vstup[j]>vstup[c] || c==-1))
c=j;
}
vystup[i]=vstup[c];
used=c;
}
for(i = 0; i < n; i++)
{
cout << vystup[i] << " ";
}
Ano, to protože se nad tebou David slitoval a naformátoval ho, aby se to
dalo číst...
To mu nemůžeš mít za zlé, když se to nedalo číst Co používáš za IDE, že
neformátuješ kód?
Napiš nám prosím co chceš udělat, už se tě na to ptal David Jančík, pořád tu nevidím odpověď. Pokud chceš maximum, nahoře ti to psal Drahomír Hanák, setřídění polí máš v sekci algoritmy asi 10x se zdrojákem, vyber si.
Microsoft Visual C++ 2010 Express
Potřebuju Log-space algoritmus na setřídění pole.
A proč pomocí VS neformátuješ kód? Za tohle by tě ve firmě vyhodili.
O log-space jsem v životě neslyšel a koukám, že ani Google ne. Zeptal
bych se ještě jednou, co chceš udělat, ale už mě to moc nebaví
Algoritmus s logaritmickým množstvím paměti.
Takový algoritmus neexistuje. Pokud máš na mysli asymptotickou časovou složitost, tak nejlepší čas pro setřídění pole je n log n, opět tě odkáži na sekci algoritmy, vyber si tam nějaký, např. Quicksort.
template <typename type>
inline swapf(type & a, type & b) //prohodi hodnoty
{
type c = a;
a = b;
b = c;
}
template <typename type>
void bubble_sort(type* ar, int count)
{
bool sorted = false;
while(!sorted)
{
sorted = true;
for(int i=0;i<count-1;i++)
if(ar[i] > ar[i+1])
{
swapf(ar[i],ar[i+1]);
sorted = false;
}
}
}
template <typename type>
void insert_sort(type* ar, int count)
{
for(int i=0;i<count-1;i++)
while(ar[i] > ar[i+1])
{
swapf(ar[i], ar[i+1]);
if(i > 0) i--;
}
}
template <typename type>
void select_sort(type* ar, int count)
{
int min = 0;
int first = 0;
for(int i=0;i<count;i++)
{
for(int j=first;j<count;j++)
if(ar[j] < ar[min])
min = j;
swapf(ar[min], ar[first]);
first++;
min = first;
}
}
template <typename type>
void quick_sort(type* ar, int count, int b, int e)
{
type pivot = ar[(e + b) / 2];
int begin = b;
int end = e;
while(begin < end)
{
while(ar[begin] < pivot && begin < e) begin++;
while(ar[end] > pivot && end > b) end--;
if(begin <= end)
{
swapf(ar[begin], ar[end]);
if(begin < e) begin++;
if(end > b) end--;
}
}
if(end > b) quick(b,end);
if(begin < e) quick(begin,e);
}
Můžeš si vybrat.
(Byly to členský funkce třídy, narychlo sem to upravil, může tam bejt
chyba.)
Nerozumím tomu. Máš to pole třídit na malá a velká čísla nebo ho máš seřadit podle velikosti?
Zdeněk Pavlátka psal s "logaritmickým množstvím paměti". Což je také blbost.
oprava... má tam bejt inline void swapf(...)
Jo jo jo. Je to do školy. Tam to pojmenovali takhle. (já se taky divil) Hodnota žádné proměnné nesmí přesáhnout to n, všechny proměnné mají být celočíselných typů a nesmím použít rekurzi. Jediná výjimka je vstup a výstup. Ze vstupu se smí jen číst a do výstupu jen zapisovat.
Mně už přišlo podivné, že místo pojmu "řazení" používají pojem "třídění", který znamená něco jiného, než co po vás chce. Učitel informatiky by to měl znát.
Radix sort může být ještě o něco rychlejší, ale má smysl jen u obrovského množství dat s pevnou strukturou. Má složitost m×n, kde m je počet průchodů, který se nastavuje pevně předem. Hodí se zejména když se data nevejdou do RAM.
Můžeš upřesnit rozdíl mezi tříděním a řazením? Nám na vejšce říkali něco jako že to nemáme řešit, že se to stejně zaměňuje.
Třídí se do skupin. Řazení je podle abecedy či velikosti.
Například broskve se třídí podle velikosti a kvality, ale neřadí se podle velikosti. Stejně tak se třídí dopisy podle PSČ, ale řazení u nich nemá význam.
Na vaší vejšce si to možná pletou, ale na naší si to nepletli a tvrdě vyžadovali rozlišování.
Například radix sort je řazení tříděním. Kdybys napsal "třídění tříděním", asi by to vypadalo trochu divně.
Posílají se dál balíky seřazené podle velikosti? To asi ne. Balíky se pouze třídí.
Napsal jsi "Ale ony se řadí...", tedy dopisy nebo i balíky. Neřadí se, ale třídí. Tak to nepřekrucuj.
To ty překrucuješ - o balíkách tam nemáš ani písmenko. Takže jsem na balíky nemohl reagovat... Podle tvé definice se i řadí...
A jak se tedy podle mé definice a tvých představ řadí dopisy? Podle velikosti (od nejmenšího po největší nebo naopak) nebo podle abecedy? Případně podle PSČ vzestupně nebo sestupně?
Myslím, že Kit to zde vysvětlil jasně a není potřeba další diskuze.
Zobrazeno 43 zpráv z 43.