Gönderen Konu: Sayıyının rakamlarını Boşluklu Yazdırmak  (Okunma sayısı 1990 defa)

Çevrimdışı okko

  • Üye
  • İleti: 112
    • Profili Görüntüle
Sayıyının rakamlarını Boşluklu Yazdırmak
« : 30 Tem 2015, 22:49:26 Prş »
Merhabalar,
  Prgrama yazılan 1-5 basamak arasında(ve dahi) sayıların her bir basamağında \t kadar boşluk bırakarak yazdıracak bir program çıktısı almak istiyorum.
Programı yazdım fakat sadece 5 Basamaklı çıktısı doğru.123 sayısını giriş yapıp Debugging yaptığımda b5 e çok yüksek bir sayı atıyor ve b4'de de 0 rakamını atıyor.Nasıl düzeltebilirim?
  Programın sadece 5 basamaklı bir sayıda çalışmasını engellemek için if komutları koydum ama olmadı.If komutlarını kaldırınca olmayan her basamağa 0 değerini atıyor.

Kod: [Seç]
#include<stdio.h>

void bosluk (int sayi1);

int main( void )
{
int sayi;
scanf("%d", &sayi);

bosluk( sayi );
}

void bosluk ( int sayi1 )            //b birler basamağı...b2 onlar basamağı..b3 yüzler basamağı..b4 binler basamağı..b5 on binler basamağıdır.
{
int b;
int b2;
int b3;
int b4;
int b5;


b=sayi1%10;   //Birler basamağını bulmak için

if(sayi1!=b)    // eğer sayi bir basamaklıysa aşağıdaki işlemi yapmaması için if koşulunda eşitsizlik var.
b2=(sayi1%100-b)/10;

if(sayi1!=10*b2+b)
b3=(sayi1%1000-10*b2-b)/100;

if(sayi1!=100*b3+10*b2+b)
b4=(sayi1%10000-100*b3-10*b2-b)/1000;

if(sayi1!=1000*b4+100*b3+10*b2+b)
b5=sayi1-1000*b4-100*b3-10*b2-b;

printf("%d\t%d\t%d\t%d\t%d\t", b5, b4, b3, b2, b);
}
Kayalari delen damlalarin büyüklügü degil, sürekliligidir.

Çevrimdışı zafer11

  • Üye
  • İleti: 28
    • Profili Görüntüle
Ynt: Sayıyının rakamlarını Boşluklu Yazdırmak
« Yanıtla #1 : 31 Tem 2015, 09:21:16 Cum »
Kod: [Seç]
void bosluk ( int sayi1 )            //b birler basamağı...b2 onlar basamağı..b3 yüzler basamağı..b4 binler basamağı..b5 on binler basamağıdır.
{
int b;
int b2;
int b3;
int b4;
int b5;


b=sayi1%10;   //Birler basamağını bulmak için

if(sayi1!=b)    // eğer sayi bir basamaklıysa aşağıdaki işlemi yapmaması için if koşulunda eşitsizlik var.
b2=(sayi1%100-b)/10;
else
{
printf("%d\t", b);
return;//fonksiyondan çık, diğer if else lerin çalışmaması için, fonksiyonun dönüş değeri void olduğu için return ün yanında değer yok
}

if(sayi1!=10*b2+b)
b3=(sayi1%1000-10*b2-b)/100;
else
{
printf("%d\t%d\t",  b2, b);
return;//fonksiyondan çık
}
if(sayi1!=100*b3+10*b2+b)
b4=(sayi1%10000-100*b3-10*b2-b)/1000;
else
{
printf("%d\t%d\t%d\t", b3, b2, b);
return;//fonksiyondan çık
}

if(sayi1!=1000*b4+100*b3+10*b2+b)
b5=(sayi1-1000*b4-100*b3-10*b2-b)/10000;//burada 10000 e bölme eksikti
else
{
printf("%d\t%d\t%d\t%d\t",b4, b3, b2, b);
return;//fonksiyondan çık
}
//hiçbir return çalışmadıysa yani fonksiyondan çıkmadıysa bu satıra ulaşır, yani sayı 5 basamaklıdır.
printf("%d\t%d\t%d\t%d\t%d\t", b5, b4, b3, b2, b);
}
aşağıdaki printf le de boşluklu yazdırılabilir:
printf("%5d%5d%5d%5d%5d", b5, b4, b3, b2, b);//%5d yazdırılacak sayı için 5 karakterlik alan ayırıyor. sayıyı sola dayalı yazdırıyor. örneğin 1 basamaklı sayı ise sağda 4 karakterlik alan boş kalıyor.

Çevrimdışı okko

  • Üye
  • İleti: 112
    • Profili Görüntüle
Ynt: Sayıyının rakamlarını Boşluklu Yazdırmak
« Yanıtla #2 : 04 Ağu 2015, 01:49:56 Sal »
Teşekkür ederim fakat benim sorunum bu kodlarla hem 5 basamaklı bir sayıyı tersten yazdırmak hem de 5 basamaktan daha az bir sayıyı tersten yazdırmda. Kodlarda bir hata oluşuyor. Şu an kodu derleyemiyorum hata veriyor.
Kayalari delen damlalarin büyüklügü degil, sürekliligidir.

Çevrimdışı zafer11

  • Üye
  • İleti: 28
    • Profili Görüntüle
Ynt: Sayıyının rakamlarını Boşluklu Yazdırmak
« Yanıtla #3 : 04 Ağu 2015, 11:22:27 Sal »
Kodda main kısmı yoktu sadece fonksiyonu yazmıştım. aşağıdaki haliyle derledim, çalışıyor.(Orwell Dev C++ da)
Kod: [Seç]
#include<stdio.h>

void bosluk (int sayi1);

int main( void )
{
int sayi;
scanf("%d", &sayi);

bosluk( sayi );
}


void bosluk ( int sayi1 )            //b birler basamağı...b2 onlar basamağı..b3 yüzler basamağı..b4 binler basamağı..b5 on binler basamağıdır.
{
int b;
int b2;
int b3;
int b4;
int b5;


b=sayi1%10;   //Birler basamağını bulmak için

if(sayi1!=b)    // eğer sayi bir basamaklıysa aşağıdaki işlemi yapmaması için if koşulunda eşitsizlik var.
b2=(sayi1%100-b)/10;
else
{
printf("%d\t", b);
return;//fonksiyondan çık, diğer if else lerin çalışmaması için, fonksiyonun dönüş değeri void olduğu için return ün yanında değer yok
}

if(sayi1!=10*b2+b)
b3=(sayi1%1000-10*b2-b)/100;
else
{
printf("%d\t%d\t",  b2, b);
return;//fonksiyondan çık
}
if(sayi1!=100*b3+10*b2+b)
b4=(sayi1%10000-100*b3-10*b2-b)/1000;
else
{
printf("%d\t%d\t%d\t", b3, b2, b);
return;//fonksiyondan çık
}

if(sayi1!=1000*b4+100*b3+10*b2+b)
b5=(sayi1-1000*b4-100*b3-10*b2-b)/10000;//burada 10000 e bölme eksikti
else
{
printf("%d\t%d\t%d\t%d\t",b4, b3, b2, b);
return;//fonksiyondan çık
}
//hiçbir return çalışmadıysa yani fonksiyondan çıkmadıysa bu satıra ulaşır, yani sayı 5 basamaklıdır.
printf("%d\t%d\t%d\t%d\t%d\t", b5, b4, b3, b2, b);
}

Çevrimdışı okko

  • Üye
  • İleti: 112
    • Profili Görüntüle
Ynt: Sayıyının rakamlarını Boşluklu Yazdırmak
« Yanıtla #4 : 09 Ağu 2015, 22:08:56 Paz »
Void tipi fonksiyonlarda return kullanılmıyor diye biliyorum. Başlangıç seviyesinde öğrendiğim için şu an öyle örnekler görmedim.

Void fonksiyonlarında return sadece fonskyiondan çıkmak için mi kullanılıyor?
Kayalari delen damlalarin büyüklügü degil, sürekliligidir.

Çevrimdışı zafer11

  • Üye
  • İleti: 28
    • Profili Görüntüle
Ynt: Sayıyının rakamlarını Boşluklu Yazdırmak
« Yanıtla #5 : 11 Ağu 2015, 00:21:38 Sal »
evet fonksiyondan çıkmak için kullanılıyor.(herhangi bir değer döndürmüyor(void))