Arama butonu
Bu konudaki kullanıcılar: 1 misafir
18
Cevap
1132
Tıklama
0
Öne Çıkarma
C de bir program için yardım lütfen
R
15 yıl
Yarbay
Konu Sahibi

C de bayaa yeniyim aslında. Tam olarak soru şöyle :

Kullanıcı tarafından girilen N adet sayıdan 7 ye bölünen sayıları, 7ye bölünen sayıların toplamını ve 7ye bölünen sayıların ortalamasını bulup ekrana yazdıran bilgisayar programını yazınız.


Benim takıldığım nokta bu N sayısı belli değil sonuçta yani adam 1000 tane de sayı girebilir 2 tane de sayı girebilir. Kaç sayı gireceği belli olmadığı için atama yapamıyorum. Bu soruda ne gibi bir yol izlemeliyim.





< Bu mesaj bu kişi tarafından değiştirildi RSnazdrovia -- 18 Nisan 2010; 20:46:00 >

O
15 yıl
Teğmen

döngü kurucaksın kullanıcının girdiği n değerine kadar dönücek. her girdiği sayıda direk 7 ye modunu alıcaksın 0 sa toplam değişkeninde toplatıcaksın ardından sayaç yapıp onuda 1 arttırıcaksın en sonundada toplamı sayaç a bölüp ortalamayı bulucaksın. ardından yazdırıcaksın.


Bu mesaja 1 cevap geldi.
D
15 yıl
Binbaşı

Şöyle demeliyim. Sonsuza kadar sayı girme olasılığı varsa, bunu bir yolla yapabilirsin. Kullanıcıdan aldığın veriyi int olarak değil de string olarak alırsın. atoi komutu ile sayıya çevirir, eğer alınan veri sayı değilse hata verir yeni veri istersin kullanıcıdan. Sayı ise geçici bir buffera string olarak atarsın sayıyı. İşlemleri de yaparsın işte 3 tane farklı bufferın olur. Eğer dersen sonsuz sayı diyorduk nasıl olacak ? Sonsuz tipi birşey yapılabilmesi için STL tipleri kullanılması gerekebilir. Şimdilik çok büyük - 2048, 4092 - boyutta bir string array yaparak yetinebilirsin...


Bu mesaja 1 cevap geldi.
S
15 yıl
Yüzbaşı

Daha açıklayıcı bir örnek hazırladım. Çok değişken ve comment kullandım. Umarım faydam olmuştur.
< Resime gitmek için tıklayın >

kaynak kodu
/* programmer: saxahan */ 

#include <stdio.h>
#define SIZE 100

int main(void)
{
int n; //kullanicinin girmek istediği sayı sayısı
int number = 0; //atama yapilacak degisken
int i; //sayac(counter)
int sum = 0; //7 e tam bolunen sayilarin toplami
double average = 0.0; //7 e tam bolunen sayilarin aritmetik ortalamasi
int array[SIZE]; //dizi atamasi icin
int count = 0; //ortalamayi bulabilmek icin gerekli olan sayac
int j; //diziyi ekrana sirasi ile yazdirmak icin sayac

printf("Kac tane sayi giriceksiniz?\n");
printf("Lutfen adetini giriniz> ");
scanf("%d", &n);

printf("'7' e bolunecek sayilari giriniz: \n");
j = 0;
for(i = 0; i < n; ++i) {
scanf("%d", &number); //sayilar kullanicidan alinir

if((number % 7) == 0) {
count++; //bolunen sayilarin sayacini bir artir
j++;
array[j] = number;

sum = sum + number; //tam bolunen sayilarin toplamini hesapla

}


}
printf("\n7 e tam bolunen sayilar> ");

for(j = 1; j < count + 1; ++j) //7' e tam bolunen sayilari sirasiyla ekrana yazdir
printf("%d ", array[j]);

printf("\ntoplam: %d", sum);

average = (double)sum / count; //ortalama
printf("\nortalama: %.2f", average );

printf("\n\n");
return (0);
}






< Bu mesaj bu kişi tarafından değiştirildi saxahan -- 19 Nisan 2010; 1:50:54 >
Bu mesaja 1 cevap geldi.
R
15 yıl
Yarbay
Konu Sahibi

S
15 yıl
Yüzbaşı

saxahan, eğer 101 sayı varsa?

ve dahasi:

average = (double)sum / count;

Eğer hiç 7 ile bolunen sayi girilmemişse, bu artık ne acayip şeyler yapar, kim bilir. Aslında sisteme gore bellidir, SIGFP (UNIX sinyali) veya muadili bir sinyalle programınız vahşice sonlandırılır sistem tarafından.

Bu işin iki yolu olabilir. Birisi, baştan kaç sayı gerektiğini öğrenmek. Diğeri ise, sayıların bittiğini gösteren bir bilgi girilmesini istemek.

Her iki yolla yapalım:

#include <stdio.h> 
#include <stdlib.h>
#include <ctype.h>

int sayi_oku(int *sayi) {
char okunan[16];
int inx = 0, i;
while (read(0, & okunan[inx], 1) == 1) {
if (okunan[inx] == '\n') {
okunan[inx] = 0;
if (strcmp(okunan, "end") == 0) return 1;
for (i = 0; i < inx; i++) {
if (i == 0)
if (okunan[i] == '-') continue;
if (!isdigit(okunan[i]))
return -1;
}
*sayi = atoi(okunan);
return 0;
}
inx++;
if (inx > 15) {
printf("Cok fazla karakter girdiniz. Lutfen bir sayı veya bitirmek için 'end' giriniz..\n");
inx = 0;
}
}
}
int main(char **argv, int argc) {
int sayi_adedi, sayi, ret, *bolunen_sayilar, bs_adet, islenen;
int toplam = 0, i;
float ortalama;
printf("Kac sayi girilecek:\n");
ret = sayi_oku(&sayi_adedi);
if (ret) {
printf("Hatali giris..\n");
return 1;
}
bolunen_sayilar = (int *)malloc(sayi_adedi * sizeof(int));
islenen = 0;
bs_adet = 0;
while (1) {
ret = sayi_oku(&sayi);
if (ret) {
printf("Gecersiz sayi..\n");
continue;
}
if ((sayi % 7) == 0) {
/* 7 ile tam bolunuyor.. */
bolunen_sayilar[bs_adet++] = sayi;
toplam += sayi;
}
islenen++;
if (islenen == sayi_adedi) break;
}
if (bs_adet == 0) {
printf("Hic 7 ile bolunen sayi bulunamadi..\n");
return 0;
}
ortalama = toplam / (float) bs_adet;
printf("7 ile tam bolunen sayilar: %d adet, ortalama: %.2f\n", bs_adet, ortalama);
printf("Sayilar: %d", bolunen_sayilar[0]);
for (i = 1; i < bs_adet; i++) printf(" %d", bolunen_sayilar[i]);
printf("\n");
return 0;
}


Bu da kullanıcının sayı kalmadığını söylemesi ile çalışan versiyon:
int main(char **argv, int argc) { 
int sayi, ret, *bolunen_sayilar, bs_adet;
int toplam = 0, i;
float ortalama;
bolunen_sayilar = NULL;
bs_adet = 0;
while (1) {
ret = sayi_oku(&sayi);
if (ret) {
if (ret == 1) // 'end' girildi..
break;
printf("Gecersiz sayi..\n");
continue;
}
if ((sayi % 7) == 0) {
/* 7 ile tam bolunuyor.. */
bolunen_sayilar = realloc(bolunen_sayilar, sizeof(int) * (bs_adet + 1));
bolunen_sayilar[bs_adet++] = sayi;
toplam += sayi;
}
}
if (bs_adet == 0) {
printf("Hic 7 ile bolunen sayi bulunamadi..\n");
return 0;
}
ortalama = toplam / (float) bs_adet;
printf("7 ile tam bolunen sayilar: %d adet, ortalama: %.2f\n", bs_adet, ortalama);
printf("Sayilar: %d", bolunen_sayilar[0]);
for (i = 1; i < bs_adet; i++) printf(" %d", bolunen_sayilar[i]);
printf("\n");
return 0;
}


Elbette sadece main() tarafı. Bu küçücük yerde kod yazmak zor, tam bir zulüm. Bu yüzden bir kontrol edin atlanmış vs. bir şey olabilir. Derlerken, isdigit() için -lc eklemek gerekebilir. Umarım çalışır.

Ama çalışmasada, bu gibi bir şeyde bakılması gereken şu şeylere bir örnek vermek için makul olduğunu sanıyorum.

* Kullanıcıyı başıboş bırakmayın. Girdiği değeri kontrol altında tutun.
* sonradan belli olacak değerler için, baştan yer vs. ayırmayın.
* Her olası durumu göz önüne alın.

Umarım faydası olur.. Eğer kullanacaksanız münhal yerlere bir kaç printf() koyup ilgili mesajları ekleyin derim..

Ha soruda biraz acayiplik olduğu akılda tutulmalı. Zira, 0, 7 ila tam bölünür. 0 Hariç denmediği için, 0'ıda bir sayı olarak kabul ettik.


Bu mesaja 1 cevap geldi.
S
15 yıl
Yüzbaşı

quote:

Orijinalden alıntı: skoylu

saxahan, eğer 101 sayı varsa?

ve dahasi:

average = (double)sum / count;

Eğer hiç 7 ile bolunen sayi girilmemişse, bu artık ne acayip şeyler yapar, kim bilir. Aslında sisteme gore bellidir, SIGFP (UNIX sinyali) veya muadili bir sinyalle programınız vahşice sonlandırılır sistem tarafından.

Bu işin iki yolu olabilir. Birisi, baştan kaç sayı gerektiğini öğrenmek. Diğeri ise, sayıların bittiğini gösteren bir bilgi girilmesini istemek.

Her iki yolla yapalım:

#include <stdio.h> 
#include <stdlib.h>
#include <ctype.h>

int sayi_oku(int *sayi) {
char okunan[16];
int inx = 0, i;
while (read(0, & okunan[inx], 1) == 1) {
if (okunan[inx] == '\n') {
okunan[inx] = 0;
if (strcmp(okunan, "end") == 0) return 1;
for (i = 0; i < inx; i++) {
if (i == 0)
if (okunan[i] == '-') continue;
if (!isdigit(okunan[i]))
return -1;
}
*sayi = atoi(okunan);
return 0;
}
inx++;
if (inx > 15) {
printf("Cok fazla karakter girdiniz. Lutfen bir sayı veya bitirmek için 'end' giriniz..\n");
inx = 0;
}
}
}
int main(char **argv, int argc) {
int sayi_adedi, sayi, ret, *bolunen_sayilar, bs_adet, islenen;
int toplam = 0, i;
float ortalama;
printf("Kac sayi girilecek:\n");
ret = sayi_oku(&sayi_adedi);
if (ret) {
printf("Hatali giris..\n");
return 1;
}
bolunen_sayilar = (int *)malloc(sayi_adedi * sizeof(int));
islenen = 0;
bs_adet = 0;
while (1) {
ret = sayi_oku(&sayi);
if (ret) {
printf("Gecersiz sayi..\n");
continue;
}
if ((sayi % 7) == 0) {
/* 7 ile tam bolunuyor.. */
bolunen_sayilar[bs_adet++] = sayi;
toplam += sayi;
}
islenen++;
if (islenen == sayi_adedi) break;
}
if (bs_adet == 0) {
printf("Hic 7 ile bolunen sayi bulunamadi..\n");
return 0;
}
ortalama = toplam / (float) bs_adet;
printf("7 ile tam bolunen sayilar: %d adet, ortalama: %.2f\n", bs_adet, ortalama);
printf("Sayilar: %d", bolunen_sayilar[0]);
for (i = 1; i < bs_adet; i++) printf(" %d", bolunen_sayilar[i]);
printf("\n");
return 0;
}


Bu da kullanıcının sayı kalmadığını söylemesi ile çalışan versiyon:
int main(char **argv, int argc) { 
int sayi, ret, *bolunen_sayilar, bs_adet;
int toplam = 0, i;
float ortalama;
bolunen_sayilar = NULL;
bs_adet = 0;
while (1) {
ret = sayi_oku(&sayi);
if (ret) {
if (ret == 1) // 'end' girildi..
break;
printf("Gecersiz sayi..\n");
continue;
}
if ((sayi % 7) == 0) {
/* 7 ile tam bolunuyor.. */
bolunen_sayilar = realloc(bolunen_sayilar, sizeof(int) * (bs_adet + 1));
bolunen_sayilar[bs_adet++] = sayi;
toplam += sayi;
}
}
if (bs_adet == 0) {
printf("Hic 7 ile bolunen sayi bulunamadi..\n");
return 0;
}
ortalama = toplam / (float) bs_adet;
printf("7 ile tam bolunen sayilar: %d adet, ortalama: %.2f\n", bs_adet, ortalama);
printf("Sayilar: %d", bolunen_sayilar[0]);
for (i = 1; i < bs_adet; i++) printf(" %d", bolunen_sayilar[i]);
printf("\n");
return 0;
}


Elbette sadece main() tarafı. Bu küçücük yerde kod yazmak zor, tam bir zulüm. Bu yüzden bir kontrol edin atlanmış vs. bir şey olabilir. Derlerken, isdigit() için -lc eklemek gerekebilir. Umarım çalışır.

Ama çalışmasada, bu gibi bir şeyde bakılması gereken şu şeylere bir örnek vermek için makul olduğunu sanıyorum.

* Kullanıcıyı başıboş bırakmayın. Girdiği değeri kontrol altında tutun.
* sonradan belli olacak değerler için, baştan yer vs. ayırmayın.
* Her olası durumu göz önüne alın.

Umarım faydası olur.. Eğer kullanacaksanız münhal yerlere bir kaç printf() koyup ilgili mesajları ekleyin derim..

Ha soruda biraz acayiplik olduğu akılda tutulmalı. Zira, 0, 7 ila tam bölünür. 0 Hariç denmediği için, 0'ıda bir sayı olarak kabul ettik.





100 tane sayı girmesi bile zor zaten :) o sadece belli limit. Onu bin yaparım gene sorun olmaz. Ayrıca kodlarında string karşılaştırması yapmışsın ama string.h library eklemeyi unutmussun ;)
Teşekkürler.





< Bu mesaj bu kişi tarafından değiştirildi saxahan -- 22 Nisan 2010; 20:44:12 >
Bu mesaja 1 cevap geldi.
S
15 yıl
Yüzbaşı

Sevgili saxahan 100 tane sayı girmesi zor filan değil :)

$ gcc -o saxahan saxahan.c
$ python -c "print 101 * '75\n'"|saxahan
Bummm...

Binde yapsan, 5 binde yapsan, bu iş yaş olur. Ve sen büyüttükçe iş daha yaş olmaya başlar. Herşeyden önce, 100 yaptın, 5 sayı giriliyor. O 95 sayı için neden kaynak harcadın? Müsrifliğin azı çoğu olmaz. Müsrif kod yazmaya alışmamak gerekir.

Olur o kadar, çalışıyorsa gene iyi. Ayaküstü, benzer bir şey nasıl olabilir, giriş seviyesi bir örnek. Forumda her gün bir scanf görmekten gına geldi.

Nasıl bir işse, ömür boyu hiç kullanmayacağınız ve kullanmamanız gereken bir şeyi, yeni başlayanın eline tutuşturmak hangi akla hizmettir, anlamış değilim. Ha, bize de böyle olmuştu. Elimize bir "input a%" verdiler, o yüzden boşu boşuna debelenip durduk senelerce.


Bu mesaja 1 cevap geldi.
S
15 yıl
Yüzbaşı

quote:

Orijinalden alıntı: skoylu

Sevgili saxahan 100 tane sayı girmesi zor filan değil :)

$ gcc -o saxahan saxahan.c
$ python -c "print 101 * '75\n'"|saxahan
Bummm...

Binde yapsan, 5 binde yapsan, bu iş yaş olur. Ve sen büyüttükçe iş daha yaş olmaya başlar. Herşeyden önce, 100 yaptın, 5 sayı giriliyor. O 95 sayı için neden kaynak harcadın? Müsrifliğin azı çoğu olmaz. Müsrif kod yazmaya alışmamak gerekir.

Olur o kadar, çalışıyorsa gene iyi. Ayaküstü, benzer bir şey nasıl olabilir, giriş seviyesi bir örnek. Forumda her gün bir scanf görmekten gına geldi.

Nasıl bir işse, ömür boyu hiç kullanmayacağınız ve kullanmamanız gereken bir şeyi, yeni başlayanın eline tutuşturmak hangi akla hizmettir, anlamış değilim. Ha, bize de böyle olmuştu. Elimize bir "input a%" verdiler, o yüzden boşu boşuna debelenip durduk senelerce.


7' e tam bölünen sayı yoksa.
/* programmer: saxahan */ 

#include <stdio.h>
#define SIZE 100

int main(void)
{
int n; //kullanicinin girmek istediği sayı sayısı
int number = 0; //atama yapilacak degisken
int i; //sayac(counter)
int sum = 0; //7 e tam bolunen sayilarin toplami
double average = 0.0; //7 e tam bolunen sayilarin aritmetik ortalamasi
int array[SIZE]; //dizi atamasi icin
int count = 0; //ortalamayi bulabilmek icin gerekli olan sayac
int j; //diziyi ekrana sirasi ile yazdirmak icin sayac

printf("Kac tane sayi giriceksiniz?\n");
printf("Lutfen adetini giriniz> ");
scanf("%d", &n);

printf("'7' e bolunecek sayilari giriniz: \n");
j = 0;
for(i = 0; i < n; ++i) {
scanf("%d", &number); //sayilar kullanicidan alinir

if((number % 7) == 0) {
count++; //bolunen sayilarin sayacini bir artir
j++;
array[j] = number;

sum = sum + number; //tam bolunen sayilarin toplamini hesapla

}


}

if(count == 0) { //eğer 7'e tam bölünen sayı yoksa
printf("\n7'e tam bolunen sayi yok!!!\n");
} else {
printf("\n7 e tam bolunen sayilar> ");
for(j = 1; j < count + 1; ++j) //7' e tam bolunen sayilari sirasiyla ekrana yazdir
printf("%d ", array[j]);

printf("\ntoplam: %d", sum);
average = (double)sum / count; //ortalama
printf("\nortalama: %.2f", average );
}

printf("\n\n");
return (0);
}



Bu mesaja 1 cevap geldi.
S
15 yıl
Yüzbaşı

İki gözüm, şu huyunuzu bir bırakın: Faraziye ile kod yazmak..

Nedne 100 olmasın? Neden 100 tane olsun? Böyle faraziyelerle kod yazılmaz. Yol basit:

printf("Kac sayi girilecek:");
scanf("%d", &SIZE);

int *array = malloc(SIZE)

yada

int *array = alloca(SIZE);

herneyse..

Size lazım olmayan kaynağı kullanmayın. Müsriflik yapmayın. Cimrilik iyi bir şeydir, elbette abartmamak kaydıyla.

Bu işin en zor tarafı bilgisayar gibi düşünebilmektir. Onunda yolu bu şekilde düşünmekten geçer. 100 adet INT için kafadan stackta yer ayırmak, abesle iştigaldir. Kafayı karıştırır, neden 100, neden daha fazla değil vs gibi bir sürü soruya gebedir. Ve KISS iyi bir kaidedir, uyulması gerekir.


Bu mesaja 1 cevap geldi.
S
15 yıl
Yüzbaşı

quote:

Orijinalden alıntı: skoylu

İki gözüm, şu huyunuzu bir bırakın: Faraziye ile kod yazmak..

Nedne 100 olmasın? Neden 100 tane olsun? Böyle faraziyelerle kod yazılmaz. Yol basit:

printf("Kac sayi girilecek:");
scanf("%d", &SIZE);

int *array = malloc(SIZE)

yada

int *array = alloca(SIZE);

herneyse..

Size lazım olmayan kaynağı kullanmayın. Müsriflik yapmayın. Cimrilik iyi bir şeydir, elbette abartmamak kaydıyla.

Bu işin en zor tarafı bilgisayar gibi düşünebilmektir. Onunda yolu bu şekilde düşünmekten geçer. 100 adet INT için kafadan stackta yer ayırmak, abesle iştigaldir. Kafayı karıştırır, neden 100, neden daha fazla değil vs gibi bir sürü soruya gebedir. Ve KISS iyi bir kaidedir, uyulması gerekir.


Birinci sınıf bilgilerimle yapılabilecek şeyler bunlar. Hocamızda cimri olun diyor zaten program yazarken. Ama bu konuda sahip olduğum bilgiler bunlarla yazılabiliyor. Aslında yazmış olduğunuz kodlama mantığını düşünmüştüm ama kodlama bilgim yetmiyordu. Bunun için teşekkür ederim ;)
İyi geceler.





< Bu mesaj bu kişi tarafından değiştirildi saxahan -- 26 Nisan 2010; 0:10:15 >
Bu mesaja 1 cevap geldi.
S
15 yıl
Yüzbaşı

Bir yerlerde bir şeyler, çok şeyler yanlış oluyor. Ama üzülmeyin, bu yanlışın sebebi siz değilsiniz.

C, yapısal programlama için geliştirilmiş bir dildir. Fakat nedense öğretilirken bir şeyler, yapısal olmayan absürt yöntemler öğretilir.

Aslında yapılmaya çalışılan doğru, mantıklı bir şey. Ama bu iş maalesef böyle olmuyor. Yapılmaya çalışılan şey şu: Dili donanımdan soyutlamak. Yani bellekmiş, şuymuş buymuş düşünmeden, o işleri derleyiciye bırakıp kod yazmayı sağlamak.

Fakat maalesef pratikte bu imkansız oluyor. Ve bu temeli göstermeden, kavratmadan böyle şeyleri anlamak ve anlatmak imkansız oluyor. O yüzden de bu malloc() vs. sanki çooook ileri işlermiş gibi geliyor. Pointer nedir, ne iştir anlamak imkansız oluyor. Ve işin kötüsü, pointer nedir anlamadan C'de veya başka dillerde ilerlemenin imkanı yok.

Bir ara olmazsa bu mevzuya dair bir şeyler karalayayım. İhtiyaç var gibi görünüyor.


Bu mesaja 1 cevap geldi.
F
15 yıl
Yüzbaşı

Pointer konusu karmaşık bir şey değil ya, Deitelden birkere okusanız hemen anlarsınız.


Bu mesaja 1 cevap geldi.
S
15 yıl
Yüzbaşı

Sevgili fenerista, maalesef bunu anlamak o kadar basit değil..

char strn[16];
char *ptr_1 = &strn[1];
char *ptr_2 = "HEDE";
char *ptr_3 = strdup('hede');

Buradaki şu ptr_n'lerin her biri farklı bir pointer. Her biri başka özellikler taşıyor.

Dahası bu kadarda değil.

struct tst_t{
char a;
char b;
};

struct tst_t tst;

char *p1 = &tst.a;
char *p2 = &tst.b;

He, tamam, bu böyle ama, neden bunun

char *p2 = p1 + 1;

olmayacağını izah etmekte bir mesele. Dediğim gibi, bunu anlamak, "ahanda bu belleği gösteren bir işaretmiş bre.." diyebiliyor olmak, bunu anlamaya kafi gelmiyor.


Bu mesaja 2 cevap geldi.
G
15 yıl
Yarbay

Vakti zamanında ceviz.net te dolaşırken hararetli bir konuya yazılan şöyle bir mesaj görmüştüm. Aklıma o geldi. Kelimesine dokunmadan yapıştırıyorum:

Alıntı Euclides, mesajından alıntı:
Malesef bu görüşe katılmıyorum, neyi programladığınızı bilmeden nasıl programlayacaksınız ? veya nasıl programlacağını dizayn etmeden nasıl donanım üreteceksiniz ?

bu problem, birkaç katmana ayrılarak
ve her katman kendi içerisinde profesyonelleşerek çözülüyor.
senin bulunduğun katmanı biliyorum ve haklısın.
ama herkes senin gibi kendi işletim sistemini yazmıyor

her seviye sadece kendi ayaklarının bastığı zemine güvenmeli.
4. kattaki kişi, 3. katın zemini ile ilgili kaygılar taşımamalı.

mesela RISC işlemcileri için derleyici yazan kişi,
max performans için bu yapıyı çok iyi değerlendirmek zorunda.
ama ilk amca işini doğru yaptı ise, C++ programcısı bunu düşünmemeli.
benzer şekilde bunları ,o platform için java sanal makinesini yazan kişi düşünmeli. java programcısı değil.

ekran kartları sürekli olarak yeni birşeyler destekliyor.
bunları, sürücülerini yazan kişiler düşünsün.
bir üst seviye programcılar,
sadece grafik motorlarının API larını takip etmek zorunda.
( directX , opengl .. )
ama oyun motoru kullanan birisi, bunları da bilmek zorunda değil.
( ama scenegraph yapısını kullanabilmeli. )

donanım ile ilgili olarak birşey söyleyemem, sadece beklentilerim olabilir.
gürültüsüz bir kasa, ısınmayan bir sistem, uyumlu/doğru seçilmiş bileşenler,
ve tabi ki iyi fiyat/performans...



D
15 yıl
Binbaşı

Kafam örneğe takıldı, son durumda, bellekteki boş veya çöplük bir sayı vb. herneyse kodla dolu olan bir bellek adresini gösterir p2 bildiğim kadarıyla, bunu da gayet 2-3 kitap okuyarak anlayabiliyorsunuz. Aslında bakarsak önemli olan istemek, sonra gerisi geliyor =)


Bu mesaja 1 cevap geldi.
G
15 yıl
Yarbay

quote:

Orijinalden alıntı: AlperXp

Kafam örneğe takıldı, son durumda, bellekteki boş veya çöplük bir sayı vb. herneyse kodla dolu olan bir bellek adresini gösterir p2 bildiğim kadarıyla, bunu da gayet 2-3 kitap okuyarak anlayabiliyorsunuz. Aslında bakarsak önemli olan istemek, sonra gerisi geliyor =)

Orada tür uyuşmazlığı var.
char = char * // Hata


Bu mesaja 1 cevap geldi.
S
15 yıl
Yüzbaşı

quote:

max performans için bu yapıyı çok iyi değerlendirmek zorunda.
ama ilk amca işini doğru yaptı ise, C++ programcısı bunu düşünmemeli.


Bu çok iyi, güzel, hoş, ama maalesef boş. Bu istek bir ütopyadan ibaret. Maalesef.

Keşke bu işler bu kadar iyi layerize edilebilse, soyutlanabilseydi. Ama olmuyor. Bunlar, maalesef ayrılabilmiş değil.

Programcı o game engine'i bilir. Ona göre yazar. Ondan sonra da oyun ya adam gibi çalışmaz, ya sürünür, el mahkum gider o motorunda altını öğrenmek, kullanmak zorunda kalır. İşte olan, olacağı budur.

Bunlar, genelde tembele iş buyur sana akıl öğretsin vakası benzeri çıkışlardır. Ben altını bilmem, bilmemde gerekmez, ben böyle yazarım, ederim.. Buyur yaz. İşte meydan.. Varacağın bir yeri göremiyoruz, emin ol.

Ekran kartı sürücüsünü, onu yazanlr düşünsün. Elbette öyle zaten. Peki onu yazanlar uzaydan mı geliyor, gelecek? Ya onu yazmanda gerekirse, bu işi kıvırabilecek misin? İşte buradaki soru, mesele bu zaten.

Programcıyım diyen adam, gidip şurada PHP ile blog yazarken, oturup elbette bunun L2-cache verimini düşünmeyecek. Ama bu adam ertesi gün bir şifreleme programı yazarken, bu kodun L2-Cache'de kalan artığından keyin çıkarılabileceğini hesap edecek. Bu farkı bir farketmeniz gerekiyor.

Bizim öbür taraflarda neyin nasıl olduğuyla işimiz olmaz demek, ancak ucuz ve sığ bir avuntudur. Programcı denen adam bugün web sayfası yazar, öbür gün gider palm handheld için C++ ile yazar. Bu laf değil. Koca bir webmail programını PHP ile yazmış olan bir arkadaşım, otelde kaldığı sırada canı sıkılınca kendi Palmi için C++ ile kod yazar dururdu.

Gidip web sayfası yazarken altta dönen dolapları bilmek gerekir mi? Elbette. Eğer bunu bilmiyorsanız, SQL inject denen can acıtan iğneyi kalçanıza saplanmış olarak buluverirsiniz mesela.. Kolay anlaşılsın diye basit örnekler veriyorum, ama bu her zaman bu kadar basit olmuyor elbette.

Ha, web sayfası yazarken bilinecek olan dolap elbette Journal dosya ssiteminin bilmem nesi değil. CPU'nun kaç registeri olduğu da değil.

Fakat, bir programcı bugün web sayfası yazarken, yarın hardware sürücü yazabilmeli..

Oturmuş php ile web arabirimi yazarken, haydeee dediler attılar önümüze bir touchscreen.. Arada bir hafta oturduk ona driver yazdık:

http://www.mail-archive.com/linux-usb-devel@lists.sourceforge.net/msg29754.html

Eee? E'si şu, programcı iseniz, bu söylediklerinizi söyleme lüksünüz yok. İşyerinden bir arkadaş var, embedded cihaz için, hardware arabirimini yazdı. Şimdi oturup bir web server yazıyor, sonra da o serveri kullanarak web uygulamasını yazacak. Ve bu arkadaşın henüz bir satır dahi HTML yazmışlığı yok.

İşte programcılık böyle bir şeydir. Diyebilirsiniz, ben webten anlamam, yok server yazmaktan anlamam. Hay, hay derler, siz gidersiniz, anlayan gelir. Anladınzı siz onu..

Düşünün bakalım. Web sayfası yazıyorsunuz. Linux paket dosyalarının içine erişmeniz gerekiyor.

Yapamıyorum diyerek pek çoğunun yapacağı gibi işi ve kazancı geri çevirmek mi, yoksa oturup bunu yapacak PHP eklentisini yazıverebiliyor olmak mı daha iyi? Sizce?





< Bu mesaj bu kişi tarafından değiştirildi skoylu -- 27 Nisan 2010; 21:40:05 >
Bu mesaja 1 cevap geldi.
T
15 yıl
Teğmen

Profesyonel olarak programlama ile uğraşıyorsanız kaynakların kullanımını çok iyi bilmek zorundasınız. Kaynaklar programcıyı her zaman sınırlar , bu sorunu aşmak için ya kendi kodunuzda değişikliğe gidersiniz ya da bir alt katman varsa o katmana inip onun yapısında değişikliğe gidersiniz. C ile programlama yapıyorsanız , kullanıcaya diğer üst seviye dillere göre daha çok özgürlük verir ama bu demek değildir ki her istediğimi yaparım aslında daha çok sorumlukluk getirir. Üst seviye programla dillerine çıktıkça bu sorumlukluktan kurtulur ama özgürlğünüzdan feragat edersiniz. Bu tamamen kaynak problem ilişkisi , size ayrılan kaynağa bakarsınız ben bunu en iyi nasıl çözerim derseniz sonra en iyi yöntemi seçip kullanırsınız.



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.