کمک در نوشتن برنامه فایل...

sahar_2010

عضو جدید
سلام
سوال:فایلی با نام file.txt وجود داردکه در آن یک عدد صحیح که تعداد ارقام آن بین 30-40 رقم است قرار دارد.
برنامه ای بنویسید که:
ابتدا عدد موجود در file.txtرا به آرایه ی a انتقال دهد.در ادامه عددی بین 1-9 را از ورودی دریافت کندسپس عدد دریافتی را در آرایه a ضرب کند و حاصلضرب را در آرایه ای به نام b بریزد.در نهایت حاصلضرب محاسبه شده رادر فایلی به نام hasel.datمنتقل کند.
لطفا بهم بگید کجاش اشتباه هست .
ببخشید اگه سوالم زیادی ساده هست :(

 

پیوست ها

  • file.rar
    524 بایت · بازدیدها: 0

sayyad84

متخصص زبان Assembly
کاربر ممتاز
با سلام،
برنامه رو کمی تغییر دادم حالا خطایی نداره و کار می کنه، اما نه درست!!
متن برنامه:
کد:
[LEFT]#include<stdio.h>
#include<stdlib.h>
int a[41],b[41];
void inverse(int a[],int n)
{
int i,temp;
for(i=0;i<n/2;++i)
{
temp=a[i];
a[i]=a[n-1-i];
a[n-1-i]=temp;
}
}
void zarb(int a[],int*n)
{
int i,carry=0,temp,mul;
scanf("%d",&mul);
for(i=0;i<(*n);++i)
{
temp=a[i];
b[i]=((temp*mul)+carry)%10;
carry=((temp*mul)+carry)/10;
if(carry==0)
break;
}
if(carry!=0)
{
b[i]=carry;
*n=*n+1;
}
}
int read(FILE*in,int a[])
{
char c;
int i;
i=0;
while(c!=EOF)
{
c=fgetc(in);
a[i++]=c;
}
return i;
}
void chap(FILE*out,int b[],int n)
{
char c;
int i,sum=0;
for(i=n-1;i>=0;--i)
fprintf(out,"%d",b[i]);
while(c!=EOF)
{
c=fgetc(out);
sum=sum+(c-'0');
}
}
int main()
{
int n;
FILE *in,*out;
in=fopen("f:\\file.txt","r");
out=fopen("f:\\data.dat","w");
n=read(in,a);
inverse(a,n);
zarb(a,&n);
chap(out,b,n);
fclose(in);
fclose(out);
return 0;
}[/LEFT]
چند تا نکته:
1.متد inverse به چه دردی می خوره؟
2.از اون جایی که قراره حداکثر 40 کاراکتر رو بخونید برای a به 40 خونه و برای b به 41 خونه نیاز دارید.
3.می تونید از a[0 برای شمارش تعدا خونه های پر a استفاده کنید. که البته لزومی نداره!
4.بهتره با پیام های مناسب کاربر رو راهنمایی کنید.
5.استفاده از c!=EOF در دستور for معمولاً درست عمل نمی کنه! پس بهتره از while استفاده کنید. از اون جایی که قراره به تعداد تکرار حلقه کاراکتر خونده بشه پس دستور خوند کاراکتر هم تو حلقه اس. همون طور که می دونید استفاده از ++ قبل از i ابتدا مقدار رو یکی اضافه می کنه و بعد بقیه ی دستورات رو انجام میده! پس همواره خونه ی صفر رو از دست می دید و شاید تو محاسباتتون تأثیر بذاره!
6.متغیرهای مورد استفاده در زیربرنامه یا باید به صورت global باشن مثل a و b در اینجا و یا به زیربرنامه ارسال بشن.
7.در پایان هم عدد تولید شده در b رو به صورت رشته در فایل خروجی ذخیره کنید.
8.بهتره که برای آدرس فایل فقط از نامش استفاده کنید تا در صورت جابه جایی فایل ها مشکلی پیش نیاد.
9.تعریف global آرایه ها فقط برای رفع خطا بود و شما می تونید آرایه رو به زیربرنامه ارسال کنید. اما اگر می خواید به صورت global ازش استفاده کنید، بهتره که از ورودی زیربرنامه هاتون حذفشون کنید.
 
آخرین ویرایش:

sahar_2010

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

Similar threads

بالا