[]

Programlama Temelleri - Final Sorusu

Soruyu yaptım sayılır ama tekrarı olmayan sayıları yapamıyorum illa ki aynı sayılar oluyor.

Soru: Bir sınıfta sıra düzeni 6X8 şeklindedir. Sınava girecek öğrencileri bu sınıfa rastgele dağıtan algoritmayı yazınız.
İpuçları: öğrenci numaraları 1’den 48’e kadar ardışık olduğunu varsayabilirsiniz. Bir atanan öğrenci bir daha atanamayacak. Sınıfı 6X8’lik matris olarak düşünebilirsiniz.

Cevap:
sinif=zeros(6,8);
atananogrenci=1;
while atananogrenci<49
for i=1:6
for j=1:8
sayi1=round(rand()*100);
if ogrenciatama(sinif,sayi1)==false
sinif(i,j)=sayi1;
atananogrenci=atananogrenci+1;
end
end
end
end
disp(sinif);

Öğrenci Atama Fonksiyonu
function [sonuc]=ogrenciatama(sinif,numara)
for i=1:6
for j=1:8
if sinif(i,j)==numara
sonuc=true;
break;
else sonuc=false;
end
end
end


** 6x8 lik matrisi oluşturuyor içine rastegele sayida atıyorum ama tekrarlanmayan sayı kısmı olmuyor. O kısımda bir yanlışım var ama çözemedim yardımcı olur musunuz? Matlabta yazıyorum ama C dilinide anlayabilirim.

 
programcılıkla ilişkim meraba meraba şeklinde ama anladığım kadarıyla şu haliyle random seçtiğin öğrencileri sınıfa sırayla oturtuyorsun. yani "emrah koş ilk sıraya otur", "ikinci sıra için de nuri sen gel" gibi. hani bir de yoktan çocuk varediyorsun, o da karışıklaştırmış kodu.

hani seçim mantığını da düşününce bunu yapmak için olayın fiziki akışına uygun olarak :

2 array yapsan. birisi öğrenciler, diğeri sıralar. 1 ilkinden random bir eleman seç. 2 o elemanı diğer array'e yazdır. 3 ilk array'deki elemanı sil. şeklinde bir algoritma kurulabilir.

tabii bunlar amatör yorumu, yatırım tavsiyesi olarak değerlendirilmemeli :)
  • i have the information  (10.01.15 12:21:35 ~ 12:25:16) 
Dostum bazen işlerin kolayına kaçmak gerekir. tek boyutlu bi diziye rastgele 48 eleman yerleştirip bunu 2 boyuta atmak basittir örneğin. aşağıdaki kod diziye birbirinden 10 farklı eleman atıyor. 10 değerini 48 yap. sonra bu elemanları forla iki boyutlu diziye ata. aklıma ilk geleni yazdım. belki daha basit yolu vardır bilemicem.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include<conio.h>

bool icindemi(int dizi[], int indeks, int rastgele){

for(int i=0; i<indeks; i++) {
if(dizi[i]==rastgele){
return false;
}
}
return true;

}

int main()
{

srand ( time(NULL) );


int tablo[10];
int i;

for(i=0; i<10; i++)
tablo[i]=0;

int rastgele;
i=0;

while(true){
if(i==10)
break;

rastgele=rand()%10+1;

if(icindemi(tablo,i,rastgele)){
tablo[i]=rastgele;
i++;
}
}

for(i=0; i<10; i++)
printf("%d\n",tablo[i]);

getch();
return 0;
}
  • printfcompeng  (10.01.15 12:24:14 ~ 12:24:48) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.