PDA

View Full Version : مشکل در محاسبه



aliitt
دوشنبه 05 بهمن 1394, 23:54 عصر
سلام
نمیدونم چرا جواب تقسیم و تفریق صفر در میاد؟
نمیدونم چه جوری باید sum رو مقداری دهی کنم واسه تقسیم و تفریق

#include <iostream>
#include <conio.h>
using namespace std;

struct calc{

int num;

};

calc data[20];
int counter=0;

void getnumber();

void Add();
void Multiply();
void Divide();
void min();

int main(){

int op;

while(true){

system("cls");

cout<<"1- input 2- Add 3- Multiply 4- Divide 5-Minus \n";
cin>>op;

switch(op){

case 1:getnumber();
break;

case 2:Add();
break;

case 3:Multiply();
break;

case 4:Divide();
break;

case 5:min();
break;

}

}

return 0;
}

void getnumber(){

cout<<"enter number: ";
cin>>data[counter].num;
counter++;
}

void Add(){

int sum;

for(int i=0;i<counter;i++){

sum+=data[i].num;
}

cout<<"sum is: "<<sum;
getch();
}

void Multiply(){

int sum=1;

for(int i=0;i<counter;i++){

sum*=data[i].num;
}

cout<<"sum is: "<<sum;
getch();
}

void Divide(){

int sum=1;

for(int i=0;i<counter;i++){

sum/=data[i].num;
}

cout<<"sum is: "<<sum;
getch();
}

void min(){

int sum;

for(int i=0;i<counter;i++){

sum-=data[i].num;
}

cout<<"sum is: "<<sum;
getch();
}

Poores
سه شنبه 06 بهمن 1394, 05:34 صبح
برای جمع و تفریق باید مقدار اولیه sum رو 0 قرار بدین.
اما تقسیم! خوب شما میخواین از یک کنار همه عدد های وارد شده بر هم تقسیم بشن! حاصل این تقسیم ها ممکن هست عدد صحیح بشه و ممکنه عدد صحیح نشه! پس شما نباید متغیر sum رو از نوع int تعریف کنید ، بلکه باید از نوع float باشد.

و درمورد مقدار دهی اولیه این متغیر :
این مورد با یقیه کمی فرق داره ، پون قراره برهم تقسیم بشن هر عددی رو به sum اختصاص بدین در تقسیم دچار مشکل میشه ، مثلا الان که مقدارش 1 هست ، در دور اول حلقه شما 1 رو تقسم بر عدد اول آرایه میکنین و حاصل رو به صورت متوالی به بقیه اعضا تقسیم میکنید ، یعنی عملا در همین ابتدا عدد اول معکوس میشه و بر دیگر اعداد تقسیم میشه!

به نظر من مقدار اولیه این متغیر رو برابر با data[0] قرار دهید ، سپس حلقه را از 1 شروع کنید.

--------------
در ضمن فراموش نکنید که قبل از قرار دادن data[0] در متغیر sum باید مقدار counter رو چک کنید که برابر صفر نباشد.