Tam Sürümünü Görmek İçin : c den acil yardıma ihtiyacım var
blaster^^
07/12/2006, 19:28
kullanıcı 3x3 lük bir matris girecek, program bu matriste herhangi bir satırdaki en büyük sayı kendi sütunundaki en küçük sayı ise yazdıracak.
örneğin
kullanıcı bu matrisi girsin
1 2 3
4 5 6
7 8 9
burda programın 3 ü yazdırması lazım
hem satırda en büyük hemde sütunda en küçük sayı
yada
1 2 9
3 6 7
4 11 10
burdada 7 yi yazdırması lazım...
eğer böyle bir sayı yoksa aşağıdaki gibi;
1 9 2
3 6 7
4 11 10
böyle bir sayı yok demesi lazım. kod konusunda yardımcı olmanızı bekliyorum
teşekkürler...
zormuş baya uğraştım biraz ama yapamadım
blaster^^
07/12/2006, 19:43
hııı?
IcenGuard
07/12/2006, 19:45
Bu odevler kendiniz yapın ki, biraz düşmeyi öğrenin diye veriliyor. Tabi tercih sizin...
blaster^^
07/12/2006, 19:47
ben uğraştım ama yapamadım, zaten yapamadığım için yardım istedim.
yesilvadi
07/12/2006, 20:41
peki ben yapınca ne olacak?
1- sen benim yaptığımdan öğreneceğim diyorsan (yani benim için önemli olan öğrenmek diyorsan) bekle biraz sınıfında biri yapınca onun yaptığından öğrenirsin.
2- eğer ödevden ille de iyi not almam gerekiyor diyorsan ben senin 1 hafta sonra unutacağın bir meseleyi neden çabalayıp da çözeyim.
3- eğer amacın yardım almaksa neden ödevin tamamını buraya yazıp da cevap istiyorsun; sadece anlamadığın noktayı* söyle ki orasını söyleyelim, sen de bilmediğin noktada yardım almanın dışında sorunu çözmüş olmanın zevkine eriş.
4- yok eğer hiçbir şey anlamıyorum diyorsan yerin burası değil, öğrenme yuvaları (okullar, kurslar vs).
5- eğer zaten onlardan birindeyim diyorsan 1. adımdan tekrar başla okumaya...
*: eğer anlamdığın kısmı belirleyebiliyorsan o kısmın tanımını, adını vs arattığın zaman ya da dökümantasyonlardan araştırdığın zaman zaten sorunu çözersin. yani buraya gelip o noktayı bile yazmana gerek kalmaz. kaldı ki burdaki herkes yaptığı işin tamamını bilmiyor; araştırmaya katlanıyor (herkes bunu biryere kadar yapar kabul ama ödev geitrip çözdürtmek çook başka birşey)
Ben programı yazdım fakat mesajları okuduktan sonra kodları buraya yazmamaya karar verdim. Bende öğrenciyim o yüzden alıştırma yapmış oldum ve senin ödevinin bana bi faydası oldu.
Bu yüzden kendin yazmalısın yoksa sana kodları vermekle kötülük yapmış olurum. Arkadaşların dediği gibi takıldığın yeri sorarsan yardımcı olmaya çalışırız.
blaster^^
07/12/2006, 21:16
aslında ben anlatmak istediğimi tam anlatamadım sanırım. amacım hazır kodları almak değildi. eğer yanlış anlaşıldıysam özür dilerim. sadece mantık yürütemedim yani satırdaki en büyük elemanları bulduktan sonra onları sütunlarda inceleme kısmı kafamı karıştırdı isterseniz yazdığım kodu da yollayabilirim ama yazdığım kodda çözüme yaklaşıp yaklaşmadığımıda bilmiyorum. ilk defa alıorum bu dersi seçmeli olarak hocamız yabancı ve slayttan anlatıyor bu soruda ilk projemiz, arkadaşlarla yanına gittik kaç defa ama aramızda iletişim problemi oluyor ve bize yardımcı olamıyor.o yüzden mantık kuramadık, çünkü hoca derste anlattıklarından çok daha fazlasını istiyor.
her satırda en büyük sayıyı bulduktan sonra bunlar arasından en küçüğü belirlemelisin. Fakat bu en küçük sayının hangi sütunda olduğunu belirleyip ona göre o sütundaki sayıları bulduğunuz sayıyla kıyaslayıp en küçüğünün o sayı olup olmadığına bakmalısın. eğer en küçükse o sayıyı ekrana yazdırır eğer ondan da küçük sayılar varsa sayı bulunamadı demelidir.
Biraz karışık oldu ama benim kurduğum mantık bu şekilde.
blaster^^
07/12/2006, 21:30
anladığım kadarıyla önce 1. satırdaki en büyük elemanı bulacağız
bulduğumuz bu elemanın yeni bir döngü içinde kolondaki en küçük sayı olup olmadığına bakacağız eğer en küçük sayı ise yazdıracağız değil ise 2. satıra geçip aynı işlemleri tekrarlayacağız dimi?
hayır 3 satırada bakıp ayrı ayrı en büyük sayıları alıcaz. Yani sonucta her satırın en büyük sayısını almış olucaz. Sonra onlar arasından en küçüğünü alıp o sayının bulunduğu kolonda tekrar bir döngü yapıp en küçük sayı olup olmadığına bakıcaz.
blaster^^
07/12/2006, 21:41
her satırın en büyüklerini aldık,sonra bunların arasında en küçüğünüde bulduk, bu sayının bulunduğu kolonda karşılaştırma yapacağız ancak bu sayının buunduğu kolonu nasıl bileceğiz anlayamadım, birde her satırın en büyük elemanlarını ayrı ayrı alıp array içinemi atacağız?
Array içine atıcaksın. Kolonu bulmak içinde her satırda en büyük sayıyı bulurken bulduğun sayıyla beraber onun satırdaki kaçıncı eleman olduğuna bakıcaksın. mesela 2. eleman, bulduğumuz sayıda t diyelim.
for (x=0; x<3; x++)
{
if (a[2][x]<t)
................
}
KamilORS
07/12/2006, 22:14
Bak Sana Bir Yöntem Söliyeyim iç içe For Dögünü Kullanılarak Yapılır Bu Tür Dizi İçi Arama işlemleri. Önceden Bizde Çok yaptık bunın gibi şeyler. İç içe döngü kurarak bişeyler yapmaya çalış. Takıldığım yeri belir. Örneğin 1. boyutun 1. elmanını tüm boyutların elemanları ile kontrol edeceksin ama bunu sıra ile 1.2 elamnını diğerleri ile kontrol etme olarak devam edecek. bunuda iç içe sanırım 3 tane for ile yapabilirsin. biraz düşün bişiler kurmaya çalış..
blaster^^
07/12/2006, 22:23
ilgin için gerçekten çok saol
bu şekilde yaptım senin dediğin gibi her satırın en büyük elemanını b[] arrayine attım daha sonra bu 3 en büyük sayıdan en küçüğünü bulup min e attım bazen doğru çalışıyor bazen yanlış anlayamadım :(
#include <stdio.h>
int main()
{
int a[3][3];
int b[3];
int i,j,k,max=0,min=0;
printf("enter array\n");
for(i=0;i<3;i++){
for(j=0;j<3;j++){
scanf("%d",&a[i][j]);
}
}
for(i=0,k=0;i<3,k<3;i++,k++){
for(j=0;j<3;j++){
if(max<a[i][j])
max=a[i][j];
}
b[k]=max;
}
min=b[0];
for(i=0;i<3;i++)
if(min>b[i]){
min=b[i];
}
for(i=0;i<3;i++){
k=0;
for(j=0;j<3;j++){
if(min<=a[j][i])
k++;
}
if(k==3){
printf("satir=%d,sutun=%d, eleman=%d\n",i,j,min); return 0;
}
}
if(k<3)
printf("eleman bulunamadı\n");
return 0;
}
blaster^^
07/12/2006, 22:38
program şimdi doğru sayıyı buluyor eğer varsa ancak satır ve sütun numaralarını genellikle yanlış veriyor :(
#include <stdio.h>
int main()
{
int a[3][3];
int b[3];
int i,j,k,max=0,min=0;
printf("enter array\n");
for(i=0;i<3;i++){
for(j=0;j<3;j++){
scanf("%d",&a[i][j]);
}
}
for(i=0,k=0;i<3,k<3;i++,k++){
for(j=0;j<3;j++){
if(max<a[i][j])
max=a[i][j];
}
b[k]=max;
max=0;
}
min=b[0];
for(i=0;i<3;i++){
if(min>b[i]){
min=b[i];
}
}
for(i=0;i<3;i++){
k=0;
for(j=0;j<3;j++){
if(min<=a[j][i])
k++;
}
if(k==3){
printf("satir=%d,sutun=%d, eleman=%d\n",i,j,min); return 0;
}
}
if(k<3)
printf("eleman bulunamadı\n");
return 0;
}
KamilORS
07/12/2006, 23:04
temp olarak kullandığın dizi varya onu tek bi değişken yap. Yani Sabit Kalsın. İçine sadece en büğü koayan bir mantık oluştur... Az kaldı çözeceksin hadi bakalım.
blaster^^
07/12/2006, 23:09
bana en büyük lazım değilki, en büyük 3 tane arasındaki en küçük lazım. eğer tek bir değişken yaparsam en büyük 3 taneyi nasıl kıyaslarım ve bunların arasındaki en küçüğü nasıl bulabilirim anlayamadım. program aradığımız sayıyı buluyor, sadece satır ve sütun numaralarını yanlış veriyor
mcwalles
07/12/2006, 23:36
cevabına baktım az cok bişeyler yapmaya çalışmışsın belliki cok ihtiyacın var senin için kodu yazdım ama gerekirse 1 hafta gece gunduz dusunup problemi kendin cozmelisin biz boyle oğrendik umarım yardımım dokunur.
#include<stdio.h>
#include<conio.h>
int main()
{
int matris[3][3];
int max,min,sut,sayi;
int knt=0,i,j,k;
clrscr();
for(i=0;i<3;i++) for(j=0;j<3;j++) scanf("%d",&matris[i][j]);
for (i=0;i<3;i++){
max=matris[i][0];
for(j=0;j<3;j++){
if(max<matris[i][j]) {
max=matris[i][j];
sut=j;
min=matris[0][j];
}
}
for (k=0;k<3;k++) if (min>matris[k][sut]) min=matris[k][sut];
if(min==max){
knt=1;
sayi=max;
}
}
if (knt==1)
printf("\nsayi =>> %d",sayi);
else
printf("\nsayi yok");
getch();
return 0;
}
blaster^^
07/12/2006, 23:49
çok teşekkür ederim ancak önce kendi yazdığım programı başka bir hocaya göstereceğim, satır ve sütun numaralarını yanlış verdiği için eğer düzeltebilirsem onu teslim edeceğim düzeltemezsem, senin yolladığın mantıkta yapacağım..çok teşekkürler tekrar
KamilORS
08/12/2006, 01:19
hım ben en büğüğü anladım. satır sutun numaraların şundan olabilir. m[3] dedinmi 4 lemanlı bir dizin oluyor. yani 0,1,2,3 yani bize göre 1. eleman 0. bilgisayara göre 2 ile gösterilen bize göre 3 .. programına bir bakayım. hallederiz işallah.
KamilORS
08/12/2006, 01:26
Programında Mantık hatası Var Sonsuz döngüye Giriyor. Bence Arkadaşın Yaptığına Bir bak Tekrardan Yazmaya Çalış..
@mcwalles walla helal olsun kodları baya kısa yazmışsın. Ben yeni sayılırım C de, kodlarını kullanma şeklinden baya şey öğrendim. clrscr komutunu dostan biliyordum fakat C de olduğunu bilmiyordum bu bana birçok yarar sağlayacak.
Bu arada benim yazdığım kodda aşağıda belki işinize yarar.
#include <stdio.h>
int a[3][3]={{1,3,4},{2,6,11},{9,7,10}};
int x,y,k,t,tx[3]={0},ty[3]={0};
int main()
{
for (y=0; y<3; y++) //matriksi gösterir
{
for (x=0; x<3; x++)
{
printf("%d ",a[x][y]);
}
printf("\n");
}
for (y=0; y<3; y++) //her satırdaki en büyük sayıyı bulur
{
for (x=0; x<3; x++)
{
if (a[x][y]>tx[y])
{
tx[y]=a[x][y];
ty[y]=x;
}
}
}
t=tx[0];
for (y=0; y<3; y++) //en küçüğü bulur
{
if (tx[y]<t)
{
t=tx[y];
k=y;
}
}
for (x=0; x<3; x++)
{
if (a[ty[k]][x]<t)
t=0;
}
if (t==0)
printf("yok\n");
else
printf("sonuc %d\n",t);
return 0;
}
mcwalles
08/12/2006, 23:35
aslında program dahada kısaltılabilir değişkenlerde azaltılabilir ama anlaşılması cok daha zor olur. bu gibi programlar aslında cok basittir ve programlamayı oğrenmekte buyuk katkı sağlar bundaki tek amaç matrislerle çalışırken içiçe dongu kullanmanın mantığını kavramaktır. bu gibi ornekler yaptıkça bunları gozunuz kapalı yapmaya başlıcaksınız. onemli olan cok pratik yapmak. başarılar
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.