Arama butonu
Bu konudaki kullanıcılar: 1 misafir
9
Cevap
365
Tıklama
0
Öne Çıkarma
C++ BİRBİRİNDEN FARKLI RASTGELE SAYI ?
T
3 yıl
Er
Konu Sahibi

merhaba c++ da mesela 20 ile 50 arasında rastgele birbirinden farklı 10 adet sayı üretmek istiyorum ama ne yaptıysam bir türlü olmadı nasıl birşey yapabilirim örneğin 20 32 43 24 26 29 44 43 33 38 gibi olucak



G
3 yıl
Yarbay

boşver kavga çıkıyor



T
3 yıl
Yarbay

quote:

ne yaptıysam bir türlü olmadı
dediğin kısımda yaptığın kodları bir gönder bakalım önce



< Bu ileti mini sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.
T
3 yıl
Yarbay

çok zor soru mu sordum ?



< Bu ileti mini sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @vonderplanitz
T
3 yıl
Er
Konu Sahibi

hocam bakamadım kusura bakmayın şöyle birşey yaptım burda 0 la 10 arası rastgele sayılar yapabildim boyutu kaçsa onla o arasında olan sayılar ama bunu bir türlü aralık haline getiremedim 20 ile 50 arasında 10 adet rastgele sayı gibisinden
#include <iostream>
using namespace std;
#include <locale.h>
#include <ctime>
#include <iostream> 
int main()
{
srand(time(0));
const int BOYUT = 10;
int rastgeleSayi;

int dizi[BOYUT] = { 0 };

for (int i = 0; i <= BOYUT - 1; i++)
{

while (true)
{

rastgeleSayi = rand() % 10;

if (dizi[rastgeleSayi] == 0)

{
dizi[rastgeleSayi] = i;
break;

}


}
}
for (int i = 0; i < BOYUT; i++)
{
cout << dizi << endl;
}
return 0;
}



T
3 yıl
Er
Konu Sahibi

hocam birde şey düşündüm rastgele sayı üretmek yerine bir dizi oluşturup for ile dizinin elemanlarını tek tek yazdırsam sonra random_shuffle komutu ile dizinin elemanlarını karıştırıp ilk 10 elemanını felan alsam olabilir mi bunun gibi mi birşey yapmalıyım yada random komutu ile farklı bir yolu varmıdır ?




Bu mesajda bahsedilenler: @vonderplanitz
T
3 yıl
Yarbay

Kod eksik ve hatalı. int dizi[BOYUT] = { 0 }; dediğinde ilk elemana 0 koyar fakat ilk eleman neden 0? Sondaki cout << dizi, cout << dizi i olmalı fakat o çok basit, hatadan saymayalım, ona typo / yazım hatası diyelim.

if (dizi[rastgeleSayi] == 0) kısmında int türünde dizinin endeksine rasgeleSayi koymak ta oldukça radikal bir hata. Ayrıca 20 ve 50 arası kontrol için kullanılacak 20 ve 50 degerlerini göremedim.

bu problemin en direkt çözüm yolu :

20-50 arası ras adında rasgele sayı üret.ras dizinin içinde yoksa diziye ekle, ras dizinin içinde varsa farklı ras ile tekrar (öz) yinele, dizi büyüklüğü boyuta ulaşana kadar bunu (öz) yinele. özyinele => recursion.


ras dizinin içinde yoksa kısmını kolaylıkla yapabilmek için c++11 kullanmalısın. ödevde c++11 değil klasik c++98 kullanmak gibi şart var mı?

random_shuffle kullanarak bahsettiğin çözüm yöntemi bence geçersiz, ona direkt sıfır verebilir hodja :)





< Bu mesaj bu kişi tarafından değiştirildi Tuğkan-0153 -- 6 Nisan 2021; 17:43:38 >

< Bu ileti mini sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.
T
3 yıl
Er
Konu Sahibi

c++11 kullanmalısın gibi bir şart yok tamamdır çok teşekkür ederim dediğinizi yapmaya çalışıcam


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @vonderplanitz
T
3 yıl
Yarbay

tüyo vereyim mi :)

özyineleme tekniği uygulanmış c++11 çözümü
< Resime gitmek için tıklayın >

quote:

#include <iostream>
#include <vector>
#include <algorithm>
#include <time.h>
using namespace std;
vector<int> rasgele (int boyut, int alt, int ust, int rasg, vector<int> liste ) {
if (boyut < 1)
return liste;
else {
if (any_of(liste.begin(), liste.end(),[rasg](int elt) {return rasg == elt;}))
return rasgele(boyut, alt, ust, alt + rand() % (ust-alt+1) , liste);
else {
liste.push_back(rasg);
return rasgele(boyut-1, alt, ust, alt + rand() % (ust-alt+1) , liste); } } }
/* Öz yinelemeli / rekürsif işlev */

int main (int argc, char *argv[]) {
srand (time(NULL));
int boyut = atoi(argv[1]); /* örn 10 */
int alt = atoi(argv[2]); /* örn 20 */
int ust = atoi(argv[3]); /* örn 50 */
vector<int> gecici{};
vector<int> listem = rasgele(boyut, alt, ust, alt + rand() % (ust-alt+1), gecici);
sort( listem.begin(), listem.end() );
cout << "Tekrar etmeyen " << boyut << " rasgele sayı: " ;
for_each(listem.begin(),listem.end(), [](int n){cout << n << ' ';}); }


Not: debug etme amaçlı koyduğum sort orada kalmış, onu kaldırırsan sayıların sırası da rasgele olur.





< Bu mesaj bu kişi tarafından değiştirildi Tuğkan-0153 -- 6 Nisan 2021; 21:15:28 >

< Bu ileti mini sürüm kullanılarak atıldı >


Bu mesajda bahsedilenler: @themathado53
E
3 yıl
Onbaşı

#include <iostream>
#include <stdlib.h>
#include <ctime>


using namespace std;


int main(){

srand(time(NULL));


int num1=20,num2=50;
int range=num2-num1;
int arr[10];
 
for(int i=0;i<10;i++){
arr[i] = num1 + rand() % range;
for(int j=0;j<10;j++){
if(i==j) continue;
if(arr[i]==arr[j]){
i--;
break;
}
}
}

}
Iterative şekilde yaptım. O(N^2)



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.