Új hozzászólás Aktív témák
-
sghc_toma
senior tag
igazából még az sem teljsen, mert nem tudja a shader model 3-at.. pixel shader-ből csak a 2.0 megy neki.. DX9-re is meg lehet írni szerintem a prímszámos mókát, csak azzal már viszonylag sokat kell szívni, nem ilyen 10 perc alatt összedobom kategória (pl: nincsen natív integer típus, nehezebb kezelni a system memó és a VGA memó közti adatmozgatást.. meg még egy-két dolog, amibe most inkább nem megyek bele, mégiscsak egy C#, és nem egy GPGPU topic-ban vagyunk
)
-
sghc_toma
senior tag
egyelőre C++ (a shader rész meg HLSL), de holnap akkor átírom C#-ra..
32-esprimrol az enyem is enterre eldonti
mármint az a kód, ami a #870-ben van? az nekem ((2^32)-1)-re jópár másodpercig számol egy T7500-ason (2.2GHz)..DirectX-bol van 10-es verionk, de csak igma950 fele
gma950 nem tud DX10-et.. -
ArchElf
addikt
folyt.
A program működése közben az egész fájl MemoryStream-ben van (loadbase()) és az összes keresési művelete abból hajtja végre. Ez nagyságrenekkel nagyobb, mint a file IO. Mondjuk látszik is a teljesítményen (az első megvalósításom File IO alapú volt, ott a 7-es sort 1.5-2 óra körül akarta megcsinálni MemorySteram-ből megvolt 1:34 perc alatt).A programot folytatandó: A bit-kódolás az eredeti byte kódolás alapján történik, pl az első 3 byte:
a c| 2 8| 8 a|...
--------+--------+--------+...
10101100|00101000|10001010|...
--------+--------+--------+...
|111111 |22221111|...
76543210|54321098|32109876|...Kicsit fejére fordítottnak tűnik, de ezt a bitkódolás miatt van (számolni egyszerűbb így, mintha bitsorrendben lenne - amúgy meg ha little-endian rendszerben néznénk, jól rakná ki a sort).
AE
-
ArchElf
addikt
Az 1 p az nem a számítás, hanem a program indítása.
Mindenesetre ez most sem mérvadó, mert most látom, hogy 11 óra óta fut a mailbox-jaim és a home folderem indexelése, és az elég sok IO-t eszik. Szóval lehet hogy emiatt indul lassan a program. A prímtényezőkre bontást megcsinálja már 2-3mp alatt. Ha nem csak egyszer kellene számolni, akkor szupergyorsnak lehetne minősíteni.
Amúgy szóban itt is tudom kommentelni.
build() + build2()
A PBIN fájl feladata: Minden BIT egy egy számot jelent a számsorban az 0-UInt32 tartományban. A fájl generálásnál az alapötlet az volt, hogy végig feltöltöm 0xff értékkel és aztán 2-től az összes prímszámra az összes szorzóra kinullázom a biteket. A prímszám úgy jön ki, hogy ha kinullázom az 2 összes szorzatát (kivéve saját magát), akkor a sorban következő szám a 3 lesz. Kinullázom az összes 3-ast (kivéve a 3-at), így a 4 már ki lesz nullázva, a következő szám az 5. Az 5-ösöket is kinullázom, a 6 már nulla, jön a 7, utána a 8-9-10 már kész, jön a 11... és így tovább. Másrészt a szorzókat is úgy választom meg, hogy csak az eddig ki nem nullázott számokkal szorzok. Pl 11 nál az első szorzó a 11 lesz (hiszen ezalatt már mindent leszoroztunk), 12-vel nem kell szorozni (hiszen az 2*2*3), a következő a 13 lesz... így elég "gyorsan" legenerálja az UInt32-es sort. Náhány perc alatt.
Mivel azonban gyorsítani szeretném a számolást tudom hogy a 2-3-5 szorzatai (bájtokban) egy 15 bájtból álló sorozatot alkotnak, elég ha ezzel inicialzálom az 512MB-os tömböt és a számolást a 7-esnél kezdem (a 2-3-5-7 kezdősorozat már 105 bájt hosszú, és nem volt kedvem ezt mind bepötyögni és leellenőrizni).
A hash függvény arra kellett, hogy a jól (!) legenerált PBIN fájlt leellenőrizzem, hiszen ez tartalmazza az összes prímet 2-UInt32 -ig.
folyt...AE
-
ArchElf
addikt
Amikor debug módban futtattam az első prímszámítás (7-es sor) 23 órát akart futni.
De release módban végigszámolja az összes 7-el osztható számot az int32 tartományon. Látom ám már hogy egy idő után az IO nagyobb korlát lesz, mint a számolás.
Ehh, memory steram-en, kellene számoltatni...AE
-
ArchElf
addikt
Amennyiben egy Int64-nek nincs Int32-es gyöke, úgy prímszám...
Ez a megoldás az Int64-es kérdésre
Kicsit részletesebben: a gyökkeresést elég elkezdeni a szám négyzetgyökétől lefelé, mivel bár lehetnek afeletti gyökei is, de ahhoz tartoznak négyzetgyök alattiak. Amennyiben azok megvannak, úgy megkapjuk a négyzetgyök felettieket is. Amennyiben nincs négyzetgyök alatti gyöke, biztos nincs afeletti sem.
Az Int64 pedig ugyebár Int32*Int32...AE
-
Gregorius
őstag
Felteszem a VS 2008 SP1-et már telepítetted. Ha nem, pótold.
Az alapok:
1. Végy egy projektet
2. Adj hozzá egy új elemet: LINQ to SQL Classes. (Az ADO.NET Entity Data Model is hasonló célú, de a LINQ to SQL könnyebb és gyorsabb egyszerű adatbáziskezelésre, bár van benne néhány kellemetlenség, amit egyre fárasztóbb körbelőni, ahogy bonyolódik az alkalmazásod.) Ne felejts el nevet adni a fájlnak, legyen mondjuk EShop.dbml.
3. Kapsz egy üres felületet. Tanács szerint nyisd meg a Server Explorert, ha itt nem látod az adatbázisod, akkor fent ott van a "Connect to Database" gombóc, azzal hozzá kell adni. Majd ugyanebben az ablakban maradva kiválogatod, hogy az adatbázisokból mivel akarsz foglalkozni és egyszerűen ráhúzod az üres felületre. Mentés, bezárás.És ennyi, az infrastruktúra egyik fele készen van. A következő módon tudsz pl. egy tábla tartalmából listát csinálni:
List<Customers> customers;
using( var db = new EShopDataClasses() )
{
customers = db.Customers.ToList();
}A WPF oldal egy kicsit gáz, ugyanis habár a WPF-nek ezerszer jobb (lesz) az adatkötése (mihelyst rendes designer támogatás is lesz hozzá), utolsó értesüléseim szerint a WPF még nem rendelkezik olyan szofisztikált griddel, mint a WinForms. (A CodePlexen már van valami előzetes változat, amibe csak beledobod az adatot és mindent elintéz, de még nem az igazi) Úgyhogy inkább dolgozzunk azzal, amink van és csináljunk egy egyszerű megjelenített listát, amiben még csak lépkedni sem lehet kurzorral.
Ha WPF appot hoztál létre, akkor elvileg már van egy Window1.xaml-ed, használjuk ezt. Fejléc is kell, úgyhogy egy StackPanelben egymás alá rakjuk a fejlécet és egy ItemsControlt, ami a lista elemeit jeleníti meg. (Haladóknak van HeaderedItemsControl, de ott stílusokkal is kell vacakolni.) Kissé fapados és kézihajtányos, de erre a célra most jó lesz.
Lévén szeretnénk ha a fejléc és a tartalom nem csúszna el egymástól, mindkét helyen egy gridet fogunk használni közös méretezéssel. Az egyszerűség kedvéért most csak két oszlopot csinálok meg. A fejléc grid így néz ki:<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="Customer ID" />
<TextBlock Grid.Column="1" Text="Company name" />
</Grid>A tartalomsablon szinte azonos vele:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding CustomerID}" />
<TextBlock Grid.Column="1" Text="{Binding CompanyName}" />
</Grid>Ahol a Binding mondja meg, hogy oda majd a CustomerID illetve a CompanyName mező kerül. A fix méretezés kicsit gáz, rá lehet venni a grideket, hogy együtt méreteződjenek, de az már a haladó kurzus része.
Az egész összeépítve:<StackPanel>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="Customer ID" />
<TextBlock Grid.Column="1" Text="Company name" />
</Grid>
<ItemsControl Name="DataList" ItemsSource="{Binding}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding CustomerID}" />
<TextBlock Grid.Column="1" Text="{Binding CompanyName}" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>Itt két dolog van, amit még nem érintettem: az ItemsControlon a Name teszi lehetővé, hogy kódból hivatkozzunk rá, továbbá még meg kell adni az ItemsControlnak, hogy az elemeit honnan vegye. Ez legyen egyszerűen {Binding}, akkor a saját DataContext-jéből veszi az elemeket, azt pedig kódból máris beállítjuk a főablak Loaded eseménykezelőjében, itt ér össze a WPF és a fentebb lekért adat:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
using( var db = new EShopDataContext() )
{
this.DataList.DataContext = db.Customers.Take(10).ToList();
}
}És már készen is vagyunk, el lehet indítani, lehet csodálkozni vagy borzonkodni a gagyi adatlistánkon. Hogy ne hányja tele a képernyőt csak az első 10 rekordot kéri le a fenti kód. Ha az összes kell, egyszerűen töröld ki a Take(10)-et, viszont akkor úgy kell módosítani a layoutot is, hogy működjön a scrollozás.
Ha esetleg komolyabb adatkezelő projektbe fogsz, akkor a WPF-et a helyedben inkább hanyagolnám és maradnék WinForms alatt, ott használható az ArchElf által emlegetett DataGridView is, azt meg úgy szabhatod testre, ahogy tetszik.
-
ArchElf
addikt
VS.NET 2008-at nem ismerem, de 2005-ben a DataGridView vezérlőt kell használni.
Ehhez kell még egy DataSet komponens is (de a használt varázsló legyártja majd neked). Ha felrakod a formra a DataGridView-t onnan varázslók segítségével már beállítható a megjelenítendő tábla:
DataGridView Tasks -> Choose Data source -> Add Data Source -> Database
Innen már szerintem elég egyértelmű. Kiválasztod az adatbázis szervert és az adatbázist (vagy megírod a connection string-et), kiválasztod a táblát és a megjelenítendő vezérlőket.
A DataGridView-n beállítod, hogy látszódjanak a mezők a fejlécek, az átrendezhetőség, a dokkolás a tartalmazó konténeren, stb.AE
-
-
Lortech
addikt
Létezik, főiskolákon egyetemeken.
El kell végezni egy programozói szakot.
Papír arra jó általában, hogy egyáltalán behívjanak interjúzni, de aztán egyből kiderül, hogy ér-e valamit a papírod.
MCTS vizsgák vannak programozás / .NET témakörében, pl. 070-536 a .NET 2.0 alapvizsga, aztán vannak modulok, pl. windows forms, web-, elosztott alkalmazások, amik az előzővel együtt MCTS képesítést adnak.
Ezen vizsgák elvégzése nem a programozói kvalitásodat vizsgálja, mert azt alapnak tekinti, nincsenek hagyományos programozással kapcsolatos kérdések, hanem az adott .NET frameworkos részekben szerzett tudásodat, tapasztalataidat vizsgálja.A hivatalos tananyagos könyv 900 oldal körül van egy-egy modulhoz, és sokminden nincs is benne, mert igen specifikus kérdések is lehetnek. Viszonylag nehezek egyébként, vágni kell a témát, és elég pontosan, nem csak kb.
-
ArchElf
addikt
-
ArchElf
addikt
Kicsit magyarabbul
A meghívó osztály:class Gyümölcsszedő
{
static void Main(string[] args)
{
Console.WriteLine(Leszed("Alma.dll"));
Console.WriteLine(Leszed("Körte.dll"));
Console.WriteLine(Leszed("Cseresznye.dll"));
Console.WriteLine(Leszed("Dió.dll"));
}
static string Leszed(string GyümölcsFa)
{
try
{
Assembly asm = Assembly.LoadFrom(GyümölcsFa);
IGyümölcs gyümölcs = (IGyümölcs)asm.CreateInstance(asm.GetTypes()[0].FullName);
return gyümölcs.Megkóstol();
}
catch
{
return string.Format("A [{0}] nem létező gyümölcsfa!", GyümölcsFa);
}
}Az Interfész:
public interface IGyümölcs
{
string Megkóstol();
}A dinamikusan linkelt dll-ek:
Alma.dllpublic class Cseresznye : IGyümölcs
{
public string Megkóstol()
{
return "A Cseresznye kukacos volt... :(";
}
}Körte.dll
public class Körte : IGyümölcs
{
public string Megkóstol()
{
return "A Körte éretlen volt... :(";
}
}Cseresznye.dll
public class Cseresznye : IGyümölcs
{
public string Megkóstol()
{
return "A Cseresznye kukacos volt... :(";
}
}A kimenet:
C:\temp\Developer\Gyümölcsszedő\Gyümölcsszedő\bin\Release>Példaprogram.exe
Az Alma finom érett volt! :)
A Körte éretlen volt... :(
A Cseresznye kukacos volt... :(
A [Dió.dll] nem létező gyümölcsfa!AE
-
ArchElf
addikt
Főleg akkor látod a hasznát, amikor egy viszonylag kiterjedt objektum öröklési fád van, és egy-egy függvénynek a fában levő osztályok (mármint a példányosított osztályok) közül csak bizonyos tulajdonságokkal rendelkezőket kell feldolgozniuk.
Mivel egy osztály több interfészt is örökölhet, így az interfészek kifejezetten alkalmasak az osztály alapvető feladatain kivül álló működés definiálására.
Huhh... átolvasva nem tűnik túl érthetőnek, de remélem átmegy belőle valami...AE
-
Lortech
addikt
Dehogyis zavar.
Csak látszik, hogy hiányoznak alapok. Egy Windows Forms alkalmazást látszólag könnyű összedobni, mert csak feldobálsz egy - két controlt, rányomsz, valami eseménykezelőt összegányolsz, azt csinál valamit, és ez sikerélményt ad.
Valójában viszont egy Windows Forms vagy WPF alkalmazás eléggé összetett, sok olyan elemet használ, ami nem kimondottan kezdőknek való, egy csomó tudást feltételet. Nem árt előtte velük tisztában lenni. Pl. OOP, osztályok, típusok, metódusok eventek, delegáltak, láthatóság, élettartam stb, ezek a nagyon alap dolgok, amiket jóesetben is hónapokba telik normálisan elsajátítani. Ahhoz tudnám hasonlítani, mintha beülnél egy ferrariba úgy, hogy előtte még biciklin sem ültél.
Az, hogy kézzel bekötsz egy eseménykezelőt, az nem gányolás. Inkább még a designeres létrehozást nevezném annak, de egyiksem az.
Kódba túrkálás??!Programozó akarsz lenni vagy mifene, nem kattintgató kisiparos. Én is használom a Visual studio sok kényelmi szolgáltatását, de azért ha elémraknak egy csc-t egy notepadet, meg egy az msdnt, akkor se vagyok meglőve. Az a véleményem, hogy először kell megtanulni designer nélkül létezni, és ha már megy nélküle is, akkor lehet használni. Aztán lehet, hogy akkor meg már hatékonyabban fog menni kézzel a móka.
Nem tudom, még... elmondod?
Dehogy mondom. Elmondhatnám 5 mondatban, de azzal nem mennél semmire, max azok értenék akik már amúgyis tudják. Kisregénybe meg nem kezdenék. Vannak jó könyvek ahol sok-sok oldalt szentelnek ezeknek, példakódokkal. -
Lortech
addikt
Az lehet, hogy tudod mi a szó, de technikailag is tudod, hogy mit jelent .NET-ben egy event? Tudod mi az a callback, delegate, multicast delegate, leiratkozás, feliratkozás, tudod, hogy hogy vannak ezek megvalósítva, hogy működnek?
nem gondoltam volna, hogy csak ilyen XAML gányolással lehet elővarázsolni... kicsit fapadosnak tűnik nekem.
Mi a gányolás ebben?! Semmi. Meg "elővarázsolni"? Nincs ebben semmi varázslat, ha ugyanolyan támogatás lenne eventekre mint a windows forms esetén, akkor is ugyanezt a kódot generálná, mint amit így kb. kemény két billentyűleütéssel hozzáadsz. -
Lortech
addikt
Windows Formsról volt szó..
WPF-nél az elem létrehozásánál az intellisense felsorolja az eseményeket is, villám ikonnal, és ha ráböksz akkor egyből fel is ajánlja, hogy create new event handler, a xaml mögötti c# kódban létre is jön a kezelő.
Pl írod, hogy <Button szőköz és itt dobja fel az intellisense a listát. -
amargo
addikt
Egy integrális típus értékét meghatározott módon felsoroló típusúvá alakíthatjuk. Ha az érték nem esik a felsoroló típus értékhalmazába, a konverzió eredménye nem meghatározott:
enum flag { x=1, y=2, z=4, e=8 };
// tartomány: 0:15
flag f1 = 5;
// típushiba: 5 nem flag típusú
flag f2 = flag(5);
// rendben: flag(5) flag típusú és annak tartományán belüli
flag f3 = flag(z|e);
// rendben: flag(12) flag típusú és annak tartományán belüli
flag f4 = flag(99);
// meghatározatlan: 99 nem esik a flag tartományán belülre
Az utolsó értékadás mutatja, miért nincs automatikus konverzió egészrõl felsoroló típusra;
a legtöbb egész érték ugyanis nem ábrázolható egy adott felsoroló típusban. -
Lortech
addikt
Na várjál.
Azt hiszem, ez szokott lenni a tankönyvi példa:
enum Het {hetfo, kedd, szerda, csutortok, pentek, szombat, vasarnap}Ekkor lesz egy Het nevű típusod. Ebből csinálhatsz változót, ami a Het.hetfo, kedd ... stb értékeket veheti fel. Ezzel azt csinálhatsz, amit akarsz, átadhatod paraméterként, összehasonlíthatod más Het típusú értékekkel, lekérheted a sorszámát az értéknek stb. Mondjuk átadhatod egy függvénynek, hogy milyen nap van ma, és az az értéktől függően csinál majd valamit. Átadhatnád számokként (0..6), vagy stringként is, de ez azért jó a számhoz képest, hogy az érték egyben a szöveges neve, ergó nem kell utánanézni, hogy melyik sorszám milyen szemantikával rendelkezik, illetve sztringhez képest azért jó, mert nem tudod elgépelni, illetve ha mégis, az fordítási idejű, szintaktikai hiba, nem szemantikai.
Kerestem egy példát.
[link]Igazából meg lehet lenni nélkül, de néha adja magát.
-
Lortech
addikt
Nevesített jelzőértéknek szoktam használni. Mondjuk van egy függvény, ami kétféleképpen működik, és átadsz paraméterként egy enum értéket, ami jelzi, hogy épp melyik kell.
enum algoritmus {buborek, quick, shell}
class {
void rendez(int[] tomb, algoritmus alg)
{
if (alg == algoritmus.buborek)
{...}
else if (alg== algoritmus.quick) {...}
...
}
...
rendez(szamok, algoritmus.quick);Megcsinálhatnád, hogy átadsz egy int-et (valójában az enum is castolható intté, 0-tól vannak sorszámozva a címkék, de szabályozhatod is a típusdefinícióban) , de akkor meg fejben kell tartani hívás helyén is meg a fogadó oldalon is..
Vagy persze lehet külön függvényeket is gyártani minderre, az a legtisztább, de a lényegét meg lehet érteni a példából.
Ú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!
- BESZÁMÍTÁS! Sony PlayStation 4 PRO 1TB SSD fekete játékkonzol extra játékokkal garanciával hibátlan
- LG 48GQ900-B - 48" OLED - 4K 3840x2160 - 138Hz & 0.1ms - G-Sync - FreeSync - HDMI 2.1
- Lenovo ThinkCentre M720q/ Dell OptiPlex 3060- 3070/ Hp EliteDesk 800 mini, micro PC-Számla/garancia
- BESZÁMÍTÁS! Gigabyte B450M R5 5600X 16GB DDR4 512GB SSD RTX 3060 12GB Rampage SHIVA Seasonic 520W
- ÁRGARANCIA!Épített KomPhone Ryzen 5 7600X 16/32/64GB RAM RX 7700XT 12GB GAMER PC termékbeszámítással
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged