Hirdetés
- Kormányok / Autós szimulátorok topicja
- Milyen cserélhető objektíves gépet?
- OLED TV topic
- TCL LCD és LED TV-k
- Minden korábbinál több LED zóna került a TCL új Mini LED tévéjébe
- Minidisc-es adatok pc-re - hogyan?
- XMLTV EPG letöltő progi
- Milyen házat vegyek?
- Autós kamerák
- Nvidia GPU-k jövője - amit tudni vélünk
Új hozzászólás Aktív témák
-
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.
-
babyanigirl
csendes tag
válasz Gregorius #849 üzenetére
#include <stdio.h>
#pragma hdrstop
//---------------------------------------------------------------------------#pragma argsused
int main(int argc, char* argv[])
{
FILE *fp=fopen("olvas.txt","r+" );
FILE *f=fopen("ir.txt", "w");
int szam;
char ch,kar;printf("Az eredeti szoveg: ");
while (!feof(fp)){
ch=fgetc(fp);
printf("%c", ch);
}
printf("\nBetuszamolas vegrehajtasa: i=igen n=nem: ");
scanf("%c",&szam);if (szam==105) {
fp=fopen("olvas.txt","r+" );}
}printf("\n") ;
system("pause");
fclose(fp);
fclose(f);
return 0;sajnos csak eddig jutottam bekérem a szöveget kiíratom, de hogy utána az" if "után mit kéne írni azt nem tudom, mondjuk gondoltam vmi "sizeof" tömbös karakter számlálásra de vhogy az sem jött össze, mert nem tudtam tömbbe rakni. Látszik, sajnos nagyon amatőr vagyok benne.
-
Lortech
addikt
válasz babyanigirl #852 üzenetére
Ez itt egy C kód, nem C#, tulajdonképpen miben is kéne írni?
Thank you to god for making me an atheist
-
aktív tag
remek program nem fogsz benne csalódni!
a gyengébb közepes gépeket úgy megeszi hogy öröm nézni az egyetemen kockázatos vállalkozás pl egy helpet lehívni mert könnyen vége szakadhat a fejlesztések
de azért karaj cucc.Bár van másik topic is erre de azért megkérdem itt mert ide is tartozik félig:
Van egy vkinek ilyen MS-es MCP vizsgája?
70-536,70-526 vagy talán 70-505 érdekelne.Youth hides the key to salvation
-
aktív tag
én xp-n használom csak a 2008-at bár itthon elég jó is. mondjuk lehetne gyorsabb is de a célnak egyelőre megfelel.
meg most jobban viszagondolva a suliban még csak 2005 van sryCsak azért kérdeztem a vizsgákat mert gonodlkozom valami ilyesmin azt mondják megéri tanluni rá mert elég sokat ér.
Aztán gondoltam megkérdek vki olyat akinek már van hogy neki mi a véleménye ezekről a vizsgákról. Inkább arra lennék kíváncsi ohgy munkakeresésnél menniyre jó pont az ilyen vizsga.
Azt vágom hogy nehéz megcsinálni őket azt már olvastam elég sok helyen viszont azt is hogy nincs sok ember akinek MCTS képesítéssel rendelkezik ami elég nagy előny lehet.Youth hides the key to salvation
-
Lortech
addikt
Előny minden papír pályakezdőknél, mert átlag végzett emberkék nem nagyon tudnak mit felmutatni a diplomájukon kívül, és ezzel esélyesebb megcsípni egy jobb helyet, előrébb kerülhetsz a sorban. Én java fejlesztőként dolgozom most, úgyhogy végül nem sok hasznát vettem magának a képesítésnek, de amíg felkészültem a vizsgára, sok újat tanultam, és jobban megmaradtak a dolgok.
Thank you to god for making me an atheist
-
aktív tag
Értem köszi a választ!
Még a felkészülésről kérdeznék kicsit ha szabad.
Magad tanultál vagy részt vettél valami iylen méregdrága Számalk vagy netakadémia tanfolyamon?
Ami beszámolókat olvastam neten az derült ki hogy simán fel lehet készülni ilyensmi kurzusok nélkül is.
Egyelőre megvan pdf-ben a könyv az 536-hoz azt nézegetem aztán ha lesz pénzem majd megveszem mindenképp mert úgy mégiscsak jobb meghát gondolom azért a hozzá járó CD se hátrány ha megvan.Egyébéknt én is igy gondolkozom hogy megéri diploma mellé beszerezni valami iylesmi papírt mert ezzel nagyobb esélyed lehet. Van hogy még a diplománál is többet ér egy-egy ilyen.
Youth hides the key to salvation
-
Benmartin
senior tag
válasz babyanigirl #852 üzenetére
szerintem nem kellene minden topikban feltenned a kérdést, kezd egy kicsit erőszakosnak tűnni. ráadásul itt sokkal elnézőbbek újoncokkal, nem úgy mint a prog.hu-n (ahol látom el is utasítottak).
-
Lortech
addikt
Kiemelten tanították a fősuli keretében a .NET-et, és rengeteget programoztam .NET-ben a kötelezők mellett is, de konlkrétan a vizsgára saját felkészülés volt kizárólag. Megfelelő .NET-es alapokkal fel lehet tisztességesen készülni magadtól is. Könyvek jók a vizsgára, CD melléklet annyira nem érdekes, emlékeim szerint azok a kérdések vannak rajta, amik a fejezetek végén már egyébként is ott vannak, meg ezek a kérdések egyébként is lényegesen könnyebbek, egyszerűbbek a vizsgakérdéseknél.
Thank you to god for making me an atheist
-
Syncmaster
csendes tag
sziasztok egy olyan kérdésem lenne, hogyan lehet megvalósitani azt.. hogy egy comboboxba megjelenítsem a meghajtokat?
Mint pl a totalcommanderbe:
[link][ Szerkesztve ]
-
Lortech
addikt
válasz Syncmaster #865 üzenetére
System.IO.Directory.GetLogicalDrives(); metódussal megkapod a logikai meghajtók neveit, a kapott string tömböt végigiterálod és hozzáadod a comboboxhoz.
[ Szerkesztve ]
Thank you to god for making me an atheist
-
Syncmaster
csendes tag
hi.. egy olyan problémám lenne.. 2 monitorom van.. másodlagos monitorra kivetítettem egy formot.. a formon van egy webbrowser és azt szeretném megvalósítani hogy gombnyomásra ide akarom kivetiteni azt amit én a form1 webbrowserjébe látok.. mindent publickáltam mindent elérek probáltam elég sokmindent.. volt h kiirta kevés a memória.. de megjelnni sose jelent meg.. köszi a válaszotokat előre is..
-
yash
senior tag
válasz Syncmaster #867 üzenetére
En magam csinaltam neked egy kis peldat... kis logikvala ra lehet jonni mindenre, amugy eletem elso meghajtokat kezelo programja, Help file nelkul rajottem siman, sajat logikaval, szoval ha hasznalod az agyad, azert annyira nem nehez am! (mod: az Osztaly neve utal ra, hogy eppen masnak akartam neki allni , eppen most tanulom a nyelvet csak )
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace AutomaticProperties
{
class Program
{
static void Entrance()
{
for (int i = 0; i < DriveInfo.GetDrives().Length; i++)
{
if (DriveInfo.GetDrives()[i].IsReady)
{
Console.WriteLine("Drive: {0} Volume label: {1}", DriveInfo.GetDrives()[i], DriveInfo.GetDrives()
[i].VolumeLabel);
}
else
{
Console.WriteLine("Drive {0} is not ready an can not be read!",DriveInfo.GetDrives()[i]);
}
}
Console.ReadLine();
}
static void Main(string[] args)
{
try
{
Entrance();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.ReadLine();
}
}
}
}[ Szerkesztve ]
-
yash
senior tag
Miniprogramozo versenyt hirdetek (jatek)!
A fodij az, hogy mindenki megcsillogtathatja a kepessegeit, es megmutathatja nekunk, hogy o bizony a legjobb es tud valamit, amit mi nem Tehat gyakorlatilag semmi, a lenyeg, hogy agytreningezunk.
A feladat a kovetkezo: primszam kiszamitasa elore elkeszitett kodminta alapjan. A cel az, hogy a meglevo kodot ugy alakitsuk at ASM betetek nelkul es az eredeti szovegeket es funkcionalitast megtartva, hogy a kod a leheto leggyorsabban fusson le. Eredetileg egy szalra van tervezve, de profi programozok vihetnek bele tobbszalu programozast is (peldaul megfelezik a szamtartomanyt, es ket szalon megy a vizsgalat egyszerre). A programnak egyetlen fizikai gepen kell tudnia futni (halozatban szamitas most nem cel). Tovabba a minel kisebb .exe meret is cel, a gyorsasagon felul erre is lehet figyelni (de nem kotelezo). A hibakezelesen lehet modositani, de az eredeti formatum boven megteszi. Tehat a lenyeg a minel optimalizaltabb kod, az eredeti funkciok megtartasa mellett. A leggyorsabb kod a nyertes (azonos hardveren tesztelve), azonos sebessegek mellett a tomorebb kod nyer!
(A teszteles egy fizikailag ketmagu processzoron lesz tesztelve 2 GHz-en.)
Akkor lassuk hat vegre az eredeti forraskodot:
using System;
namespace TestCon
{
class Program
{
static void Main(string[] args)
{
try
{
startApp();
}
catch (FormatException e)
{
Console.WriteLine("\n\nPozitiv egesz szamokat lehet csak megadni.");
endApp();
}
catch (Exception e)
{
Console.WriteLine("\n\nHiba tortent.");
endApp();
}
}
private static void endApp()
{
Console.WriteLine("\n\nA kilepeshez nyomjon le egy billentyut!");
Console.ReadKey();
}
private static void startApp()
{
Int64 szam;
Console.Write("Primszamvizsgalat. Kerem a vizsgalando szamot: ");
szam = Int64.Parse(Console.ReadLine());
if (szam > 1)
{
Console.WriteLine("\nPrimszamitas folyamatban...\n");
if (isPrimeWithCount(szam))
Console.WriteLine("Primszam.");
else
Console.WriteLine("Nem primszam.");
}
else
{
Console.WriteLine("\n\nA vizsgalatot csak egynel nagyobb pozitiv egesz szamokra lehet elvegezni!");
}
endApp();
}
private static bool isPrimeWithCount(Int64 szam)
{
bool val = true;
int counter = 0;
Console.Write("\nOsztoi: ");
for (Int64 i = 2; i < szam; i++)
{
if (szam % i == 0)
{
val = false;
counter++;
Console.Write("{0} ", i);
}
}
if (counter == 0)
Console.Write("nincs\n\n");
else
Console.Write("\n\n{0} osztoja van. ", counter);
return val;
}
}
}[ Szerkesztve ]
-
yash
senior tag
válasz Jester01 #871 üzenetére
1) igen ki kell (kulonben nagyon egyszeru lenne olyan kodot irni, ami az elso osztonal kilep egy break-kel a for-bol pl
2) az Int64 remiszto, de pont emiatt lehet vele jatszani, ha valaki gyorsabb algoritmust tud ket reszre bontott Int32-vel, ugy is neki lehet allni, tehat jo otlet
3) 2GB RAM all rendelkezesre, szukseg eseten virtualis memoria szinten ennyi es fix.
4) eleg egy szamot ellenoriznihajra!
[ Szerkesztve ]
-
ArchElf
addikt
Amúgy a leggyorsabb egy előre leszámolt int 32 prím-sorral lenne (de mondjuk még egy int16 prímsor is tudna gyorsítani a dolgon).
Computed values rulzAE
:mod: marhára unatkozhatsz
[ Szerkesztve ]
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
-
ArchElf
addikt
A teljes Int32 prím-tábla belefér 512MB memóriába (sallangok nélkül persze)...
Már számolja is a gép, bár nem tudom mikorra leszek kész vele...AE
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
-
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
[ Szerkesztve ]
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
-
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
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
-
ArchElf
addikt
Szupergyors lett... Egészben becsatolni sajna nem tudom (képfájlként esélyem sincs).
Ha érdekel átküldöm esteAE
:mod: túl nagy lett, egy postba nem fér el
[ Szerkesztve ]
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
-
ArchElf
addikt
using System;
using System.Collections.Generic;
using System.IO;
namespace TestCon
{
class Program
{
static string PBIN = "prime.bin";
static long PLEN = 1024 * 1024 * 512;
static MemoryStream MPSTREAM;
static FileStream PSTREAM;
static byte[] B235DATA = new byte[] {
0x82, 0x28, 0x8a, 0xa0, 0x20,
0x8a, 0x22, 0x28, 0x88, 0xa2,
0x08, 0x0a, 0xa2, 0x28, 0x82 };
static string PBMD5 = "75b7c17fa77f8d12017cf69fca36c626";
static int B235LENGTH = 15;
static void Main(string[] args)
{
try
{
PSTREAM = File.Open(PBIN, FileMode.OpenOrCreate, FileAccess.ReadWrite);
if (!checkmd5())
{
build();
loadbase();
build2();
}
else
loadbase();
PSTREAM.Close();
startApp();
}
catch (FormatException)
{
Console.WriteLine("\n\nPozitiv egesz szamokat lehet csak megadni.");
endApp();
}
catch (Exception)
{
Console.WriteLine("\n\nHiba tortent.");
endApp();
}
}
private static bool checkmd5()
{
System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
md5.Initialize();
PSTREAM.Position = 0;
byte[] bmd5 = md5.ComputeHash(PSTREAM);
PSTREAM.Position = 0;
string st = "";
foreach (byte b in bmd5)
st += b.ToString("x2");
return (st == PBMD5);
}
private static void build()
{
long flength = PLEN / B235LENGTH;
for (long ix = 0; ix < flength; ix++)
PSTREAM.Write(B235DATA, 0, B235LENGTH);
PSTREAM.Write(B235DATA, 0, ((int)PLEN % B235LENGTH));
}
private static void loadbase()
{
MPSTREAM = new MemoryStream();
MPSTREAM.Capacity = 512 * 1024 * 1024;
byte[] bl = new byte[1024];
PSTREAM.Position = 0;
MPSTREAM.Position = 0;
for (int ix = 0; ix < 512 * 1024; ix++)
{
PSTREAM.Read(bl, 0, 1024);
MPSTREAM.Write(bl, 0, 1024);
}
MPSTREAM.Position = 0;
}
private static void build2()
{
// first byte mark
// 10101100 : 0xac
MPSTREAM.Seek(0, SeekOrigin.Begin);
MPSTREAM.WriteByte((byte)0xac);
int pbx, pby;
for (int ix = 7; ix < UInt16.MaxValue; ix++)
{
if ((pbx = GetPBit(ix)) == 1)
{
for (long iy = ix; iy < UInt32.MaxValue; iy++)
{
if ((pby=GetPBit(iy))==1)
{
long ip = (((long)ix) * iy);
if (ip <= ((long)UInt32.MaxValue))
ClearPBit(ip);
else
break;
}
else if (pby == -1)
iy = (((iy >> 3) + 1) << 3) - 1;
}
}
else if (pbx == -1)
ix = (((ix >> 1) + 1) << 1) - 1;
}
PSTREAM.Position = 0;
MPSTREAM.WriteTo(PSTREAM);
}
private static int GetPBit(long ix)
{
if (ix > UInt32.MaxValue) return -2;
int px = (int)(ix >> 3);
int pp = (int)(ix & 0x07);
MPSTREAM.Seek(px, SeekOrigin.Begin);
byte pb = (byte)MPSTREAM.ReadByte();
MPSTREAM.Seek(-1, SeekOrigin.Current);
if (pb == 0) return -1;
return ((pb >> pp) & 0x01);
}
private static void ClearPBit(long ix)
{
int px = (int)(ix >> 3);
int pp = (int)(ix & 0x07);
MPSTREAM.Seek(px, SeekOrigin.Begin);
byte pb = (byte)MPSTREAM.ReadByte();
MPSTREAM.Seek(-1, SeekOrigin.Current);
byte pm = (byte)((0x01 << pp) ^ 0xff);
pb = (byte)(pb & pm);
MPSTREAM.WriteByte(pb);
}
private static void endApp()
{
Console.WriteLine("\n\nA kilepeshez nyomjon le egy billentyut!");
Console.ReadKey();
}
private static void startApp()
{
Int64 szam;
Console.Write("Primszamvizsgalat. Kerem a vizsgalando szamot: ");
szam = Int64.Parse(Console.ReadLine());
if (szam > 1)
{
Console.WriteLine("\nPrimszamitas (új) folyamatban...\n");
if (isPrimeWithCountNew(szam))
Console.WriteLine("Primszam.");
else
Console.WriteLine("Nem primszam.");
}
else
{
Console.WriteLine("\n\nA vizsgalatot csak egynel nagyobb pozitiv egesz szamokra lehet elvegezni!");
}
endApp();
}
private static bool isPrimeWithCountNew(Int64 szam)
{
Console.WriteLine("Osztoi:");
List<long> osztok = new List<long>();
int result_x;
if ((result_x=GetPBit(szam)) != 1)
{
long bc = szam;
Int64 ix = 2;
while (true)
{
if (GetPBit(bc) == 1)
{
osztok.Add(bc);
break;
}
long sq = (long)Math.Floor(Math.Sqrt(bc));
if ((sq * sq == bc) && (GetPBit(sq) == 1))
{
osztok.Add(sq);
osztok.Add(sq);
break;
}
bool mul = false;
while (ix <= sq)
{
int result;
if ((result = GetPBit(ix)) == 1)
{
if (bc % ix == 0)
{
bc /= ix;
mul = true;
osztok.Add(ix);
break;
}
}
if (result == -1)
ix = (((ix >> 3) + 1) << 3);
else
ix++;
}
if (!mul)
{
if (bc != szam)
osztok.Add(bc);
break;
}
}
}
if (osztok.Count == 0)
{
Console.WriteLine("nincsenek");
return true;
}
else
{
Console.WriteLine("{0} prímtényezőre osztható, melyek a következők:", osztok.Count);
foreach (long l in osztok)
Console.Write("{0} ", l);
Console.WriteLine();
return false;
}
}
}
}Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
-
ArchElf
addikt
Kicsit karcsúsítottam, így belefért egy hozzászólásba. Sajnos így kimaradt egy csomó státusz jelentés - Console.WriteLine("Éppen ezt, vagy csinálom"); - a legenerálás alatt, így csak az üres képernyőt látja az ember egy jó ideig.
Az első futásnál legenerálja az 512MB-os fájlt - ez kb 10 perc egy 2GHz-es gépen -, utána már gyorsan - kb 8-10 mp alatt - indul.
Kicsit dagályos néhol még a kód, nem nagyon törődtem a rövidséggel.AE
[ Szerkesztve ]
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
-
yash
senior tag
Koszonjuk szepen a megfejtest, eddig te vagy az elso Igazabol, egy kommentekkel mespekelt verzionak is tudnank orulni, ha van szabadidod! Ha van vmi publikus ftp szervered vagy http, ahonnan le tudnank tolteni a magyarazatokkal ellatott forraskodot, annak nagyon tudnek orulni! Eleg nehez megerteni ezt a hash logikas kodot. Esetleg a felhasznalt forrastanulmanyokat is csatolhatnad!
mod: az 1 perc az lehet kicsit lassu lesz statisztikai alapon. Egy 9 szamjegyu szamrol az en verziom ha jol emlekszem 5-6 masodperc alatt mondja meg, hogy prim-e. INT64_MAX-szal meg nem probaltam, lehet mindjart adok neki egy kort...
mod2: most keszul a prime.bin-em nemsokara meglatom mit tud a te verziod. azert az a 530 MB RAM megeves nem semmi forditaskor Ebbol is latszik, milyen piti feladahtoz milyen sok otlet lehetseges, es korantsem biztos, hogy meg van hozza minden gepen a szukseges eroforras!
[ Szerkesztve ]
-
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
[ Szerkesztve ]
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
-
yash
senior tag
RAR 30%-osra becsli (most alltam csak neki) a bin fajl tomoriteset. Nem tudom, lehet jol jarnal egy tomoritesi algoritmus beiktatasaval, akkor az 512 MB-s fajjlt gyorsabban huzza be a lemezrol, es ha on-the-fly elegy gyorsan ki lehet bontani, hamarabb indulhatna talan a program. Persze ez reszletkerdes, csak erdekessegkeppen megemlitem! Neha ez is tud gyorsitani jelentosen a dolgokon! (PDA szinkronizacional teszteltem egyszer, hogy egy 100 megas compact SQL adatbazis 12 oras rekordonkenti attoltese helyett a teljes adatbazis egy fajlkent valo, tomoritett atvitele 5 perc szoval azert van kulonbseg sok esetben! van egy ingyenes nagyon egyszeru kis (home hasznalatra ingyenes) ZIP framework, purely written in C#: ComponentAce ZipForge.NET. Par sor az extra kod, esetleg probald felhasznalni!
-
yash
senior tag
147,4 MB compressed (RAR). ZIP-pel sem lehet sokkal rosszabb. 10MB/s IO sebessegnel szeritnem lehet ertelme a dolognak.
-
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
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
-
ArchElf
addikt
folyt.
prímszámítás kommentezve:private static bool isPrimeWithCountNew(Int64 szam)
{
Console.WriteLine("Osztoi:");
// Lista az osztók tárolására
List<long> osztok = new List<long>();
int result_x;
// Ha nem nyilvántartott prímszám akkor elkezdjük keresni
if ((result_x=GetPBit(szam)) != 1)
{
// keresési érték = kezdőérték
// elsőször egyenlő a számmal
long bc = szam;
// prím keresés első lépésének inicializálása
Int64 ix = 2;
// Addig iterálunk, míg minden gyököt meg nem találunk,
// vagy a sor végére nem érünk
while (true)
{
// amennyiben a keresési érték prímszám eltároljuk és kilépünk a ciklusból
// ez nem lehet az eredetileg keresett szám,
// mert akkor az előző feltételnél nem jutottunk volna be ide
if (GetPBit(bc) == 1)
{
osztok.Add(bc);
break;
}
// a négyzetgyökének veszzük a keresési kezdőértéknek
// kezdeti eseben az első iteráció a kezdeti szám négyzetéig keres
// ha eddig nincs találat a szám prímszám és > UInt32
long sq = (long)Math.Floor(Math.Sqrt(bc));
// ha a keresési kezdőérték prím és a négyzete kiadja a
// a keresett keresési kezdőértéket
// kétszer berakjuk a listába és kilépünk a ciklusból
if ((sq * sq == bc) && (GetPBit(sq) == 1))
{
osztok.Add(sq);
osztok.Add(sq);
break;
}
// osztási sort elkezdjük, addig megyünk,
// amíg a négyzetgyököt el nem érjük
bool mul = false;
while (ix <= sq)
{
int result;
// amennyiben az ix (keresési lépés) prímszám,
// megpróbálunk osztani vele
if ((result = GetPBit(ix)) == 1)
{
// ha sikerül az osztás maradék nélkül,
// a keresési kezdőértéket elosztjuk a
// keresési lépéssel és újrakezdjük külső ciklust
// a találta osztót a listához adjuk
// megjelöljük, hogy volt sikeres osztás
if (bc % ix == 0)
{
bc /= ix;
mul = true;
osztok.Add(ix);
break;
}
}
// amennyiben az keresőszámhoz tartozó tartományban (8 szám - 1 byte)
// nincs prím, úgy előre lépünk 8-at
if (result == -1)
ix = (((ix >> 3) + 1) << 3);
// minden más esetben növeljük a keresőszámot 1-el
else
ix++;
}
// ha nem találtunk osztót
if (!mul)
{
// ha a keresőszám != a keresett számmal,
// akkor a keresőszám > UInt32 és prím
// hozzáadjuk a listához
if (bc != szam)
osztok.Add(bc);
// kilépünk a külső ciklusból
break;
}
}
}
if (osztok.Count == 0)
{
Console.WriteLine("nincsenek");
return true;
}
else
{
Console.WriteLine("{0} prímtényezőre osztható, melyek a következők:", osztok.Count);
foreach (long l in osztok)
Console.Write("{0} ", l);
Console.WriteLine();
return false;
}
}
}Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
-
ArchElf
addikt
Ehh
Megoldottam az egészet, gyorsabban 512 MB memória nélkül is...
Egyszerű matek. Úgy tűnik a sok memória és a sok számítás meg feltétel lasabbá teszi az egészet, mint az egyszerű számítgatás.private static bool isPrimeWithCountNewSingular(Int64 szam)
{
Console.WriteLine("Osztoi:");
// Lista az osztók tárolására
List<long> osztok = new List<long>();
long bc = szam;
Int64 ix = 2;
bool search = true;
while (search)
{
long lr;
long sq = (long)Math.Floor(Math.Sqrt(bc));
if ((lr = GetPrimes(szam, ref bc, ref ix, ref search, sq)) != 0)
osztok.Add(lr);
}
if (osztok.Count == 0)
{
Console.WriteLine("nincsenek");
return true;
}
else
{
Console.WriteLine("{0} prímtényezőre osztható, melyek a következők:", osztok.Count);
foreach (long l in osztok)
Console.Write("{0} ", l);
Console.WriteLine();
return false;
}
}
private static long GetPrimes(long szam, ref long bc, ref Int64 ix, ref bool search, long sq)
{
long oszto = 0;
bool mul = false;
while (ix <= sq)
{
if (bc % ix == 0)
{
bc /= ix;
mul = true;
oszto = ix;
break;
}
ix++;
}
if (!mul)
{
if (bc != szam)
oszto = bc;
search = false;
}
return oszto;
}FCK... mást nem akarok mondani.
AE
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
-
ArchElf
addikt
Találtam egy példát, ahol gyorsabb az előre leszámolt
Primszamvizsgalat. Kerem a vizsgalando szamot: 998877665544332111
Primszamitas (új) folyamatban...
Osztoi:
nincsenek
Primszam.
Számítás időtartama: 27917 ms
Primszamitas (math) folyamatban...
Osztoi:
nincsenek
Primszam.
Számítás időtartama: 71188 ms
A kilepeshez nyomjon le egy billentyut!AE
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
-
ArchElf
addikt
Túl kevés ebben a számítás (és nem elég nagy a számtartomány), hogy gazdaságosan párhuzamosítható legyen.
Ja és mind a két módszer párhuzamosítható, így mind a kettő gyorsabb lesz
AE[ Szerkesztve ]
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
-
Jester01
veterán
És hány darab prím van Int32-ben? Gondolom megnézted nem éri-e meg jobban magukat a prímeket tárolni (akár delta kódolással).
Jester
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Honda topik
- gban: Ingyen kellene, de tegnapra
- Redmi Note 12 4G - valaki fizetni fog
- Kormányok / Autós szimulátorok topicja
- ubyegon2: Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
- Kupon kunyeráló
- Politika
- EAFC 24
- Milyen cserélhető objektíves gépet?
- Debrecen és környéke adok-veszek-beszélgetek
- További aktív témák...
- Playstation PS VR2 GARANCIÁLIS
- Eladó kerregő Lian Li Trinity II Performance AIO 360mm!
- Latitude 5520 15.6" FHD IPS i5-1145G7 Iris Xe G7 16GB 512GB NVMe WIFI 6 gar
- GAMER PC - RTX 2060 6GB - RYZEN 5 4500 - 16GB DDR4 RAM - 240GB SSD - 500GB HDD
- Új iPhone 14 Pro 256GB deep purple gyári független 6 hó gari