shuf -i 1-39 -n 8 -o textest.txt
Miten saan samalle riville, kun nyt ne tulee päällekkäin? Tuo -i vipukaan ei varmaan toimi, kun numerot ovat sekajärjestyksessä, low to hi olisi tarkoitus?
jos toistan komennon niin vanha jyrätään, mikä ei olisi tarkoitus.
Olisi tarkoitus saada tulostamaan tekstitiedostoon 8 arvottua numeroa 1-39:stä kymmenelle riville. Watch ei kykene toistamaan, vaan kirjaa pelkkää sotkua. mutta jos ensin saisi edes sen yhden rivin oikein, niin olis hyvä alku. Netistä olen jo toista päivää etsinyt apuja, mutta aina kaatuu johonkin :)
Miten saan samalle riville, kun nyt ne tulee päällekkäin? Tuo -i vipukaan ei varmaan toimi, kun numerot ovat sekajärjestyksessä, low to hi olisi tarkoitus?
jos toistan komennon niin vanha jyrätään, mikä ei olisi tarkoitus.
Olisi tarkoitus saada tulostamaan tekstitiedostoon 8 arvottua numeroa 1-39:stä kymmenelle riville. Watch ei kykene toistamaan, vaan kirjaa pelkkää sotkua. mutta jos ensin saisi edes sen yhden rivin oikein, niin olis hyvä alku. Netistä olen jo toista päivää etsinyt apuja, mutta aina kaatuu johonkin :)
Vastaukset 12
Vanhimmat
http://cs.stadia.fi/~silas/ohjelmointi/c_opas-_Paras_-2.html
Tuon poimin netistä lukuisten eri kielellä tehtyjen joukosta.
Itse olen Basicilla tuollaisia kirjoitellut silloin kun numeroita oli 36 joista arvottiin 6.
Tuota pitääkö tuo ohjelma ensin kääntää?
Tuolta luin jotain
http://www.ubuntugeek.com/how-to-install-c-and-c-compilers-in-ubuntu-and-testing-your-first-c-and-c-program.html
Hieman menen sekaisin, kun olen tottunut lähinnä bash jne. helpohkoihin skripteihin :)
Ei ole tehtävä(jos nikkis on kys), vaan ihan mielenkiinnosta yritän :)
Eiku hei. Tuo arpoo myös lisänumerot, niitä ei tarvitsiskaan.
#include
#include
#include
int cmpfunc (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
int main()
{
/* alustaa satunnaislukugeneraattorin - tämän on oltava näin tai muuten rand tulostaa todennäköisemmin samoja numeroita */
srand(time(NULL));
/* hae 7 eri satunnaislukua väliltä 1 ja 39 */
int c = rand() % (39 - 1 + 1) + 1;
int d = rand() % (39 - 1 + 1) + 1;
int e = rand() % (39 - 1 + 1) + 1;
int f = rand() % (39 - 1 + 1) + 1;
int g = rand() % (39 - 1 + 1) + 1;
int h = rand() % (39 - 1 + 1) + 1;
int i = rand() % (39 - 1 + 1) + 1;
/* tarkista ettei numerot ole samoja tai kerro totuus */
if (c == d || c == e || c == f || c == g || c == h || c == i || d == e || d == f || d == g || d == h || d == i || e == f || e == g || e == h || e == i || f == g || f == h || f == i || g == h || g == i || h == i) {
printf ("en osaa!\n");
}
else {
int numerot[] = {c, d, e, f, g, h, i};
int n;
qsort(numerot, 7, sizeof(int), cmpfunc);
printf("\nTyhmyysveron oikeat numerot ovat: \n");
for( n = 0 ; n < 7; n++ ) {
printf("%d, ", numerot[n]);
}
printf("\n\n");
/*
Todellisuudessa lottokone arpoo numerot siten että jokainen arvottu pallo vähentää pallojen määrää joka on aluksi 39. Tästä johtuen ohjelman pitäisi osata poistaa juuri oikea numero väliltä 1 ja 39 ja laskea seuraava satunnaisluku vasta sitten. Kuten arvata saattaa, mitään yksinkertaista tapaa tähän ei ole, joten ohjelma laskee satunnaisluvun 7 kertaa 39 "pallon" joukosta. Kaikille onnenonkijoille tiedoksi, on huomattavasti helpompaa leikata paperista 39 samankokoista palaa, numeroida ne, sulloa kaikki muovipussiin ja ravistaa ne sekaisin. Vetämällä 7 lappua olet loihtinut lottonumerot huomattavasti satunnaisemmin kuin mihin tietokone tulee koskaan pystymään. Bonuksena, voit vetää pussin päähäsi.
*/
}
return(0);
}
ja includet on tietysti
stdio.h
stdlib.h
time.h
vaan eipä näy tällä palstalla teksti
nuin tuohon tulee tietysti vielä } ennen viimeistä returnia ja sitä edeltävän tekstin ei tietenkään tarvitse olla lähdekoodissa (mutta olisi hyvä olla) ja kun tallentaa tekstin vaikka lotto.c nimellä niin se kääntyypi näppärästi komennolla
gcc lotto.c
tai miehekkäämmin
cc lotto.c
Yhden arvontarivin saat näin
shuf -i 1-39 -n 8 | sort -n | xargs echo
Voit tehdä bash-shellskriptin mihin pistät for-loopin ja tuo rivi sinne loopin sisään
Shellskriptin tulostuksen voi sitten ohjata tiedostoon, muuten se tulostaa vain näytölle.
Turha luulo, en vaan osaa. Yritin vääntää skriptiä, mutta tiedostoon tuli vain pätkiä skriptistä, eikä yhtään numeroa :D
Tuo putkitus muuten toimisi ja numerotkin ovat samalla rivillä.
Tarkoititko jotain tällaista:
for i in {1..10}
do
shuf -i 1-39 -n 8 | sort -n | xargs >> lottorivit.txt
done
Elikkä kirjoita yllä oleva teksti päätteelle ja paina enteriä, niin satunnaisnumerot ovat kymmenellä rivillä tekstitiedostossa..
$ cat lottorivit.sh
_________________________
#!/bin/bash
for rivi in {1..10}
do
shuf -i 1-39 -n 8 | sort -n | xargs echo
done
_________________________
Skriptille ajoluvat
$ chmod a x lottorivit.sh
Skriptin ajo (huom. piste keno :)
$ ./lottorivit.sh
Jos toimaa tuo ja oot innokas lottooja niin voit käynnistää skriptin ilman mitään piste keno tms. härdelleiitä ja täysin riippumatta siitä missä hakemistossa satut ite olemaan kun iskee tarve lottorivien arpomiseen:
Näitten polkujen varrelta se järjestelmä oletuksena niitä taviksen ajettavia ohjelmia hakee
$ echo $PATH
/usr/local/bin: /usr/bin: /bin: /usr/local/games: /usr/games
Eli kopsaa skripti esmes hakemistoon /usr/local/bin/ (jos löytyy em. polusta)
Nyt se kopiointi tuonne pitää vaan tehdä roottina, esmes näin:
$ su -c "cp lottorivit.sh /usr/local/bin/"
Nyt toimaa ihan samoin kuin mikä tahansa käyttäjän komento (ilman abs. polkua komennon edessä)
$ lottorivit.sh
Ja jos oot oikein extra himo lottooja niin vois tiputtaa tuon .sh -tiedostopäätteenkin veks (taas roottina):
$ su -c "mv /usr/local/bin/lottorivit.sh /usr/local/bin/lottorivit"
Ja nyt sen voi sitten ajaa esmes näin:
tavis@koneella~/missa/tahansa/hakemistossa$ lot [SARKAIN] [ENTER]
tai jos muistaa skriptin nimen:
tavis@koneella~/missa/tahansa/hakemistossa$ lottorivit
...jne...
Siinä se on! Nyts tulostaa 10 riviä justiinsa oikein :)
Itse en osannut tuota {1..10} laittaa :)
Tarkoitin tuon rivin sellaisenaan for-loopin sisään skriptiin (esim arvo.sh) ja tiedosto-ohjauksen vasta skriptin ajoon:
./arvo.sh > lottorivit.txt
eli pelkkä ./arvo.sh tulostaa näytölle.
ps. muista chmod a x arvo.sh että skriptin ajo toimii