• پایان فعالیت بخشهای انجمن: امکان ایجاد موضوع یا نوشته جدید برای عموم کاربران غیرفعال شده است

زمان

sima_c

کاربر تازه وارد
تاریخ عضویت
21 می 2006
نوشته‌ها
30
لایک‌ها
0
با سلام .
دوستان ممنون میشم در حل این مشکل راهنماییم کنند:
تابعی می خوام که زمان را در قالب یک structure (ساختمان) بگیره (24 ساعتی) و معادلشو به صورت متن (12ساعتی با تعیین روز/شب یا قبل و بعد از ظهر) نشون بده.
مثلا : 22:10:5 خروجی : ساعت ده و ده دقیقه و پنج ثانیه شب یا بعد از ظهر
 

Arman_BTC

کاربر تازه وارد
تاریخ عضویت
28 فوریه 2006
نوشته‌ها
138
لایک‌ها
1
فکر میکنم برنامش این طوری باشه
کد:
#include<iostream.h>
struct Time{
int hour;
int min;
int sec;};
int main (){
Time t;
cout<<"Enter The time:";
cin>>t.hour>>t.min>>t.sec;
if(t.hour>12)
cout<<"The time is:"<<t.hour-12<<":"<<t.min<<":"<<t.sec<<" PM";
else
cout<<"The time is:"<<t.hour<<":"<<t.min<<":"<<t.sec<<" AM";
return 0;
}
 

Arash_j13

Registered User
تاریخ عضویت
18 فوریه 2005
نوشته‌ها
778
لایک‌ها
2
محل سکونت
مشهد
این مثال از کتاب C++ How to program فکر کنم به کار شما بیاد
کد:
// Fig. 6.1: fig06_01.cpp
// Create a structure, set its members, and print it.
#include <iostream>

using std::cout;
using std::endl;

struct Time {    // structure definition
   int hour;     // 0-23
   int minute;   // 0-59
   int second;   // 0-59
};

void printMilitary( const Time & );  // prototype
void printStandard( const Time & );  // prototype

int main()
{
   Time dinnerTime;    // variable of new type Time

   // set members to valid values
   dinnerTime.hour = 18;
   dinnerTime.minute = 30;
   dinnerTime.second = 0;

   cout << "Dinner will be held at ";
   printMilitary( dinnerTime );
   cout << " military time,\nwhich is ";
   printStandard( dinnerTime );
   cout << " standard time.\n";

   // set members to invalid values
   dinnerTime.hour = 29;
   dinnerTime.minute = 73;
   
   cout << "\nTime with invalid values: ";
   printMilitary( dinnerTime );
   cout << endl;
   return 0;
}

// Print the time in military format
void printMilitary( const Time &t )
{
   cout << ( t.hour < 10 ? "0" : "" ) << t.hour << ":"
        << ( t.minute < 10 ? "0" : "" ) << t.minute;
}

// Print the time in standard format
void printStandard( const Time &t )
{
   cout << ( ( t.hour == 0 || t.hour == 12 ) ? 
             12 : t.hour % 12 )
        << ":" << ( t.minute < 10 ? "0" : "" ) << t.minute
        << ":" << ( t.second < 10 ? "0" : "" ) << t.second
        << ( t.hour < 12 ? " AM" : " PM" );
}



/**************************************************************************
 * (C) Copyright 2000 by Deitel & Associates, Inc. and Prentice Hall.     *
 * All Rights Reserved.                                                   *
 *                                                                        *
 * DISCLAIMER: The authors and publisher of this book have used their     *
 * best efforts in preparing the book. These efforts include the          *
 * development, research, and testing of the theories and programs        *
 * to determine their effectiveness. The authors and publisher make       *
 * no warranty of any kind, expressed or implied, with regard to these    *
 * programs or to the documentation contained in these books. The authors *
 * and publisher shall not be liable in any event for incidental or       *
 * consequential damages in connection with, or arising out of, the       *
 * furnishing, performance, or use of these programs.                     *
 *************************************************************************/
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
به نقل از Arash_j13 :
برنامه را تغيير دادم تا در توربوسي چهار و نيم اجرا شود.
در كامپايلرهاي جديد به جاي <iostream.h> مي نويسند <iostream> كه من پسوند .h را اضافه كردم. و نمي دانم چرا روي ...

کد:
using std::cout;
using std::endl;

خطا داد كه حذف كردم.

کد:
// Fig. 6.1: fig06_01.cpp
// Create a structure, set its members, and print it.
#include <iostream.h>

struct Time {    // structure definition
	int hour;     // 0-23
	int minute;   // 0-59
	int second;   // 0-59
};

void printMilitary( const Time & );  // prototype
void printStandard( const Time & );  // prototype

int main()
{
	Time dinnerTime;    // variable of new type Time

	// set members to valid values
	dinnerTime.hour = 18;
	dinnerTime.minute = 30;
	dinnerTime.second = 0;

	cout << "Dinner will be held at ";
	printMilitary( dinnerTime );
	cout << " military time,\nwhich is ";
	printStandard( dinnerTime );
	cout << " standard time.\n";

	// set members to invalid values
	dinnerTime.hour = 29;
	dinnerTime.minute = 73;

	cout << "\nTime with invalid values: ";
	printMilitary( dinnerTime );
	cout << endl;
	return 0;
}

// Print the time in military format
void printMilitary( const Time &t )
{
	cout << ( t.hour < 10 ? "0" : "" ) << t.hour << ":"
		  << ( t.minute < 10 ? "0" : "" ) << t.minute;
		  }

// Print the time in standard format
void printStandard( const Time &t )
{
	cout << ( ( t.hour == 0 || t.hour == 12 ) ?
				 12 : t.hour % 12 )
		  << ":" << ( t.minute < 10 ? "0" : "" ) << t.minute
		  << ":" << ( t.second < 10 ? "0" : "" ) << t.second
		  << ( t.hour < 12 ? " AM" : " PM" );
}


c4.gif


فرق توربو سي چهار و نيم و سه اينه كه بايد در انتهاي برنامه هاي توربو سي 3 يك getch(); بگذاريم. كه طبعا يك <conio.h> هم اولش مي خواهد.
خوبه هم كه اول برنامه هاي توربوسي 3 يك clrscr(); بگذاريم كه نتيجه اجراي قبلي پاك بشه تا محيط كار تميز باشه.header اين تابع هم conio.h است.

کد:
// Fig. 6.1: fig06_01.cpp
// Create a structure, set its members, and print it.
#include <iostream.h>
#include <conio.h>

struct Time {    // structure definition
	int hour;     // 0-23
	int minute;   // 0-59
	int second;   // 0-59
};

void printMilitary( const Time & );  // prototype
void printStandard( const Time & );  // prototype

int main()
{
clrscr();
	Time dinnerTime;    // variable of new type Time

	// set members to valid values
	dinnerTime.hour = 18;
	dinnerTime.minute = 30;
	dinnerTime.second = 0;

	cout << "Dinner will be held at ";
	printMilitary( dinnerTime );
	cout << " military time,\nwhich is ";
	printStandard( dinnerTime );
	cout << " standard time.\n";

	// set members to invalid values
	dinnerTime.hour = 29;
	dinnerTime.minute = 73;

	cout << "\nTime with invalid values: ";
	printMilitary( dinnerTime );
	cout << endl;
	getch();
	return 0;
}

// Print the time in military format
void printMilitary( const Time &t )
{
	cout << ( t.hour < 10 ? "0" : "" ) << t.hour << ":"
		  << ( t.minute < 10 ? "0" : "" ) << t.minute;
		  }

// Print the time in standard format
void printStandard( const Time &t )
{
	cout << ( ( t.hour == 0 || t.hour == 12 ) ?
				 12 : t.hour % 12 )
		  << ":" << ( t.minute < 10 ? "0" : "" ) << t.minute
		  << ":" << ( t.second < 10 ? "0" : "" ) << t.second
		  << ( t.hour < 12 ? " AM" : " PM" );
}


c5.gif


شرح برنامه:
ابتدا يك struct بيرون main تعريف شده.

کد:
struct Time {    // structure definition
	int hour;     // 0-23
	int minute;   // 0-59
	int second;   // 0-59
};

بعد بلافاصله بعد شروع main ، يك نمونه از اين استراكت ساخته شده.

کد:
Time dinnerTime;    // variable of new type Time

بعد به اعضاي اين استراكت نمونه ، مقدار اوليه داده:

کد:
// set members to valid values
	dinnerTime.hour = 18;
	dinnerTime.minute = 30;
	dinnerTime.second = 0;

بعد دو تابع كه ساخته بوده قبلا را احضار كرده:

کد:
cout << "Dinner will be held at ";
	printMilitary( dinnerTime );
	cout << " military time,\nwhich is ";
	printStandard( dinnerTime );
	cout << " standard time.\n";
در مرحله بعداي هم باز مقدار اوليه به عناصر اين استراكت داده و توابع را باز احضار كرده.

نگاهي به درون اين توابع مي كنيم.

کد:
// Print the time in military format
void printMilitary( const Time &t )
{
	cout << ( t.hour < 10 ? "0" : "" ) << t.hour << ":"
		  << ( t.minute < 10 ? "0" : "" ) << t.minute;
		  }

// Print the time in standard format
void printStandard( const Time &t )
{
	cout << ( ( t.hour == 0 || t.hour == 12 ) ?
				 12 : t.hour % 12 )
		  << ":" << ( t.minute < 10 ? "0" : "" ) << t.minute
		  << ":" << ( t.second < 10 ? "0" : "" ) << t.second
		  << ( t.hour < 12 ? " AM" : " PM" );
}

چيز مهمي كه وجود دارد اين است كه struct را به تابع ارسال كرده ايم.

سئوالي كه براي من پيش آمده اين است كه درون تابع چگونه استراكت شناخته شده است؟

آيا به اين دليل نيست كه تعريف استراكت ، چون بيرون main است نوعي تعريف سراسري است؟

نكته بعدي ، استفاده از const است.

چرا اين كلمه استفاده شده؟

ايا براي حفظ عناصر استراكت از تغيير بوده؟
البته در اين برنامه تغيير آنها مهم نبوده ولي تابع در مكانهاي ديگر بايد بي تغيير ورودي ها ، فقط چاپگر باشد.

نكته ديگر علامت (؟ ) است . كار اين چيست؟

کد:
<< ( t.minute < 10 ? "0" : "" ) <<
 

MahdiΩ

کاربر تازه وارد
تاریخ عضویت
27 ژانویه 2006
نوشته‌ها
324
لایک‌ها
0
سلام

سئوالي كه براي من پيش آمده اين است كه درون تابع چگونه استراكت شناخته شده است؟
آيا به اين دليل نيست كه تعريف استراكت ، چون بيرون main است نوعي تعريف سراسري است؟

خیلی عادیه ! استراکت به عنوان پارامتر به تابع ارسال شده !
حالت پیش فرض استراکت هم public هست و بنابراین میتوان به اعضای داده ای اون دسترسی داشت.

نكته بعدي ، استفاده از const است.

چرا اين كلمه استفاده شده؟

ايا براي حفظ عناصر استراكت از تغيير بوده؟
البته در اين برنامه تغيير آنها مهم نبوده ولي تابع در مكانهاي ديگر بايد بي تغيير ورودي ها ، فقط چاپگر باشد.

بله برای جلوگیری از تغییرات احتمالی که ممکن هست اشتباها" پیش بیاد .

نكته ديگر علامت (؟ ) است . كار اين چيست؟
این عملگر تنها عملگر سه سه ای در سی پلاس پلاس هست.کار if-then-else رو انجام میده.
قبل از ؟ شرط قرار میگیره
؟ مثل then در پاسکال هست.
: مثل else هست.

مثلا در دستور شما اگه t.minute کوچکتر از ده باشه صفر چاپ میشه و در غیر این صورت هیچی چاپ نمیشه=>" ".

البته میشه اون دستور رو اینجوری هم نوشت:

کد:
t.minute < 10 ? cout <<"0"  :  cout<<"";
 

sima_c

کاربر تازه وارد
تاریخ عضویت
21 می 2006
نوشته‌ها
30
لایک‌ها
0
از همه دوستان ممنونم.
فقط در برنامه میخوام که بنویسه ساعتو به حروف یعنی :
مثلا خروجی میشه 11:04:03 بنویسه ساعت 11 و 4 دقیقه و 3 ثانیه
بازم از همه دوستان ممنونم .

؟ یک سوال هم در مورد اشاره گر ها داشتم . که در این تاپیک هستش . ممنون میشم دوستان راهنماییم کنن #95
http://forum.persiantools.com/showthread.php?p=688855#post688855
 

MahdiΩ

کاربر تازه وارد
تاریخ عضویت
27 ژانویه 2006
نوشته‌ها
324
لایک‌ها
0
خیلی راحت میشه با یه switch اعداد بین 1 تا 12 را برای ساعت و 1 تا 60 را برای دقیقه و ثانیه به حروف تبدیل کرد.
یا یک آرایه ی 60 عنصری از * char تهیه کرد که عنصر اولش one و عنصر دومش two و.... باشه
حالا اگه ساعت 5 بود ما عنصر پنجم آرایه که محتوی رشته five هست رو چاپ میکنیم.
-----------------------
روش خوبیه stu .
 
بالا