- NVIDIA GeForce RTX 5070 / 5070 Ti (GB205 / 203)
- Milyen processzort vegyek?
- Vezetékes FÜLhallgatók
- Kompakt vízhűtés
- NVIDIA GeForce RTX 4060 / 4070 S/Ti/TiS (AD104/103)
- Szünetmentes tápegységek (UPS)
- A partnerektől függ, hogy lesz-e Arc csúcs-VGA az aktuális generációban
- Azonnali informatikai kérdések órája
- SSD kibeszélő
- Apple MacBook
Új hozzászólás Aktív témák
-
Karma
félisten
válasz
Pttypang #5599 üzenetére
Úgy, hogy bár én nagyon kényelmesnek találom az IoC konténert, a kitalálása előtt is volt élet. Nevezz ki egy objektumot a viewmodelek létrehozásáért felelősnek fejben - például a ViewModelLocator elég kézenfekvő -, csinálj tagváltozókat a VM-eknek, és példányosítsd őket kézzel.
A példányokat meg propertyken át add oda a Page-eknek, mint általában szokás.
-
Karma
félisten
válasz
trisztan94 #5592 üzenetére
Kinyomoztam, a CustomMessageBox alap sablonjában be van égetve a 480-as szélesség a belső tartalomhoz. Ha veszed ezt a XAML-t és berakod az App.xaml-ödbe, és átírod a Width="480"-at (például kiveszed), akkor teljes szélességű belsőt csinálhatsz.
-
Mbazsika
tag
-
Karma
félisten
válasz
trisztan94 #5592 üzenetére
Próbálkoztam egy kicsit vele, szerintem ezt nem fogod tudni a CustomMessageBox gyári állapotában így. A forráskódjában le lehetne ellenőrizni, de szerintem be van égetve, hogy milyen széles legyen a content fekvő állásban, és emiatt borul a történet.
Egyébként is az Auto szélességgel csínján kell bánni.
Szerintem azt megpróbálhatnád, hogy a Gridet lecseréled egy függőleges StackPanelre, és abba rakod a gombokat. De még jobb lenne, ha nem erőltetnéd a MessageBoxot - ami a screenshotból ítélve a mentalitást nem igazán járható út
-
Karma
félisten
válasz
trisztan94 #5593 üzenetére
Ebben az esetben valamit nagyon durván elbarkácsoltál, mert a ListPicker csak előrenavigációt csinál, semmi nem indokolja hogy a meglévő beállításoldalad újra létrejöjjön. Nem csináltál valami csúnyaságot az OnNavigatedFrom/Toban?
-
trisztan94
őstag
Közben most ezzel bénázok.
A teljes képernyős móddal van egy kis probléma, miszerint, ha még nem mentette el a felhasználó a már módosított beállításait (pl. leveszi a pipát valamelyik checkbox-ról), akkor azok elvésznek amikor visszatér a ListPicker-ből. Ezt ki lehet valahogyan küszöbölni?
Továbbá az elemekkel való feltöltése sem teljesen világos. Lenne összesen 6-7 ilyen felugró ListPicker, amikben ki lehet választani azt a lehetőséget, ami a felhasználónak kell. Ezek a lehetőségek fixek, tehát szerintem (lehet megint rosszul gondolkodom) ide rendben van, ha beleírom a lehetőségeket a kódba, nem? Vagy mindenképpen Data Bindinggel csináljam?
Valahogy úgy gondolom ennek a feltöltését, hogy van a kiírt beállítás (legyen most az, amit linkeltem kép formájában: megjelenés, 5 választható opcióval, melyekből egyet lehet kiválasztani), és annak a radio buttonnak van egy értéke. Legyen most 0, 1, 2, 3 és 4. Amikor rábök a felhasználó, akkor az visszaküldi azt az értéket, de még nem menti el.
Vagy van esetleg valamelyikőtöknek már egy ilyen kész megoldása? Próbálgattam google-ben keresni, de nem nagyon találtam semmi ilyesmit
Köszi!
-
Karma
félisten
válasz
trisztan94 #5590 üzenetére
Screenshotot csinálj róla kérlek.
-
trisztan94
őstag
Tökéletes, köszönöm szépen!
Fekvő üzemmódban lenne használva, így a messagebox a helynek a felét tölti csak ki, a gombokban nem fér ki a szöveg teljesen.
Átírtam erre a gombok gridjének méretét:
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Auto) });
grid.Children.Add(button);Így már kifér a gombokban lévő szöveg, viszont a képernyő 2/3-nál "levágja" a tartalmat. Tehát a szülő grid mérete nem elég széles - gondolom én.
Megpróbáltam annak is egy nagyobb szélességet megadni:
var grid = new Grid { Margin = new Thickness(0, 24, 0, 0), Width = 700 };
De semmi változás
-
Karma
félisten
válasz
trisztan94 #5588 üzenetére
using System.Linq; a fájlod tetejére, és jó lesz.
A Select egy extension method, ami abból a névtérből jön. -
trisztan94
őstag
Wow, nagyon szépen köszönöm, magamtól nehezen csináltam volna meg ilyenre.
Viszont van valami amit nem értek:
Ha bármilyen osztályba rakom, akkor hibátlan, viszont, ha a mainpage-be, akkor a buttonContent.Select-re a következő hibát dobja:
Error 5 'System.Collections.Generic.IList<string>' does not contain a definition for 'Select' and no extension method 'Select' accepting a first argument of type 'System.Collections.Generic.IList<string>' could be found (are you missing a using directive or an assembly reference?) C:\Users\*******\documents\visual studio 2013\Projects\Click4Skill Angol\Click4Skill Angol\MainPage.xaml.cs 121 50 Click4Skill Angol
Mindenhol máshol probléma mentes.
Ez mitől lehet?
[ Módosította: Racecam ]
-
Karma
félisten
válasz
trisztan94 #5579 üzenetére
Gondoltam segítek még egy lépéssel, mert odáig szép és jó, hogy összeraksz egy Gridet, azt is kezelni kéne, hogy melyik gombot nyomtad meg.
Lásd a következő kódot. A foreach ciklusban van a UI létrehozás, a körülötte egy async wrapper, illetve a legvégén másik metódusban példa, hogy hogyan lehet ezt használni.
public Task<int> ShowMultiButtonMessageBox(string caption, string message, IList<string> buttonContent)
{
var i = 0;
var tcs = new TaskCompletionSource<int>();
var grid = new Grid { Margin = new Thickness(0,24,12,0)};
var msgBox = new CustomMessageBox
{
Caption = caption,
Message = message,
Content = grid
};
foreach (var button in buttonContent.Select(content => new Button {Content = content}))
{
var index = i;
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star)});
grid.Children.Add(button);
Grid.SetColumn(button, i);
button.Click += (sender, args) =>
{
tcs.TrySetResult(index);
msgBox.Dismiss();
};
i++;
}
msgBox.Dismissed += (sender, args) => tcs.TrySetResult(-1);
msgBox.Show();
return tcs.Task;
}
private async void OnTestButtonClicked(object sender, RoutedEventArgs e)
{
var i = await ShowMultiButtonMessageBox("Test", "Press a button!", new[] {"Hello", "Szia", "Mizu"});
MessageBox.Show(string.Format("Valasz: {0}", i));
} -
Karma
félisten
válasz
trisztan94 #5585 üzenetére
A Pivot template-jét talán át tudod szerkeszteni Blenddel annyira, hogy hasonlítson erre a valamire. De elég rossz ötlet egy-az-egyben Wp-re átlapátolni szerintem.
-
trisztan94
őstag
Közben találtam még valamit, aminek a megvalósítására ötletem nincs.
Levideóztam az app Androidos verziójának működését: [link]
Egy ilyen dolgot Ti hogyan csinálnátok meg? Jelenleg csak egy sima Image van berakva egy Gridbe nekem.
Köszönöm!
-
tototos
addikt
Sziasztok!
Egy kis gui-s segítség kellene. Egy gantt chart-hoz hasonló felületet szeretnék megvalósítani, annyi lenne a lényeg, hogy a felbontása perc alapú legyen, és amikor közeledik a határidő akkor váltson pirosra a task és villogjon. A taskok feltöltése legyen viszonylag könnyen kivitelezhető akár webes felületről is. Van esetleg ötletetek hogy merre induljak el?
Köszi
-
xxSanchez
őstag
válasz
trisztan94 #5580 üzenetére
-
Karma
félisten
válasz
trisztan94 #5577 üzenetére
Nem kellene egy olyan Gridet megadni Contentnek, aminek van már szülője a hierarchiában.
Más szóval így nem lehet használni a CustomMessageBoxot; vagy csinálj egy UserControlt, amit kódban példányosítasz, vagy építsd össze a Gridet kézzel, és ezt az új példányt add meg Contentnek.
-
trisztan94
őstag
Kicsit régi dologra reagálok, de most jutottam el oda, hogy ezt a funkcionalitást bele kellene rakni végre.
Csináltam egy Grid-et XAML-ben, benne a három vízszintes gomb:
<Grid
x:Name="messageBoxButtonsGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Button Content="hello"
Grid.Column="0"/>
<Button Content="szia"
Grid.Column="1"/>
<Button Content="Mizu?"
Grid.Column="2"/>
</Grid>Majd a MainPage konstruktorába beraktam a következőt:
var messagebox = new CustomMessageBox()
{
Caption = "Caption szöveg",
Message = "Message szöveg",
Content = messageBoxButtonsGrid
};
messagebox.Show();Ezzel az exceptionnel száll el:
Mit csinálok rosszul?
-
Karma
félisten
válasz
Cathfaern #5572 üzenetére
A C# 5.0 in a Nutshell esetleg? Szerintem pont arra való, amit kérdeztél. Plusz referenciának.
-
Cathfaern
nagyúr
válasz
Alexios #5571 üzenetére
És olyan könyvet tudtok ajánlani, ami nem kezdő programozóknak szól, hanem C#-ra áttanulóknak? Programozással nincs problémám, viszont eddig főleg nem OOP nyelvekben programoztam (C és PHP), igaz mellette foglalkoztam C++-al meg Java-val is, de csak érintőlegesen. Viszont a haladó C#-os könyvek túl magas szintről indítanak nekem, a kezdők viszont elindítják onnan, hogy mi az a ciklus meg elágazás...
-
kexksz
addikt
Tudnátok ajánlani C# könyveket? Az "Együtt könnyebb a programozás - C#"-ot kiolvastam, de mivel ez a legelső programozási nyelvem sok rész volt benne, amit nem tudtam feldolgozni, tehát valami könnyebb olvasmány kéne.
-
vimes
senior tag
Köszönöm a válaszokat!
-
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
-
vimes
senior tag
Egy gyors, emellett lehet, h primitív kérdés, de húsz percnél többet nem szántam a keresésére, mert már ilyenre nem igazán jut idő.
Van egy egész szám, mondjuk 125. Ezt szeretném két tizedesjeggyel lekerekíteni, h 100-at kapjak eredményül. Először azzal próbálkoztam, h "Math.Round(szám,-2)" de egész számokra nem alkalmazható, illetve a kerekítés mértékét mutató második szám 0 és 15 közé eshet, szóval ez nem járható. Mivel tudnám ezt mégis megoldani?
-
trisztan94
őstag
Na igen, ilyenkor fogom a fejem
Nem tudtam, hogy van ilyen. Gondolom az a sztenderd, szóval akkor átírom arra.
Köszi.
Sajnos ilyenkor érzem meg a legjobban azt, hogy nincs a cégnél egy Senior WP-os (vagy akár C#-os) kolléga, akitől tudnék tanácsokat kérni. Juniorként nagyon sok dolgot nem tudok a rendszerről, kénytelen vagyok titeket zaklatni a hülyeségeimmel. Köszönöm a segítséget és a türelmeteket!
-
Karma
félisten
válasz
trisztan94 #5563 üzenetére
Nagyon durván ronda. Miért nem használsz IsolatedStorageSettingset?
-
trisztan94
őstag
Köszönöm szépen!
Még egy aprócska kérdésem lenne. Készítettem egy beállítások oldalt az app-nak. Eddig XML-ben tároltam az adatokat, most beraktam adatbázisba.
Az lenne a kérdés, hogy jó-e úgy, hogy a database = new Database() az nem a konstruktorban van? Azért lett az onNavigatedTo override-ba rakni, mert a database.GetSettings() metódus aszinkron és így nem tudtam a konstruktorban használni, külön metódust meg nem akartam meghívni. Nagyon ronda ez így?
private Database database;
private List<Database.Settings> settings;
public Settings()
{
InitializeComponent();
}
protected async override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
database = new Database();
settings = await database.GetSettings();
synchronizeCheckbox.IsChecked = Convert.ToBoolean(settings[0].Szinkronizalas);
textToSpeechCheckbox.IsChecked = Convert.ToBoolean(settings[0].Szovegfelolvaso);
meditativeModeCheckbox.IsChecked = Convert.ToBoolean(settings[0].MeditativMod);
meditativeModeVolumeSlider.Value = settings[0].MeditativMod;
dingDongVolumeSlider.Value = settings[0].DingDongHangero;
} -
Karma
félisten
válasz
trisztan94 #5561 üzenetére
Jól feltételezed, a back key visszaléptet magától, ha nem állítod az e.Cancel property-t true-ra.
Így kéne kinéznie, a sorrend se mindegy:
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
MessageBoxResult result = MessageBox.Show("Biztosan visszalép mentés nélkül?", string.Empty, MessageBoxButton.OKCancel);
e.Cancel = result != MessageBoxResult.OK;
base.OnBackKeyPress(e);
} -
trisztan94
őstag
Sziasztok!
Egy egyszerű MessageBox-ot akarok megjeleníteni egy OK és egy Cancel gombbal.
Ezt a kódot használom:
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
base.OnBackKeyPress(e);
MessageBoxResult result = MessageBox.Show("Biztosan visszalép mentés nélkül?", string.Empty, MessageBoxButton.OKCancel);
if (result == MessageBoxResult.OK) NavigationService.GoBack();
}Viszont akár OK-ra, akár Cancel-re nyomok, mindig visszaléptet.
Gondolom itt valami olyasmi probléma lehet, hogy az OnBackKeyPress amúgy is visszaléptetné a júzert, tehát valamivel meg kellene azt gátolni.
Köszi!
-
zsambek
aktív tag
Sziasztok,
Kész lett végül a 2007-es tavaszi érettségim. Használtam itt mindent. Szerencsére segítséget nem kellett már
http://www.jos.hu/down/ErProg/Sms_szavak_feladat.pdf
http://pastebin.com/8LWST1s9Az egyetlen egy kérdésem az, hogy a 207-es sorban ott miért a Key-t nézetem meg, miért nem a Valuet? Mivel a legtobbkilencid az egy szám, ami a tobbnel a Value-val kellene egyenlonek lennie, nem a Key-vel. A Key-be raktam a szavakat, míg a Value-be raktam a számokat.
Köszönöm a segítségeteket,
zsambek` -
Alexios
veterán
válasz
trisztan94 #5557 üzenetére
canvas.zindex
-
trisztan94
őstag
Nem is tudtam, hogy le lehet tiltani a UI-t
Így viszont akkor elég lesz, köszönöm!
Más:
Lehet valahogy "előtérbe hozni" egy elemet? Van sok-sok gomb a képernyőn megjelenítve, azokat lehet drag and drop módszerrel húzogatni. Az lenne a cél, hogy az aktuálisan húzott elem a többi "fölött" legyen. Mint a z-index CSS-ben.
-
Karma
félisten
válasz
trisztan94 #5555 üzenetére
Ha letiltod a UI-t (például a PhoneApplicationPage-et, ami a képernyőn van, IsEnabled = false-ba rakod) és a státuszsáv beépített progress barját használod, az nem elég?
Mert ha nem az, akkor nincs mit tenni, mint kézzel építeni egyet. Mondjuk ha dialógus, én biztos a WPToolkit CustomMessageBoxából indulnék ki.
-
trisztan94
őstag
Sziasztok!
Van valami hasonló Windows Phone-ra, mint Androidon a Progress Dialog? Az a lényeg, hogy teljesen egyértelmű legyen a felhasználónak, hogy valami történik és addig nem nyúlhat a progihoz. Egy felugró ablak, amiben van egy progressbar és addig nem enged mást csinálni, amíg nincs vége annak a folymatnak.
Valami hasonló: [link]
Köszi!
-
zsambek
aktív tag
Szia,
Nagyjából így már érthető.
Következő probléma
static string szamozas(string szo)
{
char[] temp = new char[szo.Length];
for (int i = 0; i < szo.Length; i++)
{
temp[i] = szo[i];
}
int[] szamok = new int[szo.Length];
int lepteto = 0;
foreach (char x in temp)
{
if (x == 'a' || x == 'b' || x == 'c')
{
szamok[lepteto] = 2;
lepteto++;
}
if (x == 'd' || x == 'e' || x == 'f')
{
szamok[lepteto] = 3;
lepteto++;
}
if (x == 'g' || x == 'h' || x == 'i')
{
szamok[lepteto] = 4;
lepteto++;
}
if (x == 'j' || x == 'k' || x == 'l')
{
szamok[lepteto] = 5;
lepteto++;
}
if (x == 'm' || x == 'n' || x == 'o')
{
szamok[lepteto] = 6;
lepteto++;
}
if (x == 'p' || x == 'q' || x == 'r' || x == 's')
{
szamok[lepteto] = 7;
lepteto++;
}
if (x == 't' || x == 'u' || x == 'v')
{
szamok[lepteto] = 8;
lepteto++;
}
if (x == 'w' || x == 'x' || x == 'y' || x == 'z')
{
szamok[lepteto] = 9;
lepteto++;
}
}
char[] kod = new char[szo.Length];
for (int i = 0; i < szo.Length; i++)
{
kod[i] = Convert.ToChar(szamok[i]);
}
return new string(kod);
}http://www.jos.hu/down/ErProg/Sms_szavak_feladat.pdf
Valamiért megkapja az értékét, mivel kiíratás közben az üres helyek megvannak, viszont nem vesz fel értéket, ez mitől lehet? Esetleg rosszul konvertálom át a szamok-at? Próbáltam locals-val, de nem tudom megnézni ott sajnos.
Köszönöm szépen,
zsambek` -
Karma
félisten
válasz
zsambek #5550 üzenetére
A Dictionaryk [] operátora mindkét irányba működik. Ha az értékadás jobb oldalán van, akkor kiveszi az adott kulcshoz tartozó értéket; ha meg a bal oldalán, akkor az adott kulcs alá berakja az eredményt. Ez így megválaszolja a kérdést?
A másodiknál sem teljesen értem a kérdést. Pont az a lényege, hogy kulcs-érték párokat tárol, és gyorsan meg lehet találni, hogy melyik kulcshoz milyen érték tartozik.
-
zsambek
aktív tag
string teszt = "";
Dictionary<string, int> eredmenyek = new Dictionary<string, int>();
for (int i = 0; i < db; i++)
{
if (meccs[i].vendeg > meccs[i].hazai)
{
teszt = Convert.ToString(meccs[i].vendeg) + "-" + Convert.ToString(meccs[i].hazai);
if (eredmenyek.ContainsKey(teszt))
{
eredmenyek[teszt]++;
}
else
{
eredmenyek[teszt] = 1;
}
}
else
{
teszt = Convert.ToString(meccs[i].hazai) + "-" + Convert.ToString(meccs[i].vendeg);
if (eredmenyek.ContainsKey(teszt))
{
eredmenyek[teszt]++;
}
else
{
eredmenyek[teszt] = 1;
}
}
}
StreamWriter ki = new StreamWriter("stat.txt");
foreach (var eredmeny in eredmenyek)
{
ki.WriteLine("{0}: {1} darab", eredmeny.Key, eredmeny.Value);
}Ha minden igaz működik. Köszönöm mégegyszer, nem tudom hova valósi vagy (megtaláltam), de az érettségi után egy sörre minimum a vendégem vagy
2 dolog:
1. Amikor azt nézem ,hogy meg van benne, és nincs benne, akkor ez az egész eredmenyek[teszt] = 1, hogyan kerülhet bele a listába? Az egy dolog, hogy megírom neki, hogyha berakom, akkor legyen 1 az eredménye, de ezzel az 1-el azt is megírom, hogy rakja bele?
A másik pedig az, hogy hogy jelenthet a kiírásnál az eredmeny egy egész sort a szótáramból? Gondolok itt arra, hogy az eredmeny.Key es az eredmeny.Value is ugyanahhoz tartozik.Bocsáss meg az értetlenségért, de ezt még szeretném megérteni
zsambek`
-
Karma
félisten
válasz
Jester01 #5548 üzenetére
Dehát wrapperből indult ki az egész feladat, semmi értelme átrakni egy másikba...
zsambek:
A Dictionarynek van egy ContainsKey metódusa, ami true-t ad vissza, ha van benne ilyen kulcs.
Például így, ami nem a legszebb, de szerintem érthető mit csinál:
if (eredmenyek.ContainsKey(teszt))
{
eredmenyek[teszt] ++;
}
else
{
eredmenyek[teszt] = 1; -
Jester01
veterán
válasz
Peter Kiss #5546 üzenetére
Persze nem mond semmit (mint ahogy a string sem!), de legalább nem string műveletek garmadájával terheli a rendszert és ha úgy adódik vissza lehet nyerni legalább a 2 számot. Jelen esetben ráadásul tényleg csak 2 szám van. Ha pedig nagyon mondatni akarsz vele bármit akkor két pillanat körérakni egy wrappert.
-
zsambek
aktív tag
Szia,
A Dictionary-től azért féltem, mert az az anagrammos nem volt a szívem csücske.
Most is sikeresen elakadtam vele...
string teszt = "";
Dictionary<string, int> eredmenyek = new Dictionary<string, int>();
for (int i = 0; i < db; i++)
if (meccs[I].vendeg > meccs(i).hazai)
{
teszt = Convert.ToString(meccs(i).vendeg) + "-" + Convert.ToString(meccs(i).hazai);
if (eredmenyek.ContainsKey(teszt))
{
//Hogyan írom azt, hogy az eredmények dictionary, teszt nevezetű stringjének az int tömbjébe szeretnék plusz egyet adni?
}
}
else
{
teszt = Convert.ToString(meccs(i).hazai) + "-" + Convert.ToString(meccs(i).vendeg);
if (eredmenyek.ContainsKey(teszt))
{
//Hogyan írom azt, hogy az eredmények dictionary, teszt nevezetű stringjének az int tömbjébe szeretnék plusz egyet adni?
}
}
}Valahogy így akarnám neki leiratni:
eredmenyek[teszt].AddBocsáss meg az értetlenségért, meg, hogy nem tanultam meg eléggé ezt a Dictionaryt, csak a Dictionaryvel annyi tiszta, hogyha hozzáakarok adni, akkor először a dictionary, utána, hogy melyik részébe, utána pedig, hogy mit. De itt valahogy nem jön össze
zsambek`
-
Karma
félisten
válasz
Jester01 #5544 üzenetére
A konkrét feladat ismeretében szerintem nincs gond a stringgel, hiszen egészen addig a pontig két intről van szó egy structban, amiket csoportosítási feltételnek kell felhasználni meg formázottan kiírni.
Ehhez még vegyük hozzá, hogy a Tuple megint egy új típus lenne, amit zsambeknak meg kéne ismernie két nappal az érettségi előtt.
Egyébként meg LINQ-kel egy sorban meg lehetne írni az egész feladatot, de nem ez volt a kérdés.
-
Jester01
veterán
válasz
Peter Kiss #5543 üzenetére
A stringnél sokkal szebb
-
Jester01
veterán
A string helyett valamivel szebb megoldás a Tuple<int, int>, főleg ha szükség lenne utána a komponensekre is.
Ja és a 3. pontban a foreach nem a keys-en megy hanem az egész dictionary-n mivel kell a kulcs és az érték is így fölösleges lenne az értéket a kulcs alapján megint kikerestetni.
-
Karma
félisten
válasz
zsambek #5540 üzenetére
Miért olyan különleges a 100-as szám?
Egyébként meg pont ilyet kellett már csinálnod, és akkor is azt mondtam, hogy a Dictionary a barátod. Most még egyszerűbb is a helyzet, mert elég egy Dictionary<string, int>, azaz a formázott eredményhez rendeled hozzá, hogy hányszor fordult elő.
Ennek felépítéséhez egy for ciklusra van szükséged, ami:
1) az eredményt a megfelelő formátumra alakítja, például 2 és 4 számokból "4-2" string;
2) megnézi, hogy ilyen string szerepel-e már a dictionary kulcsai között:
a) ha nem, akkor elhelyez egy 1-est ez a kulcs alá
b) ha igen, akkor kiveszi az értéket, és eggyel megnövelve rakja vissza
3) egy foreach ciklussal végigszaladsz a dictionary.Keys-en, és kiírod fájlba ahogy kell. -
zsambek
aktív tag
Szia,
Tényleg, köszönöm szépen! És ez a /t tényleg nagyon jó ötlet!
Új nap, új érettségi feladat.http://www.jos.hu/down/ErProg/Foci_feladat.pdf
http://pastebin.com/zYACYjeL
Az első 6 feladat, ha minden igaz tökéletesen fut. Viszont az utolsó eredményeset nem tudom valamiért megcsinálni.
Két módon akartam megcsinálni:
1. 2 for ciklussal teletöltöm 100 lehetőséget (ha minden igaz, utána csak 50 lesz jó!?), és ellenőrzöm, hogy if vendég nagyobb, mint a haza, akkor azt rajta be az elsőre, ha nem, akkor a sima.
2. Ahogy most csináltam, de ez se tetszik neki, mert túl töltöm.Valami ötlet, ami hasonló a tudásomhoz?
Köszönöm és kellemes hétvégét,
zsambek` -
Karma
félisten
válasz
zsambek #5521 üzenetére
Az ötödik feladatban azt csinálhattad volna, hogy az érvényes címleteket csökkenő sorrendben elrakod egy konstans tömbbe (vagy listába, mindegy most), és egy while ciklussal végzed el az osztás-kivonásokat addig, amíg a maradványösszeg 0 nem lesz.
Az utolsó feladatban a tabulátorral elválasztáshoz annyit kell tenned, hogy a {0} után a sok szóköz helyett azt kell beírnod, hogy \t.
A kiírás meg azért nem működik, mert a feltételeid teljesen el vannak szúrva. Próbáld meg visszaolvasni, amit írtál az ifekbe - sok köze most nincs ahhoz, hogy "a hetes rekeszben a csokoládé száma nagyobb vagy egyenlő mint a vásárlás", illetve "a bedobott pénz nagyobb vagy egyenlő, mint a vásárlás összege". Emellett a rekesz aktuális darabszámát a ciklus során karban kéne tartanod.
Sajnos voltam olyan balga, hogy a tabletem töltőjét bennhagytam a munkahelyemen, így kóddal nem sokat tudok segíteni. De az biztos, hogy az előző bekezdést követve például "vasarlasok[i ].rekesz == 6"-ot akartál írni a hetes rekesz darabszáma helyett.
-
amargo
addikt
válasz
trisztan94 #5535 üzenetére
Erdemes lenne ilyenkor beirnod a megoldast is.
-
-
trisztan94
őstag
válasz
trisztan94 #5534 üzenetére
Megoldva adam014 kolléga segítségével
Más:
Ezt már szerintem kérdeztem, de nem találom.
Tehát egy ilyen mozgó led effektet szeretnék. Példa: [link]
Annyi különbséggel, hogy oda-vissza megy.Ezt TextBlock-ba akarom rakni, ha nem fér ki a benne lévő szöveg, akkor animálódjon így. Tud erre valaki valami jó megoldást esetleg?
Köszönöm!
-
trisztan94
őstag
public async Task<string[]> GetData(int size = 6)
{
var r = new Random();
string[] data= new string[size];
List<Data> results;
var conn = new SQLiteAsyncConnection(localDatabaseName);
var query = await conn.QueryAsync<Betuk>("SELECT data from data").ContinueWith(async (t) =>
{
results = new List<Data>(await t);
for (int i = 0; i < size; i++)
{
var rand = r.Next(0, results.Count);
data[i] = results[rand].data;
results.Remove(results[rand]);
}
});
return data;
}Ez a GetData() metódus.
És nem, nem Data mindennek a neve és a típusa, pszeudokódként írtam
-
Karma
félisten
válasz
trisztan94 #5532 üzenetére
Valamit akkor elbarmoltál a GetData metódusban, hiszen már most is Task-alapú és awaiteled - ez nagyon távolról olyan, mint a then, épp csak sokkal jobb - és ha ez csak akkor térne vissza, amikor megvan az adat, pont az történne mint amit leírtál.
-
trisztan94
őstag
Még egy valami:
Van egy animáció az app-ban amit fejlesztek. Ez az animáció adatokat jelenít meg, amihez az adatokat adatbázisból szedem ki aszinkron módszerrel. Az a probléma, hogy valamikor kicsit tovább tart az adatok lekérése, ezért az animáció néha elindul úgy, hogy még nincsenek meg az adatok.
Így van jelenleg megcsinálva:
protected async override void OnNavigatedTo(NavigationEventArgs e)
{
data= await database.GetData();
animate();
}Valami olyasmi kellene, mint jQuery-ben a .then() függvény, ami csak akkor fut le, ha befejeződött az aszinkron kérés.
-
trisztan94
őstag
válasz
Alexios #5528 üzenetére
Bocsi a megkésett válaszért.
Na, igazából az a helyzet, hogy egy .sqlite fájlt akarok deploy-olni az xap-ban.
Eddig futásidőben hoztam létre az adatbázist, de most megváltozott valami, ezért már külső fájlból kell belerakni. A futásidőben való létrehozás nyilvánvalóan az izolált tárhelyre hozta létre az adatbázist, és pontosan ugyanez kellene nekem.Ezt csináltam:
Behúztam az adatbázist a solutionbe. (Databases/db.sqlite az útvonal)
Jobb klikk rá, Properties->
Build Action -> Content
Copy to output directory -> Copy alwaysNa most, ha jól tudom, ez csak olvasható tárhelyre fogja rakni, tehát írni nem lehet majd. Ami nem jó, ezért ezzel a kóddal, amikor indul app átmásolom az izolált tárhelyre, ahol írni és olvasni is lehet:
public void CopyDatabaseToIsolatedStorage()
{
// Obtain the virtual store for the application.
IsolatedStorageFile iso = IsolatedStorageFile.GetUserStoreForApplication();
// Create a stream for the file in the installation folder.
using (Stream input = Application.GetResourceStream(new Uri("Databases/db.sqlite", UriKind.Relative)).Stream)
{
// Create a stream for the new file in the local folder.
using (IsolatedStorageFileStream output = iso.CreateFile("db.sqlite"))
{
// Initialize the buffer.
byte[] readBuffer = new byte[4096];
int bytesRead = -1;
// Copy the file from the installation folder to the local folder.
while ((bytesRead = input.Read(readBuffer, 0, readBuffer.Length)) > 0)
{
output.Write(readBuffer, 0, bytesRead);
}
}
}
}Ez van a MainPage osztály konstruktorában:
if (!database.IsDbPresent().Result) // Ez egy bool-t ad vissza
{
Debug.WriteLine("Database file not found in Isolated Storage. Copying...");
database.CopyDatabaseToIsolatedStorage();
}Na most az a probléma, hogy ez szépen működik, amíg debug módban emulatorban, vagy telefonon tesztelem. Onnantól kezdve, hogy lehúzom a telefont a gépről és később indítom el, valamiért nem tudja olvasni az adatbázist.
Hogyan kell ezt "rendesen" megoldani? Van ennek egy bevált módszere?
-
zsambek
aktív tag
Sziasztok,
Adott az alábbi érettségi:
http://www.jos.hu/down/ErProg/Lift_feladat.pdfÉs az alábbi programkód:
http://pastebin.com/Jn3BG6z9A problémám a 7-es, és a 8-as feladatban rejlik. Ha a 7-es feladatban egy olyan értéket adok meg a csapatnak, amely tuti, hogy csalt, akkor egy ilyen szöveggel vár a VS. "Az indexnek (nulla alapú) nagyobbnak vagy egyenlőnek kell lennie az argumentumlista méreténél."
Megnéztem a Localst, és szerintem normálisan feltöltötte a kódom.A 8-as feladatban pedig egy kis szövegértésbeli problémám van.
1. Honnan kapom meg a munka kódszámát, mitől függ?
2. Honnan tudom, hogy sikeres volt-e a munka?
3. Honnan tudom, hogy milyen kérdéseket tett fel az óra?
4. Milyen válaszokat kellene bekérnem?Van egy nagyon elvetemült ötletem, hogy a munka kódszámát is a felhasználó fogja beírni, meg a munka sikerességét is, de nem hiszem.
Köszönöm a segítségeteket,
zsambek` -
Alexios
veterán
válasz
trisztan94 #5527 üzenetére
-
trisztan94
őstag
Sziasztok!
Hogyan tudok egy fájlt (jelen esetben egy .sqlite adatbázis) elérhetővé tenni az izolált tárhelyen programatikusan?
Tehát solution root-ból fogja meg és másolja át az izolált tárhelyre.Köszi!
-
zsambek
aktív tag
válasz
Peter Kiss #5524 üzenetére
Ez kicsit bonyolultabbnak tűnik, mint az enyém
Ez mennyire high C# programozás kategória már?
zsambek`
-
zsambek
aktív tag
Menő ez az immediate window!
Új nap, új érettségi. Most a 2009 májusi, idegennyelvűt csináltam. Látni fogjátok, hogy az 5. feladat nem a legszebben sikerült, arra szeretnék kérni, valami tuti ötletet, ha szabad a mester uraktól
. Illetve az utolsó feladat valamiért nem tetszik neki, mert a kimeneti állományban, csak a nem volt elég pénzeseket írja ki, és szerintem azt is elindexelve.
Ja, és még ilyennel nem találkoztam, de ez a Tabulátoros elválasztás, hogy működik?
Amúgy tök durva, sokkal jobban lázba hoz most már egy programozás feladat, mint egy matek, illetve az is érdekes, hogy szerintem, amikor sikerül megoldani egy feladatot, akkor ezerszer jobb érzés fog el, mintha matekból kiszámolnék, egy függvény alatti területet, vagy bármi mást
http://pastebin.com/ZpzA13jc
http://www.jos.hu/down/ErProg/Automata.pdf
Köszönöm szépen,
zsambek` -
kingabo
őstag
válasz
zsambek #5514 üzenetére
"...ha 10 lenne, akkor 5 / 10, akkor 5-t kapok? Ha pedig 10.0, akkor 0,5-t kapok..."
Erre azt tudom javasolni, hogy használd a vs debuggerét! Saját tapasztalatból tudom, hogy sokat tud segíteni nemcsak a hibák feltárásában, de akár a fenti kérdések megválaszolásában. Sőt, sokszor a miértekre is könnyen rá tudsz jönni.
Az Immediate Window-t is ajánlom, ahol futási időben tudsz utasításokat kiadni és megkapod az eredményt egyből. Sajnos Linq-el nem működik (vs2010-ig biztosan) -
Karma
félisten
válasz
zsambek #5516 üzenetére
A kódodat most nem tudom megnézni, de a számításod biztosan nem kóser - ott az a "kivonom az 5600/3600-at" félremegy. Ha kivonogatsz, akkor 5600/3600*3600-at vonj ki, ez ugyanolyan, mint az én cseleztem a tízzel.
De használhatod helyette a % operátort is, tisztább lesz a vége.
SPOILER
int sec = 5600;
int hours = sec / 3600;
sec = sec % 3600;
int min = sec / 60;
sec = sec % 60;Előáll: hours, min, sec
-
zsambek
aktív tag
Szia,
Úgy ahogy szerintem értem..
Megcsináltam most a 2009 októberi érettségit, viszont van egy-két dolog, ami nem tiszta, illetve ezzel az osztással is van bajom, lehet, hogy mégsem értem.
Az én elméletem:
Van egy számom, 5600 elosztom 3600-al, maradék nélkül. Ez visszaad nekünk 1-et (ez az óra), utána 5600-ból kivonok 5600 / 3600-at, és ezt osztom 60-val, így megkapom, hogy hány perc van benne, utána 5600-ból kivonom az 5600/3600-at, és kivonom még az előbbit. Ezáltal meg kellene kapnom a másodperceket is, viszont nem kapom meg. (kicsit belezavarodtam már én is a végére, lehet azért nem jött össze
)
Itt van a programkódom:
http://pastebin.com/R0V4CU6KItt pedig a feladat:
http://www.jos.hu/down/ErProg/Utepites.pdfUi.:A dupla for ciklusra közben rájöttem, hogy a fejemben lefuttattam
Köszi,
zsambek` -
Karma
félisten
válasz
zsambek #5514 üzenetére
1) double-ről intre alakításnál alapvetően ugyanaz a cast és a Convert. Stringnél például már más a helyzet, a sima cast érvénytelen lenne.
2)-3) Összekevertél két dolgot, de akkor inkább végigmegyek a műveleteken.A maradékos osztás (jele: / ), egész számok között működik. Tehát ha egy osztás mindkét oldalán egész számok vannak, az eredmény is egy egész szám lesz.
Például:
25 / 5 = 5, 20 / 5 = 4, viszont 19 / 3 = 6 (elveszett az 1 maradék!), és így logikusan 5 / 10 = 0.Ha az osztás bármelyik fele valós szám, akkor valós osztásra vált a nyelv.
25 / 5.0 = 5.0, 20.0 / 5 = 4.0, 19.0 / 3 = 6.333333, 5 / 10.0 = 0.5A maradékképzés operátor (%) egészek között működik, és a második osztályos osztásból a maradékot adja vissza.
25 % 5 = 0, 20 % 5 = 0, 19 % 3 = 1, 5 % 10 = 5Ennek az egésznek semmi köze a Math.Ceilinghez.
Az egy felső egészrész függvény, és pont úgy viselkedik, mint ahogy eredetileg leírtam. Sajnos a fórumon nem tudok ilyen félszögletes zárójeleket írni.4) Az egész számokat jól vezetted végig, ez a lényeg.
50.5-öt akkor kapsz, ha az osztó vagy az osztandó valós. Ezt elérheted a 10.0-val is, meg akkor is, ha egy double változóba teszed az osztandót előtte. És akkor nyilván nem működik a kitalált gondolatmenetem, hiszen amint visszaszorzód tízzel, megint 505 az érték
Az integer természetesen nem tud tizedesjegyeket kezelni, hiszen definíció szerint egész szám
-
zsambek
aktív tag
Szia,
Végül nem találtam meg a hibámat, hogy miért nem ír ki semmit fájlba, de majd megnézem, ha lesz több időm :/
1. kérdésem, hogy az (int) = A Convert.ToInt32-vel?
2. kérdésem, hogy a Math.Ceilingnél, ha 10 lenne, akkor 5 / 10, akkor 5-t kapok? Ha pedig 10.0, akkor 0,5-t kapok? Ezt jelenti a maradékos osztás?És ugye ez csak ennél a Math.Ceilingnél van?
3. kérdésem, hogy % 10, az azt jelenti, hogy milyen maradékot ad az osztás?
4. kérdésem, hogy "A /10*10 maradékos osztással levágja az utolsó számjegyet, a diff meg az a szám, amit a kerekítés miatt hozzá kellett csapni." Tehát 505 --> elosztom 10-el, akkor 50-et kapok, megszorzom 10-el, akkor 500-at, és a diff, azt pedig a switch case-m megadja? Az a bajom, hogy akkor mikor kapok 50,5-t? ha Double-ben vagyok, vagy ha 10.0-val amit már előbb is leírtam? Intager tud kezelni tizedes jegyeket?Bocsi a hülye kérdések miatt, de így közeledve az érettségihez egyre inkább izgulok, és mindenre akarom tudni a választ, ne csak úgy programozzak, mint egy robot
Köszi,
zsambek` -
Karma
félisten
válasz
zsambek #5511 üzenetére
Üdv újra. Már készültem rákérdezni, hogy mi újság a gyakorlással.
1) Túlkomplikáltad ezt az árszámítást matek és C# oldalon is. C# oldalon azért, mert a Convert.ToDouble hívás felesleges, matek oldalon meg azért, mert ha jó képletet választasz a kerekítés előtti árhoz, nem kell ifelned meg kézzel +71-et hozzáadni.
Van a Math.Ceiling függvény, ami visszaadja a double számhoz legközelebbi, annál nem kisebb egészt. Azaz például 4 -> 4, 4.1 -> 5, 4.9 -> 5, stb.
Ezt kihasználva az árszámítás (57-68. sorod) ennyire alakul át:
jegyek[j].fizetnivalo = (int)(Math.Ceiling((jegyek[j].le - jegyek[j].fel) / 10.0) * 71);A 10.0 nagyon fontos, mert enélkül maradékos osztást csinál a fordító!
A magyar ötforintos kerekítésre sajnos nem alkalmas a Math.Round. De még egy teljesen naív switches megoldás is teljesen kielégítő:
int diff = 0;
switch (fizetendo % 10) {
case 0:
case 1:
case 2:
diff = 0;
break;
case 3:
case 4:
case 5:
case 6:
case 7:
diff = 5;
break;
case 8:
case 9:
diff = 10;
break;
}
fizetendo = fizetendo / 10 * 10 + diff;A /10*10 maradékos osztással levágja az utolsó számjegyet, a diff meg az a szám, amit a kerekítés miatt hozzá kellett csapni.
2) Ez a megközelítés nem biztos, hogy jó eredményre vezet, ha az első megállónál senki se szállt fel, vagy mindenki leszállt már az utolsó előtt. Biztonságosabb, ha a vizsgáló ciklusodat úgy futtatod, hogy a másodiktól az utolsó előtti megállóig fusson (így a szélsőkkel nem foglalkozol).
3) Úgy látom két hiba biztosan van a hetedik feladatodban: egyrészt 48 ülés helyett 49-cel operálsz (a félreindexelés halálfejes hiba); másrészt a 183. sorban lévő belső ciklus teljesen felesleges. Nem is használod a ciklusváltozóját.
De egyébként az elvben nem látok hibát.
A futás közbeni állapotot úgy tudod követni, hogy egy breakpointot raksz a programodba a forráskód bal szélén lévő sávra kattintva. Ekkor ott egy piros kör jelenik meg, és a futás leszünetelődik amikor odaér.
Ekkor a Locals fülön, alapból bal lenn látod a változóid aktuális értékét. -
Dj Sügi
őstag
válasz
Dj Sügi #5492 üzenetére
Sikerült mindent megoldanom, kivéve azt, hogy a textboxba semmiképpen nem tudom meghatározni a maximálisan beírható karakterek számát... Maxlength-el és sima length-el és a textbox properties-nél a maxlength-el is próbáltam, de mindig akármennyi karaktert bele tudok írni. Multiline és readonly lehet ezek miatt van a gubanc!?
-
zsambek
aktív tag
Sziasztok!
Lement a bolondballagás, aztán elballagott a vén diák, utána pedig elkezdtem tanulgatni történelemre, meg magyarra, hogy legalább legyen meg a 4-es, ha már úgyis duplázok infót, meg matekot. A suliban megcsináltam Karma a megoldásod, mindenki csodálkozott, hogy meg lehet csinálni, de még a Dictionary alatt kicsit rezeg a léc nálam.
A mai nap ráuntam a történelem könyv olvasgatásra, és hát úgyis informatikából is érettségizek, tehát infózzunk.
A 2010. tavaszi feladatsort nézegettem, és véleményem szerint ez egy sokkal egyszerűbb feladat, de itt is megakadtam pár helyen, illetve elgondolkodtatott a megoldókulcs, mert néhol más a megoldásom. :/
http://pastebin.com/2AF4MgHb
http://www.jos.hu/down/ErProg/Helyjegy.pdf
Az első kérdés:
Az árat jól határoztam meg, még a kerekítés előtt, illetve, hogyan tudom Math.Round-val úgy kerekíteni, ahogy a feladat kéri? (A jegy árának meghatározásakor az értéket öttel osztható számra kell kerekítenie. (1, 2, 6
és 7 esetén lefelé, 3, 4, 8 és 9 esetén pedig felfelé kell kerekítenie.))A második kérdésem az,:
hogy a 6-os feladatban, amikor számozom, akkor ugye kettőt kellene kivonni a végső eredményből, mivel az első megállót is beleszámoltam, és az utolsót is?A harmadik kérdésem pedig az,:
,hogy a 7. feladatban hol nem történik az adatbetöltés? Valaki írta itt nekem, hogy lehet közben nézni, hogy mikor mennyi érték van egy adott tömbben, de ezt hogyan hozom elő? (esetleg, ha valaki rögtön észrevenné, akkor meg is oszthatná velem a hibámat)
Köszönöm szépen,
zsambek` -
Karma
félisten
válasz
zsambek #5509 üzenetére
Ne add fel! Ott vagy a megoldás kapujában, csak kimerített, hogy túl sok újdonság szakadt rád az elmúlt pár órában. És légy még egy kicsit türelemmel, mert imperatívan ez nem megy egy lépésben.
A legfontosabb alapszabály, amit most be kell tartanod: ne nyúlj a dictionaryhez módosítási szándékkal. A második: ne nyúlj a dictionaryhez módosítási szándékkal. Kőtáblába vésted!
Azt az előző túra során felépítetted, tedd el biztos helyre, és használd úgy, mint egy papíralapú szótárat szokás: keresgélj benne a címszavak alapján.
Van egy rendezett kulcslistád. Tudod róla, hogy hossz szerint növekvő sorrendben vannak a kulcsok benne. Akkor hol van a leghosszabb kulcs?
Természetesen a lista végén
Szedd elő az utolsó elemet és jegyezd fel a hosszát.Utána foreach ciklussal menj végig a kulcsokon, és ha az aktuális kulcs ugyanolyan hosszú, mint az előbb megjegyzett szám, akkor vedd elő a szótárból az ehhez a kulcshoz tartozó szavak listáját, és írd ki a szavakat.
Próbáld meg leírni C#-ban ezeket a mondatokat.
--- ez itt a vágás helye ---
Ha elakadnál, megírom én is:
int maxLength = orderedKeys[orderedKeys.Count - 1];
foreach (string key in orderedKeys)
{
if (key.Length == maxLength)
{
List<string> words = dict[key];
foreach (string word in words)
{
Console.WriteLine(word);
}
}
}A hetedik feladat ezután pofonegyszerű, hiszen ugyanez a foreach (in orderedKeys) ciklus kell, és nem kell bele if, csak egy string.Join(). Ja meg fájlba kell írni képernyő helyett.
Apropó, ha esetleg valami nem fordulna, akkor bocs. Ezt mind fejből írtam, mint az előzőeket is. -
zsambek
aktív tag
Szia,
Ne haragudj, már teljesen hülyének érzem magam
Most itt létrehoztam egy új listát, elkülönülve a Dictionary-mtől, viszont ezt hogyan rakom vissza a dictionary-be, miután visszaraktam, utána hogyan tudom azt megcsinálni, hogy azokat a szavakat írja ki, amelyeknek a key.length-je a leghosszabb? Elnézést az értetlenkedésemért, de én nekem ez nagyon új
zsambek`
-
Karma
félisten
válasz
zsambek #5507 üzenetére
Az első blokk teljesen jó. Azért kell egyébként a ContainsKey, mert a kulcsok között akarsz keresni. A Dictionarynek van Contains és ContainsValue metódusa is, az előbbi konkrét kulcs-érték párost próbál nézni, az utóbbi pedig az értékek között.
Tömböt már tudsz rendezni az egyparaméteres Array.Sorttal, így igazából mindent tudsz
Listákat rendezni nagyon hasonlóan lehet, csak nem kell hozzá külső segítség: van nekik saját Sort metódusuk.
A Sort metódusoknak van olyan formája, ahol te mondod meg, hogy hogyan kell rendezni. Ezt megmutatom példával.
Illetve hiányzik az a lépés, hogy hogyan csinálsz szabadon módosítható listát a Keysből. Ez is elég beszédes.
Jöjjön a kód:List<string> orderedKeys = new List<string>(dict.Keys); // új lista létrehozása a Keys alapján
// És itt jön a lényeg: a rendező függvény.
// Kap két elemet, és egy számot ad vissza, ami a két elem egymáshoz való viszonyát mutatja.
orderedKeys.Sort((szo1, szo2) => {
if (szo1.Length < szo2.Length) return -1; // Negatív szám: az első elem előrébb kerül
if (szo2.Length < szo2.Length) return 1; // Pozitív szám: a második elem kerül előrébb
return szo1.CompareTo(szo2); // ugyanolyan hosszúak? döntsön az ABC-sorrend.
}); -
zsambek
aktív tag
Szia,
Köszönöm a segítséget, de nagyon hülyének érzem magam ehhez a Dictionary-s dologhoz.
Dictionary<string, List<string>> myDic = new Dictionary<string,List<string>>();
foreach (string szo in szotar)
{
var key = Rendez(szo);
if (myDic.ContainsKey(key)) //Ez itt miért nem simán Contains, mint a Listnél, vagy a Stringnél?
{
myDic[key].Add(szo);
}
else
{
List<string> uj = new List<string>();
uj.Add(szo);
myDic[key] = uj;
}
}Először abban meg tudnál erősíteni, hogy ez jó?
Másodszor pedig nem tudom, hogy ezt hogyan tudnám egyáltalán sorba rendezni, igazából szerintem semmit nem tudok sorbarendezni
for (int i = 1; i <= 7; i++)
{
for (int j = 0; j < 40; j++)
{
for (int l = 0; l < k; l++)
{
if (fuvarok[l].nap == i & fuvarok[l].fuvarszam == j)
{
ki.WriteLine("{0}. nap {1}. út: {2} Ft", i, j, penz(l));
}
}
}
}Talán ez volt a maximum, amit csináltam, illetve az egyszerű. Array.Sort, ami a listát sorbarendezi.
Valami ilyesmire gondolnék. Array.Sort(myDic[key.Length]), de ez szerintem nagyon butyutaság. Vagy az Array.Sort az ilyenekre nem való?
A tanításról tényleg annyit, hogy lehet, hogy a számítástechnikás sulikban tényleg jobb az informatikának az oktatása, de nálunk sajnos elég szerényes, az alap dolgokat megtanították, be tudok olvasni, meg, hogy a tömböt, hogy kell kezelni, meg az alap metódusokat, nagyobb, kisebb, meg ilyen kereséseket, de kb. itt meg is állt az oktatás. A többit szerintem Tőled, illetve neten lévő tutorialokból, meg érettségi megoldókulcsokból tanultam.
A LINQ tudásodra pedig irigy vagyok!
zsambek`
-
Karma
félisten
válasz
zsambek #5503 üzenetére
No én is utolértem magam közben, válaszolok erre is...
Egyetértek, a feladatsor határozottan nehezebb mint a korábbi. Bár az oktatás is követné ezt színvonalban. Érződik, hogy próbálják a Pascalt leépíteni (ez önmagában nem baj), csak ennek eszközéül azt választották, hogy az ezt választó diákokat jól megszivatják...
Említettem kicsit korábban, hogy a hetedik és a hatodik feladat ugyanaz, és jobban jársz, ha ebben a sorrendben próbálod őket megoldani. A hetedik tényleg "baromi" nehéz, sokkal nagyobb ráfordítást igényel, mint a korábbi évek zárófeladatai.
Mondjuk annyi különbség van, hogy itt nem kell neked azon gondolkodnod, hogy "mit is kéne kihoznom a meglévő adatokból hogy válaszolhassak a kérdésre?", mert kerek perec leírták, hogy mi a cél: olyan szerkezetet kell felépítened, mint amit a "rendezett" oszlopban látsz. A kérdés csak a "hogyan?".
Ez most az a szituáció, hogy egy vagy két darab sima, egydimenziós lista nem elég. Ez egy "fésűs lista" is lehetne (ahogy a közoktatás csúfolja), de szerintem célravezetőbb, ha kapásból Dictionaryt építesz belőle.
Méghozzá egy Dictionary<string, List<string>>-et, amivel a kulcs az ABC-rendezett szó, és a hozzá tartozó listában vannak a konkrét szavak a szótárból.
A stratégia a következő:
0) Csinálsz egy ilyen Dictionary objektumot (továbbiakban: dict)
1) Ciklusban, egyszer végigmész a szótáron. Minden elemére:
1/a) veszed a szó ABC-rendezett alakját (továbbiakban: key)
1/b) a dict.ContainsKey(key) metódussal megnézed, hogy az adott kulccsal találkoztál-e már
- ha igen, akkor dict[key]-jel megszerzed a hozzá tartozó listát, és annak az Add metódusával eldugod a szót
- ha viszont nem, akkor létrehozol egy új List<string>-et, belerakod a szót, és a listát elteszed a dict-ben a key-hez. Pl.: dict[key] = list;
2) Ha a végére értél, nincs más dolgod, mint rendezni a dict.Keys-t a kulcs hossza alapján, és e szerint kiírni.A hatodik feladat pedig annyi, hogy veszed a maximális hosszú kulcsokat, és sorban kiírod a képernyőre a hozzá tartozó szavakat. Ha a dict megvan, ez pofonegyszerű
Érzem, hogy a 2) lépés elég nagy logikai ugrás, de azért remélem a gondolatmenet átjön. Ha nem, akkor szólj feltétlen.
És egyébként LINQ-kel az egész egy sor.
-
Karma
félisten
válasz
zsambek #5501 üzenetére
Sajnos ez csak részpontszámos megoldás, ugyanis ha a leghosszabb szavak a listában:
kecskebeka
bekakecske
kabekecske...
biatorbagy
agybaboritAkkor csak a kecskebéka anagrammáit írod ki, a feladat pedig azt akarná, hogy mind az öt szó legyen ott, egymásután a kecskések, és utána párban a biatorbágyosok.
-
Alexios
veterán
válasz
zsambek #5503 üzenetére
Bár annyira nem néztem most át a kódod, és nem tudom mennyire ismered a debug-olási lehetőségeket, de azért jóljöhet, ha breakpointokat helyezel el ott ahol nem azt csinálja a programod amit szeretnél, nagyobb eséllyel fogsz rájönni arra, hogy mi a baj magadtól, hiszen látod a változók aktuális értékeit pl.
Bár hirtelen elnézve szerintem az a kód ebben a formában jó.
Viszont ilyet:
Convert.ToString(szo1)
tökfölösleges csinálni, hiszen a szo1 eleve egy string, a foreachnél látszik a deklaráció -
zsambek
aktív tag
Kezdem azt érezni, hogy a korábbi évek feladatai egyre nehezednek.
http://pastebin.com/x28gXepj
A 7. feladatnál eddig jutottam, de ez több sebből is vérzik, mivel már az első List-et se akarja kiírni, mert nem tölti fel. Az az első számú gondom, hogy ez a List-es dolog nekem még nagyon új, igazából az egész C#, meg programozási nyelvek, és olyan dolgokat is benézek, amit egy haladó magának értetődőnek vesz
Remélem ha nem az érettségi előtt, de egyetemen már én is úgy fogok gondolkodni!
Köszönöm,
zsambek` -
zsambek
aktív tag
Ha minden igaz, akkor működik a 6. feladat, de azért beküldöm ellenőrzésre, ha valakinek van valami ötlete.
#region 6. Feladat
int maxhossz = 0;
foreach (string szo in szotar)
{
if (szo.Length > maxhossz)
{
maxhossz = szo.Length;
}
}
List<string> leghosszabb = new List<string>();
foreach (string szo in szotar)
{
if (szo.Length == maxhossz)
{
foreach (string szo1 in szotar)
{
if (Rendez(szo) == Rendez(szo1) && !leghosszabb.Contains(Convert.ToString(szo1)))
{
leghosszabb.Add(szo1);
}
}
}
}
foreach (string leghosszabbanagramma in leghosszabb)
{
Console.WriteLine(leghosszabbanagramma);
}
#endregion
Ú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!
- HP ProBook 430 G8, 13,3" FHD IPS, I5-1135GU CPU, 16GB DDR4, 256GB SSD, WIN 11, 27% áfás számla, 1 év
- Playstation Portal - 3 hónap Bolti Garanciával
- BESZÁMÍTÁS! ÚJ AMD Ryzen 5600X 5700X 5800X 5900X processzor 3 év garancia 27% áfa termékbeszámítás
- BESZÁMÍTÁS! ÚJ AMD Ryzen 8500G / 8600G AMD Ryzen 7 8700G / 7800X3D processzor 3 év garancia 27% áfa
- Remek áron Lenovo ThinkPad x395 AMD Ryzen 7 pro-3700U/16GB/256 SSD/AMD Radeon Vega 10 Grap/FHD/IPS
- Új! Számla + 1-3ÉV Gari! Áfás! Gamer PC - Számítógép! I5 14400F / RTX 5060 / 32GB DDR5 / 1TB M.2 SSD
- Samsung Galaxy Xcover 6 Pro, 6/128 GB, Kártyafüggetlen
- Akciós dokkolók, Lenovo Legion Pro 7 RTX 4080/4090 laptopok, licencek, antivírusok
- Bomba ár! HP ProBook 440 G7 - i5-10GEN I 8GB I 256SSD I HDMI I 14" FHD I Cam I W11 I Gar
- Bomba ár! Dell Latitude E7250 - i5-5GEN I 8GB I 256SSD I 12,5" HD I HDMI I Cam I W10 I Garancia!
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest