PDA

View Full Version : مبتدی: مشکل عجیب در ذخیره کردن در نوت



raminlich
دوشنبه 16 تیر 1393, 17:11 عصر
سلام به همگی
این برناممه تا خط 75 تا اونجایی که من می دونم و انتظار دارم ازش درست کار می کنه
ولی بعد عد از این خط وقتی نتیجه ذخیره میشه تو آرایه far پایینش یه عدد اضافی هم ذخیره میشه:عصبانی++:مثل این8.40779e-045 چیکار کنم
این عددا از کجا میاد؟!!:متفکر:
#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
using namespace std;
void output(float[],int);
int main()
{
int farvardin[31],ordibehesht[31],khordad[31],tir[31],mordad[31],shahrivar[31],
mehr[30],aban[30],azar[30],dey[30],bahman[30],esfand[29];

float far[16],ord[16],khor[16],ti[16],mor[16],shahr[16],
meh[15],aba[15],aza[15],de[15],ba[15],esf[14],dar,s,z;

ofstream list("list.txt",ios::app);
ofstream sal("sal.txt",ios::app);
ofstream farv("far.txt",ios::app);

string name;
int tedad,gheymatye,newadd,i=0,gheymateto,co=0,di;
cout<<"Enter '1' For Working with Stocks:"<<endl;
cout<<"Enter '2' For Show The List:"<<endl;
cin>>di;
switch(di){
case 1:
cout<<"Enter '1' For Adding:"<<endl;
cout<<"Enter '2' For Accounting:"<<endl;
cin>>newadd;
switch(newadd){
case 1:
//New Adding---------------------------------------------------------------------------//
cout<<"Enter your Stock Name:"<<endl;
cin>>name;
cout<<"Enter your Amount of stock:"<<endl;
cin>>tedad;
list<<name<<' '<<tedad<<" ";
cout<<endl;
break;
//end of Adding------------------------------------------------------------------------//
case 2:
//being of process--------------------------------------------------------------------//
string na; int ted;
cout<<"Enter your Stock Name For Accounting:";
cin>>na;
ifstream list;
list.open("list.txt");
bool found = false;
while (list>>name>>tedad)
{
if(na==name)
{
cout<<"Enter Your Yesterday Price:"<<endl;
cin>>gheymatye;
s=gheymatye*tedad;
cout<<"Enter Your Today Price:"<<endl;
cin>>gheymateto;
z=gheymateto*tedad;
found = true;
}
}
if (!found)
{
cout<<"Error Stock Name was not found!";
break;
}
farvardin[i]=s;
i++;
farvardin[i]=z;
for(int k=0;k<=i;k++){
sal<<farvardin[k]<<endl;
}
s*=100;
dar=(s/z);
dar-=100;
cout<<"%"<<dar;
far[co]=dar;
for(int j=0;j<=i;j++)
farv<<far[j]<<endl;
break;
}
}

}

a.r.khoshghalb
دوشنبه 16 تیر 1393, 19:56 عصر
سلام
متغیر های s,z مقادیر عجیبی دارند سپس میای متغیر d رو هم از رو آن دو حساب می کنی پس متغیر d هم مقدار عجیبی پیدا می کند و در خط 76 خانه اول آرایه ات را برابر با d قرار می دهی.

raminlich
دوشنبه 16 تیر 1393, 22:40 عصر
نفهمیدم:لبخند:
خودت کدو تغیر بده خودم ببینم میفهمم قضیه چی بوده:بامزه:
جوابش درسته تمام محاسبات درسته مثلا اگه مقدار Dar بشه100 همین ذخیره میشه ولی پایینش این عدد عجیبه هم ذخیره میشه(8.40779e-045)

a.r.khoshghalb
دوشنبه 16 تیر 1393, 23:03 عصر
:لبخند:
پس بگو صورت سوال چیه و می خوای چه برنامه ای بنویسی بعد من تغیر بدم!

raminlich
سه شنبه 17 تیر 1393, 15:11 عصر
برنامه ایی که یه اسم بگیره یه مقدارم بگیره در یک فایل نوت ذخیره کنه بعد در قسمت دوم برنامه اسم رو بش بدیم بعد اسم رو جستجو کنه
مقدارش رو بگیره ما دو عدد بش بدیم این دو عدد در مقدار که مال اسمه هست ضرب بشه دو تاش توی یک آرایه و آرایه هم تو فایل نوت ذخیره شه دوباره این دوتا رو بگیریم این عملیات رو روش انجام بدیم
s*=100; dar=(s/z);
dar-=100;


یه مقدار می مونه اون هم تویه فایل نوت جدا ذخیره شه تمام:کف:

a.r.khoshghalb
چهارشنبه 18 تیر 1393, 23:23 عصر
خوب ببین برنامه ات داره کار هایی که میگی رو کاملا درست انجام میده اگر ورودی درست باشه... (یعنی اگر عددی که تو فایل ریختی درست باشه و عدی که برنامه میدی هم درست باشه) و یه سری عدد هست که ته آرایه ات میبینی که مقدارشون یه چیز چرتیه! مثلا -8589946790 یا همچین چیزی...
اون عدد ها که احتمالا مشکلت همونا است به خاطره اینه که آرایه ات پابلیکه (تو یه تابع تعریفش کردی) و مقدار اولیه نداره...
ببین با این کد مشکلت حل میشه؟ :


#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
using namespace std;
void output(float[],int);
int farvardin[31],ordibehesht[31],khordad[31],tir[31],mordad[31],shahrivar[31],
mehr[30],aban[30],azar[30],dey[30],bahman[30],esfand[29];

float far[16],ord[16],khor[16],ti[16],mor[16],shahr[16],
meh[15],aba[15],aza[15],de[15],ba[15],esf[14],dar,s,z;

int main()
{

ofstream list("list.txt",ios::app);
ofstream sal("sal.txt",ios::app);
ofstream farv("far.txt",ios::app);

string name;
int tedad,gheymatye,newadd,i=0,gheymateto,co=0,di;
cout<<"Enter '1' For Working with Stocks:"<<endl;
cout<<"Enter '2' For Show The List:"<<endl;
cin>>di;
switch(di){
case 1:
cout<<"Enter '1' For Adding:"<<endl;
cout<<"Enter '2' For Accounting:"<<endl;
cin>>newadd;
switch(newadd){
case 1:
//New Adding---------------------------------------------------------------------------//
cout<<"Enter your Stock Name:"<<endl;
cin>>name;
cout<<"Enter your Amount of stock:"<<endl;
cin>>tedad;
list<<name<<' '<<tedad<<" ";
cout<<endl;
break;
//end of Adding------------------------------------------------------------------------//
case 2:
//being of process--------------------------------------------------------------------//
string na; int ted;
cout<<"Enter your Stock Name For Accounting:";
cin>>na;
ifstream list;
list.open("list.txt");
bool found = false;
while (list>>name>>tedad)
{
if(na==name)
{
cout<<"Enter Your Yesterday Price:"<<endl;
cin>>gheymatye;
s=gheymatye*tedad;
cout<<"Enter Your Today Price:"<<endl;
cin>>gheymateto;
z=gheymateto*tedad;
found = true;
}
}
if (!found)
{
cout<<"Error Stock Name was not found!";
break;
}
farvardin[i]=s;
i++;
farvardin[i]=z;
for(int k=0;k<=i;k++){
sal<<farvardin[k]<<endl;
}
s*=100;
dar=(s/z);
dar-=100;
cout<<"%"<<dar;
far[co]=dar;
for(int j=0;j<=i;j++)
farv<<far[j]<<endl;
break;
}
}

}

raminlich
پنج شنبه 19 تیر 1393, 12:11 عصر
مرسی:بوس:
در کل همیشه آرایه رو پابلیک نگیرم بهتره؟یا بعضی موقع ها باید پابیک باشه؟اگه باشه چه موقع؟:متفکر:

a.r.khoshghalb
پنج شنبه 19 تیر 1393, 12:27 عصر
بستگی داره بخوای چه کار بکنی...
اگه فقط برای این باشه که خونه های آرایه ات مقادیر اولیشون 0 بشه می تونی پابلیک بگیری و از دستورات memset یا fill استفاده کنی به این صورت :

int main()
{
int a[1000];
memset(a,0,1000);
}


و برای fill:

int main()
{
int a[1000];
fill(a,a+1000,0);
}


البته بهتره که از fill استفاده کنی همیشه...
یکی از دلایلی که ملت آرایه شون رو Global میگیرن اینه که پابلیک یه چند تا خونه بیشتر نمی تونه داشته باشه... بیشتر از یه حدی stack over flow میده...
مثلا اگر بخوای آرایه a رو تعریف کنی با 10^6 خونه نمی تونی پابلیک تعریف کنی...
یه زمانی هم هست که چند تا تابع هست تو همشون می خوای از آرایه ای به نام a استفاده کنی ولی اینا یک آرایه نباشن! اون موقع نمی تونی گلوبال بگیری و باید برای هر کدوم جدا گونه پابلیک تعریف کنی...
در کل حالتی وجود نداره که بگیم این بهتره، هر دفعه طبق برنامه ای که می خوای بنویسی باید مشخص کنی این قضیه رو...

raminlich
پنج شنبه 19 تیر 1393, 14:20 عصر
چرا وقتی هدر windows.h رو میزارم از متغیر ها خطا میگیره؟!!می گه declear نکردی:متفکر:

raminlich
پنج شنبه 19 تیر 1393, 15:39 عصر
یه مشکل دیگه چجوری حالا این آرایه هایی رو که ذخیره کردم چاپ کنم؟:متفکر:
خودم اینو نوشتم ولی ارور می ده :ناراحت:

string mah;
cout<<"Enter mounth:";
cin>>mah;
if(mah=="farvardin"){
ifstream farv;
farv.open ("far.txt");
farv>>far[j];
for(int y=0;y<j;y++)
cout<<far[y];
}

a.r.khoshghalb
پنج شنبه 19 تیر 1393, 17:37 عصر
چه اروری میده؟

raminlich
پنج شنبه 19 تیر 1393, 21:48 عصر
string mah;
cout<<"Enter mounth:";
cin>>mah;
if(mah=="farvardin"){
ifstream farv;
farv.open ("far.txt");
farv>>far[j];
for(int y=0;y<j;y++)
cout<<far[y];
}
خطاشو درست کردم از یجا دیگه بود ولی نمی دونم چرا چیزی چاپ نمی کنه
اشکالی داره این کد؟

raminlich
جمعه 20 تیر 1393, 15:35 عصر
یکی نبود جواب مارو بده؟

a.r.khoshghalb
جمعه 20 تیر 1393, 21:25 عصر
مطمئن شو که وقتی برنامه به این جای کد میرسه مقدار j صفر نباشه!
اگر مشکل این نبود کد کاملتو بذار