Jól oldottam -e meg ezt a feladatot? Help!
Sziasztok!
A feladat fájlkezelés. Be kellett olvasni az áru.txt nevű szöveges állományt! ( ez megvan :) )
Ez az állomány egy raktárt jelenít meg, 10*10 -es méretben. Itt 3 db szám található: 0, 1, 2.
A 0 jelenti piros színű termékeket, az 1 jelenti a sárga színűeket, és a 2 jelenti a zöld színű árukat.
a. Irassa ki a képernyőre, hogy hány termék piros, hány termék sárga, és hány termék zöld színű! ( ezt megcsináltam, egyszerű volt, három db nevű, int típusú változót létrehoztam, megszámoltam őket, és kiírattam. )
b. Állapítsa meg, hogy a raktár hány % -a sárga színű! ( megint csak könnyű volt. Megszámoltam a sárgákat, majd mivel 10*10 -es a raktár, ezért 100 termék van összesen. Vagyis a sárga színűek darabját kiírattam :) )
c. Melyik sorban található a legtöbb piros színű áru?
Na igen, itt akadtam meg. Viszont van egy valamiféle megoldásom ( a megfejtés amúgy a 7 ) és azt szeretném megkérdezni, hogy vajon jó -e?
Először is maga a raktár:
1110002222
1111110000
1012201200
0021022120
0120112002
1111111111
0012000012
2222111012
2111111100
0212101201
És most maga a program:
static string[] aru = File.ReadAllLines("áru.txt");
static int[] nagyobb = new int[10];
static int[] seged = new int[10];
static void feladat1()
{
for (int i = 0; i < aru.Length; i++)
Console.WriteLine(aru[i]);
}
static void feladat1c()
{
Console.WriteLine("1/c rész:");
int db = 0;
int i = 0;
int j = 0;
while (i!= 10)
{
for (j = 0; j < 10; j++)
{
if(aru[i][j] == '0')
{
db++;
}
}
nagyobb[i] = db;
db = 0;
i++;
}
int k = 0;
for (i = 1; i < 10; i++)
{
if(i>1)
{
if(nagyobb[i] > nagyobb[seged[k]])
{
seged[k] = i;
k++;
}
}
else if (nagyobb[i] < nagyobb[i-1])
{
seged[k] = i-1;
k++;
}
else if(nagyobb[i] > nagyobb[i-1])
{
seged[k] = i;
k++;
}
else
{
k++;
}
}
/*
//ez az i értékeit írja ki
for (i = 0; seged[i] != 0; i++)
{
Console.WriteLine(seged[i]);
}
//buborékrendezés
int potlo = 0;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 9; j++)
{
if(seged[j+1] > seged[j])
{
potlo = seged[j+1];
seged[j+1] = seged[j];
seged[j] = potlo;
}
}
}
//csökkenő sorrend
for (i = 0; seged[i] != 0; i++)
{
Console.WriteLine(seged[i]);
}
*/
Console.WriteLine("A legtöbb piros színű termék a(z) {0}. sorban található meg.", seged[0] + 1);
}
Oh, most látom, hogy a raktár nem lett fullosan odarakva:
1110002222
1111110000
1012201200
0021022120
0120112002
1111111111
0012000012
2222111012
2111111100
0212101201
Na mind1
A lényeg az, hogy ahol végig egyes van, de nincs végig, ott csak 1 -es szerepel, és az utolsó előtti sorban még egy 1 -es lemaradt.
Nem tudom, hogy miért írja ki így :(





Nézd meg az első sorban hány piros van. Mentsd el a pirosak számát egy "max" változóba, egy "sorszam" változóba pedig, hogy hányadik sor.
Utána menj soronként, számold össze, hogy hány piros van a másodikban, nézd meg, hogy több van-e, mint az elsőben és ha igen akkor a maxot és a sorszamot is kicseréled a másodikra. Utána jön a harmadik sor.





Első javaslatra az ún. jagged array helyett (int[][]) használj rendes kétdimenziós tömböt (int[,]). Az előbbi ugyanis semmilyen garanciát nem ad arra, hogy a tömb altömbjei ugyanakkora méretűek lesznek, szóval simán lehet ilyet csinálni:
int[][] tomb = new int[] {
new int[3],
new int[4]
};
Míg a rendes tömbnél garantálva van, hogy minden sora ugyanakkora lesz.
A megoldás a következő:
1) Tárolni kell azt, hogy az éppen kiválasztott sorban hány piros termék van:
int Pirosak = 0;
2) Tárolni kell azt is, hogy melyik sor tartalmazta eddig a legtöbb piros terméket és az hány piros termékből állt:
int LegtobbPiros = 0;
int LegtobbPirosDarab = 0;
3) Most sorra kell venni a raktár minden sorát és összeszámolom, hogy az aktuális sorban hány pirosat találtam:
for (int Sor = 0; Sor < 10; Sor++) {
.. for (int Oszlop = 0; Oszlop < 10; Oszlop++) {
.. .. if (aru[Sor][Oszlop] == 3)
.. .. Pirosak++;
.. }
..
.. //Ld. 4)
.. if (LegtobbPirosDarab < Pirosak) {
.. .. LegtobbPiros = Sor;
.. .. LegtobbPirosDarab = Pirosak;
.. }
}
4) Ha olyan sorba futottál bele, ahol több pirosat találtál, mint eddig bárhol máshol, tárolod.
Nagyon szépen köszönöm a válaszokat! :)
Az első válaszolóét használtam, mert az nekem könnyebb volt, és lám működött. Ja és erre tudtok -e megoldást találni?:
e, Melyik oszlopban van a legkevesebb sárga?
Megcsináltam, és működik, viszont nagyon hosszú lett. Rövidítve is meg lehet ezt csinálni?
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!