- Motorola Edge 40 - jó bőr
- 45 wattos vezeték nélküli töltés jön az új iPhone-ba
- Motorola Razr 60 Ultra - ez a kagyló könnyen megfő
- Magyarországon is kapható a Moto G85 5G
- Karaktere biztos lesz az első Nothing fejhallgatónak
- Netfone
- Motorola Edge 50 Neo - az egyensúly gyengesége
- Samsung Galaxy A54 - türelemjáték
- Nothing Phone (3a) és (3a) Pro - az ügyes meg sasszemű
- Honor 400 Pro - gép a képben
Új hozzászólás Aktív témák
-
Jester01
veterán
csharp> int x = 125;
csharp> Math.Round(x/100.0,0)*100
100
csharp> int x = 175;
csharp> Math.Round(x/100.0,0)*100
200Vagy
csharp> int x = 125;
csharp> int mod = x % 100;
csharp> x - mod + ((mod >= 50) ? 100 : 0);
100
csharp> int x = 175;
csharp> int mod = x % 100;
csharp> x - mod + ((mod >= 50) ? 100 : 0);
200Negatív számokkal vigyázni
-
Karma
félisten
Nagyon hasonlít a többdimenziós tömbre, épp csak semmi köze hozzá.
A lényegi különbség az, hogy míg a tömböket az elemek sorszámával indexeled, és csak így tudsz benne keresni; a dictionaryben lévő elemeket a kulcs (első paraméter) szerint közvetlenül előszedheted, nem kell ciklusban bejárni.
Például ha van egy Dictionary<string, List<string>>-ed, amiben a következő elemeket tárolod (pszeudokód, nem C#!):
d = {
"6262" => ["mama", "nana"],
"272" => ["arc"],
...
}Akkor d["6262"] hívással azonnal megkapod a hozzá tartozó kételemű listát.
De persze csinálhatsz többdimenziós tömböket is, éljen a korlátolt Pascal szelleme, mit érdekel engem... Feltéve hogy ha mérnök informatikus pályára készülsz megfogadod, hogy mindezt a tébolyt elfelejted és megtanulod rendesen használni a nyelvet.
-
Karma
félisten
Változtatás nélkül futtattam a kódod, nekem rendben kiírta a fájlt. Valamit elnézhettél.
Széljegyzetek vol. 2:
- Az egy darab stringnek felesleges külön structot létrehozni, használd közvetlenül a string típust.
- Kézzel csukogatás helyett használd a using kulcsszót a StreamReader és a StreamWriter használata körül. Egyébként is szerencsésebb azonnal lezárni a fájlt amint végeztél vele, mint a program végén.
- A szó-szám konverziót mégiscsak ki kéne tenni külön metódusba, mert felesleges háromszor leírni. Sőt. -
Karma
félisten
Azt még nem látom (telefonon olvasva a kódot), hogy mi baja van a kiírásnak - látom a writer le van zárva, az lett volna az első gyanúsítottam.
A 7-8-9. feladatokhoz az kellene, hogy a mostani szólista helyett egy Dictionaryt építs, ami a az egyes kódokhoz hozzárendeli azon szavak listáját, amikhez az a kód tartozik.
Így a hetedik feladat egy egyszerű kiíratás, a nyolcadik egy tökegyszerű ciklusban kiíratás, a kilencedik meg egy maximumkeresés (a leghosszabb listát keresed a dictionaryben).
Széljegyzet: Az abc char[] teljesen felesleges, mert a stringnek is van [] művelete, és pont ugyanazt csinálja, mint a házi char[]-öd.
-
Goose-T
veterán
Teljesen normális, hogy ilyen a programozás oktatásának a színvonala. Aki rendesen ért a programozáshoz, az minek szívjon tanári fizetésért, amikor röhögve megkeresheti a többszörösét itthon? Én tíz éve többet kerestem totál kezdő programozóként, mint most egy tanár.
Egy dologra jó, hogy oktatják a középiskolában: aki fogékony, annak talán felkelti a figyelmét, és önszorgalomból megtanul rendesen programozni, mert érdekli. Én is így voltam még a kilencvenes években, amikor Videoton TV Computereken tanítgattak nekünk BASIC-et.
Semmit nem ért az oktatás, de "megcsapott a mozdony füstje", és onnantól rá voltam kattanva a programozásra.
-
Karma
félisten
Nos akkor.
Egy általános észrevétel előre. Úgy látom a közoktatás le van ragadva azon a szinten, hogy korlátozott Pascal programozást tanítanak C# nyelven. (Erről már volt szó korábban, csak bebizonyosodik.)ű
Azt még elfogadom sok szemöldökborzolás mellett, hogy a LINQ 2 Objectset nem tanítják - mert így az összes érettségi feladat megoldható lenne egy-egy sorban -, de tömbök? Komolyan? Mindkettőtöknél nagyon megy ez, ezért hiszem hogy valami központi oka van...
Konkrétan akkor a bajok. A kozmetikai dolgokba, mint kis-nagybetűk, nem megyek bele.
Ott kezdődik, hogy static tagváltozókban van az adat, de mégis minek? A main függvény dolgozik csak vele, simán mehet oda lokális változónak. A static adatmezők, más néven globális változók csak bajt hoznak, ha hozzászoktok, és mondjuk a jövőben programozni is akartok. Más szakmák esetén mindegy; de akkor a hozzászólásom többi része is irreleváns.
Az adat struktúra elmegy szódával, viszont mint mondtam, nem tömbben kéne tárolni. Vannak a C#-ban nagyon jó lista szerkezetek, amik tudják magukról, hogy hány elem van bennük - ezzel az ind változó feleslegessé válik.
A List<T> a legegyszerűbb ezek közül. A Count-on keresztül eléred az aktuális darabszámot, és vannak metódusai elem hozzáadáshoz (Add) és törléshez is (Remove). Meg lehet szögletes zárójellel az akárhanyadik elemet manipulálni.
Tehát így néz ki a program eleje eddig:
...
class Program
{
struct adat
{
public int nap, dik, tav;
}
static void Main(string[] args)
{
var fuvar = new List<adat>();
... folyt köv...
}
}Az első feladatnál is kéne használni usingot a StreamReader köré. Ezen kívül a karakterenként feldolgozás feleslegesen lábbalhajtós. A soronkénti beolvasásig jó, utána kitör a WWIII. A sort fel tudod darabolni a Split metódussal a szóközök mentén, és azonnal kipotyog a három külön szöveg.
// 1. feladat
string sor = sr.ReadLine();
while (sor != null)
{
string[] elemek = sor.Split(' ');
adat f = new adat();
f.nap = int.Parse(elemek[0]);
f.dik = int.Parse(elemek[1]);
f.tav = int.Parse(elemek[2]);
fuvar.Add(f);
sor = sr.ReadLine();
}Egy csöppet rövidebb és olvashatóbb, nem?
Aztán mivel nincs ind, a ciklusokat fuvar.Count-ig kell járatni. Ez több helyen változtat a dolgon.
Na most első körben itt megállnék, mert nem akarom túlterhelni a fórumot. Egy kicsit nehezemre esik LINQ nélkül gondolkodni, mert tényleg egy sorba összeesnének vele a feladatok
De lehet inkább beadom a derekam és bevillantom a szebb világ képét.
Még annyi, hogy az üres else {} ágakat teljesen felesleges kiírni, de legalább olvashatatlan.
-
Karma
félisten
Erre kapásból látszik a válasz: nem zártad be a fájlt. A legegyszerűbb, ha rászoksz a using kulcsszó használatára.
Vannak itt azért más gondok is, de a konkrét kérdésedre ez a válasz.
Holnap ki tudom fejteni a többit.using(StreamWriter sw = new StreamWriter(new FileStream("dijazas.txt", FileMode.Create))
{
for (int i = 1; i <= 7; i++)
{
for (int j = 1; j <= 40; j++)
{
for (int g = 0; g < ind; g++)
{
if (fuvar[g].nap == i && fuvar[g].dik == j)
{
sw.Write("{0}. nap {1}. út: ", i, j);
if (fuvar[g].tav <= 2) sw.WriteLine("500 Ft"); else { if (fuvar[g].tav <= 5) sw.WriteLine("700 Ft"); else { if (fuvar[g].tav <= 10) sw.WriteLine("900 Ft"); else { if (fuvar[g].tav <= 20) sw.WriteLine("1400 Ft"); else sw.WriteLine("2000 Ft"); } } }
}
else { };
}
}
}
} -
vimes
senior tag
Jah, a forráskód kimaradt:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace futar2
{
class Program
{
struct adat
{
public int nap, dik, tav;
}
static adat[] fuvar = new adat[280];
static int ind = 0;
static void Main(string[] args)
{
//1. feladat:
Console.WriteLine("1. feladat: Az adatok beolvasása.");
StreamReader sr = new StreamReader ("tavok.txt");
string sor = sr.ReadLine();
while (sor != null)
{
string egy = "";
string ketto = "";
string harom = "";
int index = 0;
int hossz = sor.Length - 1;
while (sor[index] != ' ')
{
egy += sor[index];
index++;
}
index++;
while (sor[index] != ' ')
{
ketto += sor[index];
index++;
}
index++;
while (index <= hossz)
{
harom += sor[index];
index++;
}
fuvar[ind].nap = int.Parse(egy);
fuvar[ind].dik = int.Parse(ketto);
fuvar[ind].tav = int.Parse(harom);
ind++;
sor = sr.ReadLine();
}
//2. feladat:
Console.Write("2. feladat: ");
int minnap = 8;
for (int i = 0; i < ind; i++)
{
if (fuvar[i].nap < minnap) minnap = fuvar[i].nap; else { };
}
for (int i = 0; i < ind; i++)
{
if (fuvar[i].nap == minnap && fuvar[i].dik == 1) Console.WriteLine("A hét legelső útja {0} km volt.", fuvar[i].tav); else { };
}
//3. feladat:
Console.Write("3. feladat: ");
int maxnap = 0;
int maxdik = 0;
for (int i = 0; i < ind; i++)
{
if (fuvar[i].nap > maxnap) maxnap = fuvar[i].nap; else { };
}
for (int i = 0; i < ind; i++)
{
if (fuvar[i].nap == maxnap&&fuvar[i].dik>maxdik) maxdik = fuvar[i].dik; else { };
}
for (int i = 0; i < ind; i++)
{
if (fuvar[i].nap == maxnap && fuvar[i].dik == maxdik) Console.WriteLine("A hét utolsó útja {0} km volt.", fuvar[i].tav); else { };
}
//4. feladat:
Console.Write("4. feladat: ");
int h = 0;
int k = 0;
int sze = 0;
int cs = 0;
int p = 0;
int szo = 0;
int v = 0;
for(int i=0;i<ind;i++)
{
switch(fuvar[i].nap)
{
case 1: h++;break;
case 2: k++;break;
case 3: sze++; break;
case 4: cs++; break;
case 5: p++;break;
case 6: szo++;break;
case 7: v++;break;
default: {};break;
}
}
Console.Write("A hét ezen napjain nem dolgozott a futár: ");
if (h == 0) Console.Write("1. "); else { };
if (k == 0) Console.Write("2. "); else { };
if (sze == 0) Console.Write("3. "); else { };
if (cs == 0) Console.Write("4. "); else { };
if (p == 0) Console.Write("5. "); else { };
if (szo == 0) Console.Write("6. "); else { };
if (v == 0) Console.Write("7. "); else { };
Console.WriteLine();
//5. feladat
Console.Write("5. feladat: ");
int maxdarab = 40;
int kulonbseg = 40;
if ((maxdarab - h) < kulonbseg) kulonbseg = maxdarab - h; else { };
if ((maxdarab - k) < kulonbseg) kulonbseg = maxdarab - k; else { };
if ((maxdarab - sze) < kulonbseg) kulonbseg = maxdarab - sze; else { };
if ((maxdarab - cs) < kulonbseg) kulonbseg = maxdarab - cs; else { };
if ((maxdarab - p) < kulonbseg) kulonbseg = maxdarab - p; else { };
if ((maxdarab - szo) < kulonbseg) kulonbseg = maxdarab - szo; else { };
if ((maxdarab - v) < kulonbseg) kulonbseg = maxdarab - v; else { };
Console.Write("A hét ezen napján volt a legtöbb fuvar: ");
if ((maxdarab - h) == kulonbseg) Console.Write("1. "); else { };
if ((maxdarab - k) == kulonbseg) Console.Write("2. "); else { };
if ((maxdarab - sze) == kulonbseg) Console.Write("3. "); else { };
if ((maxdarab - cs) == kulonbseg) Console.Write("4. "); else { };
if ((maxdarab - p) == kulonbseg) Console.Write("5. "); else { };
if ((maxdarab - szo) == kulonbseg) Console.Write("6. "); else { };
if ((maxdarab - v) == kulonbseg) Console.Write("7. "); else { };
Console.WriteLine();
//6. feladat:
Console.WriteLine("6. feladat: Az egyes napokon megtett távok:");
int elso = 0;
int masodik = 0;
int harmadik = 0;
int negyedik = 0;
int otodik = 0;
int hatodik = 0;
int hetedik = 0;
for (int i = 0; i < ind; i++)
{
switch (fuvar[i].nap)
{
case 1: elso+=fuvar[i].tav; break;
case 2: masodik += fuvar[i].tav; break;
case 3: harmadik += fuvar[i].tav; break;
case 4: negyedik += fuvar[i].tav; break;
case 5: otodik += fuvar[i].tav; break;
case 6: hatodik += fuvar[i].tav; break;
case 7: hetedik += fuvar[i].tav; break;
default: { }; break;
}
}
Console.WriteLine("1. nap: {0} km", elso);
Console.WriteLine("2. nap: {0} km", masodik);
Console.WriteLine("3. nap: {0} km", harmadik);
Console.WriteLine("4. nap: {0} km", negyedik);
Console.WriteLine("5. nap: {0} km", otodik);
Console.WriteLine("6. nap: {0} km", hatodik);
Console.WriteLine("7. nap: {0} km", hetedik);
//7. feladat:
Console.Write("7. feladat: Kérek egy tetszőleges távolságot kilométerben: ");
int bekert = int.Parse(Console.ReadLine());
if (bekert <= 2) Console.WriteLine("A futár 500 Ft-ot kap."); else { if (bekert <= 5) Console.WriteLine("A futár 700 Ft-ot kap."); else { if (bekert <= 10) Console.WriteLine("A futár 900 Ft-ot kap."); else { if (bekert <= 20) Console.WriteLine("A futár 1400 Ft-ot kap."); else Console.WriteLine("A futár 2000 Ft-ot kap."); } } }
//8.feladat:
Console.WriteLine("8. feladat: Az adatok kiírása a dijazas.txt állományba.");
FileStream fs = new FileStream("dijazas.txt", FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
for (int i = 1; i <= 7; i++)
{
for (int j = 1; j <= 40; j++)
{
for (int g = 0; g < ind; g++)
{
if (fuvar[g].nap == i && fuvar[g].dik == j)
{
sw.Write("{0}. nap {1}. út: ", i, j);
if (fuvar[g].tav <= 2) sw.WriteLine("500 Ft"); else { if (fuvar[g].tav <= 5) sw.WriteLine("700 Ft"); else { if (fuvar[g].tav <= 10) sw.WriteLine("900 Ft"); else { if (fuvar[g].tav <= 20) sw.WriteLine("1400 Ft"); else sw.WriteLine("2000 Ft"); } } }
}
else { };
}
}
}
//9. feladat:
Console.WriteLine("9. feladat: ");
int osszeg = 0;
for (int i = 0; i < ind; i++)
{
if (fuvar[i].tav <= 2) osszeg += 500; else { if (fuvar[i].tav <= 5) osszeg += 700; else { if (fuvar[i].tav <= 10) osszeg += 900; else { if (fuvar[i].tav <= 20) osszeg += 1400; else osszeg += 2000; } } }
}
Console.Write("A futár a heti munkájáért {0} Ft-ot kap.", osszeg);
Console.ReadKey();
}
}
}
A gyakorlottaknak nyilván lenne egy-két hozzáfűznivalója a forráskódhoz
Új hozzászólás Aktív témák
Hirdetés
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- DDR5 GAMER PC: Új RYZEN 7 8700F/9700X/9800X3D +RTX 4060/5060/4070/5070 +16-64GB DDR5! GAR/SZÁMLA!
- Dell Latitude 7410 Strapabíró Ütésálló Profi Ultrabook 14" -80% i7-10610U 16/512 FHD
- Szép! HP EliteBook 850 G8 Fémházas Multimédiás Laptop 15,6" -65% i7-1185G7 32/512 Iris Xe FHD Magyar
- HP EliteBook 850 G8 Fémházas Multimédiás Laptop 15,6" -65% i7-1185G7 8/512 Iris Xe FHD Magyar
- 512 Gb-os NVME-k
- ÁRGARANCIA!Épített KomPhone Ryzen 5 5600X 16/32/64GB RAM RX 7600XT 16GB GAMER PC termékbeszámítással
- Telefon felvásárlás!! iPhone 13 Mini/iPhone 13/iPhone 13 Pro/iPhone 13 Pro Max
- Gamer laptop felvásárlás Magas áron, gyorsan és egyszerűen!
- Telefon felvásárlás!! Samsung Galaxy S24/Samsung Galaxy S24+/Samsung Galaxy S24 Ultra
- Újszerű Asus ExpertBook B1 B1500 - 15.6" FullHD IPS - i5-1235U - 16GB - 512GB SSD - Win11 - Garancia
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: Promenade Publishing House Kft.
Város: Budapest