- Milyen okostelefont vegyek?
- iPhone topik
- Telekom mobilszolgáltatások
- Samsung Galaxy Watch (Tizen és Wear OS) ingyenes számlapok, kupon kódok
- Mobil flották
- Redmi Note 13 Pro+ - a fejlődés íve
- Samsung Galaxy Z Fold6 - ugyanaz, sarkosan fogalmazva
- Samsung Galaxy A56 - megbízható középszerűség
- Sony Xperia 1 VII - Látod-e, esteledik
- Xiaomi 14T - nem baj, hogy nem Pro
Hirdetés
Ú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
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Bluetooth hangszórók
- Terminator 2D: NO FATE - Amit a játéktól várhatunk
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- Melyik tápegységet vegyem?
- Azonnali informatikai kérdések órája
- EAFC 25
- Kés topik
- Sony MILC fényképezőgépcsalád
- Nincs kill switch az NVIDIA chipekben
- Call of Duty: Black Ops 6
- További aktív témák...
- Asus Zenbook 15 OLED UM3504 - 15.6" 2.8K 120Hz - Ryzen 5 7535U - 16GB - 512GB - 2+ év garancia
- AOC 27" 27G2U Full HD 144Hz monitor eladó!
- LG 28bk550Y 28 colos Full HD monitor eladó! Jótállással!
- Eladó 1250W/1800W/2000W Tápegységek próbagaranciával! Posta ok!
- PowerColor Red Devil RX6700 XT 12GB eladó
- BESZÁMÍTÁS! MSI B150M i5 7400 16GB DDR4 250GB SSD 500GB HDD GTX 1060 3GB BitFenix NOVA MESH 400W
- DELL Latitude 7340 i7-1365U 16GB 1000GB 13.3" FHD+ TouchScren 1 év garancia
- Telefon felvásárlás!! Xiaomi Redmi Note 12, Xiaomi Redmi Note 12 Pro, Xiaomi Redmi Note 12 Pro+
- Dell Optiplex 7050 SFF + Quadro K620
- Steam, EA, Ubisoft és GoG játékkulcsok, illetve Game Pass kedvező áron, egyenesen a kiadóktól!
Állásajánlatok
Cég: FOTC
Város: Budapest