Kezdőoldal » Számítástechnika » Programozás » Miért nem működik az értékadás...

2105as kérdése:

Miért nem működik az értékadásom? (c#, rövid)

Figyelt kérdés

Van egy véletlen számokkal feltöltött 5 elemű tömböm (kétszer ugyanaz a szám nem szerepel benne)a legnagyobb elemet utolsó helyre kell rakni és az utolsót a legnagyobb helyére, egyszerűen hangzik, de akkor sem jövök rá mi lehet a probléma

részlet :

(int[] tomb = new int[5];)



int max = tomb[0];

int csere = 0;



for (int j = 0; j < tomb.Length; j++)

{



for (int i = 0; i < tomb.Length - j - 1; i++)

{

if (tomb[i] > max)

{

max = tomb[i];

index = i;

}


csere = tomb[tomb.Length - 1];


tomb[index] = csere;


tomb[tomb.Length - 1] = max;


}


}



Mert így a legnagyobb elemet legutoljára beteszi, csakhogy a legnagyobb helyére nem teszi be az a utolsót, hanem ugyanúgy a "max" marad ott.

(Bocs ha elég triviális a probléma fáradt vagyok, csak eléggé idegeít)


2017. szept. 11. 21:16
 1/7 anonim ***** válasza:
Debuggold, pont erre való.
2017. szept. 11. 22:03
Hasznos számodra ez a válasz?
 2/7 anonim ***** válasza:
IEnumerable<int> Rendezett = from Current in tomb orderby Current ascending select Current;
2017. szept. 11. 23:04
Hasznos számodra ez a válasz?
 3/7 anonim ***** válasza:
Hát akkor már Array.Sort().
2017. szept. 11. 23:18
Hasznos számodra ez a válasz?
 4/7 anonim ***** válasza:

A kérdező szemmel láthatóan a programozási tételeket tanulja, semmi haszna az eddigi, magas lóról odavetett és számára érthetetlen válaszokból.


Így ránézésre azt gondolom, hogy az értékadások rossz helyen vannak, a belső cikluson kívül kéne lenniük (a két záró } jel között).

2017. szept. 12. 08:11
Hasznos számodra ez a válasz?
 5/7 sharkxxx ***** válasza:

using System;


namespace Test

{

    class Program

    {

        static void Main(string[] args)

        {

            int[] tomb = new int[5] { 7, 6, 8, 3, 4 };

           

            int maxIndex = 0;

            int csere = 0;

           

            for (int i = 0; i < tomb.Length; i++) {

                if (tomb[maxIndex] < tomb[i]) {

                    maxIndex = i;

                }

            }

            csere = tomb[tomb.Length - 1];

            tomb[tomb.Length - 1] = tomb[maxIndex];

            tomb[maxIndex] = csere;

           

            foreach (int v in tomb) {

                Console.Write("{0} ",v);

            }

            Console.WriteLine();

        }

    }

}

2017. szept. 12. 14:18
Hasznos számodra ez a válasz?
 6/7 anonim ***** válasza:

Kérdés, hogy te most mit is akarsz csinálni. Azt, amit leírtál a kérdésben, vagy maximumkiválasztásos rendezést (amire jobban hasonlít a kódod)?


Ha utóbbi, akkor számos probléma van. Nem az értékadással van probléma, hanem rosszul van megírva a program algoritmusa. Például:

- Az értékek kicserélését a külső ciklus végén kell végrehajtani, nem a belső ciklusban.

- Nem mindig az utolsó elemre kell kicserélni, hanem a külső ciklus minden lépésében az eggyel előrébb lévőt. (tomb.Length-1 helyett tomb.Length-j-1)

- A belső ciklust nem nem 0-tól kell kezdeni, hanem 1-től, és nem az utolsó előtti elemig, hanem az utolsóig (a legutolsó elemet is meg kell nézned, az-e a maximális elem, nemde? Ellenben az elsőt nem kell nézni, mert alapból az első van beállítva)

- A max, index változókat a külső ciklus elején mindig újra be kell állítani az első elemre (max = tomb[0] és index = 0).


A kód helyesen valahogy így néz ki:


int max = tomb[0];

int index = 0;

int csere = 0;


for (int j = 0; j < tomb.Length; j++)

{

    max = tomb[0];

    index = 0;


    for (int i = 1; i < tomb.Length - j; i++)

    {

        if (tomb[i] > max)

        {

            max = tomb[i];

            index = i;

        }

    }


    csere = tomb[tomb.Length - j - 1];


    tomb[index] = csere;


    tomb[tomb.Length - j - 1] = max;

}

2017. szept. 12. 14:35
Hasznos számodra ez a válasz?
 7/7 A kérdező kommentje:

Köszönöm szépen a segítségek, az utolsó válaszoló jól fején találta a szöget ez valóban a maximum kiválasztásos rendezés részlete (az akart volna lenni :)), köszönöm.

Lehet az a baj velem, hogy nem teljesen gondolom át mit is csinál egy-egy program részletem.

2017. szept. 12. 18:05

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!