PDA

View Full Version : سوال ... break در این دستور case کجا قرار بگیره که اینقدر cout نکنه



mehrdadseret
چهارشنبه 14 اردیبهشت 1390, 15:30 عصر
سلام دوستان مشکل این قسمت از کد چیه که اینقدر صفحه رو پر از Multi OF ..... میکنه؟



case'+':{
int c[4]={0};
for (int i=0;i<5;i++){
c[i]=a[i]+b[i];

}
for (int i=0;i<5;i++){
cout<<"Multi OF Arrays a["<<i<<"]+b["<<i<<"] Is"<<c[i]<<endl;
break;

}
}

mehdi.mousavi
چهارشنبه 14 اردیبهشت 1390, 16:11 عصر
سلام.
کدتون رو به شکل زیر تغییر بدید:


int c[4] = {0};
int len = sizeof(c) / sizeof(c[0]);

for (int i = 0; i < len; i++) {
c[i] = a[i] + b[i];
}

for (int i = 0; i < len; i++) {
cout << "Multi OF Arrays a[" << i << "]+b[" << i <<"] Is" << c[i] << endl;
break;
}

موفق باشید.

پاورقی: آرایه c ای که تعریف کرده اید، 4 خونه فضا داره، یعنی اندیس 0 تا 3 (که 3 رو هم شامل میشه). بنابراین نمی تونید به اندیس چهارم دسترسی پیدا کنید. در صورتیکه Loop ای که نوشته اید، داره اینکارو میکنه. همیشه برای اینکه دچار این جور مسائل نشید، طول آرایه رو به روشی که در کد فوق نوشتم محاسبه کنید.

mehrdadseret
چهارشنبه 14 اردیبهشت 1390, 21:02 عصر
سلام . اقا مهدی کد رو جایگزین کردم ولی بازم کلی cout میکنه و فقط جمع اندیس های اول رو چاپ می کنه این کد کامل قبلی ه ! اگه می تونید مشکل فاکتوریتل هم حل کنید

//
Araye.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "iostream"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
int a[4],b[4];
cout <<"Please Enter A Array!"<<endl;
for (int i=0 ;i<5;i++){
cout <<"a["<<i<<"]=";cin>>a[i];

}
cout <<"Please Enter B Array!"<<endl;
for(int i=0;i<5;i++){
cout <<"b["<<i<<"]=";cin>>b[i];
}
char ch;
cin>>ch;


while(1){
switch(ch){
case 'e':
cout<<"You Asked To Quit the Program"<<endl;
exit(0);

break;

case'+':{
int c[4]={0};
for (int i=0;i<5;i++){
c[i]=a[i]+b[i];

}
for (int i=0;i<5;i++){
cout<<"Multi OF Arrays a["<<i<<"]+b["<<i<<"] Is"<<c[i]<<endl;
break;

}
}


case'l':{
for (int i=0;i<5;i++){
int s=1;
for (int f=a[i];f>=1;f--){
s=s*f;


}
cout<<s<<" ";

}

break;

}

default:cout<<"ERROR";
}
}



return 0;
}

mehdi.mousavi
چهارشنبه 14 اردیبهشت 1390, 23:29 عصر
سلام.
من اینجا دارم با خودم حرف میزنم؟ شما ها چرا اینطوری شدید؟؟؟ :ناراحت:
پاسخ اول منو بخونید، کدتون رو درست کنید، کد اصلاح شده رو ارسال کنید، تا دوباره کد رو نگاه کنم.
کد شما، قبل و بعد از پاسخ اول من تغییری نکرده و این یعنی من "باد در قفس کردم"!

موفق باشید.

mehrdadseret
پنج شنبه 15 اردیبهشت 1390, 00:04 صبح
سلام.. چرا من و تو این موقیعت قرار میدین اخه؟!! من تغییر شما رو هم داده بودم ولی چون همون مشکل تکرار شدن و داشت کد های قبلی خودم رو اینجا گذاشتم که شاید جای دیگه مشکل داشته باشه..! لطفا یه کاری کنین واسم! واقعا این بود اون ارمان های ما ؟!!!!!

ممنون

tdkhakpur
پنج شنبه 15 اردیبهشت 1390, 01:00 صبح
کد ارسال شده مشکل شما رو حل میکنه در صورتی که شما نتونستید ازش استفاده کنید.
میتونید همه آرایه ها رو 5 تای کنید و یا اینکه همه 5 ها رو 4 کنید.

mehrdadseret
پنج شنبه 15 اردیبهشت 1390, 12:28 عصر
دوستان کد رو اصلاح کردم ولی به خدا بازم کلی cout می کنه و فقط هم جواب اندیس های اول رو میده برنامم رو باید شنبه تحویل بدم کمک کنین ...

کد اصلاح شده :


// Araye.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "iostream"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
int a[4],b[4];
cout <<"Please Enter A Array!"<<endl;
for (int i=0 ;i<5;i++){
cout <<"a["<<i<<"]=";cin>>a[i];

}
cout <<"Please Enter B Array!"<<endl;
for(int i=0;i<5;i++){
cout <<"b["<<i<<"]=";cin>>b[i];
}
char ch;
cin>>ch;


while(1){
switch(ch){
case 'e':
cout<<"You Asked To Quit the Program"<<endl;
exit(0);

break;

case'+':{
int c[4] = {0};
int len = sizeof(c) / sizeof(c[0]);

for (int i = 0; i < len; i++) {
c[i] = a[i] + b[i];
}

for (int i = 0; i < len; i++) {
cout << "Multi OF Arrays a[" << i << "]+b[" << i <<"] Is" << c[i] << endl;
break;
}

}


case'l':{
for (int i=0;i<5;i++){
int s=1;
for (int f=a[i];f>=1;f--){
s=s*f;


}
cout<<s<<" ";

}

break;

}

default:cout<<"ERROR";
}
}



return 0;
}

mehdi.mousavi
پنج شنبه 15 اردیبهشت 1390, 12:30 عصر
سلام.. چرا من و تو این موقیعت قرار میدین اخه؟!! من تغییر شما رو هم داده بودم ولی چون همون مشکل تکرار شدن و داشت کد های قبلی خودم رو اینجا گذاشتم که شاید جای دیگه مشکل داشته باشه..! لطفا یه کاری کنین واسم! واقعا این بود اون ارمان های ما ؟!!!!! ممنون

سلام.
کد شما رو تغییر دادم، اما Refactor اش نکردم. این کد رو حتما Refactor کنید تا خودتون متوجه بشید که چی مینویسید و چیکار می کنید. اگر چند تا case دیگه به اون switch اضافه بشه، کد دیگه خوانا نیست... اما پاسخ به اون سوال، که چرا هی پشت سر هم اون خروجی رو تولید میکنه. پاسخ روشنه: برای اینکه cin >> ch رو بیرون while گذاشته بودید. اونو باید درون while قرار بدید. در نهایت، _countof هم در stdlib.h به همون شکلی که گفتم تعریف شده، در نتیجه دیگه من اینجا از اون تقسیمی که در پاسخ اول استفاده کرده بودم (برای بدست آوردن طول آرایه) استفاده نکردم.

#include "stdafx.h"
#include "iostream"
using namespace std;

#define TOTAL_NUMBER_OF_INDICES 4

int _tmain(int argc, _TCHAR* argv[])
{
int a[TOTAL_NUMBER_OF_INDICES], b[TOTAL_NUMBER_OF_INDICES];
cout << "Please Enter A Array:" << endl;

for (int i = 0 ; i < _countof(a); i++)
{
cout << "a[" << i << "]= ";
cin >> a[i];
}

cout << "Please Enter B Array:" << endl;
for(int i = 0; i < _countof(b); i++)
{
cout << "b[" << i << "]= ";
cin >> b[i];
}

while(1)
{
char ch;
cin >> ch;

switch(ch)
{
case 'e':
cout << "You Asked To Quit the Program" << endl;
exit(0);
break;

case'+':
{
int c[TOTAL_NUMBER_OF_INDICES] = {0};
for (int i = 0; i < _countof(c); i++)
c[i] = a[i] + b[i];

for (int i = 0; i < _countof(c); i++)
cout << "Multi OF Arrays a[" << i << "] + b[" << i << "] = " << c[i] << endl;
}
break;

case'l':
for (int i = 0; i < _countof(a); i++)
{
int s = 1;
for (int f = a[i]; f >= 1; f--)
s *= f;

cout << s << " ";
}
break;

default:
cout << "ERROR";
}
}

return 0;
}

موفق باشید.

پاورقی: بسیاری از اشتباهاتی که در استدلالهای ما رخ میده از این واقعیت سرچشمه میگیره که ما به میزان قابل توجه به موقعیتی که در اون قرار گرفته ایم، توجه نمی کنیم. این مساله در شرایطی که بنظر قبلا برامون رخ داده و با اون آشنا هستیم، بیشتر نمود داره. چرا؟ چون آشنایی ما با اون موقعیت باعث میشه تا قضاوت هامون در برابر حقائقی که جلوی چشممون هستن، "بی دقت" باشه. ما موقعیت فعلی رو درست درک نمی کنیم چون اون موقعیت رو بصورت سطحی مورد توجه قرار داده ایم. هر موقعیتی برای خودش بی همتاست و ما باید متوجه این یگانگی باشیم! توجه، نیازمند ارائه پاسخ فعال به موقعیت ها، افراد، مکان ها و بطور کلی همه مواردی هستش که اون موقعیت رو خلق کرده اند. فقط نگاه نکنید! بلکه ببینید. فقط گوش ندید، بلکه بشنوید. خودتون رو برای تمرکز روی جزییات تربیت کنید. از مسائل کوچک نمیشه بسادگی عبور کرد، چون همین مسائل کوچک هستن که ما رو به مسائل بزرگ رهنمون میشن! - بخشی از کتاب "منطقی بودن نوشته D.Q. McInerny (http://www.amazon.com/Being-Logical-Guide-Good-Thinking/dp/1400061717)"

mehrdadseret
پنج شنبه 15 اردیبهشت 1390, 20:39 عصر
int c[TOTAL_NUMBER_OF_INDICES] = {0}; for (int i = 0; i < _countof(c); i++)


سلام ... خیلی ممنون اقا مهدی مشکل حل شد .. فقط حقیقتش من این 2 تا دستوری که که جدید اضافه کردین رو نمیدونیم چیه و فرقش با اونی که من نوشته بودم توی چی هست.. چون خدا نکرده استادم بپرسه این دستور واسه چیه توش میمونم!!

mehdi.mousavi
شنبه 17 اردیبهشت 1390, 14:41 عصر
int c[TOTAL_NUMBER_OF_INDICES] = {0}; for (int i = 0; i < _countof(c); i++)


سلام ... خیلی ممنون اقا مهدی مشکل حل شد .. فقط حقیقتش من این 2 تا دستوری که که جدید اضافه کردین رو نمیدونیم چیه و فرقش با اونی که من نوشته بودم توی چی هست.. چون خدا نکرده استادم بپرسه این دستور واسه چیه توش میمونم!!


سلام.
_countof (همونطوریکه در پست قبلی گفتم)، معادل

sizeof(c) / sizeof(c[0]);

هستش. جای عدد 4 (یعنی تعداد اندیس های آرایه)، یک define گذاشتم تا هر جا لازم شد ننویسم 4 و جاش از اون define استفاده کنم (منظور TOTAL_NUMBER_OF_INDICES هستش). اینطوری اگر فردا ازم خواسته شد که جای 4 عضو، 10 عضو داشته باشم، براحتی میتونم در یک نقطه اون تعریف رو تغییر بدم و روند اجرای برنامه بر اساس تعریف جدید، تغییر خواهد کرد، بدون اینکه دست تو جای جای کد ببرم.

موفق باشید.