Trebao bi program koji ispisuje brojeve u zadanim parametrima, recimo tražim 100 kombinacija brojeva od 1-50, a svaka kombinacija ima 7 brojeva.
Postoji li takvi programi za skinuti ili se moraju stvoriti?
Trebao bi program koji ispisuje brojeve u zadanim parametrima, recimo tražim 100 kombinacija brojeva od 1-50, a svaka kombinacija ima 7 brojeva.
Postoji li takvi programi za skinuti ili se moraju stvoriti?
include <iostream>
#include <ctime>
#include <cstdio>
using namespace std;
int main()
{
cout<< "Unesi broj kombinacija: ";
int brojKombinacija;
cin>> brojKombinacija;
cout<< "Unesi raspon brojeva 1-N: ";
int rasponBrojeva;
cin>> rasponBrojeva;
cout<< "Unesi broj brojeva u nizu: ";
int brojBrojevaUNizu;
cin>> brojBrojevaUNizu;
srand(time(NULL));
for(int i=0; i<brojKombinacija; i++)
{
for(int j =0; j<brojBrojevaUNizu; j++)
{
int broj = rand() % rasponBrojeva + 1;
cout<< broj << " ";
}
cout<< endl;
} system("pause");
}
U kojem programu se izdaju ove naredbe?
C++
Evo ti perluša:
#!/usr/bin/perl -w
use strict;
if (@ARGV != 3) {
die;
}
my @broj_kombinacija = 1..$ARGV[0];
my @broj_brojeva = 0..$ARGV[2]-1;
my ($od, $do) = split /-/, $ARGV[1];
foreach (@broj_kombinacija) {
my @kombinacija;
for my $broj (@broj_brojeva) {
$kombinacija[$broj] = int(rand($do-$od+1)) + $od;
}
print "@kombinacija\n";
}
Spremi kao brojevi.pl i pokreni sa ./brojevi.pl 100 1-50 7
Edit: Jel sad bolje?
Taj Perl source je totalno iz 90-tih. Nitko ne programira više tak..
Za početak fali ti "use strict;" direktiva. A druga stvar - split() vraća listu.
Hvala na pomoči ali ne kužim ništa, ni kako otvoriti taj c++ i od kud početi, a kamoli upisivati naredbe.
Ubacio sam mu i pauzu, valjda se snađe.
Prekucao sam flokijev kod u C# ali mi daje neke nebulozne brojeve. Ja nikako skužit u čem je problem. Evo koda:
using System;
namespace brojevi
{
class MainClass
{
public static void Main (string[] args)
{
Console.WriteLine("Unesi broj kombinacija");
int kombinacije;
kombinacije = int.Parse(Console.ReadLine());
Console.WriteLine("Unesi raspon brojeva 1-N");
int raspon;
raspon = int.Parse(Console.ReadLine());
Console.WriteLine("Unesi dužinu kombinacije");
int duzina;
duzina = int.Parse(Console.ReadLine());
Random RandomClass = new Random();
for(int i=1; i<kombinacije; i++);
{
for(int j=1; j<duzina; j++);
{
int RandomNumber = RandomClass.Next(1, duzina);
int broj = RandomNumber % raspon + 1;
Console.WriteLine("Broj je {0}.", broj);
}
}
}
}
}
GUI aplikacija, algoritam copyright by Floki.
Potrebna je instalirana java: http://www.java.com/en/
Program: http://dl.dropbox.com/u/14884504/kombinacije.jar
Source(ako nekog zanima): http://dl.dropbox.com/u/14884504/kombinacije.rar
E puno ti hvala, to je to kaj se traži, jednostavno i brzo.
E puno ti hvala, to je to kaj se traži, jednostavno i brzo.
Nema na cemu, Floki je uradio veci dio posla, ja sam samo prepisao njegov algoritam.
Evo još prepravljeno i ne radi. Bio bi zahvalan kad bi netko rekao u čemu je problem
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Kombinacije1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Upišite broj kombinacija");
int kombinacije;
kombinacije = int.Parse(Console.ReadLine());
Console.WriteLine("Unesite raspon brojeva 1-N");
int raspon;
raspon = int.Parse(Console.ReadLine());
Console.WriteLine("Unesite dužinu kombinacije:");
int duzina;
duzina = int.Parse(Console.ReadLine());
Random RandomClass = new Random();
for (int i = 0; i < kombinacije; i++)
{
for (int j = 0; j < duzina; j++)
{
int broj = RandomClass.Next() % raspon + 1;
Console.WriteLine("Broj je {0}.", broj);
}
Console.ReadLine();
}
Console.ReadLine();
}
}
}
@Sum
Nemoze tako generirat random u .net-u jer ti je seed uvik isti
Najlakse ti je vrieman uzet za seed ka sta je doli napisano stim da se i ode zna desit da su 2 broja zaredon ista. (Nikad mi nije tribalo ovako "puno" random brojeva za redon pa nisan nikad ni proba skuzit kako rjesit taj problem ugl evo ovo sta znan)
Ovo 0x7FFFFFFF = maximum inta u Hex
Random random = new Random((Convert.ToInt32(DateTime.Now.Ticks % 0x7FFFFFFF)));
Console.WriteLine("{0} ", random.Next(Raspon));
Ovako radi u C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Kombinacije
{
class Program
{
static void Main(string[] args)
{
Console.Write("Unesi broj kombinacija: ");
int brojKombinacija = int.Parse(Console.ReadLine());
Console.Write("Unesi raspon brojeva 1-N: ");
int rasponBrojeva = int.Parse(Console.ReadLine());
Console.Write("Unesi broj brojeva u nizu: ");
int brojBrojevaUNizu = int.Parse(Console.ReadLine());
Random slucajniBrojevi = new Random();
for (int i = 0; i < brojKombinacija; i++)
{
for (int j = 0; j < brojBrojevaUNizu; j++)
{
Console.Write("{0} ", slucajniBrojevi.Next(1, rasponBrojeva+1));
}
Console.WriteLine();
}
Console.ReadKey();
}
}
}
po vasem misljenju koji je lakse za savldat program C++ ili C#
Obadva se temelje na objektnom pristupu pa su za početnika podjednako "teški". C# ima (za početnika) čitljiviju sintaksu dok C++ je puno lakše portati po raznim platformama.
Ukratko - Windows aplikacije (koje ne zahtjevaju veliku brzinu), rad za bazama podataka i sl. - C#. Aplikacije koje zahtjevaju bolje performanse i "niži" pristup hardveru - C++.
Ovisi o tvojem predzanju FicoO. I jedan i drugi jezik zahtijevaju dosta savladavanja raznih relativno apstraktnih pojmova. Ako uzmemo dvoje programera s podjednakim znanjem i sposobnostima onda bih rekao da su C++ i C# relativno na istoj razini savladavanja za to dvoje.
.
Imam i ja jednu GUI aplikaciju za generiranje slučajnih brojeva.
Potrebno je imati instaliran .Net Framework 4, a aplikacija je pisana u C#.
Slučajni brojevi se generiraju na taj način da se u jednom nizu brojeva ne ponavljaju već izvučeni brojevi,
radi toga sam uveo ograničenje da raspon generiranih brojeva mora biti veći minimalno 1.5 put od broja brojeva u nizu.
http://www.box.net/shared/1f9q978cby
Ne razumijem kako ce ti veci raspon garanotvati da se broj nece ponoviti?
Imam i ja jednu GUI aplikaciju za generiranje slučajnih brojeva.
Potrebno je imati instaliran .Net Framework 4, a aplikacija je pisana u C#.
Slučajni brojevi se generiraju na taj način da se u jednom nizu brojeva ne ponavljaju već izvučeni brojevi,
radi toga sam uveo ograničenje da raspon generiranih brojeva mora biti veći minimalno 1.5 put od broja brojeva u nizu.
http://www.box.net/shared/1f9q978cby
Drugi možda bolji pristup je da generiraš array sa mogućim vrijednostima i kako random vadiš brojeve van tako ih vadiš van iz polja da ih se više ne može izvući.
Drugi možda bolji pristup je da generiraš array sa mogućim vrijednostima i kako random vadiš brojeve van tako ih vadiš van iz polja da ih se više ne može izvući.
Nisam siguran da je mu je to jedini način na koji izbjegava poduplane brojeve - Floki, objasni kako to radiš.
Ovo tvoj je nepotrebno kompliciranje. Imaš array za kombinaciju - nakon što izgeneriraš random broj, provjeriš nalazi li se taj broj već u arrayu, ako se ne nalazi dodaš ga na prvo prazno mjesto u arrayu (i povećava se couter za "količinu" odabranih brojeva), ako se nalazi, ne radi se ništa (jednostavno se petlja ponavlja, u nadi da sljedeći random broj neće biti u arrayu).
Meni veći raspon ne garantira da se broj neće ponoviti, za sprečavanje pojave već izvučenog broja zadužen je algoritam
Radi se o drugoj stvari - ne možeš izvući niz od 7 kuglica iz bubnja ako u bubnju imaš pet kuglica - u stvarnosti ponestane kuglica, a ovdje zablokira program
Ovo je klasa za generiranje brojeva :
public class Brojevi
{
public static int[] Generator(int rasponBrojeva, int brojBrojevaUNizu)
{
int[] polje = new int[brojBrojevaUNizu];
Thread.Sleep(15);
Random slucajniBrojevi = new Random();
int j = 0, pom;
polje[j] = slucajniBrojevi.Next(1, rasponBrojeva+1);
while (j < brojBrojevaUNizu - 1)
{
j++;
do
{
pom = 0;
polje[j] = slucajniBrojevi.Next(1, rasponBrojeva+1);
for (int k = j; k > 0; k--)
{
if (polje[j] == polje[k - 1])
{
pom++;
}
}
} while (pom != 0);
}
return polje;
}
}
A ovo je kod u Form.cs :
private void but_Start_Click(object sender, EventArgs e)
{
if ((double)rasponBrojeva.Value / (double)brojBrojevaUNizu.Value >= 1.5)
{
int[] rezultat = new int[(int)brojBrojevaUNizu.Value];
for (int i = 0; i < (int)brojKombinacija.Value; i++)
{
rezultat =
Kombinacije1.Brojevi.Generator((int)rasponBrojeva.Value, (int)brojBrojevaUNizu.Value);
textPolje.AppendText((i + 1).ToString() + ". kombinacija:\n");
for (int j = 0; j < (int)brojBrojevaUNizu.Value; j++)
{
textPolje.AppendText(rezultat[j].ToString() + " ");
}
textPolje.AppendText("\n");
}
}
else
{
textPolje.Text = "Raspon brojeva mora biti veći minimalno 1,5 put od broja brojeva u nizu!\n";
}
}
private void but_Clear_Click(object sender, EventArgs e)
{
textPolje.Text = "";
}
private void but_Close_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
Drugi možda bolji pristup je da generiraš array sa mogućim vrijednostima i kako random vadiš brojeve van tako ih vadiš van iz polja da ih se više ne može izvući.
Nisam siguran da je mu je to jedini način na koji izbjegava poduplane brojeve - Floki, objasni kako to radiš.
Ovo tvoj je nepotrebno kompliciranje. Imaš array za kombinaciju - nakon što izgeneriraš random broj, provjeriš nalazi li se taj broj već u arrayu, ako se ne nalazi dodaš ga na prvo prazno mjesto u arrayu (i povećava se couter za "količinu" odabranih brojeva), ako se nalazi, ne radi se ništa (jednostavno se petlja ponavlja, u nadi da sljedeći random broj neće biti u arrayu).
u stvari, kao što vidiš, točno to kako si rekao, s tim da sam jednu petlju stavio u Form.cs (onu koja broji broj kombinacija i koja toliko puta pozove metod koji svakim pozivom generira i vrati jedan niz), a one petlje koje provjeravaju da li se broj ponavlja stavio sam u zasebnu klasu, one pozivaju random funkciju dok god ne stvore niz od različitih brojeva, kad nalete na isti broj, petlje se ponavljaju i već zapisana vrijednost se generira i zapisuje ponovno - za to je ključni do-while blok.
ovo postavljeno ograničenje za brojeve u nizu i raspon brojeva nema veze s tim - to je jednostavno zato jer se ne može izvući više kuglica nego ih ima, bio sam malo nejasan, pa su me krivo razumjeli
Al si ovaj Generator zakomplicirao... Čak tri petlje! Evo "klasičnije" rješenje s dvije petlje:
int[] polje = new int[brojBrojevaUNizu]; Thread.Sleep(15); Random slucajniBrojevi = new Random();
int brojIzvucenih = 0;
while (brojIzvucenih < brojBrojevaUNizu) { int broj = slucajniBrojevi.Next(1, rasponBrojeva + 1);
for (int j = 0; j < brojIzvucenih; j++) { if (broj == polje[j]) { broj = 0; break; } }
if (broj != 0) polje[brojIzvucenih++] = broj; }
return polje;
Osim što drži random generiran broj, varijablu broj koristim i kao zastavicu - ako je 0, znači da se izvučeni broj već nalazi u polju.
Je, svaka čast, moram se riješiti mane da se zadovoljim da kod radi bez da ga optimiziram