Permalänk
Medlem

Program för att lista talpar

Hej!

Jag skulle behöva ett program som räknar ut så många talpar som möjligt som beskriver funtionen y = 2x -3.
Talparen skall vara i formatet "(x,y) (x,y)" och dem skall skrivas ut i en txt fil i ASCII format.
Det spelar ingen roll vilket språk det är.

Tackar på förhand!

Permalänk
Medlem

Nja, tack för hjälpen, men jag var ute efter att de skulle skrivas ut till en .txt-fil, dvs jag skall kunna starta programmet, gå och lägga mig, vakna morgonen därpå och ha t.ex. 2 miljoner talpar i .txt-filen

Det hade varit finfint om någon kunde hjälpa mig med det!

Tack igen.

Permalänk
Medlem

Vad hade du tänkt göra med alla talparen i textfilen sen?

Det finns ju "oändligt" med talpar som lösning till den ekvationen, lista alla sådana har jag svårt att se någon praktisk användning för?

Om du beskriver lite mera vad det hela går ut på och ska användas till, så kanske någon kan hjälpa till. Det luktar dock lite skoluppgift om det hela.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av madah
Vad hade du tänkt göra med alla talparen i textfilen sen?

Det finns ju "oändligt" med talpar som lösning till den ekvationen, lista alla sådana har jag svårt att se någon praktisk användning för?

Om du beskriver lite mera vad det hela går ut på och ska användas till, så kanske någon kan hjälpa till. Det luktar dock lite skoluppgift om det hela.

Nix, inte skoluppgift. jag vet att det finns ett "oändligt" antal talpar, grejjen är den att jag och en polare ska tävla om vem som får ihop flest till 00.00 på fredagen
Därför skulle ja behöva ett program som klarar av detta snabbt och effektivt.

tackar för svar!

Permalänk
Medlem

Såhär kan man skriva det i Haskell:

module Main where main = writeFile "formula.txt" $ unwords [show (x,x*2-3)| x <- [1..]]

och såhär kan man skriva det i Python:

x=0 f=open('formula2.txt', 'w') while True: f.write(str((x,2*x-3)) + ' ') x +=1

Både sätten kommer antagligen göra en fil som blir så stor som filer får vara långt innan du hinner vakna.. Dock testade jag bara i några sek, o då hann filerna bara till 150MB respektive 40MB innan jag avbröt, så det kan ju hända att det blir ngn bugg senare..

Haskellkoden kan du köra med "ghci kod.hs" och sen main om du har ghci installerat, pythonkoden kan du köra med "python kod.py" om du har python installerat. Har du inte ngt så skaffa python, det brukar man ändå behöva förr lr senare.

Permalänk
Glömsk

Så ovettigt att jag måste delta med lite kod.

for(unsigned int i = 0; printf("(%i, %i) ", i, 2*i-3) != 0; i++);

Sen är det ju bara att dirigera output till en fil.

Visa signatur

...man is not free unless government is limited. There's a clear cause and effect here that is as neat and predictable as a law of physics: As government expands, liberty contracts.

Permalänk
Medlem

Tack för all hjälp!

Permalänk
Avstängd

Psionicist,

har du inte missat att unsigned int kommer slå runt ganska snart? Kanske nåt bignum paket vore enklast?

Permalänk
Medlem

kebabbert:
Tar ju rejält med tid att köra igenom en loop 2^31 ggr. När man dessutom kör med output i varje loop tar det ännu längre tid. Dessutom, när i blivit för stort är filen många (>32) GB stor.

Visa signatur

:€

Permalänk
Glömsk

Mmm. Bara att skriva ut paranteserna, komma och space är 20 GB när i är 2^32.

Visa signatur

...man is not free unless government is limited. There's a clear cause and effect here that is as neat and predictable as a law of physics: As government expands, liberty contracts.

Permalänk
Avstängd

Ok. Jag tänkte mig inte för, riktigt. 2^32 är väl ca 4 miljarder? 4GB. Det lät som om killen ville köra ett program i flera dagar (fram till fredag). Trodde att man hinner generera mera än 4GB på ett par dygn.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av kebabbert
Ok. Jag tänkte mig inte för, riktigt. 2^32 är väl ca 4 miljarder? 4GB. Det lät som om killen ville köra ett program i flera dagar (fram till fredag). Trodde att man hinner generera mera än 4GB på ett par dygn.

Han hade nog inte trott han skulle få så många tal.. Filstorleken går ju över 4GB på ett kick (antar att han har ett OS/filsystem som sätter stopp där), och han ville ju ha talen i en textfil..

Permalänk

Om vi antar Psionicist exempel generar 5 MB data/s fyller du en 80 GB hårddisk på mindre än 4.5h.

Hitta på något bättre.

Vill du fortfarande fortsätta med "experimentet", but 'unsigned int' till 'unsigned long long int', alltså ett 64 bit tal.

Överkurs:

Använd papper och penna och räkna till max index du kan använda för att genera ett resultat till ekvationen som inte orsakar overflow om du använder N bits för att lagra indivduella tal. Ähem.

Permalänk
Hedersmedlem

Bara köra denna.

#include <iostream> #include <gmpxx.h> int main() { for (mpz_class i = 0; 1; i++) std::cout << "(" << i << ", " << 2 * i - 3 << ")" << std::endl; }

Eller så har jag missuppfattat totalt.

Nästan onändligt stort tal.

EDIT: Slängde in radbryte efter varje rad efter Myris tjat.

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Medlem

Såhär då?

#include <stdio.h> void main() { for(unsigned long long int l = 0; ; l++) for(unsigned long long int k = 0; ; k++) for(unsigned long long int j = 0; ; j++) for(unsigned long long int i = 0; ; i++) printf("(%i, %i) ", i+j+k+l, 2*i+j+k+l-3); }

Kompilera och starta med att omdirigera stdout till en fil (tex: "progg.exe > fil.txt")

Edit: Eller nej, tänkte jag inte fel nu, behövs det inte castas för något sånt?

Citat:

Ursprungligen inskrivet av vb
Han hade nog inte trott han skulle få så många tal.. Filstorleken går ju över 4GB på ett kick (antar att han har ett OS/filsystem som sätter stopp där), och han ville ju ha talen i en textfil..

FAT32 eller?

morec: Ska inte "std::cout << std::endl;" vara innanför loopen?

Visa signatur

I just love the fact that there is a global integer variable named 'i'. Just think, you will never need to declare your loop variable again!
To avoid collisions where a loop that uses 'i' calls another function that loops with 'i', be sure to stack 'i' and restore it when your function exits.

Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av Myris
Edit: Eller nej, tänkte jag inte fel nu, behövs det inte castas för något sånt?

morec: Ska inte "std::cout << std::endl;" vara innanför loopen?

Vad behöver castas för att göra vad?

Mja, det kan man ju ha om man vill ha lite mer struktur, men jag lade den utanför avsiktligt.

Sen så är det inte standard med void main(), det ska vara int main().

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av m0REc
Vad behöver castas för att göra vad?

Mja, det kan man ju ha om man vill ha lite mer struktur, men jag lade den utanför avsiktligt.

Sen så är det inte standard med void main(), det ska vara int main().

longarna när man ska lägga ihop dom..

Men varför ska den ens göra en endline i slutet av filen?

Jo, och main ska returnera, men jag tyckte inte att standarded spelade så stor roll på ett sånt här program

Visa signatur

I just love the fact that there is a global integer variable named 'i'. Just think, you will never need to declare your loop variable again!
To avoid collisions where a loop that uses 'i' calls another function that loops with 'i', be sure to stack 'i' and restore it when your function exits.

Permalänk
Hedersmedlem

Myris: Ah, vet jag inget om tyvärr.

För att zsh skriver över sista raden annars.

Om man inte skriver in return 0; så returneras det automatiskt.

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av m0REc
Myris: Ah, vet jag inget om tyvärr.

För att zsh skriver över sista raden annars.

Om man inte skriver in return 0; så returneras det automatiskt.

Jag tror, om man inte castar så bör det få samma egenskaper ändå.

zsh?

Är det inte standard att skriva return; eller return 0; dock?

Visa signatur

I just love the fact that there is a global integer variable named 'i'. Just think, you will never need to declare your loop variable again!
To avoid collisions where a loop that uses 'i' calls another function that loops with 'i', be sure to stack 'i' and restore it when your function exits.

Permalänk
Hedersmedlem

Myris:
zsh = Shellet jag använder i Linux.

Nja, det spelar ingen roll, standarden säger bara att main ska vara en int och därmed returnera int, inte hur man returnerar den egentligen.

EDIT: Tror standarden säger så iaf, aldrig läst den själv, bara hört på vad-han-nu-heter-med-svart-gul-avatar.

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Avstängd
Citat:

Ursprungligen inskrivet av m0REc
Bara köra denna.

#include <iostream> #include <gmpxx.h> int main() { for (mpz_class i = 0; 1; i++) std::cout << "(" << i << ", " << 2 * i - 3 << ")" << std::endl; }

Eller så har jag missuppfattat totalt.

Nästan onändligt stort tal.

EDIT: Slängde in radbryte efter varje rad efter Myris tjat.

Jag gjorde en labb i kryptografi förrut, då använde vi stora tal. Som jag minns det, så fanns det nåt bignum paket så man kunde skriva Integer. (I värsta fall kan jag rota fram koden).

Så då blir det nåt i stil med (kommer inte ihåg detaljerna)

#include <Integer.h> .... Integer i = 0; while (1) { std::cout << "(" << i << ", " << 2 * i - 3 << ")" << std::endl; i++; }

så slipper man nästlade loopar (som oxå kommer slå runt senare. Man skjuter bara upp problemet ett tag, problemet finns fortfarande kvar). Jag har för mig att Integer helt enkelt är gmpxx.h i botten...

Permalänk
Glömsk

NTL är ganska bra också, brukar använda det om jag behöver stora tal. Då finns det en klass som heter ZZ, precis som mpz_class och Integer antar jag.

Visa signatur

...man is not free unless government is limited. There's a clear cause and effect here that is as neat and predictable as a law of physics: As government expands, liberty contracts.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Myris

FAT32 eller?

Precis. Iof har väl en del bytt till ntfs iom XP (lr ngt *nix-os/filsystem), men jag gjorde antagandet att många har fat32 fortfarande, speciellt sånna som inte kan programmera

I vilket fall som helst så slipper man problemet med intar som slår runt med båda mina kodexemepel, som dessutom varken kräver kompilering, fula lösningar med flera loopar eller extralibs för bignums.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av vb
Precis. Iof har väl en del bytt till ntfs iom XP (lr ngt *nix-os/filsystem), men jag gjorde antagandet att många har fat32 fortfarande, speciellt sånna som inte kan programmera

I vilket fall som helst så slipper man problemet med intar som slår runt med båda mina kodexemepel, som dessutom varken kräver kompilering, fula lösningar med flera loopar eller extralibs för bignums.

Jag tror inte att allt för många kör FAT32 längre...

Visa signatur

I just love the fact that there is a global integer variable named 'i'. Just think, you will never need to declare your loop variable again!
To avoid collisions where a loop that uses 'i' calls another function that loops with 'i', be sure to stack 'i' and restore it when your function exits.

Permalänk
Hedersmedlem

Myris: Jag kör det på mina Windowsdiskar för att dela filer mellan Windows och Linux. Men bara jag får igång StepMania i Linux så åker Windows ut och jag får ReiserFS/Reiser4 på alla mina diskar.

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.