PDA

Tam Sürümünü Görmek İçin : C ile Bayrak Cizme


sakruh
05/10/2007, 23:12
Merhaba arkadaslar,

Benim C ile ilgili bir sorum olacak. Simdi * lardan olusan ve boyutlari kullanici tarafindan kontrol edilebilen bir bayrak cizimi yapmaya calisiyorum. Bayragin ust genisligi (upper width) daima alt genisliginden (lower width) kucuk olmak zorunda. Ust genislik 0 oldugunda da program durucak. Command format olarak THE_UPPER_WIDTH THE_LOWER_WIDTH kullanilacak ve output sadece * lardan olacak.

Ornek vermek gerekirse...

Input :
2 5
1 3
0 0

Output :
**
***
****
*****
*
**
***

Simdi tam olarak nereden baslayacagimi bilmiyorum. C ye daha yeni basladigim icin siz arkadaslarimin goruslerini bekliyorum...

tesekkurler...


acehreli
05/10/2007, 23:36
- Genislik bilgilerini scanf ile okursun
- for dongusunu birinci genislikten ikinci genislige kadar yurutursun
- dongu icinde o andaki genislik kadar * yazdirirsin
- *'lar icin oncekinin icinde ikinci bir for dongusu kullanabilirsin; veya daha iyisi bu isi ayri bir fonksiyona tasimaktir ama simdilik iki for ile halledebilirsin

Ali

depones
05/10/2007, 23:36
Merhaba,

Aşağıya örnek bir kod koyuyorum. Bu kodu biraz değiştirerek istediğinizi gerçekleştirebilirsiniz:

#include <stdio.h>

int main()
{
int n, i, k;

printf("Bir sayi giriniz: ");
scanf("%d", &n);

for (i = 0; i < n; ++i) {
for (k = 0; k < i + 1; ++k)
printf("*");
putchar('\n');
}

return 0;
}

sakruh
05/10/2007, 23:40
peki bunu for kullanmadan yapmak mumkun degil mi ? Yani mesela while ile yapilamaz mi ?

depones
06/10/2007, 00:05
peki bunu for kullanmadan yapmak mumkun degil mi ? Yani mesela while ile yapilamaz mi ?

Neden while ile yapmak istiyorsunuz ? Çünkü for ile yapılması kanaatimce çok daha uygun.

İçteki döngü döndükçe bir sütunun satırlarındaki yıldızları basmakta, dıştaki döngü döndükçe yeni satır oluşturmakta. while ile yaparsanız while'ın içinde belirttiğiniz koşul false oluncaya kadar döngü dönecektir. O zaman, örneğin dıştaki döngü için i değişkenine while'a girmeden ilkdeğer verip while'ın iç bilinirlik alanında (scope) değerini artırmanız gerekecek. Tabi, aynısını içte bir tane daha yazacağınız ikinci while döngüsü için de yapmanız gerekecek. Kodun okunabilirliği bozulacaktır.

Önceki mesajımda yazdığımdan daha efektif bir yöntemini bilmiyorum.

İyi çalışmalar.

sakruh
06/10/2007, 00:14
Cunku simdi sadece while'i ogrendik, onun icin burada while kullanmamiz gerekiyor. Dedigim gibi C de cok yeniyim. While ile ilgili yorumunuzu biraz daha acar misiniz ?

depones
06/10/2007, 00:37
while ile yapmanız gerekirse önceden yazdığım kodu aşağıdaki şekle çevirebilirsiniz:

int n, i, k;

printf("Bir sayi giriniz: ");
scanf("%d", &n);

i = 0;
while (i < n) {
k = 0;
while (k < i + 1) {
printf("*");
++k;
}
putchar('\n');
++i;
}

while ve for'un sentaksını şöyle anlatabilirim.

for (ifade1; ifade2; ifade3) {
..........
}

Genellikle ifade1'de döngü değişkenine ilkdeğerini verebilirsiniz ve ifade3'te döngü değişkenini artırabilir ya da azaltabilirsiniz. Eğer kullanacağınız döngüde döngü değişkenine ilkdeğer vermeniz ya da artırmanız gerekmiyorsa while'ı kullanabilirsiniz:

while (ifade2) {
..........
}

Eğer hem döngü değişkenine ilkdeğer vereceğim ve artıracağım hem de bunu while kullanarak yapacağım derseniz aşağıdaki gibi bir kalıp kullanabilirsiniz:

ifade1 = 0;
while (ifade2) {
...........
...........
++ifade3;
}

İyi çalışmalar.

sakruh
06/10/2007, 01:21
tesekkurler depones, cok yardimci oldunuz ...

etrbet
13/12/2007, 01:22
c / c++ konuları altında 2 tane örnegim bulunuyor onlara bakarsan belki işine yarar dedigin şeyler yapılabilir zor degiller ama benim sana tavsiyem işine yarayacak şeyler ögrenmen cünkü yeni baslıyorum dıyorsun bayrak cızmek sana hıcbır faydası olmayacak.ben sana son olarak sunu soylemek ıstıyorum fonksiyonlara agırlık ver işine cok yarayacaklar..