[]
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.

Programlama Temelleri - Final Sorusu


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 :)
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;
}
#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