PDA

View Full Version : مبتدی: مشکل در آرایه های 2 بعدی



BestDay
دوشنبه 28 مرداد 1392, 14:40 عصر
با سلام
من یه مشکل دارم در آرایه های 2 بعدی. که نمیتونم درست عدد وارد کنم. یعنی عدد درست وارد می کنه ولی موقع خروجی اشتباه نمایش میده

(برنامه نویسی C++‎‎‎‎‎‎‎‎ با Visual Studio 2012)

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

int _tmain(int argc, _TCHAR* argv[])
{
int x[1][1],i,j;
for(i=0;i<=1;i++)
{
for(j=0;j<=1;j++)
{
cout<<"("<<i<<","<<j<<")= "; //////baraye neshan dadane i , j marbuteh///////
cin>>x[i][j];
}
cout<<endl;
}
for(i=0;i<=1;i++)
{
for(j=0;j<=1;j++)
{
cout<<"("<<i<<","<<j<<")= "<<x[i][j]<<" ";
}
cout<<endl;
}
return 0;
}


خروجی در cmd

109322

همونطور که می بینین من در ورودی 1 و 2 و 3 و 4 وارد کردم
ولی در خروجی به من 1 و 3 و 3 و 4 میده.

با تشکر

BestDay
دوشنبه 28 مرداد 1392, 15:03 عصر
و یه سوال دیگه که در کل برای تعیین آرایه، بعد از اجرای برنامه، Error نمیده ولی بعد از اینکه ورودی ها رو وارد می کنم، به x گیر میده و اگر IGNORE بکنم خروجی رو نشون میده و مشکلی نداره...

عکس:

109323

داستانش چیه؟

با تشکر

pooyan.a
دوشنبه 28 مرداد 1392, 16:27 عصر
آرایه ای که شما نوشتی یک آرایه 1*1 و شما درون حلقه for دو عدد میگیری که ارور به خاطر همینه. در واقع شما بیشتر از تعداد خانه های آرایه داخل آنها عدد می خوای قرار بدی.
اگر آرایه x رو به صورت زیر تعریف کنی هر دو تا مشکلت حل میشه

int x[2][2];

BestDay
دوشنبه 28 مرداد 1392, 19:44 عصر
ممنونم ازت
ولی در C++‎‎ ، آرایه ها از صفر شروع میشن. پس x[1][1] به معنی آرایه ی x دو بعدی و با دو خانه صفر و یک می باشد. مثلاً x[2][2] به معنی x دوبعدی 3خانه صفر و یک و دو میباشد.
و در خروجی cmd واضحه که سیستم از من i رو دو تا عدد و j رو دوتا عدد گرفته. پس x[1][1] به معنی دوتا عدد در هر خانه هست

در مورد error x که در دومین پست گفتم، این چیزی که شما فرمودین،هیچ فرقی با کد بنده نداره. مشکل از جای دیگس

با تشکر

یکی به دادم برسه...

omidshaman
دوشنبه 28 مرداد 1392, 19:59 عصر
ممنونم ازت
ولی در C++‎‎‎ ، آرایه ها از صفر شروع میشن. پس x[1][1] به معنی آرایه ی x دو بعدی و با دو خانه صفر و یک می باشد. مثلاً x[2][2] به معنی x دوبعدی 3خانه صفر و یک و دو میباشد.
و در خروجی cmd واضحه که سیستم از من i رو دو تا عدد و j رو دوتا عدد گرفته. پس x[1][1] به معنی دوتا عدد در هر خانه هست

در مورد error x که در دومین پست گفتم، این چیزی که شما فرمودین،هیچ فرقی با کد بنده نداره. مشکل از جای دیگس

با تشکر

یکی به دادم برسه...
نه دوست عزیز همون جوریه که ایشون گفتن شما داری ارایه 1*1 تعریف می کنی نه 2*2
x[2][2] هم یعنی یک ارایه ۲*۲ که می تونی خونه های ۰ و۱ شو پر کنی
تو برنامت فقط باید همون تعریف ارایه رو عوض کنی بقیش درسته

BestDay
دوشنبه 28 مرداد 1392, 22:22 عصر
جداً درست گفتینا :چشمک: ممنون
پس این فایلی که من دارم ازش C++‎‎ رو یاد میگیرم، اشتباه نوشته؟ تاکید کرده که: " در C++‎‎ شماره ی خانه ها (Index) (شماره حلقه ها) از صفر شروع میشه. "

اشتباه نوشته پس. میشه در کل گفت: " در C++‎‎ شماره خانه ها از 1 شروع میشه و x[1][1] به معنی آرایه ی 1*1 هست. و تمامی بحث های ادامه فقط مربوط به i و j ای هست که شماره گذاری می کنیم و می بایست i و j را در بازه ی تعداد خانه ها تعیین کنیم. "
" مثلاً i از 0 تا 1 برای آرایه ی 2*2 ".
درسته؟


----------------------------------------------------------------------------------------- وسلام
آخه تمام تمرینای آرایه هارو من با اون فرضیه اشتباه حل میکردم

یا علی مولا

omidshaman
دوشنبه 28 مرداد 1392, 22:43 عصر
میشه در کل گفت: " در C++‎‎ شماره خانه ها از 1 شروع میشه و x[1][1] به معنی آرایه ی 1*1 هست. و تمامی بحث های ادامه فقط مربوط به i و j ای هست که شماره گذاری می کنیم. "
" مثلاً i از 0 تا 1 برای آرایه ی 2*2 ".
درسته؟
اره

پس این فایلی که من دارم ازش C++‎‎ رو یاد میگیرم، اشتباه نوشته؟ تاکید کرده که: " در C++‎‎ شماره ی خانه ها (Index) (شماره حلقه ها) از صفر شروع میشه. "

اشتباه نوشته پس
نه درست گفته منظورش برای مقدار دهی یا خوندن از آرایست که از همون ۰ شروع میشه ولی برای تعریف ارایه باید طولشو همون جوری که گفتم بزاری

BestDay
دوشنبه 28 مرداد 1392, 23:52 عصر
ممنونم :چشمک:

ولی در مورد شروع خانه ها از صفر، خوب یه ابهام پیش اومد:

x[3][3]
این یعنی آرایه x ای که 3تا عضو دوبعدی داره (3*3) . که از صفر اجرا نمیشه. یعنی 1 . 2 . 3 . 4 . 5 . 6 ... چون نشان دهنده تعداد اعداد حقیقی هست.

for(int i=0;i<=2;i++)
این یعنی میشه از صفر اجرا بشه و برای i فرقی نداره از صفر اجرا شه یا نه. مهم اینه که تعدادشون بیشتر از 3تا نباشه (به خاطر x[3][3] )

آیا این تعاریف درسته؟

آیا امکان داره آرایه از صفر اجرا شه؟ که مقدار صفر بهش بدیم؟ منظورتون مقدار دادن در i هست یا [3] ؟
منظورتون از طول آرایه، i هست یا [3] ؟

با تشکر

omidshaman
سه شنبه 29 مرداد 1392, 00:07 صبح
حس می کنم کلا قاطی کردی .
شما می خوای یک ارایه از اعداد ضحیح بسازی بسازی که m*n باشه (m ,n از ۰ بیشترن) این جوری تعریفش می کنی

int x[m][n];
بعد می خوای بهش مقدار بدی


for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
x[i][j]=1;

یا می خوای cout ش کنی

for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
cout<<x[i][j]<<endl;
یا مثلا می خوای عضو سطر ۲ ستون ۱ رو با ۲ جمع کنی(فرض می کنیم که m از ۱ بیشتر باشه)

x[1][0] += 2;

BestDay
سه شنبه 29 مرداد 1392, 03:05 صبح
ممنونم
خدا بیامرزه امواتت رو. دقیقا حرف دلم رو زدی :عصبانی++: دمت گرم. همین رو میخواستم بدونم که داستان چیه... (از دست این فایل های pdf که مطالب اشتباه یاد آدم میدن)
اینطوری به صورت کلی و تعمیم یافته میخواستمش :چشمک:

یا علی