C yardim.......

levent1132

New member
Katılım
20 Ara 2009
Mesajlar
133
Reaction score
0
Puanları
0
Konum
İzmir
c de girilen sayıyı yazıya cevircek program......

programa 3476 diye girdiğimz zaman, üç bin dört yüz yetmiş altı diye yazacak ,max 4 basamaklıyı cevirse yeterli yardımlarınızı bekliyorum.....
 
Internetten birkac adet isini gorebilecek buldum,

Mantik ayni zaten sadece binler basamagi eklenmemis ilk ornekte, buradan inceleyebilirsin

Kod:
/*
Girilen sayının, nasıl okunduğunu ekrana yazdıran programdır. 
Fonksiyon kullanımıyla daha efektif olarak yazılabilir.
Ancak henüz işlenmeyen bir konu olduğundan, basit bir şekilde 
yazılmıştır.
*/
#include<stdio.h>
int main( void )
{
	int sayi;

	//Klavyeden girilecek sayinin 0 ile 999 sınırlarında 
	//olup olmadığı kontrol ediliyor. Eğer değilse, 
	//uyarı verilip, yeni bir sayı isteniyor. Bu işlem 
	//doğru bir değer girilene kadar devam ediyor.
	do {
		printf( "Sayıyı giriniz> " );
		scanf("%d",&sayi);
		if( sayi>999 || sayi<0 )
			printf("Girdiğiniz sayı uygun değildir.\n"
				"0 ile 999 arasında olmalıdır.\n");
		else
			break;
	}while( 1 );

	printf( "%d sayısı, '",sayi );

	//Verilen sayıyı, yazıyla ifade edebilmemiz için, 
	//yüzler, onlar ve birler basamaklarına ayırmamız
	//gerekmektedir. 

	//Sayının yüzler basamağı ayrıştırılıyor.
	//Bunun için sayıyı, 100'e bölmek yeterli.

	//YÜZLER BASAMAĞI:
	switch( sayi/100 ) {
		case 9: printf( "dokuzyüz" ); 	break;
		case 8: printf( "sekizyüz" ); 	break;
		case 7:	printf( "yediyüz" ); 	break;
		case 6: printf( "altıyüz" ); 	break;
		case 5: printf( "beşyüz" ); 	break;
		case 4:	printf( "dörtyüz" ); 	break;
		case 3: printf( "üçyüz" ); 	break;
		case 2: printf( "ikiyüz" ); 	break;
		case 1: printf( "yüz" ); 	break;
	}

	//Onlar basamağını bulmak için, sayının 
	//yüze bölümünden kalan değeri, 10'a 
	//bölüyoruz. Yüzler basamağını bir önceki 
	//adımda ele aldığımız için, bu adımda, 
	//sayının yüze bölümünü değil, bölümünden 
	//kalanı kullandık.

	//ONLAR BASAMAĞI:
	switch ( (sayi%100)/10 ) {	
		case 9: printf( "doksan" ); 	break;
		case 8: printf( "seksen" ); 	break;
		case 7: printf( "yetmiş" ); 	break;
		case 6: printf( "altmış" ); 	break;
		case 5: printf( "elli" ); 	break;
		case 4: printf( "kırk" ); 	break;
		case 3: printf( "otuz" ); 	break;
		case 2: printf( "yirmi" ); 	break;
		case 1: printf( "on" ); 	break;
	}

	//Birler basamağını bulabilmek için, sayının
	//10'a bölümünden kalana bakıyoruz.

	//BİRLER BASAMAĞI:
	switch ( (sayi%10) ) {	
		case 9: printf( "dokuz" ); 	break;
		case 8: printf( "sekiz" ); 	break;
		case 7: printf( "yedi" ); 	break;
		case 6: printf( "altı" ); 	break;
		case 5: printf( "beş" );	break;
		case 4: printf( "dört" ); 	break;
		case 3: printf( "üç" ); 	break;
		case 2: printf( "iki" );	break;
		case 1: printf( "bir" );	break;
	}

	//Eğer sayı 0 ise, yukarda ki düzeneğe 
	//uymayacağından, onu ayrıca ele alıyoruz.
	if( sayi == 0 )
		printf( "sıfır" );

	printf( "' şeklinde okunur.\n" );
	
	return 0;
	
}

Diger bir ornekte Dev-C++'da derlenip test edilmis.

Bunun mantigi ise biraz daha sabit degerler atamak uzerine.

Kod:
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define HataGiris "Hatali Giris"
#define HataUzun "Max. 6 Basamakli Olmalidir"
#define Eksi "Eksi"
#define Sifir "Sifir"
#define Bir "Bir"
#define Iki "Iki"
#define Uc "Uc"
#define Dort "Dort"
#define Bes "Bes"
#define Alti "Alti"
#define Yedi "Yedi"
#define Sekiz "Sekiz"
#define Dokuz "Dokuz"
#define On "On"
#define Yirmi "Yirmi"
#define Otuz "Otuz"
#define Kirk "Kirk"
#define Elli "Elli"
#define Altmis "Altmis"
#define Yetmis "Yetmis"
#define Seksen "Seksen"
#define Doksan "Doksan"
#define Yuz "Yuz"
#define Bin "Bin"
#define Milyon "Milyon"
char * tek_getir(const unsigned char tek){
char tamponokunus[23];
sprintf(tamponokunus,"");
switch(tek){
case '0':return Sifir;
case '1':return Bir;
case '2':return Iki;
case '3':return Uc;
case '4':return Dort;
case '5':return Bes;
case '6':return Alti;
case '7':return Yedi;
case '8':return Sekiz;
case '9':return Dokuz;
}
}
char * cift_getir(const unsigned char cift){
switch(cift){
case '1':return On;
case '2':return Yirmi;
case '3':return Otuz;
case '4':return Kirk;
case '5':return Elli;
case '6':return Altmis;
case '7':return Yetmis;
case '8':return Seksen;
case '9':return Doksan;
}
}
char * yuz_getir(const unsigned char yuz){
char * tamponokunus=(char*)malloc(10);
sprintf(tamponokunus,"");
if(yuz>1){
strcat(tamponokunus,tek_getir(yuz));
strcat(tamponokunus," ");
}
strcat(tamponokunus,Yuz);
return tamponokunus;
}
char * okunus(signed long int sayi){
char * tamponokunus=(char*)malloc(35);
char * tampon=(char*)malloc(35);
char * tampontam=(char*)malloc(6);
char * tamponsayi=(char*)malloc(3);
char * tamponparca[2];
tamponparca[0]=(char*)malloc(3);
tamponparca[1]=(char*)malloc(3);
tamponparca[2]=(char*)malloc(3);
static int i,j,k;
k=0;
sprintf(tamponokunus,"");
if(sayi<0){
sayi=0-sayi;
k=1;
}
sprintf(tampontam,"%d",sayi);
printf("\n%s\n",tampontam);
for(i=2;i>0;i--)
strncpy(tamponparca[i-1],&tampontam[strlen(tampontam)-(i*3)],3);
for(i=1;i>=0;i--){
j=atoi(tamponparca[i]);
sprintf(tamponsayi,"%s%d",
(j<1?"000":(j<10?"00":(j<100?"0":""))),
j);
if(tamponsayi[0]!='0'){
strcat(tamponokunus,yuz_getir(tamponsayi[0]));
strcat(tamponokunus," ");
}
if(tamponsayi[1]!='0'){
strcat(tamponokunus,cift_getir(tamponsayi[1]));
strcat(tamponokunus," ");
}
if(tamponsayi[2]!='0'){
strcat(tamponokunus,tek_getir(tamponsayi[2]));
strcat(tamponokunus," ");
}
if(i==1&&strlen(tamponokunus)>0){
strcat(tamponokunus,Bin);
strcat(tamponokunus," ");
}
}
sprintf(tampon,"%s %s",(k==1?Eksi:""),tamponokunus);
return tampon;
}
int main(int argc, char *argv[]){
static int i,j;
static char * tampon=(char*)malloc(6);
j=0;
printf("Okunacak sayiyi giriniz : ");
gets(tampon);
if(strlen(tampon)>6)
j=2;
for(i=0;i<strlen(tampon);i++)
if(!isdigit(tampon[i])&&tampon[i]!='-')
j=1;
if(j==1)
printf(HataGiris);else
if(j==2)
printf(HataUzun);else{
printf(okunus(atoi(tampon)));
}
getch();
return 1;
}

Kodlari test et, birincisi isini gorebilecek durumda, herhangi bir hata alirsan tekrar yardimci olabilirim. Kolay gelsin.
 
yardımlarınız için çok teşşekürler..

ikinci verdiğiniz kodda (118. satır "static char * tampon=(char*)malloc(6);"

hata veriyor (başa döndürücü öğe sabit değil) diyo
 
Geri
Üst