C De Bir Sualim Olucaktı Anlayanlar Bir Bakıversin
-
#include<stdio.h>
#include<math.h>
#include<conio.h>
#include<time.h>
int main()
{
int i,j,k,size,ortalama;
int toplam=0;
scanf("%d", &size);
int a[size];
for(i=0; i<size; i++)
scanf("%d", &a[size]);
for (i=0; i<size; i++)
toplam += a[i];
ortalama = toplam/size;
printf("ortalama :%d", ortalama);
return 0;
}böyle son derece basit bir kod yazdıgımda cevabı cok ucuk bir rakam alıorum
ornegin size yerine 3 giriorum, sayılarada 3 3 3 veriorum ortalama 3 cıkması gerekirken 672557748 alıorum???ben nerde yanlış yapıorum kodlarda bir sorun gozume carpmadı ama bierde sapıtıor heralde, mingw kullanıorum ama derleyeciden oldugunu sanmıorum bukadar basit koda nerde hatavar??
ortalamaya en yakın 2nci sayıyı bulmaya calısıorum
algoritma olarak şöyle düşündüm dogrumu sizcede?
1-)kullanıcıya kac sayı giricegini sor ve bu sayılara diziye ata
2-)dizinin ortalamasını al
3-)dizinin ortalamasından bütün dizi elemanlarını ayrı ayrı cıkar ve bir dizi yarat bundan( bunun hakkında fikir ve kodlarınız varsa paylaşırsanız sevinrim)
4-)bu farklardan yaratılmış dizide en kucuk 2nci sayı benım istedigim sayı olucaktır
bundan başka bir algoritma yada yardım edebilecek şekilde c bilginiz varsa yardımlarınızı esirgemeyin lütfen
-
Kullanıcıdan size büyüklüğünü nerede istemişsin onu anlamadım.
-
Abi tam olarak matematiksel olarak ne yapmak istedigini net olarak belirtsene.
-
Dizi boyutunu sonradan belirleyemezsin.Boyutu sabit tanımlaman lazım.
Fakat bunun çıkış yolu olarak pointerları kullanıyoruz ve hafızada sonradan alan ayırıyoruz.
scanf("%d",&size);int* dizi=new int[size]; //sizedaki değer kadar bellek alanı ayırır.
-
tam olarak yapmak istediğim şey şu: bir dizinin ort yakın 2.nyi dizi içindeki elemanlardan bulduran fonksiyonu yazma...
yani dizi ortalamasına yakın 2nci sayıyı bulduran programa ihtiyacım var...
ben algoritmamı verdim üstte ama başka türlü nasıl yaparım yada en makulu dediğimmidir?
ben ilk yazdıgım kodda nerde yannış yaptım neden abuk bir sayı verior bana ortalama istediğimde bir fikri olan varmı?
birde su noktada takıldım:
ortalamasını aldıktan sonra dizi elamenlarını cıkarıorum diziye nasıl sıralıcam ben bunnarı...gene absürd sayıları eşitlior bu noktada bir yol gösterin?
bir hal yordam gösterirsenız cok sevinirm
dipnot: size büyüklüğünü int main den sonra 3ncü satırdan sonra istedim...
dipnot 2: pointerları hic bilmiorum ogrenırım ama ogrenene kadar bunun uzerınde kafa yormak istiorum o kısmı bana yazabilirmisin tam olarak(tabi tek bierde lazım olucaksa)her yerde gerekiorsa başka nasıl yaparım yada yapabilirmiyim?dizi icerisindekileri kullanıcı girsin istiorum sadece ben elimle vermiyeyim...
-
Kodda yanlış yaptığın yerler
Birincisi sabit olması gereken dizi boyutunu değişken olarak almaya çalışmışsın
İkincisi garip sayıların çıkmasının nedeni senin dizinin o elemanlarına hiç değer atamamış olman.
for(i=0; i<size; i++)
scanf("%d", &a[size]);// size'ın yerine i değişkenini koyacaksın
orada size yaparsan hep aynı elemana atarsın.Yani adam boyutu 3 girdiyse dizinin 3. elemanına atanmış olur.
Pointer konusuna gelirsek şu an için kullanımını bil yeter
scanf("%d",&size);int* dizi=new int[size];
dizi[1]=111; ....
int* dizi=new int[10]; int*10 kadar bellek alanı ayrılır ve başlangıç adresi dizi pointerına atanır. -
aga mantıgı cözemedim tam olarak biras daha bahsedermisin pointerlardan?
misal:
#include<stdio.h>
#include<math.h>
#include<conio.h>
#include<time.h>
int main()
{
int i,y,k,size,max1,max2;
float j;
double ortalama;
int* dizi=new int[size];
float toplam=0;
scanf("%d", &size);
int a[size];
for(i=0; i<size; i++)
scanf("%d", &a[i]);
for (i=0; i<size; i++)
toplam += a[i];
ortalama = toplam/size;
printf("ortalama\n :%f", ortalama);
for(k=0; k<size; k++)
{
j=ortalama-a[k];
printf("%f\n: ",j);
}buraya kadar herşey normal...dizi elemanlarını kişi kendi girior ve cıkartıorum dizi elemanlarını..bu cıkarılan sayıları nasıl 2nci bir diziye oturtucam
mesela 3,4,5 verdim...ortalaması 4...4-3=1 4-4=0 4-5=-1...a2[]={1,0,-1} nasıl bu hale gelicek...tmm pointer ile alan yaratıorz yenı nesnemiz icin tmm ama nasıl eşitlicez istediklerimizi istediklerimize?
int* dizi=new int[size];
dizi[1]=111; ....burayı cozemedım ilk satır tmmda 2nci satıra bağlantı kuramadım...biliorum pointer bilmeyen birine annatmak zor ama bir yandanda pointer calısıorum burda,bir yandanda senın ogrettiklerini uygulamaya calısıorum saolasın bilgiler icin
-
int i,y,k,size,max1,max2;
float j;
double ortalama;
scanf("%d", &size);
int* dizi=new int[size];
float toplam=0;
int a[size];
öncelikle scanf'i üste alacaksın çünkü senin girdiğin değere göre bellek alanı ayrılacak.
pointerlar adres tutarlar.
int* dizi; bu şekilde pointerı tanımladık
dizi=new int[10];
new ile bellek alanı ayırdık.Yani 10 tane int kadar ve başlangıç adresini diziye atadık.
sıralı olarak bellekte ayrılıyor.dizilerde aynıdır.
105. adres başlangıç adresiyse 10 tane int kadar yer ayırırsan int 4 byte kaplar.
105,109,113,117... gider.
sen dizi[0] dersen 105 numaralı adrese
dizi[1] dersen 109 numalı adrese gidersin.
Kullanım şekli aynı
dizi[i]=atayacağın değer. -
Bazı değişkenleri sıfırlamamışsın, hafızada ayrılan yerde ne yazıyorsa o değeri alıyorlar
-
Hoca eğer anlattığını doğru anladıysam program bu.Bugün canım sıkılıyordu senin şeye bakayım dedim :))
#include<stdio.h>int main()
{
int size=0,toplam=0,min1,min2;printf("Dizi boyutu: ");
scanf("%d",&size);int* dizi=new int[size];
for(int i=0;i<size;i++)
{
scanf("%d",&dizi[i]); //elemanları al
toplam+=dizi[i];
}toplam/=size; //ortalama
min1=dizi[0];
for(i=0;i<size;i++)
{
dizi[i]=toplam-dizi[i]; //ortalamadan elemanları çıkart ve en küçük sayıyı bul
if(min1>dizi[i])
min1=dizi[i];
}min2=dizi[0];
for(i=0;i<size;i++)
{
if(min2==min1)
{
min2=dizi[i]; // en küçük ikinci sayıyı bul
}if(min1!=dizi[i])
{
if(min2>dizi[i])
{
min2=dizi[i];
}
}
}printf("%d",min2);
return 0;
} -
ya hocam kafayı sıyırıcam az kaldı:@:@:@
şimdi firex ellerin zeval gormesin cok buyuk bir mantık gosterdin bana cok saolasın
ben düşündümki 2 türlü yapabilirim
1nci yol:
1-)once diziye girdirtirim ortalamasını aldırtırım ben bunun
2-)ortalamadan kucuk sayılar ile bir dizi yaratırım(ki nasıl yaparm bilmiorum)
3-)bu dizideki en büyük 2 sayıyı bulur biere kaydederim
4-)ortalamadan büyük sayılar ile bir dizi yaratırım( e haliyle bunuda nasıl yaparım die düşünüorum)
5-)bu dizideki en kücük 2 sayıyı bulur biere kaydederim...
6-)bu dizilerdeki sayıları ortalamadan cıkarırım farkı en kücük 2nci sayı olan benım sayımdır ama burda farkı alınan sayıdan nasıl ilk sayıya geri donecegımı de bılmıorum yanı baya cetefilli bir yol...
2nci yol:
1-)dizi girilir ve ortalama bulunur
2-)ortalamadan bütün sayılar cıkartılır bu farklar ile bir dizi yaratılır
3-)bu yaratılan dizide en kücük 2nci sayı bulunur
4-)bu en kucuk 2nci sayı hangi sayıdan elde edilir o bulunur...
ama şimdi kitlendiğim yerlerde şöyle
2nci yolun 3 ve 4ncü basamakta kitleniorum yok yanı pointerla yaparsın dedin sen ama benım oyle bir kavrama ulaşabilmem icin biras daha calısmam lazım tam hakim olmam lazım
senın yazdıgın programda 2 hata alıorum
int* dizi=new int[size];
for(int i=0;i
yaptıgın yerde i scope alanında tanımlanmamış dior...ilk mainde tanımlıorum onun yerine bu sefer de cevap abuk sabuk bir rakam verior...
ornegin dizi boyutu:4 5678 girdim sayılarada...cevap -1 dior...lütfen bir yardımcı ol nerdeyse ölüm kalım meselesi haline döndü program:(:(bunu bir türlü ogrenıcem yazınca ama ozmna kafayı sıyırcam bilg başında:(
