Új hozzászólás Aktív témák
-
MATEO6600
őstag
A közoktatás le van maradva, ez igaz, de te könnyen beszélsz ekkora tudással.
Egy kezdő diáknak, szerintem, először az ilyen alapokat kell megtanítani rendesen, hogy értse a későbbi technikákat is.
Én biztos nem tanítanék Lista, meg LINQ használatot, amíg rendesen nem tud valaki tömböket meg ciklusokat használni. Az érettségi erről szól, az alapokra helyezi a hangsúlyt.
Egyébként oké, hogy a Listát könnyű használni, de így kevésbé alakul ki a diákokban az algoritmikus gondolkodás. -
vlevi
nagyúr
válasz
zsambek #5391 üzenetére
amit én írok 4-5-6 sorban, azt te egy sorban elintézed!
Nagyon sok esetben errol is szol a c# nyelv. Mivel uj progamnyelv, a megalkotasakor figyelembe tudtak venni az elmult 50 valahany ev programozoi tapasztatait. Ezzel nem fenyezni akarom a c#-ot, de ami treny, az teny. Pl Amig nem ismertem, en sem ertettem a leirasokmalapjan, mire jo a linq, de azota megertettem a lenyeget, es ennek tukreben mar nagyon hasznos dolognak tartom. Tenyleg rengetegszer elfordul, hogy adathalmazokbol a korabbi nyelvekben csak egymasbaagyazott forciklusok tomkelegevel lehetett kibogaraszni az informaciot, itt viszont nehany sorral megvan. Raadasul a nyelv gondoskodik a legoptimalisabb feldolgozasrol, amirol a programozo szinte mindig el fog feledkezni.
Nem mellesleg en is csak lesem karma hozzaszolasit, mert a c#-hoz en is csak nagyon keveset konyitok. Erdeklodo amator szintjen vagyok. Nezegetem, neha egyket aprosagot kiprobalok benne, de mivel a melohelyemen nem hasznaljuk, igy nehez benne melyebben elmelyulni. Az alapfogalmak egyreszerol hallottam, de eleg keveset tudok ertelmes egessze osszerakni.
-
Karma
félisten
válasz
trisztan94 #5392 üzenetére
Két lehetőséged van:
1) A JSON felől minden mezőt stringre átírsz, és utólag konvertálsz egyesével mindent számmá. Brrr.
2) Írsz egy saját JsonConverter leszármazottat, ami lekezeli azt a helyzetet, hogy a debil szerver stringben küldi a számot, és kiparsolja automatikusan. Itt találsz rá példát, és én mindenképp ezt az utat javaslom. -
trisztan94
őstag
Adatbázis szinkronizációt hegesztek éppen.
RestSharp-al kérem le az adatokat, az JSON stringként érkezik vissza. Én felépítettem az adatbázis táblákat úgy, ahogyan _elvileg_ a távoli szerveren vannak. pl:
public class Oszt
{
[PrimaryKey, MaxLength(11), AutoIncrement]
public int Id { get; set; }
public string ss{ get; set; }
public string dd{ get; set; }
[MaxLength(11)]
public int ff{ get; set; }
public string gg{ get; set; }
[MaxLength(11)]
public int hh{ get; set; }
}Így rakom bele a lekért adatokat a lokális SQLite adatbázisba:
private void OszRtequestCallback(IRestResponse response, RestRequestAsyncHandle handle)
{
List<Oszt> responseData = JsonConvert.DeserializeObject<List<Oszt>>(response.Content);
SQLiteAsyncConnection db = new SQLiteAsyncConnection(Path.Combine(ApplicationData.Current.LocalFolder.Path, localDatabaseName));
try
{
db.InsertAllAsync(responseData);
}
catch
{
}
}Na viszont az a probléma, hogy a JSON stringben minden adat string, és elszáll egy exceptionnel, hogy nem tudta intté konvertálni.
Hogyan lehetne ezt kiküszöbölni? -
Karma
félisten
MASSIVE SPOILER ALERT!
No hát megfiatalodtam kicsit, és megírtam a feladatot én is
Generáltam tavok.txt-t, és megírtam LINQ-kela feladatokat.Ahogy jósoltam, a feladatok zöme egy sorral leírható. Mondjuk ha nem lett volna ez a perverzióm, lehet két sorban írtam volna a 4-5. feladatokat egy helyett
-
-
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.
-
thiclyoon
aktív tag
sziasztok,
van egy programom (Console Application), amit el tudok indítani, de ilyenkor látom a kódot, hogy mikor mit csinál.. úgy meg lehet oldani, hogy egy exe (vagy bármi más) legyen az egész, és ne lehessen látni a forráskódot?
köszi előre is! -
Karma
félisten
A kedvenc keverés implementációm meg itt található, ha behúzod, még ezen se kell gondolkodni.
-
Karma
félisten
válasz
trisztan94 #5376 üzenetére
Az enumerátorok a barátaid. Miután random sorrendbe rendezted a listát (vagy helyben, vagy egy jó extension methoddal), a garantáltan egyesével végiglépkedésre pont ez való.
-
vlevi
nagyúr
válasz
trisztan94 #5379 üzenetére
Az nem lenne jo megoldas, hogy a kiiras elott keszitenel egy listat a kiirando elemekrol? Tehat mar a legelejen, a legelso kiiraskor feltoltenel egy listat azokkal az indexekkel, amik azt tartalamznak, hogy mit kell kovetkezokent kiirni. Ezt a listat pedig mindig torolhetned, es mivel az mar a veletleszeru indexeket tartalazza, mehetsz sorban rajta, midnit kiirod a legelso elemet, es ki is torlod. Kovetlezo korben megint az elsot.
Amikor ezt toltod, akkor ott egyszeruen egy megnezhetned, hogy van-e az az elem. -
trisztan94
őstag
válasz
trisztan94 #5376 üzenetére
+ gyors kiegészítés.
Nem string tömb típusúak azok a listák, hanem Word, ami egy struct, de most igazából teljesen lényegtelen.
-
fatal`
titán
válasz
trisztan94 #5376 üzenetére
Nem lenne egyszerűbb a kiíráskor rögtön törölni az adott szót az eredeti listából?
-
trisztan94
őstag
Hali,
Van egy listám, benne szavak. Az a feladat, hogy x másodpercenként kiírok a képernyőre egy random szót a listából, majd eltüntetem. Ez addig folytatódik, amíg el nem "fogynak" a szavak. Egy szó csak egyszer jelenhet meg a képernyőn.
Erre én a következő megoldást alkalmaztam:
List<string[]> words, addedWords = new List<string[]>();
Random r = new Random();
int index = r.Next(0, words.Count - 1);
wordOutput.Text = words[index];
addedWords.Add(words[index]);Tehát miután kiírtam a szót, berakom az addedWords listába a dolgot.
Ez az ellenőrzés, ami ellenőrzi, hogy benne van-e az adott szó az addedWords listában, azaz ki lett-e már írva:
bool isInAddedwords = addedWords.Intersect(words).Any();
if (!isInAddedwords)
{
// Fenti kód.
}
else
{
// Meghívom újra ezt a metódust, hogy új random index legyen, megnézzük azzal.
}Na most szerintem ez így ronda és túl van bonyolítva. Van erre egy egyszerűbb és szebb megoldás?
-
vlevi
nagyúr
válasz
tototos #5371 üzenetére
Idisposable classoknal erdemes a usingot mindig hasznalni.
En egyszer nagyon megszivtam egy kepkonvertalo progimmal, ahol a kepeket nem usinggal hasznaltam, es parezer kep atkonvertalasa kozben elszallt out of memroyval 8G ram mellett!
Usingba rakva 3-4M volt a max memoriahasznalata a proginak. -
Karma
félisten
válasz
tototos #5371 üzenetére
Ha nem használsz try-finally-t akkor igen. Ebben az esetben ha bármi hiba történik és exceptionnel robban a kódod, a close nem hívódik meg, míg a using garantáltan lezárja. A finally blockba helyezett close szintén.
Attól még egy invalid path ugyanúgy exceptionnel robban, viszont a fájl meg garantáltan le lesz csukva.
-
-
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 -
vimes
senior tag
válasz
zsambek #5363 üzenetére
Nekem kiírta a *.txt fájlba:
1. nap 1. út: 700 Ft
1. nap 2. út: 700 Ft
1. nap 3. út: 500 Ft
1. nap 4. út: 900 Ft
1. nap 5. út: 700 Ft
1. nap 6. út: 500 Ft
1. nap 7. út: 1400 Ft
1. nap 8. út: 900 Ft
1. nap 9. út: 900 Ft
1. nap 10. út: 700 Ft
1. nap 11. út: 900 Ft
3. nap 1. út: 900 Ft
3. nap 2. út: 900 Ft
3. nap 3. út: 900 Ft
3. nap 4. út: 500 Ft
3. nap 5. út: 700 Ft
3. nap 6. út: 900 Ft
3. nap 7. út: 700 Ft
3. nap 8. út: 700 Ft
3. nap 9. út: 900 Ft
3. nap 10. út: 500 Ft
3. nap 11. út: 700 Ft
3. nap 12. út: 500 Ft
3. nap 13. út: 700 Ft
3. nap 14. út: 700 Ft
3. nap 15. út: 500 Ft
4. nap 1. út: 1400 Ft
4. nap 2. út: 500 Ft
4. nap 3. út: 700 Ft
4. nap 4. út: 2000 Ft
4. nap 5. út: 900 Ft
4. nap 6. út: 1400 Ft
5. nap 1. út: 500 Ft
5. nap 2. út: 700 Ft
5. nap 3. út: 500 Ft
5. nap 4. út: 900 Ft
5. nap 5. út: 500 Ft
5. nap 6. út: 700 Ft
5. nap 7. út: 500 Ft
5. nap 8. út: 900 Ft
5. nap 9. út: 500 Ft
5. nap 10. út: 500 Ft
5. nap 11. út: 700 Ft
5. nap 12. út: 500 Ft
5. nap 13. út: 500 Ft
5. nap 14. út: 700
egészen eddig. Csak azt nem értem, hogy miért csak eddig írja ki. Nem elgépelés, az utolsó végéről lemaradt az "Ft", nem tudom miért nem írta ki, ha a többi sornál meg igen. -
zsambek
aktív tag
Szia,
Ne haragudj, annyira benne vagyok ebben, hogy teljesen evidens volt számomra, hogy mindenki tudja, hogy mire gondolok...
"A futár az egyes utakra az út hosszától függően kap fizetést az alábbi táblázatnak
megfelelően:
1 – 2 km 500 Ft
3 – 5 km 700 Ft
6 – 10 km 900 Ft
11 – 20 km 1 400 Ft
21 – 30 km 2 000 Ft
Kérjen be a felhasználótól egy tetszőleges távolságot, és határozza meg, hogy mekkora
díjazás jár érte! Ezt írja a képernyőre!
8. Határozza meg az összes rögzített út ellenértékét! Ezeket az értékeket írja ki
a dijazas.txt állományba nap szerint, azon belül pedig az út sorszáma szerinti
növekvő sorrendben az alábbi formátumban:
1. nap 1. út: 700 Ft
1. nap 2. út: 900 Ft
1. nap 3. út: 2000 Ft
…
" -
zsambek
aktív tag
Sziasztok,
http://pastebin.com/CVTH4UPf
Nem olvastam végig a feladatot, és nem láttam, hogy a legvégén először nap, másodszor pedig fuvarszám alapján kell sorba rendeznem, úgy, hogy csúszik vele a fuvarkm is.
Az a kérdésem, hogy megoldható ez most, és ha igen, akkor hogyan?(talán még annyit megkérhetnék, hogy ilyen nagyon lebutítva írjátok le, mivel még nagyon kezdő vagyok
)
Köszönöm szépen,
zsambek` -
Nem értek hozzá, de ez a feladat és MySQL-l kell megoldani.
Most próbáltam egy másik gépen is, itt ez a hibaüzenet:"ERROR [IM002] [Microsoft][ODBC illesztőprogram-kezelő] Az adatforrás neve nem található, és egyetlen alapértelmezett illesztőprogram sincs megadva."
Az ODBC adatforrásoknál egy rendszer DNS-nek vegyem fel az adatbázist? (server: localhost, port: 3306)
Magának a programnak jónak kell lenni, máshol nem volt gond vele! -
bandi0000
nagyúr
hali
Kérdésem lenne, hogy adatokat kellene beolvasnom tömbbe az 112 adatom van, de csak a 2. sortól kezdődik így csináltam meg, de mindig hibát észlel ezért leáll-al dob ki
int main()
{
int fo[113],eg[113],mg[113],fe[113],fm[113],be,i;
char ecs[20],mcs[20];FILE *f=fopen("meccs.txt","r"); if(f==0) return 1;
for (i=2;i<113;i++){
fscanf(f,"%d %d %d %d %d %s %s",&fo,&eg(i),&mg(i),&fe(i),&fm(i),ecs(i),mcs(i));
printf("fordulo: %d %d %d %d %d %s %s",fo(i),eg(i),mg(i),fe(i),fm(i));
}
fclose(f); -
MATEO6600
őstag
Valaki el tudná magyarázni röviden mi ez az Outer Variable Trap?
Találtam róla egy leírást, de nem sikerült megértenem -
Sziasztok!
Ha futtatni akarok böngészőben egy adatbázist, a következő hibát kapom a megnyitás után:
ERROR [HY000] [MySQL][ODBC 5.2(a) Driver]Unknown database 'x'ERROR [HY000] [MySQL][ODBC 5.2(a) Driver]Unknown database 'x'Kezdő vagyok és nem találom a megoldást...
-
Karma
félisten
válasz
zsambek #5340 üzenetére
Nem. Ehhez a feladathoz nincs szükség switchre, nem tudom trisztan94 mire gondolhatott vele.
Sokkal inkább van szükség egy klasszikus ellentmondás keresésre.
Például így:
#region MEGY 6. Feladat
string[] beolvrendszam = new string[7];
Console.WriteLine("6. Feladat: Kérem, vigye be a rendszámot:");
string beolvsima = Console.ReadLine();
foreach (var ell in ellenorzesek)
{
bool egyezik = true;
for (int i = 0; i < 7 && egyezik; i++)
{
if (beolvsima[i] != ell.rendszam[i] && beolvsima[i] != '?')
{
egyezik = false;
}
}
if (egyezik)
{
Console.WriteLine("6. Feladat: {0}", ell.rendszam);
}
}
#endregionMiközben írtad a sok egymásba ágyazott if-et, érezned kellett volna ahogy szárad le a kezed. Ha nem, legközelebb képzeld azt.
Egyébként a j változódat igazán átnevezhetnéd valami értelmesebbre. Direkt ki is hagytam a képből.
Másrészt vedd észre, hogy aposztrófok közé tettem a kérdőjelet: így nem kell substringgel és stringtömbbel szórakozni, a string ugyanis felfogható karakterek tömbjének is.
-
Karma
félisten
válasz
zsambek #5337 üzenetére
Jézus ereje, miért csináltál hételemű string tömböt a rendszámból? Jó az egy darab stringnek is, illetve ez a sok rendszam.Substring(X, 1) is teljesen felesleges, mert ugyanezt tisztábban megkapod ha azt írod, hogy rendszam[X].
A switch ezen a helyen semmire se jó, de ezt az if-piramist azért ki lehet lapítani egy for ciklusba, ami az i-edik karaktereket összehasonlítja, és addig megy, amíg nem talál eltérést. Ha végigért, akkor meg kiír.
Van egy félsoros megoldás is regexekkel, de azt nem mondom el, mert egy erősen túlmutató területre vezet.
-
trisztan94
őstag
válasz
zsambek #5336 üzenetére
Switch?
Erre pedig:
if (beolvrendszam[0] == ellenorzesek[i].rendszam.Substring(0, 1) || beolvrendszam[0] == "?")
{
if (beolvrendszam[1] == ellenorzesek[i].rendszam.Substring(1, 1) || beolvrendszam[1] == "?")
{
if (beolvrendszam[2] == ellenorzesek[i].rendszam.Substring(2, 1) || beolvrendszam[2] == "?")
{
if (beolvrendszam[3] == ellenorzesek[i].rendszam.Substring(3, 1) || beolvrendszam[3] == "?")
{
if (beolvrendszam[4] == ellenorzesek[i].rendszam.Substring(4, 1) || beolvrendszam[4] == "?")
{
if (beolvrendszam[5] == ellenorzesek[i].rendszam.Substring(5, 1) || beolvrendszam[5] == "?")
{
if (beolvrendszam[6] == ellenorzesek[i].rendszam.Substring(6, 1) || beolvrendszam[6] == "?")
{
Console.WriteLine("6. Feladat: {0}", ellenorzesek[i].rendszam);
}
}
}
}
}
}
}Lehet lehagytam pár csukó kapcsos zárójelet..
Nem lenne elég egyetlen egy ilyen?
if (beolvrendszam[i] == ellenorzesek[i].rendszam.Substring(i, 1) || beolvrendszam[i] == "?")
-
zsambek
aktív tag
Sziasztok,
Érettségire készülök, és az alábbi if tömkeleget szeretném kicsit csökkenteni. Hogyan tehetem meg?
(6. feladat)
http://pastebin.com/sBzpzVXB
Nagyon szépen köszönöm a segítséget,
zsambek` -
ubid
senior tag
Még egy újabb kérdés
Valami durvább matematikai libraryt tud valaki ? Parciális deriválás, integrálás, határérték számítás (lim)
Ilyesmikhez kellene valami megbízható nuget, ha van.
Köszi.
-
martonx
veterán
Ez esetben sok lehetőséged van. Van egyszer a beagle bord - szerver közötti adatút. És van a szerver - kliens közötti adatút.
Ezeket akár külön is bonthatod, hogy mondjuk a beagle Web API-n keresztül küldi az infót (C++-ból ez tűnik a legkézenfekvőbbnek), majd a szerver duplex WCF-en keresztül továbblöki a kliens felé (ez a része ha jól sejtem kész is van). A szerveren meg a Web API fogja meghívni a WCF-et (itt már C#-on belül vagyunk, ez egy triviális művelet).
Vagy mindent egyben kezelsz, és a szerveren egy szál Web API - SignalR kombó intézi az egészet akár egy szál konzol alkalmazásból / windows service-ből futtatva.
Az utóbbi megoldás sokkal szebb, az előbbi megoldáshoz meg sok komponensed már készen van, neked kell dönteni. És persze még biztos van kismillió megoldási lehetőség, én ez a kettő között ingadoznék.
-
ubid
senior tag
válasz
martonx #5328 üzenetére
Értem, signal r -el nem foglalkoztam még, ezért ezt nem is tudtam. Bocs a félre infóért.
Igen jogos, az is lényeges, hogy a server ez után tovább fogja tolni egy másik kliensnek az adatot. Ez valóban lemaradt. Sorry.
Tehát a teljes kép mégegyszer: usbs külső eszköz, begale boardra dugva, perc / 60 adat egy eseményen keresztül érkezik, kis c++ os kód, amely ezt továbbítja valahogyan a szerverre, lényeg h gyors legyen baromira. A server feldolgozza, ha uugy tetszik, átdolgozza az adatot, összegyúrja ezeket, majd egy másik kliens felé ezt ismét továbbítja.
Így teljes a kép. Sorry mégegyszer. -
moseras
tag
válasz
moseras #5307 üzenetére
Sziasztok!
Akit esetleg érdekel, MySQL és EF6 async/await probléma átmeneti megoldása:
E helyett
await ctx.SaveChangesAsync();
Ezt használva
await Task.Factory.StartNew(() =>
{
ctx.SaveChanges();
});külön szálon indul el, és a UI is reszponzív marad. Hogy miért van így, azt továbbra sem értem, de a lényeg, hogy így működik.
Imi.
-
martonx
veterán
Kettő dolog.
1. megint csak arról írtál, hogy eljutnak az adatok a szerverig, és ennek értelmében nem kell duplex kommunikációs, se signalr. Ez így igaz? A szerveren megállnak az adatok, és mindenki happy, vagy a server elkezdi a bejött adatokat "szórni" valamerre?
2. "egy biztos SignalR kizárva, mert NEM böngészőbe kell, hogy fusson" - félre ne érts, nekem teljesen mindegy mivel oldjátok meg, csak nem szeretném, hogy butaság hangozzon el a topikban, és esetleg ez másokat félrevezessen. A SignalR abszolút nincs böngészőhöz kötve! Mondhatni semmi köze hozzá, maximum annyi, hogy mára a legjellemzőbb, hogy minden böngészőben fut, ergo ott használják leggyakrabban. Illetve http web socket-tel kommunikál, de ez ne tévesszen meg.
-
ubid
senior tag
Jelenleg így van, ahogy amargo kolléga írta. (nyilván a kliens jelenleg c#, azért könnyű a WCF-el szórakozni)
Nyitott vagyok más megoldásokra is, nem feltétlenül ragaszkodom én a WCF-hez, egy biztos SignalR kizárva, mert NEM böngészőbe kell, hogy fusson.
Ha a C++ nem szereti a WCF-et, akkor lesz más, akár WebApi, akár más. erről még döntés nem született.
Szerintem értelmesen leírtam, ennél jobban nem tudom körülírni.
Van egy külső eszközöm, ennek csatlakoznia kell USB-n keresztül egy C++-t futtató beagle boardhoz. A kis beaglenek csak annyi a feladata, hogy az összes adatot tovább küldje egy serverre (folyamatosan, autómatikusan küld, amikor egy esemény elsül, ezt az eseményt pedig az ESZKÖZ süti el ami USB-n kapcsolódik, akár másodperc / 60 szor is ) , amin viszont már c# kód fog futni. A server feldolgozza a megfelelő módszerrel és ennyi.
Adatbázis egyáltalán nincs a dologba.A leglényegesebb dolog az az, hogy marha gyorsnak kell lennie. (a c++-tól a serverig eljuttató résznek)
-
martonx
veterán
Igen, az elején úgy indította ubid, hogy ez kell neki.
Aztán most leírva a végső megvalósítást, abból nekem úgy tűnik, hogy minek ide duplex működés?
És ha mégis, akkor SignalR + web API párossal szvsz egyszerűbben együtt tud működni egy C++ kliens, mint WSDL-ekkel nyűglődni.
Mivel a konkrét problémát még mindig csak több vázlatos hsz-ből ismerjük, én csak találgatok. A linuxos C++ vonal miatt az biztos, hogy kerülném a WCF-et, mint ördög a tömjén füstöt. -
ubid
senior tag
válasz
martonx #5314 üzenetére
Kösz az ötleteket mindenkitől !
A WebApi-val annyi bajom van, hogy egyrészt nagyon alap szinten használtam csak, bár nyilván bele lehet tanulni. Viszont ami nagyobb gond számomra, hogy nem látom azt a "hogyant", hogy hogy lehet azt megoldani, hogy a külső eszközről folyamatosan áramló adatokat tulajdonképpen "begyűjtse" vagy broadcast-olja szét. vagy bármi.
Mert a WebApi tudtommal arra jó, hogy viszonylag statikus dolgokat "megkérdezz" tőle, ő meg odaadja.
Nekem viszont pont nem ez kell, hanem az, hogy a készülékről érkező adatokat kiküldje, autómatikusan.A WCF-el úgy sikerült megoldani mint ha egy chat alkalmazás lenne, tehát egy "eseményen" keresztül broadcastolom mindenhová az adott adatot , ahová csak kell.
Nem tudom, hogy ezt most értelmesen magyaráztam-e el, de remélemHa esetleg tudtok tanácsot adni, hogy ebben a koncepcióban a webapi hogy működhetne, akkor kérem jelezzétek.
A lényeg, hogy NEM kérdezgethetem folyamatosan a WebApi-t , hogy "héé kaptál új adatot?", hanem annak mondjuk egy eseményen keresztül folyamatosan jönnie kell és pont.
-
martonx
veterán
Igen, sokfelé el lehet indulni C++-al is, csak amennyire felületesen ránéztem, akár csak egy gSOAP-ot beindítani (majd buzgón reménykedni, hogy kompatilis lesz a WCF WSDL-jével), egy nagyságrenddel nagyobb melónak tűnt, mint akár csak sima C-ben elküldeni egy http hívást a megfelelő json-nal.
Ha meg már C#-al dobták össze a WCF-et és C++-ból kellene használni, akkor jó eséllyel lehet, hogy kevesebb erőforrás a WCF-et átírni ASP.NET Web API-ra, mint C++-ból elkezdeni SOAP-ozni.De lehet, hogy csak én utálom túlságosan a SOAP-ot (mindig csak szívni tudtam vele, kivéve a C# - C# felállást, de ez most nem az). ubid hsz-éből meg az jött le, hogy azért lett WCF, mert csak (a másodpercenkénti 60 request feldolgozását nem értékelem érvnek, a szűk keresztmetszet úgyis az adatbázis lesz), meg eddig C# - C# esetben csak bedobott egy referenciát egy varázslóba, és már használta is. Na, ez most nem így lesz.
-
Goose-T
veterán
How to create a JSON WCF RESTful Service in 60 seconds
You can thank me later. -
ubid
senior tag
hüm, van egy nagy server amin fut a WCF service ( ez lesz az a gép, amely begyűjti az adatokat, és feldolgozza) vannak kis beagle bone gépeink ( n darab) amelyekre usb-vel csatlakozik egy eszköz, amely adatokat tud küldeni a kis beagle bone-ra, amely pedig WCF-en kellene hogy továbbítsa a SERVERNEK.
körülbelül ennyi a koncepció.
a WCF gyors, ezért szeretnénk ezt választani. ( másodpercenként akár 60 adat is érkezhet / beagle )
.NET alatt meg van írva, van hozzá kliens is, és pont ez a sebesség ami kellene nekünk, viszont a kliensnek c++ osnak kellene lennie, ugyanis a beagle-ken csak linux fut, amire ugye csak c++ megy ( esetleg mono, ami meg igen butácska ) -
j0k3r!
őstag
Helló!
Hogyan épül fel az alkalmazásod? Megmondom őszintén, hogy elsőre valami architektúrális bakinak tűnik számomra ez a megközelítés. Azt remélem tudod, hogy attól hogy beimportálsz egy DLL-t, még mindig szükséged lesz .NET frameworkre a futtatáshoz. Én inkább azon a vonalon indulnék el, hogy keresnék valami c++-os SOAP libraryt. Sokat segítene, ha mondanál pár szót az alkalmazásról.
-
ubid
senior tag
Sziasztok!
Lehet egy 50%-ban off a kérdés:
Csináltam egy WCF service-t c#-ban.
Ennek a referenciáját fel tudom venni c++-os projektbe ? és tudom használni valahogy ? -
moseras
tag
válasz
martonx #5308 üzenetére
Szia!
Úgy tudom, hogy mivel az InsertAsync async void-ként van megadva, ezért annak a hívóhoz vissza kell(ene) térnie a benne lévő await hatására (és persze az await indít egy új taszkot, aminek végeztével az await alatt folytatódik). Érdekesnek találnám, ha ez egyszer így, egyszer úgy működne. Arra is gondoltam, hogy esetleg a MySQL EF6 megvalósítása nem kerek valahol. Mivel a UI szál is teljesen lefagy a SaveChangeAsync alatt, ezért nem tudok másra gondolni, valami miatt szinkron módon ugyanabban a UI szálban fut.
Imi.
-
martonx
veterán
válasz
moseras #5307 üzenetére
Nem feltétlenül hiba ez. Az await ctx.SaveChangesAsync(); és az await Task.Delay(4000) simán eltérhet viselkedésben ennyire egymástól, az async await közel sem csak annyit csinál, hogy egy Task-ba burkolva hívja meg a kért függvényt.
Illetve az await pont azt mondja meg a kódnak, hogy várja be az adott aszinkron futó kódrésznek az eredményét, és emiatt működjön úgy mintha az egy szinkron hívás lett volna.
-
moseras
tag
Sziasztok!
MySQL-t használok Entity FrameWork 6-al. Működik, kivétel az async/await lehetőség, amit az EF6 elvileg tud.
Kód:
public void I2(List<data> dataList)
{
Debug.Print("I2 előtt");
InsertAsync(dataList);
Debug.Print("I2 után");
}
public async void InsertAsync(List<data> dataList)
{
using (var ctx = new adatgyujtesEntities())
{
ctx.Configuration.AutoDetectChangesEnabled = false;
ctx.Configuration.ValidateOnSaveEnabled = false;
foreach (var item in dataList)
{
ctx.data.Add(item);
}
Debug.Print("await előtt");
await ctx.SaveChangesAsync();
//await Task.Delay(4000);
Debug.Print("await után");
}
}Ha az I2-t meghívom, akkor ezt kapom:
I2 előtt
await előtt
await után
I2 utánHa az await ctx.SaveChangesAsync(); sort kikommentezem, és helyette beteszem az await Task.Delay(4000);-t, akkor pedig ezt:
I2 előtt
await előtt
I2 után
await utánTehát mint ha a SaveChangesAsync szinkron működne ? Vagy valamit félreértek ?
És még valami: a UI is akad rendesen, a SaveChangesAsync közben sem mozgatni, sem méretezni nem lehet az ablakot, de a Task.Delay közben működik a mozgatás/méretezés.
Köszi!
Imi.
-
Goose-T
veterán
válasz
haromegesz14 #5305 üzenetére
Intet stringgé konvertálod, hozzáfűzöd a meglévő stringet, aztán visszakonvertálod az eredményt intté, és a tömb megfelelő helyére teszed
-
haromegesz14
aktív tag
Int típusú tömb egyik elemének értékéhez szeretnék hozzáfűzni stringet. Hogyan lehet megoldani típuskonverzió nélkül? Vagy a kiválasztott elemet konvertáljam stringé és pakoljam egy másik string típusú tömbe, és egyszerűen utána csatolom a kívánt stringet?
-
Karma
félisten
válasz
haromegesz14 #5301 üzenetére
-
Alexios
veterán
válasz
haromegesz14 #5301 üzenetére
return tombneve;
-
haromegesz14
aktív tag
Visszatérési érték ként egy teljes tömböt vissza lehet adni? Ha igen, mi a szintaxisa?
Ú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!
- One otthoni szolgáltatások (TV, internet, telefon)
- Subaru topik
- Vezeték nélküli fülhallgatók
- Milyen routert?
- Battlefield 6
- Luck Dragon: Asszociációs játék. :)
- GoodSpeed: AMD Ryzen 7 7700X vs AMD Ryzen 9 9900X Cinebench R23 & R24 Benchmarkokban mérve
- exHWSW - Értünk mindenhez IS
- Mobil flották
- Az AI megeszi a szoftverpiacot?
- További aktív témák...
- Lenovo ThinkPad P1 Gen 3 UHD, Érintőkijelző, i7-10875H, 32GB DDR4, 256GB SSD, 27% ÁFÁS SZÁMLA, 1ÉV G
- Lenovo ThinkPad L490 FHD, TOUCH, I5-8365U CPU, 16GB DDR4, 256GB SSD, 27% ÁFÁS SZÁMLA, 1ÉV GARANCIA!
- Lenovo ThinkPad T490 FHD, I5-8365U CPU, 16GB DDR4, 256GB SSD, 27% ÁFÁS SZÁMLA, 1ÉV GARANCIA!
- 2020 M1 macbook pro 8/256GB elado/cserelheto
- Lenovo ThinkPad T480s FHD, Érintőkijelző, I5-8350U CPU, 8GB DDR4, 256GB SSD, 27% ÁFÁS SZÁMLA, 1ÉV GA
- LG 27UP850NP-W - 27" IPS LED - 3840x2160 4K - DisplayHDR 400 - USB Type-C - AMD FreeSync
- LG 65B4 - 65" OLED - 4K 120Hz 1ms - NVIDIA G-Sync - FreeSync Premium - HDMI 2.1 - PS5 és Xbox Ready
- AKCIÓ! DELL PowerEdge R630 rack szerver - 2xE5-2660v4 (28c/56t, 2.0/3.2GHz), 96GB RAM, 4x1G, áfás
- AKCIÓ! Lenovo IS8XM LGA 1150 DDR3 alaplap garanciával hibátlan működéssel
- Vállalom Xiaomi Okoskamerák szoftveres javíttását
Állásajánlatok
Cég: FOTC
Város: Budapest