PDA

View Full Version : کار با اشاره گرها .



delphi_stu
شنبه 30 اردیبهشت 1385, 18:08 عصر
با سلام .
دوستان ممنون میشم در حل این مشکل راهنماییم کنند:
برنامه ای می خوام که عدد صحیحی (رشته نباشد) رو بگیره و به صورت حروفی چاپ کنه .
مثلا : 4561 خروجی : chahar hezaro pansado shasto yek
- به جای عدد صحیح ، عدد اعشاری چگونه استفاده کنم ؟ (مثلا تا 3 رقم اعشار) 1272.1234 خروجی : davazda hezaro haftado do .sado bisto se hezrom
من خودم برای اعداد 3 رقمی نوشتم اما بیشترش چکار کنم ؟

#include <dos.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>

void ascii2text(char* t, char* s);

int main(){

const int n=40;
char a, s[n+1]="", t[n+1]="";
int i, x, y;
gets(s);
ascii2text(s,t);
puts(t);
return(0);
}

void ascii2text(char* s, char* t){//s : ascii input string, t :output string
char *dig1[]={
"",
"one ",
"two ",
"three ",
"four ",
"five ",
"six ",
"seven ",
"eight ",
"nine "
};
char *dig21[]={
"eleven ",
"twelve ",
"thirteen ",
"fourteen ",
"fifteen ",
"sixteen ",
"seventeen ",
"eighteen ",
"nineteen "
};
char *dig2[]={
"",
"ten ",
"twenty ",
"thirty ",
"fourty ",
"fifty ",
"sixty ",
"seventy ",
"eighty ",
"ninety "
};
char hundred[]="hundred ";
char error[]="not suitable for more than 3 digits";
char z[10]="0000000";
int i=0,j=0,k=0;

while(s[k++]);
k=(3-(k-1)%3)%3;
while(z[k+j]=s[j])j++;

k=0;
j=0;
while(t[j++]=dig1[z[i]-48][k++]);
j--;
if(z[i]-48){
k=0;
while(t[j++]=hundred[k++]);
j--;
}
i++;
k=0;
if(z[i]-48==1 && z[i+1]-48!=0){
i++;
while(t[j++]=dig21[z[i]-48-1][k++]);
}
else{
while(t[j++]=dig2[z[i]-48][k++]);
j--;
i++;
k=0;
while(t[j++]=dig1[z[i]-48][k++]);
}
}

delphi_stu
یک شنبه 31 اردیبهشت 1385, 09:13 صبح
در برنامه بالا عدد 3 رقمی رو از نوع رشته ای می گیره می خوام به جاش عدد 4 رقمی صحیح بگیره و بعد در خروجی بصورت متنی چاپ کنه .
دوستان خواهش میکنم کمکم کنید

delphi_stu
چهارشنبه 03 خرداد 1385, 05:27 صبح
کسی نیست کمکم کنه ؟

mamadgmail
پنج شنبه 04 خرداد 1385, 11:54 صبح
من کد برنامه شما رو ندیدم ولی شما باید یک اشاره گر از نوع char تعریف کنید بعد عددتون رو بخونید. حالا باید طول عدد رو داشته باشید که این کار رو هم با تقسیم بر 10 می تونید انجام بدید.
خوب حالا شما بگید دقیقا مشکلتون کجاست!؟

Amir Oveisi
پنج شنبه 04 خرداد 1385, 16:23 عصر
خوب کد که همون بالا هستش که !!! چطور ندیدین؟؟؟

delphi_stu
جمعه 05 خرداد 1385, 06:30 صبح
ممنون دوستان
اما عددی که باید گرفته شود باید از نوع int باشه (صحیح)

delphi_stu
جمعه 05 خرداد 1385, 09:43 صبح
اگه در برنامه بالا فقط به جای 3 رقم - 4 رقم رو بخوام بگیره چکار باید بکنم . میشه راهنمایی کنید

hercules_3d
جمعه 05 خرداد 1385, 10:43 صبح
کاری نداره عدد رو از سمت چپ سه رقم سه رقم جدا کنه و هر بار اون سه رقم جدا شده رو بفرسته به این تابع ascii2text و هر جا که لازم شد یه هزار یا یه میلیون یا ... بذاره

delphi_stu
پنج شنبه 11 خرداد 1385, 18:45 عصر
دوستان ممنون میشم کمکم کنید
یک نمونه برنامه می خوام که بتواند اطلاعات انباری را دریافت نموده و در آرایه‌ای از ساختمانها (structها) قرار دهدو در صورت امکان قابلیت جستجو داشته باشه .
اطلاعات انبار : نام قطعه، وزن قطعه، قیمت خرید قطعه

Amir Oveisi
پنج شنبه 11 خرداد 1385, 23:08 عصر
یعنی تقلب؟؟؟ وای وای وای !!!

delphi_stu
جمعه 12 خرداد 1385, 07:20 صبح
سلام دوست عزیز
این تاپیک برای بحث در مورد تمارین برنامه نویسی مگه نیستش ؟
من هم به راهنمایی دوستان نیاز دارم . و این بحثو مطرح کردم.

من این برنامه رو نوشتم اما وقتی میخوام نام قطعه رو که میگیره با قطعات داخل آرایه مقایسه کنم مشکل دارم دوستان ممنون میشم راهنماییم کنن.
برای قسمت جستجو به لطف شما نیاز دارم.

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

struct anbar{
char kala[50];
int vazn;
int ghymat;
} ex[100];

void enter(int n);

int main(){
char c[50];
int v,n,i=0;
vorod:
cout <<"1- search"<<endl;
cout <<"2- New"<<endl;
cout <<"Enter Number : ";
cin >> v;
if (v==1)
{
cout <<"Name kala ro vared koned: ";
cin >> c;

}
else
{
if (v==2)
cout <<"tedade kala ro vared koneed : ";
cin >>n;
enter(n);
goto vorod;
}
if ((v!=1) && (v!=2))
{
cout <<"shomare gozina ro vared koneed!!!"<<endl;
goto vorod;}
return(0);
}
void enter(int n){
int i=0;
while (i<n){
cin >> ex[i].kala>> ex[i].vazn>> ex[i].ghymat;
i++;}
}

Amir Oveisi
جمعه 12 خرداد 1385, 22:59 عصر
برای مقایسه نام از چی استفاده کردی مگه ؟؟ اگه از strcpm استفاده کنی نباید مشکلی داشته باشه

اگه از strcmp استفاده کنی نباید مشکلی داشته باشه. در ضمن سعی کن برنامتو جوری بنویسی که از goto استفاده نکنی!

delphi_stu
شنبه 13 خرداد 1385, 06:54 صبح
ممنون از راهنمایییت . ولی میشه از strcmp استفاده نکنم ؟
راه دیگه ای نیست ؟

Amir Oveisi
شنبه 13 خرداد 1385, 23:03 عصر
خوب این راحت ترین و منطقی ترین روشه !! اگه بخوای یه جور دیگه هم میشه ولی باید خودت یه تابع بنویسی که همین کار strcmp رو انجام بده !! و این یعنی کار اضافی ! که ممکنه یه اشکالاتی هم داشته باشه پس چه بهتر که از توابع استاندارد و آماده استفاده کنیم !

delphi_stu
یک شنبه 14 خرداد 1385, 11:46 صبح
ممنون دوست عزیز . با همون strcmp نوشتم.

یک سوال دیگه داشتم اگه میشه کمکم کن
عناصر داخل آرایه در اجرای بعد برنامه از بین میره ، چکار کنم از بین نره؟

siahacker
یک شنبه 14 خرداد 1385, 12:30 عصر
سلام
می تونی عناصر آرایه رو در یک فایل ذخیره کنی
و در هنگام اجرای برنامه در زمان بعد این فایل رو باز کنی و بخونی و در آرایه مورد نظرت بذاری

Amir Oveisi
یک شنبه 14 خرداد 1385, 23:07 عصر
دقیقا راحت ترین روش!

Amir Oveisi
دوشنبه 15 خرداد 1385, 10:41 صبح
اینم مثال واسه فایل ( قسمت save و read رو بخون )

delphi_stu
سه شنبه 16 خرداد 1385, 08:40 صبح
این برنامه ایست که نوشتم
اما یک مشکل داره اینه که
داده ها وقتی در فایل ذخیره میشن . باید بعد از داده های قبلی ذخیره بشن . اما اینطور نیست چکار باید بکنم ؟(نیاز فوری)

#include <stdio.h>
#include <cstring.h>
#include <conio.h>
#include <iostream.h>
#define size 100

struct kala{
char name[50];
int vazn,gh;
} ex [size] ;

void jadid (int z);
void jostejo(char name[20]);
void load ();
main()
{
char price,na[20];
int i,j,z=0;
FILE *f;
load();
vorodi:
clrscr();
cout <<"New Recorde [1] :::"<<" [ search [2] ]"<<endl;
cin >> j;
switch (j){
case 1 :
z++;
jadid(z);
goto vorodi;
case 2 :
clrscr();
cout <<"name of material : ";
cin >> na;
jostejo(na);
default:
goto vorodi;
}
return(0);
}

void jadid (int z){
register int i=0;
char ch,num[20];
FILE *f;
f=fopen("kala.dat","wt");
clrscr();
while (1)
{
cout <<"material: " ;
cin >> ex[i].name;
cout <<"w: " ;
cin >> num ;
ex[i].vazn=atoi(num);
cout <<"price : " ;
cin >> num;
ex[i].gh=atoi(num);
if(*ex[i].name)
fwrite(&ex[i],sizeof(struct kala),1,f);
i++;
if ((ch=getche())== '+')
break;
}
}

void jostejo(char name[20]){
char ch;
register int i=0;
register int y=0;
load();
clrscr();
while(i<size)
{
if (strcmp(ex[i].name,name)==0)
{
cout<<ex[i].vazn<<" "<<ex[i].gh ;
y=1;
break;
}
else
y=0;
i++;
}
if (y==0)
cout << "can not find material " ;
getch();
}


void load (){
FILE *f;
register int i;
f=fopen("kala.dat","rt");
if(f==NULL)
{
cout <<"\n cannot open file";
cout <<"\n press a key... ";
getch ();
return ;
}
else
{
while (feof(f))
fread(&ex[i],sizeof(struct kala),1,f);
}
}

Amir Oveisi
سه شنبه 16 خرداد 1385, 23:22 عصر
من دقیق متوجه منظورت نشدم ! میشه واضح تر؟

delphi_stu
پنج شنبه 18 خرداد 1385, 18:50 عصر
منظورم اینه که وقتی جستجو میکنم کالا رو پیدا میکنه اگر قیمتشو یا وزنشو بالای 5 رقم وارد کرده باشم خروجی اشتباه میده بیرون .
از طرفی هر چی کالا اضافه میشه باید در فایل ذخیره شه . یعنی هر بار که میخواد کالا وارد شه اول بره آخر فایل بعد ذخیره کنه.
میشه راهنمایی کنید