PDA

View Full Version : سوال: شمارش تکرار اعداد در یک آرایه ۴در۴



ParsiKade
پنج شنبه 11 اسفند 1390, 12:13 عصر
سلام،
دوستان یک برنامه باید بنویسم که یک آرایه ۴در۴ از اعداد صحیح یک رقمی از کاربر بگیره و تعداد تکرار هریک از ارقام ۰ تا ۹ را درش مشخص کنه.

خودم یک چیزهایی نوشتم ولی خروجی‌ها همه‌شون صفر می‌شن :افسرده:
ممنون می‌شم راهنمایی کنید، ضمناً فکر کنم مشخص باشه که مبتدی‌ام اگه می‌شه خیلی حرفه‌ای توضیح ندید :دی
#include <iostream>

int main ()
{
using namespace std;

int A[4][4], Count[16]={0};
for (int i=0; i<4; i++) {
for (int j=0; j<4; j++) {
cin >> A[i][j];
}
}
for (int i=0; i<4; i++) {
for (int j=0; j<4; j++) {
switch (A[i][j]) {
case '0' : Count[0]++;break;
case '1' : Count[1]++;break;
case '2' : Count[2]++;break;
case '3' : Count[3]++;break;
case '4' : Count[4]++;break;
case '5' : Count[5]++;break;
case '6' : Count[6]++;break;
case '7' : Count[7]++;break;
case '8' : Count[8]++;break;
case '9' : Count[9]++;break;

}
}
}

for (int i=0; i<10; i++){
cout << i <<": "<<Count[i]<<endl;
}
return 0;
}

Salar Ashgi
پنج شنبه 11 اسفند 1390, 19:10 عصر
اشکال کار مربوط به ساختار Switch هست ، شما دارید یک مقدار ورودی switch که یک int هستش رو بشکل کاراکتری مقایسه می کنید در نتیجه
هیچ شرطی اجرا نمیشه ، اعضا همونطور صفر باقی می مونند ، کد صحیح :


switch (A[i][j]) {
case 0 : Count[0]++;break;
case 1 : Count[1]++;break;
case 2 : Count[2]++;break;
case 3 : Count[3]++;break;
case 4 : Count[4]++;break;
case 5 : Count[5]++;break;
case 6 : Count[6]++;break;
case 7 : Count[7]++;break;
case 8 : Count[8]++;break;
case 9 : Count[9]++;break;
}


موفق باشید ./

vistacali
پنج شنبه 11 اسفند 1390, 20:02 عصر
راست میگه شما دارید رشته ای جستجو میکنید من با if نوشتم ساده ترین راه اینه اگر راه حل های دیگه هم خواستی بگو برات بنویسم


#include <iostream>
using namespace std;
int main ()
{
int a[2][2]={{1,2},{3,2}},b[10]={0,1,2,3,4,5,6,7,8,9},Count[10]={0},i,j;

for (i=0; i<2; i++)
{
for (j=0; j<2; j++)
{
if(a[i][j]==b[0])
Count[0]++;
else if(a[i][j]==b[1])
Count[1]++;
else if(a[i][j]==b[2])
Count[2]++;
else if(a[i][j]==b[3])
Count[3]++;
else if(a[i][j]==b[4])
Count[4]++;
else if(a[i][j]==b[5])
Count[5]++;
else if(a[i][j]==b[6])
Count[6]++;
else if(a[i][j]==b[7])
Count[7]++;
else if(a[i][j]==b[8])
Count[8]++;
else if(a[i][j]==b[9])
Count[9]++;
}
}

for (i=0; i<10; i++)
cout << i <<": "<<Count[i]<<endl;

system("pause");
return 0;
}

ParsiKade
پنج شنبه 11 اسفند 1390, 23:58 عصر
از هر دوی شما ممنونم مشکل حل شد‌ :).
یک برنامه دیگه هم هست خیلی شبیه به این یکی هست فقط برای شمارش تکرار حروف هست (برای همین اینجا مطرح می‌کنم.)
کد رو نوشتم ولی نتایج درستی ازش نمی‌گیرم، می‌شه بگید مشکل کار در کجاست؟
عنوانش هم این هست که یک رشته‌ی حداکثر ۲۵۰ کاراکتر از کاربر دریافت بشه و تعداد تکرار حروف الفبا در اون مشخص بشه.

#include <iostream>

using namespace std;

int main(){
char s[251];
int Count[26]={0};

cin >>s;
for (int i=0; i<251; i++) {
switch (s[i]) {
case 'a' : Count[0]++;break;
case 'b' : Count[1]++;break;
case 'c' : Count[2]++;break;
case 'd' : Count[3]++;break;
case 'e' : Count[4]++;break;
case 'f' : Count[5]++;break;
case 'g' : Count[6]++;break;
case 'h' : Count[7]++;break;
case 'i' : Count[8]++;break;
case 'j' : Count[9]++;break;
case 'k' : Count[10]++;break;
case 'l' : Count[11]++;break;
case 'm' : Count[12]++;break;
case 'n' : Count[13]++;break;
case 'o' : Count[14]++;break;
case 'p' : Count[15]++;break;
case 'q' : Count[16]++;break;
case 'r' : Count[17]++;break;
case 's' : Count[18]++;break;
case 't' : Count[19]++;break;
case 'u' : Count[20]++;break;
case 'v' : Count[21]++;break;
case 'w' : Count[22]++;break;
case 'x' : Count[23]++;break;
case 'y' : Count[24]++;break;
case 'z' : Count[25]++;break;
}
}
for (int i=0; i<26; i++) {
cout << char (i+97) <<": "<<Count[i]<<endl;
}
return 0;



فکر کنم به‌خاطر اینه که همیشه ۲۵۰ کاراکتر به برنامه داده نمی‌شه و اون فضاهای خالی که آخر کار می‌مونه باعث این اتفاق می‌شه که بعضی حروف رو اشتباه بگه تکرار شدن. ولی نمی‌دونم چطور مشکل رو حل کنم :دی

vistacali
جمعه 12 اسفند 1390, 10:35 صبح
عزیزم وقتی داری با cin ورودی میگیری space va enter اخرین رشته رو مشخص میکنن حالا اگر تو بخوای جمله i love you رو بنویسی تو همون اول کار با زدن i و space تمام داده ها رو گرفتی و هر چی بعد از i بنویسی دیگه حساب نمیشه برای این کار باید از cin.get استفاده کنی




cin.get(s,250,'.');


این خط رو بجای cin>>بزار و من انتهای جمله رو . تایین کردم تو میتونی تغییر بدی و هر چی خواستی بزنی ولی اگر چیزی نزاشتی فقط enter اخر جمله رو مشخص میکنه (پیشفرض) الان . هستا مشکلی بود بگو

ParsiKade
جمعه 12 اسفند 1390, 15:02 عصر
سلام،
کد رو جایگزین کردم ولی متاسفانه هنوز هم اشتباه داره. آخرش هم . می‌گذارم.
حروفی که زدم رو درست می‌شماره ولی بینش یک سری حروف که اصلاً زده نشده هم شمرده می‌شه.

Salar Ashgi
جمعه 12 اسفند 1390, 18:46 عصر
کدتون رو بشکل زیر تغییر بدید :



int main(){
char s[251];
int Count[26]={0};

cin.getline(s,251);
for (int i=0; i<strlen(s); i++) {
switch (s[i]) {
case 'a' : Count[0]++;break;
case 'b' : Count[1]++;break;
case 'c' : Count[2]++;break;
case 'd' : Count[3]++;break;
case 'e' : Count[4]++;break;
case 'f' : Count[5]++;break;
case 'g' : Count[6]++;break;
case 'h' : Count[7]++;break;
case 'i' : Count[8]++;break;
case 'j' : Count[9]++;break;
case 'k' : Count[10]++;break;
case 'l' : Count[11]++;break;
case 'm' : Count[12]++;break;
case 'n' : Count[13]++;break;
case 'o' : Count[14]++;break;
case 'p' : Count[15]++;break;
case 'q' : Count[16]++;break;
case 'r' : Count[17]++;break;
case 's' : Count[18]++;break;
case 't' : Count[19]++;break;
case 'u' : Count[20]++;break;
case 'v' : Count[21]++;break;
case 'w' : Count[22]++;break;
case 'x' : Count[23]++;break;
case 'y' : Count[24]++;break;
case 'z' : Count[25]++;break;
}
}
for (int i=0; i<26; i++) {
cout << char (i+97) <<": "<<Count[i]<<endl;
}
getch();
}

ParsiKade
یک شنبه 14 اسفند 1390, 20:10 عصر
ممنون کد بالا هم به‌خوبی کار کرد ولی من یه راه دیگه هم پیدا کردم که مثل راه اوله که خودم نوشته بودم با یک تغیر کوچولو، می‌گذارم اگر به‌درد کسی از دوستان خورد :)
#include <iostream>

using namespace std;

int main(){
char s[251];
int Count[26]={0};

gets (s);
for (int i=0; s[i] ; i++) {
switch (s[i]) {
case 'a' : Count[0]++;break;
case 'b' : Count[1]++;break;
case 'c' : Count[2]++;break;
case 'd' : Count[3]++;break;
case 'e' : Count[4]++;break;
case 'f' : Count[5]++;break;
case 'g' : Count[6]++;break;
case 'h' : Count[7]++;break;
case 'i' : Count[8]++;break;
case 'j' : Count[9]++;break;
case 'k' : Count[10]++;break;
case 'l' : Count[11]++;break;
case 'm' : Count[12]++;break;
case 'n' : Count[13]++;break;
case 'o' : Count[14]++;break;
case 'p' : Count[15]++;break;
case 'q' : Count[16]++;break;
case 'r' : Count[17]++;break;
case 's' : Count[18]++;break;
case 't' : Count[19]++;break;
case 'u' : Count[20]++;break;
case 'v' : Count[21]++;break;
case 'w' : Count[22]++;break;
case 'x' : Count[23]++;break;
case 'y' : Count[24]++;break;
case 'z' : Count[25]++;break;
}
}
for (int i=0; i<26; i++) {
cout << char (i+97) <<": "<<Count[i]<<endl;
}
return 0;

}