PDA

View Full Version : سوال: یه تابع مثل cin.get



mahdi5121
چهارشنبه 04 فروردین 1389, 16:47 عصر
با سلام ...
من می خوام یه برنامه بنویسم که چند تا عدد پشت سر هم رو وارد یک آرایه کنه ، یعنی بدون اینکه کاربر اینتر بزنه ، اعداد یکی یکی برند توی یه آرایه از توع int ، مثلا" 4563434 .

و همین طور دفعه بعد یک عدد چند رقمی رو این بار وارد یه آرایه دوم که اون هم از نوع int هست کنه و در آخر هر یک از سلول های متناظر رو با هم جمع کنه و در یک آرایه ی سوم قرار بده ، یعنی مثلا" دو تا عدد 15 رقمی رو که کامپیوتر به طور طبیعی نمی تونه جمع کنه رو با هم جمع کنه .

یعنی مثلا" 4545 رو وارد یه آرایه 4 خانه ایی کنه و همینطور دو باره عدد 4576 رو وارد یه آرایه ی دیگه ایی کنه و بعد ، یکان رو با یکان و دهگان رو با دهگان و ... جمع کنه و در آرایه سوم که آرایه جواب هست قرار بده تو چاپش کنه ...

من خودم اومدم ، با استفاده از تابع cin.get این کار رو انجام دادم اما این تابع به جای عدد ، کد اسکی اون رو در اون سلول آرایه قرار می ده ، مثلا" به جای 2 ، 50 رو قرار می ده که موقع جمع اون دو سلول باز یه کاراکتر می یاد ...

حالا می خوام بدونم که یه تابعی هست که کار cin.get رو انجام بده اما واقعا" عدد رو بریزه توی اون سلول نه کد اسکیش رو ...

قربان شما ...

amin1softco
چهارشنبه 04 فروردین 1389, 17:04 عصر
شما عدد را کامل بگیر از کاربر وبا تقسیم کردن بر 10 و باقیمانده 10 در یک حلقه هر 4 بار یک بار عددت رو بزار توی یک خونه از آرایه ..... البته این یک روشه کاره.. راه های زیادی وجود داره که دوستان ذکر خواهند کرد

mahdi5121
چهارشنبه 04 فروردین 1389, 19:24 عصر
شما عدد را کامل بگیر از کاربر وبا تقسیم کردن بر 10 و باقیمانده 10 در یک حلقه هر 4 بار یک بار عددت رو بزار توی یک خونه از آرایه ..... البته این یک روشه کاره.. راه های زیادی وجود داره که دوستان ذکر خواهند کرد

ممنون ...
ولی این راه نمی شه چون شاید من بخوام یه عدد 50 رقمی رو وارد کنم ( اون 4 رقم یه مثال بود ، چون اگه من بخوام یه عدد چهار رقمی رو با هم جمع کنه چه نیازی به ارایه دارم ، خود برنامه می تونه این کار رو کنه)که متغیری از هیچ نوعی نیست که بتونه این عدد رو نگه داره تا تقیسم کنم و خارج قسمت و باقیمانده رو بدست بیارم .

توی vb با تابع mid و تبدیل رشته به عدد و عدد به رشته می شد این کار رو انجام داد و تک تک ارقام یک عدد رو که به صورت رشته است رو جدا کرد و داخل آرایه ریخت و بعد با تبدیل رشته به عدد اون ها رو با هم جمع کرد اما تو C++‎‎‎‎ که من تازه باهاش دارم کار می کنم و هنوز این توابع رو نمی دونم ، نمیدونم باید چی کنم ....

اگه تابع mid رو توی c++ و تبدیل رشته به عدد و بالعکس رو یه توضیح بدین هم خیلی ممنون می شم ...

amin1softco
چهارشنبه 04 فروردین 1389, 20:04 عصر
موضوع رو درست نگرفتی عزیزم
گفتم که کل ورودی رو شما به عنوان یک رشته دریافت می کنی و سپس اینطوری خوردش می کنی در آرایه ها البته این یک راهشه
یک راه بهتر اینه که هر بار چهار تا کلید فشرده شد شما ورودی رو داخل یک آرایه بزاری یعنی هر چهار رقم به عنوان یک عدد در یک خونه از آرایه مثل بالا

amin1softco
چهارشنبه 04 فروردین 1389, 20:51 عصر
من برات این کد رو نوشتم ولی این کد هر رقم رو در یک خونه از آرایه قرار میده


#include <iostream>
#include <string>
using namespace std;
void main(){
string s;
int digits[100];
cin>>s;
for(int a=0; a<s.length(); a++){
digits[a]=int(s[a]-48);
}
}

amin1softco
چهارشنبه 04 فروردین 1389, 21:29 عصر
این جوری هر 4 رقم عدد اصلی رو میشه در یک خونه از آرایه ایی از نوع int قرار داد


#include <iostream>
#include <string>
#include "stdlib.h"
using namespace std;
void main(){
string s;
char s2[5];
int digits[100];
cin>>s;
for(int a=0,b=0; a<s.length(); a+=5,b++){
for(int j=0,i=a;i<=(a+4)&&i<s.length();i++,j++){
s2[j]=s[i];
}s2[j]=0;
digits[b]=atoi(s2);
}
b--;
for(int i=0;i<=b;i++){
cout<<digits[i]<<endl;
}
}

Salar Ashgi
پنج شنبه 05 فروردین 1389, 00:13 صبح
اگر میخواین محدودیت تعداد ارقام وجود نداشته باشه ، میتونید از کالکشن ها استفاده کنید :

List , Vector , ...

و اگر میخواین با آرایه کار کنین ، عدد رو بصورت رشته ای بگیرین و برای تبدیلش (هر رقم در حکم یک کاراکتر)

از کد اسکی استفاده کنین .

موفق و پیروز باشید .

mahdi5121
پنج شنبه 05 فروردین 1389, 12:02 عصر
من برات این کد رو نوشتم ولی این کد هر رقم رو در یک خونه از آرایه قرار میده


#include <iostream>
#include <string>
using namespace std;
void main(){
string s;
int digits[100];
cin>>s;
for(int a=0; a<s.length(); a++){
digits[a]=int(s[a]-48);
}
}


خیلی ممنون ، من گفتم که الان یکی دو هفتس که با C++ دارم کار می کنم ، به خاطر همین با دستورات و توابعش زیاد آشنایی ندارم .

می شه در مورد کاربرد using namespace std توضیح بدین ،
خیلی خیلی ممنون ...

amin1softco
پنج شنبه 05 فروردین 1389, 13:45 عصر
می شه در مورد کاربرد using namespace std توضیح بدین ،

برای از بین بردن علامت حوزه است
ببین در اصل این تابع های ورودی و خروجی عضو یک کلاس هستند به نام std و باید اینجور فراخوانی بشند std::cin یا std::cout حالا ما اینجا بوسیله این خط در اول برنامه کار خودمون رو ساده می کنیم به جای std هر اسمی می تونه قرار بگیره
و نکته دیگه اینه که اگه در سرفایل تابع سی یعنی iostream.h را قرار بدید احتیاجی به این خط نیست.