Ahojky lidi,
Poradí mi prosím někdo z vás (rychle) cyklus ,kterým prvky v 4 prvkovem poli seřadím od nejvyšší hodnoty po tu nejnižší hodnotu?
Díky moc :)
resp.
int[] Pole = new int[3];
for(int i=0;i<Pole.length;i++)
a něco dál :D
#1 Kubas129
schválně jsem zkusil použít google:
int[] values = { 4, 2, 8, 6 };
Array.Sort(values, (value1, value2) => value2.CompareTo(value1));
pokud ještě nerozumíš lambda výrazům tak můžeš použít i toto:
int[] values = { 4, 2, 8, 6 };
Array.Sort(values, delegate(int i, int j) { return j.CompareTo(i); });
#1 Kubas129 řešení dotazu z C++
doufám, že toto dokážeš použít:
vytvoř si třídu Player:
class Player : IComparable
{
public int score;
public string name;
public Player(string player_name)
{
score = 0;
name = player_name;
}
public int CompareTo(object obj)
{
Player p = (Player)obj;
return p.score.CompareTo(score);
}
public override string ToString()
{
return string.Format("{0}: {1}", name, score);
}
}
hráče budeš mít místo v poli v listu:
List<Player> players = new List<Player>();
//naplnění listu (to musíš udělat před započetím hry)
players.Add(new Player("Hráč 1"));
players.Add(new Player("Hráč 2"));
players.Add(new Player("Hráč 3"));
players.Add(new Player("Hráč 4"));
//po dokončení hry můžeš hráče seřadit:
players.Sort();
//pak vypiš skóre
//před započetím další hry List vyprázdni!
hráčům budeš připisovat body takto: players[aktualni_hrac].score++;
Kubas129 - Promin, ale bavime se tu ted o tom, ze mas ukol, za ktery budes odmenen a chces, aby ho druhy udelal pro tebe za nulovou odmenu? :) To jsi oslovil opravdu nespravneho cloveka. Jsem za programovani placeny.
Co treba zkusit prohledat forko nebo pouzit google? Vsadim se, ze google na tema serazovani, sort najde miliony odkazu a u nich bude nejspis i kod. Treba i z jineho jazyka.
Treba bys narazil na muj kod pro js. ale, proste, kdyz neni snaha...
var i,j,a,b,c,x,y;
x=0;y=pocet1;
for (i=x;i<y;i++)
{
a=pole1[i];b=i;c=pole1[b]
for (j=(i+1);j<=y;j++) {if (pole1[j]<c) {b=j;c=pole1[b]}}
pole1[i]=c;pole1[b]=a;
}
#7 peter
nebo se nad tím zamyslet, mě jako první možnost napadlo toto:
static void SortIntArray(int[] arr)
{
int temp;
for(int i=0; i<arr.Length; i++)
{
for (int j = 0; j < arr.Length; j++)
{
if (arr[j] < arr[i])
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
Já se omlouvámi jsem to nenapsal ,tak úplného cele co bych potřeboval
Já bych potřeboval aby se mi v tom poli se 4 prvky (0123) se řádili od nejvyššího po nejnižší ale zároveň aby poradí prvků zůstalo stejném nebo aby to pořadi prvků se někam prekopirovalo do nějakého nového pole nějak bych to potřeboval vysvětlit Já to spíše napíšu takto :D
_
Mám pole se jménem body do kterého se i umisťuje počet bodů hráče s Tim ze na pozici body[0] je hráč 1 na nody [1] je hráč 2 na body [2] je hráč 3 a na body [3] je hráč 4 a Já bych potreboval aby se nejlepší hráč vždycky napsal do kabelu plus jaky je jeho pořadi v poli :)
Vím že je to celkem složíte :(
Díky moc :)
Zasláno z mobilního telefonu.
Vlastně bych potřeboval aby se mi do kabelu vypsalo největší číslo z pole plus jeho pozice kde se v poli to číslo nachází
=
A pote zase druhého nnejvětší číslo do druhého kabel plus jeho pozice pote třetí největší číslo plus jeho pozice a pote do 4 kabelu nejmenší číslo plus jeho pozice :) předem mockrát děkuji :)
Zasláno z mobilního telefonu.
int ind = 0, max = 0;
for (int i = 0; i < body.Length; i++)
{
if (body[i] > max)
{
max = body[i];
ind = i;
}
}
label1.Text = string.Format("Nejvyssi pocet bodu {0} ma poradi {1}", max, ind);
Neni reseno, kdyz ma vice prvku pole stejny nejvyssi pocet bodu..
Ja ti nechci kazit radost, ale algoritmus pro serazeni je v podstate stejny :) A opet je to me oblibene google a javascript.
function porovnej1(a,b) {return a-b;} function porovnej2(a,b) {return a[0]-b[0];} pole1 = [2,3,1,0] pole2 = [ [2, 0], [3, 1], [1, 2], [0, 3] ];
//pole1 = pole1.sort(porovnej1); pole2 = pole2.sort(porovnej2);
Jen si musis to pole prepsat do dvourozmerneho, abys mel ulozene i poradi indexu. Porovnej2 tedy prehodi radky na zaklade porovnani nultych prvku v radku.
#16 kubas129
tobě je docela těžké poradit, ignoruješ většinu toho co ti kdo napíše, neptáš se na to co potřebuješ....
Pokud nepochopíš ani tohle, tak ses nejspíš začal věnovat špatnému koníčku;)
STAV[] player = new STAV[4];
//inicializace:
for (int i = 0; i < 4; i++)
{
player[i].id = i;
player[i].score = 0;
}
//příklad bodování:
player[0].score = 44;
player[1].score = 11;
player[2].score = 33;
player[3].score = 22;
//seřazení od největšího:
Array.Sort(player);
struct STAV : IComparable
{
public int id; //id hráče - podle toho po seřazení poznáš který je který
public int score; //bodový stav
public int CompareTo(object obj)
{
STAV s = (STAV)(obj);
return s.score.CompareTo(score);
}
}
Strukturou STAV jsem nahradil zmíněné dvourozměrné pole
-------------------------------------------------------------------------------------
Ještě dodám ukázku v konzolové aplikaci:
class Program
{
static void Main(string[] args)
{
STAV[] player = new STAV[4];
//inicializace:
for (int i = 0; i < 4; i++)
{
player[i].id = i;
player[i].score = 0;
}
//příklad bodování:
player[0].score = 44;
player[1].score = 11;
player[2].score = 33;
player[3].score = 22;
//seřazení od největšího:
Array.Sort(player);
foreach(STAV s in player)
{
Console.WriteLine(s.ToString());
}
Console.ReadKey();
}
}
struct STAV : IComparable
{
public int id;
public int score;
public int CompareTo(object obj)
{
STAV s = (STAV)(obj);
return s.score.CompareTo(score);
}
public override string ToString()
{
int i = id+1;
return string.Format("Hráč {0} získal {1} bodů", i, score);
}
}
Ahoj,
možná jsem to napsal úplně špatně :D
Nevíte prosím ,jak vypsat ze 4 místného listu do label1 nejvyšší číslo + index do label2 druhé nejvyšší číslo + index do label3 vypsat třeté nejvyšší číslo + index a do label4 vypsat nejmenší číslo + index
a pokud budou čísla si rovný , tak aby se vypsali do dvou sousedních labelů což je:
třeba pokud budu mít 2 nejvyšší čísla stejná tak aby se do label1 a label2 vypsalo to číslo ,ale s jejich indexama což je třeba: labell1.text = 15 ,hráč1 a label2.text = 15 hráč2
Nevíte prosím někdo ,jak na to přemýšlím již nad tím nějakou dobu (1den:D) a nevím jak na to :(
Byl bych opravdu mockráát vděcný za nějaký kod děkuji vám mockrát předem :-)
var list = new List<KeyValuePair<int, int>>();
for (int i = 0; i < body.Length; i++)
{
list.Add(new KeyValuePair<int, int>(i, body[i]));
}
list.Sort
(
delegate(KeyValuePair<int, int> pair1, KeyValuePair<int, int> pair2)
{
int i = pair2.Value.CompareTo(pair1.Value);
return i == 0 ? pair1.Key.CompareTo(pair2.Key) : i;
}
);
for (int i = 0; i < list.Count; i++)
{
var pair = list[i];
var name = string.Format("label{0}", i + 1);
Controls[name].Text = string.Format("{0}, hráč {1}", pair.Value, pair.Key + 1);
}
#19 P
Nepomohl bys mi prosím ještě?
Já mám trošku problém s tím tvým kodem ,mi to pise out of range
já bych potřeboval místo toho aby to ty hodnoty vypisovalo do labelu.Tak aby se mi indexy zapsali do listu a poradí od nejvetsoho po nejmensi ,aby se mi zapsalo do druhého listu.
Zkousel jsem to takto (ale napsalo to vyjímku)
Nevíš co s tím? dík moc
Nemuzu te tu ucit naproste zaklady programovani v C# a .NET. Precti si nejakou literaturu nebo aspon dokumentaci, absolvuj kurz.
Do seznamu Poradi musis prvky pridavat, tj. ten konec kodu bude
Poradi.Add(pair.Value);
Indexy.Add(pair.Key + 1);
label3.Text += Poradi[i].ToString();
label6.Text += Indexy[i].ToString();
Ahoj díky moc
Prosím jen poslední věc jak ty hráče (tu jejich hodnotu) jak ten index mužů zapsat každý do jiného labelu?
Respektive podle pořadi bodů?
Když hráč 2 bude Mít nejvíce bodů tak aby se jeho index zapsal do łabelu 7 pote když hráč bude druhý tak aby se jeho index vypsal do kabelu 6 a tak dále AZ do labelu9 :D
Díky moc
Zasláno z mobilního telefonu.
Vidis, mohl jsem tam pridat i objekt, asociativni pole. Spis na ukazku, kdybys to nekdy potreboval. Opet javascript.
Vidis, ze jediny rozdil tam je jen v zapisu pro porovnani radku. Kdybys to chtel pomoci vice hodnot a rozlisovat razeni podle string / number / jine, tak by se opet jen zmenilo to porovnej. Sortovaci funkce by se pouzila nativni.
Ale nevim, jak se to prepisuje do c++, tak ti to mozna bude k nicemu.
function porovnej1(a,b) {return a - b;}
function porovnej2(a,b) {return a[0] - b[0];}
function porovnej3(a,b) {return a.hodnota - b.hodnota;}
pole1 = [2,3,1,0];
pole2 = [
[2, 0],
[3, 1],
[1, 2],
[0, 3]
];
pole3 = [
{hodnota:2, index:0},
{hodnota:3, index:1},
{hodnota:1, index:2},
{hodnota:0, index:3}
];
pole1 = pole1.sort(porovnej1);
pole2 = pole2.sort(porovnej2);
pole3 = pole3.sort(porovnej3);
#23 kubas129
Když hráč 2 bude Mít nejvíce bodů tak aby se jeho index zapsal do łabelu 7 pote když hráč bude druhý tak aby se jeho index vypsal do kabelu 6 a tak dále AZ do labelu9
Bud to bude od labelu 7 do labelu 4, nebo od labelu 6 do labelu 9, nebo to ma byt nejak na preskacku - 7, 6, .., 9?
Kdyz nedokazes ani po x-te vyjadrit co chces, tak je tezke radit.
Mám 4 kabely
Kabely AZ ~. 4ON
Zasláno z mobilního telefonu.
Ahoj, no mam 4 łabelu (łabelu 4 AZ 8) a Já bych potreboval do 4 napsat počet to7o kdo má nejvíc do l5 toho kdo má nejvíc bodů po nemoci pote do l6 toho kdo je 3 a do l7 toho kdo má nejmin
Zasláno z mobilního telefonu.
#27 kubas129
Pokud mas labely nazvane label4 - label7 misto label1 - label4, tak je to prece jednoducha uprava predchoziho kodu:
for (int i = 0; i < list.Count; i++)
{
var pair = list[i];
var name = string.Format("label{0}", i + 4);
Controls[name].Text = string.Format("{0}, hráč {1}", pair.Value, pair.Key + 1);
}
#29 BDS
ahoj,sry tak jinak :D
Jak v tomto kodu:
label3.Text += Poradi[i].ToString() + "Hráč:";
label6.Text += Indexy[i].ToString() + "Body;";
Tam můžu mezi tím výpisem poradi[i] udělat tak 3centimetrovou mezeru ,než se tam vypíše další text?
(aby ten text byl nad těma obrazkama) Hráč je index a body jsou body :-)
předem moc díky potřeboval bych to co nejrychlejš :D
(hlavně, že ty reaguješ vždycky rychle;)
public partial class Form1 : Form
{
const int prvnipoziceX = 180; //ty hodnoty si uprav jak ti to pasuje
const int rozestupX = 224;
const int pozicejmenaY = 464;
const int poziceskoreY = 496;
Brush brush = new SolidBrush(Color.OrangeRed); //štětec
Font pismovyhodnoceni = new Font("Tahoma", 14, FontStyle.Bold, GraphicsUnit.Pixel);
//>toto nevím jak máš vyřešeno:
int[] poradi = { 2, 0, 1, 3 };
int[] skore = { 77, 66, 88, 55 };
string[] jmeno = {"Karel", "Karla", "Kamil", "Kamila"};
//>
public Form1()
{
InitializeComponent();
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
int x=prvnipoziceX;
for(int i=0; i<4; i++)
{
e.Graphics.DrawString(jmeno[poradi[i]], pismovyhodnoceni, brush, x, pozicejmenaY);
e.Graphics.DrawString(skore[poradi[i]].ToString(), pismovyhodnoceni, brush, x, poziceskoreY);
x += rozestupX;
}
}
}
#31 BDS
Promin :-)
Opravdu poslední věc co bych potřeboval je tadyto:
Je to intový pole a do toho pole bych potřeboval vložit celočíselný výsledek ,tak aby když to vyjde třeba 1,3 aby se to zaokrouhlilo na 1 a když to vyjde 1,8 tak aby se to zaokrouhlilo na 2 jenže mi to pořád píše error ,že to nejde převést nevíš prosím co s tím?
Díky moc
#32 Kubas129
1. když tu chceš řešit nějaký kód, tak ho sem vlož jako text, a ne jako obrázek (je tu na to tlačítko se symbolem <?). Ta chyba se dá taky kopírovat jako text. (Ať to nemusíme celé přepisovat, někdy stačí jen oprava)
2. jasně ti to píše, že nemůžeš implicitně převést double na int buďto se dá použít přetypování pomocí závorek, ale raději používej Convert
např. int i = Convert.ToInt32(tady dáš to co chceš převést na int)
Ještě jsem zkoušel tohle ,to se sice už ta aplikace sestaví ale to zase napíše error
for(int i=0;i<Body.Length;i++)
{
double Desetinna = ((Math.Pow(Points[i], 2)) / (1 / 2 * Cas));
int CeloCiselna = Convert.ToInt32(Desetinna);
Points[i] = CeloCiselna;
}
#34 BDS
Vím ,že jsi mi říkal at sem nedávám obrázky ,ale ono to už píše nějakou jinou chybu
#41 BDS
Díky a nebo já jsem tky něco mezitím vymyslel ,ale jaksi to ukazuje samí nuly a to jsem měl 3 páry
Nevíš proč? :-)
Předem moc dík
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku