اولا اين تاپيك مخصوص تمرين و مباحثه در مورد تمرينات است و سئوال شما كاملا مناسب تاپيك است.
دوما خوب بود كه اساتيد فن مثل programmer و آقا سعيد جواب شما را مي دادند. كه احتمالا فرصت نكرده اند يا هنوز اينجا سرنزده اند.
فعلا من در حد سواد خودم جواب مي دهم بعدا ايشان اصلاح و تكميل مي كنند.
پاسخ سئوال اول:
تا آنجا كه سواد من ميگه ، struct ، نوعي به هم مربوط كردن انواع مختلف داده است . مثلا يك int را كنار char مي گذاريم. مثلا مشخصات يك ماشين ، يكي پلاك ماشين است كه ميشه int يا long و يكي نام ماشين كه با char مثلا ميشه ساخت. اين طوري تمام انواع اطلاعات ماشين در يك struct بسته بندي ميشه و باعث تسهيل در استفاده است.
ولي اين باعث نميشه كه تعداد خانه هاي حافظه كمتر استفاده بشه. به تعداد بايتهاي لازم براي ساختن اين متغيرها در خارج struct حافظه لازمه. يعني چه معمولي int بسازيم و چه در داخل يك struct فرقي نداره.
فكر كنم شما با union اشتباه گرفته ايد. Union هم يك نوع struct است ولي همه متغيرها روي هم مي خوابند. و طول حافظه مورد مصرف ميشه برابر با طول بزرگترين آنها. مثلا اگر long و int و char داشته باشيم در union ، مقدار حافظه مصرفي برابر ميشه با طول long .
اگر اشتباه گفتم دوستان اصلاح كنند.
سئوال دوم : آداپتور ارتباط سري.
يا من كلا بلد نيستم يا اسم ديگه اي داره كه من با اون اسم ميشناسم.
بهر حال محبت دوستان را مي طلبد.
سئوال سوم: دو تابع title و strtoul .
كلا در مورد توابع من تا يك برنامه نسازم و نتوانم از آن تابع استفاده كنم و مسلط نشوم ، جواب نمي دهم.ولي strtoul مربوط به تبديل هاست . و title را هم در help توربو سي پيدا نكردم. شايد مال كامپايلر ديگري باشه يا در header نوشته شده توسط شخصي شما برخورد كرده ايد يا من دقت نكرده ام و در دستورات وجود داره. اگر حياتي بود برايتان هر قسمت تاكيد بيشتري كنيد تا با سرچ در اينترنت به منابع بيشتري دست پيدا كنيم.
کد:
strtoul converts a string to an unsigned long
unsigned long strtoul(const char *s, char **endptr, int radix);
سئوال چهارم: a=atoi(b)
هلپ help توربو سي اين طور معرفي اش مي كنه.
Macro that converts string to integer
Declaration: int atoi(const char *s);
يعني ماكرويي كه string را به integer تبديل مي كند. و ورودي تابع همان طور كه مي بينيد constant char است و خروجي عدد. Constant هم يعني حروف باشه دقيقا فكر كنم . نه متغير. من قبلا از عكس اين حالت استفاده كرده ام. و در يكي از پستهاي همين تاپيك هست. پست شماره 131 صفحه 9 . البته اگر صفحات شما به شكل ديفالت يعني 15 پستي فرمت شده باشه.
حالا آن برنامه را دوباره من اينجا مي گذارم.
کد:
#include <conio.h>
#include <iostream.h>
#include <stdlib.h>
void main()
{
clrscr();char c ;
menu:
// ----------- shoroe ghaaleb -------------
int number = 12345;
char string[25];
itoa(number, string, 10);
//printf("integer = %d string = %s\n", number, string);
cout<<"integer="<<number<<" string="<<string<<endl;
// ----------- entehaye ghaaleb -----------
cout<<"----------------------new run"<<endl;
c=getch();if(c != 'x') goto menu;
}
همان طور كه استاد گرامي فرمودند آن 10 يعني مبناي 10 و كار اين تابع تبديل از عدد به رشته است. مال شما برعكسش است. ديگه خودتان استادش كنيد طرز استفاده را.
سئوال پنجم: كه در حلقه شما كاراكتر چند بار چاپ ميشه؟
بهترين راه اينه كه برنامه را بنويسيد و اجرا كنيد.
کد:
#include <conio.h>
#include <iostream.h>
[color=red]#include <STDIO.H>[/color]
void main()
{
clrscr();char c ;
menu:
// ----------- shoroe ghaaleb -------------
int i;
for(i=-2;i<=20;i+=2);
[color=red]puts[/color]("a");
//cout<<"---- "<<endl;
// ----------- entehaye ghaaleb -----------
cout<<"----------------------new run"<<endl;
c=getch();if(c != 'q') goto menu;
}
يك بار حرف a نوشته ميشه. علتش را خودتان استدلال كنيد. اين تابع گاهي براي print استفاده ميشه و در header ئي است كه با رنگ قرمز مشخص كرده ايم.
در پست بعدي اقا سعيد گفته كه چرا يك بار چاپ ميشه. علتش سمي كالن بعد تعريف حلقه است.