سئوالات و مشکلات برنامه نویسی به زبان C و ++C

psp2004

عضو جدید
و تعریف تابع رو بعد از تابع example انجام بدین یا این که به طور کلی این تابع رو قبل از تابع example تعریف کنید...



سلام

در صورتی که از opengl استفاده کنید بسیار کارتون راحت خواهد بود....اگر تنظیمات لازم رو برای استفاده از opengl در ویژوال استودیو انجام دادین میتونید از این تکه کد که در ضمیمه قرار دادم برای رسم خط استفاده کنید:smile:اگر هم خواستین بفرمایید تا تنظیمات لازم برای opengl رو هم خدمتتون بدم:gol:

از پاسختون ممنون ... فقط یه سوال دارم برای اجرا روی یه رایانه دیگه با ctrl+f5 بخوایم تو ویژوال استادیو رانش کنیم حتمن باید این تنظیمات open GL رو اون رایانه هم انجام بدیم ... آخه این پروژه درس ساختمان دادمه ولی استادم حرفی از استفاده از open GL نزده بود برای همین تا جایی که امکان داره می خواستم از هدر ها و توابع خود ویژوال استادیو استفاده کنم ....

تو کدی که گذاشته بودید تو تابع paint باید تابع lineDDA رو صدا بزنیم و مختصات نقاط رو به همین تابع lineDDA بدیم ؟؟؟
و تابع paint خودش به عنوان یه پارامتر در تابع glutDisplayFunc صدا زده میشه ...
حالا اگه من بخام در یک حلقه بگم در هر دور از حلقه 2 تا نقطه بگیره و خط بینشون رو رسم کنه باید تابع paint دارای پارامتر باشه و در هر بار مختصات نقاطم را بش بدم ... حالا اگه واسه تابع paint پارامتر تعریف کنم به تابع glutDisplayFunc که خودش paint رو به عنوان پارامتر میگیره ارور میده ....
موندم چی کار کنم ؟؟؟
 
آخرین ویرایش:

gole-rose

عضو جدید
ممنونم ... درست شد ...
یه مشکل دیگه هم دارم.
می خوام وقتی کاربر یه کلید خاص مثلا Q رو وارد کرد یه پیغام بده و بعد با وارد کردن هر کلید دیگری از برنامه خارج بشه.
چطور می تونم اینکارو انجام بدم؟؟

توی if گذاشتمش ولی متغیری که بهش می دمو متغیر محلی در نظر می گیره و خارج از if نمی شناسش
 

zahra1386

مدیر بازنشسته
کاربر ممتاز
از پاسختون ممنون ... فقط یه سوال دارم برای اجرا روی یه رایانه دیگه با ctrl+f5 بخوایم تو ویژوال استادیو رانش کنیم حتمن باید این تنظیمات open GL رو اون رایانه هم انجام بدیم ... آخه این پروژه درس ساختمان دادمه ولی استادم حرفی از استفاده از open GL نزده بود برای همین تا جایی که امکان داره می خواستم از هدر ها و توابع خود ویژوال استادیو استفاده کنم ....

خواهش میکنم...

بله مسلما باید تنظیمات رو انجام بدین تا برنامه ران بشه....البته opengl چیزی جدا از ویژوال استودیو نیست...یه کتابخونه اس که با اضافه کردنش به این محیط میتونید از توابعش استفاده کنید...

تو کدی که گذاشته بودید تو تابع paint باید تابع lineDDA رو صدا بزنیم و مختصات نقاط رو به همین تابع lineDDA بدیم ؟؟؟
و تابع paint خودش به عنوان یه پارامتر در تابع glutDisplayFunc صدا زده میشه ...

کاملا درسته....

حالا اگه من بخام در یک حلقه بگم در هر دور از حلقه 2 تا نقطه بگیره و خط بینشون رو رسم کنه باید تابع paint دارای پارامتر باشه و در هر بار مختصات نقاطم را بش بدم ... حالا اگه واسه تابع paint پارامتر تعریف کنم به تابع glutDisplayFunc که خودش paint رو به عنوان پارامتر میگیره ارور میده ....
موندم چی کار کنم ؟؟؟

امضای تابع glutDisplayFunc به این صورت هست:
کد:
glutDisplayFunc(void (*func)(void))

همون طور که می بینید امکان این که تابع paint دارای پارامتر ورودی باشه وجود نداره!اما برای حل مشکلتون یه پیشنهاد میدم:

شما 4 تا متغیر سراسری تعریف کنید که همون مختصات هستن و در تابع paint ،به جای قرار دادن مقادیر ثابت در ورودی تابع lineDDA اون 4 متغیر رو قرار بدین....خودم تست نکردم ولی فک کنم جواب بده....
 

zahra1386

مدیر بازنشسته
کاربر ممتاز
ممنونم ... درست شد ...
یه مشکل دیگه هم دارم.
می خوام وقتی کاربر یه کلید خاص مثلا Q رو وارد کرد یه پیغام بده و بعد با وارد کردن هر کلید دیگری از برنامه خارج بشه.
چطور می تونم اینکارو انجام بدم؟؟

توی if گذاشتمش ولی متغیری که بهش می دمو متغیر محلی در نظر می گیره و خارج از if نمی شناسش

خب عزیز متغیر مورد نظر رو سراسری تعریف کن که خارج از if هم شناخته بشه:smile:همون ابتدای تعریف کلاست میتونی متغیر رو تعریف کنی تا در کل توابع کلاس قابل دسترسی باشه...
 

arvin.h

عضو جدید
سلام دوستان
من میخواماز طریق C++ و پورت پارالل یه LED رو خاموش و روشن کنم اما تا حالا هیچ جوره نتونستم
میشه یه نفر که قبلا این کارو کرده و میتونه،کمکم کنه و از طریق ایمیلم تماس بگیره؟؟
arvin.plus@gmail.com
 

sayyad84

متخصص زبان Assembly
کاربر ممتاز
سلام دوستان
من میخواماز طریق C++ و پورت پارالل یه LED رو خاموش و روشن کنم اما تا حالا هیچ جوره نتونستم
میشه یه نفر که قبلا این کارو کرده و میتونه،کمکم کنه و از طریق ایمیلم تماس بگیره؟؟
arvin.plus@gmail.com
با سلام،
این تاپیک می تونه کمک تون کنه!
 

shabnam.gh

عضو جدید
تتریس

تتریس

سلام دوستان
کمک میخواستم
برای پروژه آخر ترم باید بازی تتریس رو به زبان
C
بنویسم
:cry:اما برای نوشتن این بازی نمیدونم چطور باید شروع کنم
:(حتی الگوریتمی درس حسابی نتونستم براش بنویسم
البته هنوزم در مورد گرافیک و توابعش هیچی نمیدونم و تازه دارم میخونم
میشه راهنماییم کنید و اگه میشه کمکم کنید
یه عالمه سوال دارم
راستی یه پروژه دیگه هم هست که نوشتن یه ویرایشگر متن هست بین این دوتا باید یکی رو انتخاب کنم به نظر شما کدوم بهتره با این وضعیت البته تو هردوتا مشکل هست
ممنون
هووم اگه کسی هست که بهم کمک کنه
لطفا حتما خبرم کنه
اگه میتونید از طریق ایمیل
...​
 

naimi ali

عضو جدید
سلام من سرس کد دفترچه تلفن رو می خوام .... جستجو می کنم چیزایی که میاد رو تست می کنم جواب نمی ده...کسی اگه ممکنه به من کمک کنه سرس کد دفترچه تلفن با c++ رو می خوام.... مرسی ازتون ممنونم .....اگه ممکنه به من کمک کنید
 

"sama"

عضو جدید
به نام خدا
باسلام
من میخواست بدونم STLچیه؟
وبرای بهتر شدن برنامه نویسیم چه کمکی میکنه؟
 

HH2BN1990

کاربر فعال
سلام من سرس کد دفترچه تلفن رو می خوام .... جستجو می کنم چیزایی که میاد رو تست می کنم جواب نمی ده...کسی اگه ممکنه به من کمک کنه سرس کد دفترچه تلفن با c++ رو می خوام.... مرسی ازتون ممنونم .....اگه ممکنه به من کمک کنید

یه نگاهی با این لینک بندازین.
 
آخرین ویرایش:

ساناز2740

عضو جدید
سلام بچه ها من نمیدونم چطوری میتونم سوالمو بپرسم دیگه حالا اگه جاش اینجا نیس ساری ....
میخام برنامه یه مفسر رو بنویسم
مفسر زبان متلب به زبان c
ترم 1هسم و خ اطلاعی از سایت و تابع های خاص و اینا ندارم ممنون میشم اگه کمکم کنید و راهنمایی کنید چطوری میتونم بنویسمش اول باید از کجا شروع کنم
پیشاپیش ممنون از جواباتون:smile:
 

می نروا

عضو جدید
سلام،امیدوارم دلسوزانه کمکم کنید و کامل پیغامم رو بخونید نمیدونستم کجا مطرح کنم

سلام،امیدوارم دلسوزانه کمکم کنید و کامل پیغامم رو بخونید نمیدونستم کجا مطرح کنم

موضوع:
برنامه ای بنویسید کالا را شمارش و تاریخ و زمان را همراه با آن ثبت و بعد از شمارش 100 کالا آلارم روشن و این اتفاقات در حافظه ram

ذخیره گردد.من بزبان C نتونستم با استفاده از میکرو بنویسم،برنامه ای که نوشتم ایراداتی داره من جمله آلارم نمیده و به waitمیرسه

سیستم خطا میده
$regfile = "m32def.dat"
$crystal = 8000000
Config Clock = Soft , Gosub = Sectic
Config Serialout = Buffered
Config Portb = Output
Config Porta = Input
S Alias Pina.0
Dim A As Word , B As Word , Addr As Word , Y As Byte , X As Byte
A = 0
B = 0
Addr=&H0000
X=High(addr)
Y=Low(addr)
Enable Interrupts
Config Lcdpin = Pin , Db4 = Pinb.4 , Db5 = Pinb.5 , Db6 = Pinb.6 , Db7 = Pinb.7 , Rs = Pinb.2 , E = Pinb.3
Config Lcd = 16 * 4
Config Date = Ymd , Separator = /
Cursor Off
Date$ = "90/09/01"
Time$ = "23:59:00"
Do
Loop
Sectic:
Locate 1 , 1
Lcd "time:" ; Time$
Locate 2 , 1
Lcd "date:" ; Date$
Cnt:
If S = 1 Then
If B = 0 Then
Incr A
Locate 3 , 1
Lcd A
Incr B
End If
Else
B = 0
Locate 3 , 1
Lcd A
End If
E2p:
If Time$="00:00:00"then
Writ:
'I2cstart
'I2cwbyte 160
'I2cwbyte X
'I2cwbyte Y
'I2cwbyte A
'I2cstop
'Waitms 10
Return
 

H.r.Ghanbari

عضو جدید
Avr Programming

Avr Programming

موضوع:
برنامه ای بنویسید کالا را شمارش و تاریخ و زمان را همراه با آن ثبت و بعد از شمارش 100 کالا آلارم روشن و این اتفاقات در حافظه ram

ذخیره گردد.من بزبان C نتونستم با استفاده از میکرو بنویسم،برنامه ای که نوشتم ایراداتی داره من جمله آلارم نمیده و به waitمیرسه

سیستم خطا میده
$regfile = "m32def.dat"
$crystal = 8000000
Config Clock = Soft , Gosub = Sectic
Config Serialout = Buffered
Config Portb = Output
Config Porta = Input
S Alias Pina.0
Dim A As Word , B As Word , Addr As Word , Y As Byte , X As Byte
A = 0
B = 0
Addr=&H0000
X=High(addr)
Y=Low(addr)
Enable Interrupts
Config Lcdpin = Pin , Db4 = Pinb.4 , Db5 = Pinb.5 , Db6 = Pinb.6 , Db7 = Pinb.7 , Rs = Pinb.2 , E = Pinb.3
Config Lcd = 16 * 4
Config Date = Ymd , Separator = /
Cursor Off
Date$ = "90/09/01"
Time$ = "23:59:00"
Do
Loop
Sectic:
Locate 1 , 1
Lcd "time:" ; Time$
Locate 2 , 1
Lcd "date:" ; Date$
Cnt:
If S = 1 Then
If B = 0 Then
Incr A
Locate 3 , 1
Lcd A
Incr B
End If
Else
B = 0
Locate 3 , 1
Lcd A
End If
E2p:
If Time$="00:00:00"then
Writ:
'I2cstart
'I2cwbyte 160
'I2cwbyte X
'I2cwbyte Y
'I2cwbyte A
'I2cstop
'Waitms 10
Return

اول بگو با کدوم کامپایلر و برای کدوم میکرو نوشتی، دوست من!
( فک کنم باید واسه میکروکنترلر AVR باشه AtMega32 با کریستال 8Meg )
چون دستورات میکروی Avr از نوع Risc هستش و همچنین دستورات ماشین میکرو Avr رو طوری طراحی کردن که با زبانC و compiler C زیاد هماهنگی داشته باشه ( حتی می شه گفت میکرویی برای زبان C طراحی کردن!) واسه همین به نطر من حتما C رو شروع کن به یاد گرفتن, با C تحت وینذوز شروع کن ( Visual Stdio -> Win32 C++ Console Application() بعد اینکه دستت قوی شد برو با کامپیلرهای مخصوص میکروکنترلز کار کن چون دیگه اونجا مثل VS نمی تونی Trace , ِDebug در حد عالی داشته باشیو یا Breackpoint بزنیو از این داستانا... IDE های میکروکنترلز ها ضعیفن در این موارد و باید با شبیه سازی با استفاده از Proteus و یا همچین داستانایی کار کنی...
بهتره با CodeVisioکار کنی که Code wizard بسیار خوبی داره اگه که نه ، خیلی واردی به زیان C می تونی از Compiler IAR هم استفاذه کنی که برنامه نویسی C++ , Mutithread رو هم تاحدی پشتیبانی می کنه.
برنامه های بزرگ و Stable به نظر من باید ترکیبی از C , Asm باشه...
موفق باشی;):D
 

H.r.Ghanbari

عضو جدید
سلام بچه ها من نمیدونم چطوری میتونم سوالمو بپرسم دیگه حالا اگه جاش اینجا نیس ساری ....
میخام برنامه یه مفسر رو بنویسم
مفسر زبان متلب به زبان c
ترم 1هسم و خ اطلاعی از سایت و تابع های خاص و اینا ندارم ممنون میشم اگه کمکم کنید و راهنمایی کنید چطوری میتونم بنویسمش اول باید از کجا شروع کنم
پیشاپیش ممنون از جواباتون:smile:

به نظر من اول بایستی برنامه نویسی تون در حد عالی باشه دوست من...( خیلی باید تمرین کنید)
بعد مفاهیم نظریه زبانها و ماشینها رو خوب بفهمید و بتونید تاحدی پیاده سازیش کنین
بعد مفاهیم Compiler رو خوب بفهمید و بتونید مسئله خودوتن جمع و جور کنید و بفهیمد چی چیزی می خوایین( چه ابزار هایی دارین ، چه ابزارهایی مناسب ترند و ...)
کار تیمی شروع کنید..
سعی کنید رهبری تیم هم با شما باشه تا واسه اینده هم تجربه بشه واستون!;)
موفق باشین:D
 
آخرین ویرایش:

Shahab

مدیر تالار عکس
مدیر تالار
کاربر ممتاز
سلام خسته نباشید من تازه واردم کد تابع strstr رو میخام به زبان c همون تابعی رو میگم که دو رشته رو دریافت میکنه و رشته دوم رو در رشته اول جستجو میکند اگه وجود داشت مکان اولین کارکتر رشته دوم رو برمیگردونه در غیر اینصورت یه عدد مثلا 0 رو برمیگردونه ممنون میشم
 

می نروا

عضو جدید
بله همونطور در دو خط اول برنامه قرار دادم و شما کاملا درست حدس زدید
از راهنماییتون بینهایت سپاسگذارم چون میخواستم سطحم رو در برنامه نویسی تقویت کنم و حالا میدونم باید بترتیب چ مراحلی رو طی کنم
اما باید بگم من ترم اول کارشناسی ناپیوسته برق-الکترونیکم و از زبان C در حد آماتور میدونم و برنامه ی ارائه شده رو براساس در س میکروپروسسور و در اونجا بزبان بسکام بما تدریس شده برنامه رو نوشتم درواقع از شما و تمام بازدید کنندگان این تاپیک تقاضا دارم تا این برنامه رو اگر امکانش هست بنویسید(بنویسن) البته باز اینو باینخاطر میگم چون اینطور تصور میکنم کسانی که به برنامه نویسی واردن برای نوشتن برنامه جدید باتوجه به صورت برنامه در برنامه های مشابه قبلی سرچ ، کپی ، و در بدنه برنامه جدید پیست میکنن و در نهایت تغییرات جزیی را اعمال میکنن
ایدوارم هم شما هم دیگران درخواستمو گستاخی تلقی نکنید
 

HH2BN1990

کاربر فعال
سلام خسته نباشید من تازه واردم کد تابع strstr رو میخام به زبان c همون تابعی رو میگم که دو رشته رو دریافت میکنه و رشته دوم رو در رشته اول جستجو میکند اگه وجود داشت مکان اولین کارکتر رشته دوم رو برمیگردونه در غیر اینصورت یه عدد مثلا 0 رو برمیگردونه ممنون میشم

مثالی که اینجا زده رو ببین !
 

Shahab

مدیر تالار عکس
مدیر تالار
کاربر ممتاز
ببین این لینک یا این لینک به دردت می خوره !

خب فك نكنم اينايي كه گفتيد به دردم بخوره يه كد كوتاهه كه من بلد نيستم البته با كمك كتاب سعيد ابريشمي اينو نوشتم كه به حلقه for دومي گير ميده به نظرتون مشكل از كجاست
سوال اينه كه دو رشته رو بگيره و رشته دوم رو در رشته اول جستجو كنه اگه وجود مكانش رو برگردونه
PHP:
#include <stdio.h>
#include <conio.h>
#include <string.h>

int main()
{char c[100]; char s[20];
int i,j;
printf("enter c:");
gets("c");
printf("enter s:");
gets("s");

for(i=0;c[i]!=0;i++)
if(c[i]==s[0]){
for(j=1;s[j]&&c[i+j==s[j];j++);
if(!s[j]) return(i);

}
return(0);
}
 

HH2BN1990

کاربر فعال
خب فك نكنم اينايي كه گفتيد به دردم بخوره يه كد كوتاهه كه من بلد نيستم البته با كمك كتاب سعيد ابريشمي اينو نوشتم كه به حلقه for دومي گير ميده به نظرتون مشكل از كجاست
سوال اينه كه دو رشته رو بگيره و رشته دوم رو در رشته اول جستجو كنه اگه وجود مكانش رو برگردونه

خب اینو زودتر می گفتی دیگه :D

کد:
#include <stdio.h>
#include <conio.h>
#include <string.h>


int main()
{
    char c [80];
   char s [80];
    int i,j;


    printf("enter c:");
    gets(c);


    printf("enter s:");
    gets(s);


    int pos = -1;
    int isstr;


    for(i=0;c[i]!='\0';i++)
    {
        if(c[i] == s[0])
        {
            isstr = 1;
            pos = i;
            for(j=0;s[i] !='\0' ;j++,i++)
                if(c[i] != s[j])
                {
                    isstr = 1;
                    break;
                }
                else
                    isstr = 0;
            if(isstr == 0)
                break;
            else
         {
            pos = -1;
                continue;
         }
        }
    }


    printf("String Dar Khaneye %d Hast.",pos);
    getch();
}




 

Shahab

مدیر تالار عکس
مدیر تالار
کاربر ممتاز

خب اینو زودتر می گفتی دیگه :D


کد:
#include <stdio.h>
#include <conio.h>
#include <string.h>


int main()
{
    char c [80];
   char s [80];
    int i,j;


    printf("enter c:");
    gets(c);


    printf("enter s:");
    gets(s);


    int pos = -1;
    int isstr;


    for(i=0;c[i]!='\0';i++)
    {
        if(c[i] == s[0])
        {
            isstr = 1;
            pos = i;
            for(j=0;s[i] !='\0' ;j++,i++)
                if(c[i] != s[j])
                {
                    isstr = 1;
                    break;
                }
                else
                    isstr = 0;
            if(isstr == 0)
                break;
            else
         {
            pos = -1;
                continue;
         }
        }
    }


    printf("String Dar Khaneye %d Hast.",pos);
    getch();
}






اقا دمت گرم خيلي خيلي ازت ممنونم فقط ميترسم اينو اگه نشون استادمون بدم شك بكنه بگه خودت نوشتي يا نه:cry:
 

stafazoli

عضو جدید
سلام دوستان
یه سوال داشتم
فرض کنید که یه struct داریم با نام student که شامل نام و معدل دانش آموزهاست
میخوایم تعداد n دانش آموز رو بگیریم و به تعداد n نام اون ها و معدل رو از ورودی بگیریم
حالا من میخوام بدونم چطور میشه به جای اینکه از آرایه ثابت استفاده کنیم از حافظه پویا استفاده کنیم؟ این قسمت حافظه پویا رو من بلد نیستم
ممنون میشم کمک کنید
با تشکر
 

HH2BN1990

کاربر فعال
سلام دوستان
یه سوال داشتم
فرض کنید که یه struct داریم با نام student که شامل نام و معدل دانش آموزهاست
میخوایم تعداد n دانش آموز رو بگیریم و به تعداد n نام اون ها و معدل رو از ورودی بگیریم
حالا من میخوام بدونم چطور میشه به جای اینکه از آرایه ثابت استفاده کنیم از حافظه پویا استفاده کنیم؟ این قسمت حافظه پویا رو من بلد نیستم
ممنون میشم کمک کنید
با تشکر

تو سی پلاس پلاس میشه از Vector استفاده کرد .
 

H.r.Ghanbari

عضو جدید
Dynamic Memory Allocation

Dynamic Memory Allocation

سلام دوستان
یه سوال داشتم
فرض کنید که یه struct داریم با نام student که شامل نام و معدل دانش آموزهاست
میخوایم تعداد n دانش آموز رو بگیریم و به تعداد n نام اون ها و معدل رو از ورودی بگیریم
حالا من میخوام بدونم چطور میشه به جای اینکه از آرایه ثابت استفاده کنیم از حافظه پویا استفاده کنیم؟ این قسمت حافظه پویا رو من بلد نیستم
ممنون میشم کمک کنید
با تشکر

با یه مثال ساده سعی می کنم خیلی خلاصه بگم:;)

//1 هیچی نیستن!:eek::surprised:

Simple Example: // 1
typedef struct _Student
}
float mod; // 1
char a[10]; // 1
{
Student; // 1
int main() // 1
}
int n = 20; // 1
...
Student st[20]; // 1
اشاره گر st و بیست خانه از حافظه خودش نیز در پشته قرار می گیرد.//
Student *student = (*Student)malloc(sizeof(Student)*n); // 1
.خود اشاره گر در پشته هستش "student" //
ولی محلهایی که به اونها اشاره می کنه در هیپ یا همون حافظه پویای شما قرار دارد.//
...//
return 0; // 1
}

 

stafazoli

عضو جدید
Untitled.jpg

سلام
چطور میشه اعداد در یک آرایه n در n رو به شکل بالا مرتب کرد یعنی عدد بزرگه بالا سمت چپ و عدد کوچیکه پایین سمت راست باشه؟؟؟
 

H.r.Ghanbari

عضو جدید
Reply

Reply

file:///D:/DOCUME~1/ADMINI~1.HIF/LOCALS~1/Temp/msohtml1/01/clip_image001.gif

سلام
چطور میشه اعداد در یک آرایه n در n رو به شکل بالا مرتب کرد یعنی عدد بزرگه بالا سمت چپ و عدد کوچیکه پایین سمت راست باشه؟؟؟

به اندیس اونایی که در روی یک خظ مورب با علا مت * هستن دقت کنیدو همچین به @

با افزایش یکی از اندیسها به همون مقدار از ماکسیمم مقدار اندیس همون قطر کم می شه:surprised::eek:
کد:
 C Base Indexed!
    | i     |      |     |      |      |          
 *  | [j,i]| [j,i] |[j,i] | [j,i] |[j,i] |
 ---|------|------|------|------|------|
 j   |  0,0 | *0,1 | @0,2 | *0,3 | @0,4 |
 ---|------|------|------|------|------|
    | *1,0 | @1,1  | *1,2 | @1,3 | *1,4 |
 ---|------|------|------|------|------|
    | @2,0 | *2,1 | @2,2 | *2,3 | @2,4 |
 ---|------|------|------|------|------|
    | *3,0 | @3,1 | *3,2 | @3,3 | *3,4 |
 ---|------|------|------|------|------|
    | @4,0 | *4,1 | @4,2 | *4,3 | @4,4 |
 ---|------|------|------|------|------|
  
  
 |----|----|----|----|----|
 | 24 | 23 | 19 | 18 | 10 |
 |----|----|----|----|----|
 | 22 | 20 | 17 | 11 | 09  |
 |----|----|----|----|----|
 | 21 | 16 | 12  | 08 | 03 |
 |----|----|----|----|----|
 | 15 | 13 | 07 | 04 | 02 |
 |----|----|----|----|----|
 | 14 |  06| 05 |  01 | 00 |
 |----|----|----|----|----|

کد:
   Int *temp = (int*)malloc(sizeof(int)*n*n);

مرحله 1: ابتدا n*n تا عدد و از ورودی می گیرین و در یک آرایه یک بعدی موقتی با نام temp به طول n^2 قرار می دین بعد روی همین آرایه یک بعدی مراحل زیر رو دنبال می کنین:



نکته 1: فقط اگه بخوایم n^2 خونه رو مقداردهی کنیم ،پیچیدگی زمانی این کار از مرتبه teta(n^2) خواهد بود.



نکته 2: پس حتی اگه شما یه مرتبسازی از مرتبه teta(n^2) روی همین آرایه انجام بدید هیچ تاثیری در پیچیدگی زمانی کل مسئله شما نخواهد داشت، ,( فقط یه ضریب ثابت C فرق خواهد کرد)بنا به اون چیزیکه گفتیم یه مرتب سازی نزولی روی این آرایه ابتدا انجام می دیم.



نکته 3: حالا آرایه یک بعدی ما مرتب شده نزولی هستش. یعنی بزرگترین عنصر در خانه صفر هستش.



حالا یک ارایه یک بعدی جدید دیگه n*n تعریف می کنیم.


کد:
 Int *table = (int*)malloc(sizeof(int)*n*n);

برای اینکه به این آرایه یک بعدی بصورت دو بعدی دسترسی داشته باشیم باید از فرمول زیر استفاده کنیم:

این راحترین راه برای کار با یک آرایه دوبعدی هستش به نظر من


کد:
    *( table+(j*n+i) )  ~  table[j,i]  ,  0 <= i < n && 0<= j < n

حالا حلقه زیر آرایه رو به فرمی که شما می خواید در می یاره...;)
کد:
       int n; // n = 5*5;
int U2D = 0;
int seg2 = 0;
Int *temp = (int*)malloc(sizeof(int)*n*n);
// read from Console n*n value and insert to temp;
// Sort temp;
int *temp2 = temp;
Int *table = (int*)malloc(sizeof(int)*n*n);
Int m = 0;
int i=0;
int j=0;
int sp = 0;
int Counter = 0;
for(m=0;;)
{
        If( m == n )
        {
               seg2 = 1;
               --m;
        }
        If( seg2 ==1 )
               ++sp;
        j= sp;
        i=0;
        for( ; j<=m ; j++ )
            {
                        i= m-(j-sp);
                        if(U2D == 0 )
                        {
                                    // *(table+(i*n+j)) ~ table[i,j]
                                    *(table+(i*n+j)) = *(temp2++);            
                                      ++Counter;                            
                        }          
                        else
                        if(U2D == 1 )
                        {
                               // *(table+(j*n+i)) ~ table[j,i]
                               *(table+(j*n+i)) = *(temp2++);            
                               ++Counter;
                        }          
            }
        If( Counter == n*n) 
               Break;
        U2D = U2D == 1 ? 0 : 1;
        if( seg2 == 0 )
               ++m;
}
 
آخرین ویرایش:

chemblog

عضو جدید
سلام کسی میتونه جواب ابن سوالا رو بده با زبان c می خوام
تابع برای محاسبه cosx با دنباله تا شش رقم اشار
تابع برای محاسبه میانگین 10 عضو بزرگتر یک ارایه
برنامه ای که دو ارایه مرتب شده صعودی را در ارایه دیگر بریزد جوری که ارایه سوم هم صعودی باشد
 

Similar threads

بالا