[Powered by Google Translate] [Yorumla] [Viktorina 0]
>> [Lexi Ross, Tommy MacWilliam, Lucas Freitas Cozef Ong] [Harvard Universiteti]
>> [Bu CS50 edir.] [CS50.TV]
>> Hey, hər kəs.
Bu çərşənbə cərəyan edən Quiz 0, üçün icmal sessiya xoş gəlmisiniz.
Biz bu axşam nə olacaq nə, mən, 3 digər TFS ilə Ben
və birlikdə biz indiyə qədər gedişində etdik nə nəzərdən keçmək olacaq.
Bu 100% hərtərəfli olacaq deyil, ancaq daha yaxşı bir fikir verəcəkdir
Əgər siz artıq aşağı nə və nə də çərşənbə əvvəl öyrənmək lazımdır.
Biz birlikdə olacaq kimi, sualları ilə əl qaldırmaq çekinmeyin
lakin biz də vaxt bir az olacaq unutmayın son
biz ümumi suallar etmək ehtiyat üçün bir neçə dəqiqə vasitəsilə almaq,
belə fikir ki, saxlamaq, və biz Həftə 0 başında olacaq.
>> Biz əvvəl [0 Review Quiz!] [Kateqoriya 0] [Lexi Ross] Lakin edək haqqında danışmaq ki,
Yarışmanın məntiqi.
>> [Logistics] [Viktorina mühazirə əvəzinə Çərşənbə 10/10 yer tutur]
>> [(Ətraflı məlumat üçün http://cdn.cs50.net/2012/fall/quizzes/0/about0.pdf baxın)] Bu Çərşənbə, Oktyabr 10 edir.
>> Yəni bu Çərşənbə, və burada bu URL getmək əgər,
da bir keçid CS50.net-orada 's erişilebilir it-
siz əsasında getmək harada məlumat görə bilərsiniz
Son adı və ya məktəb mənsubiyyətinə, habelə
bu barədə dəqiq viktorina almaq olacaq ki, əhatə və suallar növləri nə deyir.
Siz də bölməsində viktorina üçün gözden geçirmek üçün bir şans lazımdır ki, unutmayın,
sizin TFS, bəzi praktiki problemləri üzərində gedən edilməlidir
və siz hələ də viktorina üçün öyrənmək lazımdır görmək üçün yaxşı bir şans var.
Bits 'n' Bytes ilə başında edək.
Bir az bir 0 və ya 1-dir saxla
və byte o bit 8 toplusudur.
Burada bit bu kolleksiya baxaq.
Biz orada nə qədər çox bit həyata rəqəm lazımdır.
Biz saymaq harada onlardan 8, səkkiz 0 və ya 1 ədəd yalnız var.
Və ildən 8 bit, 1 byte ki, var
və in hexadecimal onu çevirmək bildirin.
Hexadecimal bazası 16, və çevirmək üçün olduqca asan
ikili bir sıra hexadecimal bir sıra ki, budur.
Biz bütün biz, 4 qrup baxmaq deyil
və biz müvafiq hexadecimal rəqəmli onları çevirmək.
Biz 0011, 4 sağ ən qrupu ilə başlayın.
Ki, birlikdə 3 edir ki, 1 və bir 2 olacaq.
Və sonra 4 digər blok baxaq.
1101. Bu bir 1, 4 və birini 8 olacaq.
Birlikdə D. edir, 13 olacaq
Və biz hexadecimal biz yalnız 9 0 getmirlər unutmayın lazımdır.
Biz, belə ki, 9 sonra, F vasitəsilə A 10 uyğun 0 getmək,
F 15 olduğu 11 B, Et Cetera.
Burada 13-a D
belə ki, biz bütün biz əslində decimal çevirmək
2 bir güc kimi hər mövqe tutun.
Bu 1, 2 biri sıfır 4s, sıfır 8, bir 16, Et Cetera var
və sizin baş hesablamaq üçün bir az sərt, lakin biz növbəti slayd getmək əgər
biz cavab görə bilərsiniz.
>> Əsasən biz sol geri sağ daxilində olacaq
və biz 2 müvafiq güc ilə hər rəqəmli vurulması edirik.
Və unutmayın hexadecimal biz əvvəlində 0x ilə bu nömrələri adlanır
biz bir decimal sayı ilə çaşdırmaq deyil.
Davam, bu, bir ASCII Cədvəl edir
və biz ASCII istifadə simvol ədədi dəyərlər xəritəsi edir.
Bu Kriptoqrafiya pset xatırlayıram, biz ASCII Cədvəl geniş istifadə
Kriptoqrafiya müxtəlif metodlardan istifadə üçün,
müxtəlif məktublar çevirmək üçün Sezar və Vigenère parol,
istifadəçi tərəfindən verilmiş əsas görə simli edir.
Nin ASCII riyaziyyat bir az nəzər salaq.
Q ki, karakter formasında, 'P' da + 1 Axtarıram,
və '5 '≠ 5 unutmayın.
Və necə məhz biz o 2 formaları arasında çevirmək istəyirsiniz?
Bu, həqiqətən çox çətin deyil.
5 almaq üçün biz '0 çıxmaq '
çünki '0 arasında 5 yerlər var "və '5 '.
Biz yalnız 0 əlavə digər yolla getmək üçün,
belə ki, müntəzəm hesab kimi növ var.
Yalnız bir şey ətrafında quotes var zaman bir xarakteri olduğunu unutmayın
və beləliklə ASCII masa bir dəyər uyğundur.
Daha ümumi kompüter mövzular hərəkət.
Biz proqramlaşdırma istifadə üçün alqoritm və necə öyrəndim
alqoritmlər həyata keçirmək.
Alqoritmlərin Bəzi nümunələri kimi həqiqətən sadə bir şey var
bir sıra hətta və ya tək olub yoxlanılması.
Bunun üçün biz 2 sayı mod və nəticə 0 olub olmadığını kontrol unutmayın.
Əgər varsa, o da var. Əgər, o, tək deyil.
Və həqiqətən, əsas alqoritm bir misal var.
>> Bir daha cəlb biri bir az ikili axtarış edir
olan biz nəzərdən iclasında sonra artıq getmək lazımdır.
Və proqramlaşdırma biz bir alqoritm görülməsi üçün istifadə müddəti
və kompüter kod dönüştürmek oxuya bilərsiniz.
Proqramlaşdırma 2 nümunələr, Not edir
olan biz Həftə 0 nə edir.
Biz əslində kodunu yazın yoxdur olsa da, həyata bir yol
nömrələri 1-10 çap olan bu alqoritm,
və burada biz C proqramlaşdırma dili eyni.
Bu yalnız müxtəlif dillərdə və ya sintaksis yazılı funksional ekvivalent edir.
Biz sonra, boolean ifadələrin haqqında öyrəndim
və boolean, doğru və ya yalan ya ki, bir dəyər
və burada oftentimes boolean ifadələrin
əgər (x ≤ 5), şərait daxilində getmək,
yaxşı, biz artıq bu şərtlə ki, doğru üçün qiymətləndirmək üçün gedir x = 5, belə müəyyən edilmişdir.
Doğru varsa, hər hansı kodu şəraiti altında
kompüter tərəfindən qiymətləndirilməlidir edir ki, cərgə çap olacaq
standart çıxış və uzunmüddətli vəziyyətinə
əgər hesabat mötərizə içərisində nə aiddir.
Bütün operatorların saxla.
| Biz çalışdığınız zaman birləşdirmək üçün 2 və ya daha çox şərait, | bu && və saxla
== Deyil = 2 şeyi bərabər olub yoxlamaq.
== Bir boolean operator isə = tapşırıq üçün olduğunu unutmayın.
≤, ≥ və sonra son 2 özünü izahlı edir.
Burada boolean məntiq ümumi icmalı.
Və boolean ifadələr, loops da vacibdir
olan biz artıq getmək lazımdır.
Biz isə, üçün, CS50 günə qədər loops haqqında 3 növ öyrəndim və zamanı yoxdur.
Və bilmək vacibdir ki, ən məqsədləri üçün isə
biz, həqiqətən, ümumiyyətlə loop hər hansı bir növü istifadə edə bilərsiniz
məqsədləri və ya ümumi nümunələri müəyyən növləri var
xüsusilə bu loops bir zəng proqramlaşdırma
onu ən səmərəli və ya şəkildə kod üçün zərif.
Nin bu loops hər tez-tez istifadə etmək üçün çalışır nə üzərində getmək edək.
>> Bir loop üçün biz ümumiyyətlə artıq biz təkrarlamaq istəyirəm neçə dəfə bilirik.
Yəni şəraitində qoymaq budur.
Üçün i = 0, i <10, misal üçün.
Biz artıq biz bir 10 dəfə etmək istəyirəm ki, bilirik.
İndi isə loop üçün, ümumiyyətlə, biz mütləq deyil
biz loop almaq istəyirsinizsə neçə dəfə bilirik.
Amma biz onu istəyirəm ki, vəziyyət bir növ bilmirəm
həmişə doğru və ya həmişə saxta ola bilər.
Məsələn, isə müəyyən edilir.
Gəlin boolean dəyişən olduğunu deyirlər.
Ki, doğru olsa biz kodu qiymətləndirmək istəyirəm,
bir az daha genişlənən, loop üçün daha ümumi bir az bit,
lakin loop üçün heç də bir müddət loop çevrilmişdir bilər.
Nəhayət, nə isə dərhal anlamaq üçün trickiest ola bilər loops,
biz ilk kodu qiymətləndirmək üçün istədiyiniz zaman tez-tez istifadə olunur
ilk əvvəl biz vəziyyəti yoxlamaq.
Bir üçün ümumi istifadə halda nə isə loop
Kullanıcı daxil olmaq üçün istədiyiniz zaman, və siz istifadəçi soruşmaq istəyirəm bilirik
giriş üçün ən azı bir dəfə, lakin onlar yaxşı giriş vermir əgər dərhal
Əgər onlar sizə yaxşı giriş vermək qədər onlara xahiş saxlamaq istəyirik.
Isə loop bir ən ümumi istifadə, bunu var
və-nin bu loops faktiki strukturu baxaq.
Onlar adətən həmişə bu nümunələri riayət edirlər.
>> Daxili üçün loop siz 3 komponentləri vardır:
başlatma, adətən bir şey kimi int i əks olduğu = 0,
biz bu vəziyyət hələ malikdir kimi uzun kimi loop üçün run demək istədiyiniz vəziyyəti,
biz arttırmayı necə olan i nəhayət sonra <10 və yeniləmə kimi
loop hər nöqtədə counter dəyişən.
Orada görmək üçün ümumi şey, yalnız i + + edir
1-hər zaman i arttırmayı deməkdir.
Siz həmçinin, i + = 2 kimi bir şey edə
hansı i sizə loop keçmək hər dəfə 2 əlavə deməkdir.
Və sonra bunu yalnız həqiqətən loop hissəsi kimi çalışır ki, hər hansı bir kodu aiddir.
Və bir müddət loop üçün, bu dəfə biz, həqiqətən, loop kənarda başlatma var
belə misal üçün, biz yalnız təsvir loop eyni tipli etmək çalışdığınız demək bildirin.
Biz int i = 0 loop başlayır əvvəl deyərdim.
I <10 bu isə sonra biz, demək olar
əvvəl kodu belə eyni məhəllə,
və bu zaman məsələn kodu yeniləmə hissəsi, i + +,
əslində loop daxilində gedir.
Və nəhayət, bir, bu isə loop oxşar isə etmək,
lakin biz kodu dəfə qiymətləndirmək unutmayın var
vəziyyəti yoxlanılır əvvəl, belə ki, daha çox əhəmiyyət kəsb edir
siz alt üst üçün baxmaq. əgər
Bir bile isə vəziyyət baxmaq əvvəl loop kodu qiymətləndirir isə etmək,
bir müddət loop isə, ilk yoxlayır.
Hesabatları və dəyişənlər.
Yeni bir dəyişən yaratmaq istədiyiniz zaman biz ilk başlamaq istəyirəm.
>> Məsələn, int bar, dəyişən bar initializes
lakin indi bar dəyəri nə ki, bir dəyər vermir?
Biz bilmirik.
Bu, əvvəllər orada yaddaşında saxlanılır ki, bəzi zibil dəyər ola bilər
və biz dəyişən istifadə etmək istəmirik
biz, həqiqətən, bir dəyər verir, qədər
biz burada bəyan edir.
Sonra aşağıdakı 42 olmaq başlamaq.
İndi, əlbəttə, biz bu xətt üzrə int bar = 42 edilə bilər bilirik.
Lakin, davam edir ki, bir çox addımlar təmizləmək üçün
bəyannamə və başlatma burada ayrı-ayrı olur.
Bu, növbəti bir, int baz = bar + 1 bir addım olur, və
bu kodu blokunun sonunda aşağıda bu bəyanat ki, əlavələr baz,
biz baz dəyəri çap idi əgər 44 olardı
biz bəyan və 1> bar olmaq üçün başlamaq çünki
və sonra biz bir daha arttırmayı də + +.
Biz bu olduqca qısa keçdi, ancaq bir ümumi var yaxşı
mövzuları və hadisələri nə dərk.
Biz əsasən, Not bu idi
belə ki, kodu birdən ardıcıllığı kimi mövzuları hesab edə bilər
eyni zamanda çalışır.
Aktuallığı, bu, yəqin ki, eyni zamanda çalışan deyil
lakin növ abstractly ki şəkildə hesab edə bilər.
>> Not Məsələn, biz çox sprites idi.
Bu eyni zamanda müxtəlif kodu icra edilə bilər.
Başqa bir şey söylədiyini isə bir gəzinti edilə bilər
ekran müxtəlif hissəsi.
Hadisələr məntiq həyata ayıran başqa bir yolu
kodunuzu müxtəlif elementləri arasında,
və Scratch biz Yayım istifadə hadisələr simülasyonu edə
Mən əldə zaman və ki, mən eşitmək deyil, həqiqətən var
lakin mahiyyətcə informasiya ötürmək üçün bir yol var
bir sprite başqa.
Məsələn, siz, oyun üzərində ötürmək bilərsiniz
və başqa sprite üzərində oyun qəbul edərkən,
o müəyyən bir şəkildə cavab verir.
Bu proqramlaşdırma anlamaq üçün əhəmiyyətli model deyil.
Yalnız əsas Həftə 0 artıq getmək, nə biz bu günə qədər üzərində getdi sonra,
bu sadə C proqram baxaq.
Mətni burada kiçik bir az ola bilər, amma artıq həqiqətən sürətli getmək lazımdır.
Biz üst cs50.h və stdio.h 2 mövzu faylları o cümlədən edirik.
Biz sonra 100 olmaq üçün daimi adlı limit müəyyən edirik.
Biz sonra bizim əsas funksiyası həyata edirik.
Biz burada command line arguments istifadə etməyin ildən biz etibarsız qoymaq lazımdır
əsas üçün arqumentlər kimi.
Biz əsas yuxarıda int görürük. Qaytarılması növü var ki, buradan altındakı 0 qaytarın.
Və biz int almaq CS50 kitabxana funksiyası istifadə etdiyiniz
giriş üçün istifadəçi xahiş və bu dəyişən x onu saxlamaq üçün,
biz yuxarıda x elan və biz x = GetInt ilə başlamaq.
>> Biz istifadəçi bizə yaxşı giriş verdi kontrol edin.
Bu ≥ LIMIT varsa biz 1-bir səhv baş kodu qayıtmaq və bir səhv baş beledir çap etmək istəyirəm.
Və nəhayət, istifadəçi bizə verdiyi əgər yaxşı giriş
biz sayı vaziyeti və nəticə çap olacaq.
Sadəcə əmin olun ki, o hit ev bütün
Burada kodu müxtəlif hissələrinin yazıları bilərsiniz.
Mən daimi, mövzu faylları qeyd edib.
Oh, int x. Yerli dəyişən var unutmayın ki, əmin olun.
Biz haqqında danışmaq lazımdır ki, qlobal dəyişən bu Təzadlar
bir az sonra nəzərdən iclasında,
və biz printf kitabxana funksiyası zəng
biz stdio.h header fayl daxil deyil əgər
biz printf zəng edə bilməz.
Mən burada kəsilmiş oldu ki arrow% d işarə edir
printf bir format string olan.
Bu sayı,% d bu dəyişən çap edir.
Və Həftə 0 deyil.
İndi Lucas davam edir.
Hey, uşaqlar. My name Lucas edir.
Mən, universitet, Mather ən yaxşı ev bir sophomore deyiləm
və mən həftə 1 və 2,1 haqqında bir az danışmaq üçün gedirəm.
[1 Hafta və 2.1!] [Lucas Freitas]
Biz sıfırdan C üçün kodu tərcümə başladı Lexi deyən kimi
biz qeyd edir ki, hər biri yalnız bilər ki,
Sizin kodu yazmaq və artıq yaşıl bayraq istifadə edərək axır.
Əslində, siz C proqram etmək üçün bəzi addımlar istifadə etmək
bir faylı olur.
Əsasən hansı bir proqram yazı etdiyiniz zaman siz ki,
Əgər bir compiler anlamaq olar ki, bir dil sizin fikir tərcümə
C bir proqram yazıyoruz belə zaman
nə edirik həqiqətən, sizin compiler anlamaq üçün gedir ki, bir şey yazır,
və sonra compiler kod tərcümə edir
kompüter anlamaq ki, bir şey daxil.
>> Və şey, kompüter həqiqətən çox lal edir.
Sizin kompüter yalnız 0s və 1s anlaya
belə əslində ilk kompüter insanlar adətən proqramlaşdırılmış
artıq 0s və 1s, lakin istifadə edərək, Allah təşəkkür edirəm.
Biz 0s və 1s üçün ardıcıllığı yadda yoxdur
loop və ya bir müddət loop və s. üçün üçün.
Biz bir compiler var görə.
Nə compiler edir ki, əsasən C kodu tərcümə edir
bizim halda, kompüter anlamaq bir dil,
olan obyekt kodunu və biz istifadə etdiyiniz compiler edir
zınqıltı adlanır, belə ki, bu, həqiqətən, cingilti üçün rəmzidir.
Siz proqram zaman, siz 2 şeyə var.
Birincisi, sizin proqram tərtib etmək, və sonra sizin proqram run olacaq.
Bunu variantları bir çox proqram tərtib etmək.
Ilk bir cingilti program.c etmək
olan proqram, proqramın adıdır.
Bu halda onlar yalnız deyərək edirik görürük "Hey, mənim proqram tərtib edir."
Siz və ya bir şey "Mən proqramı üçün bu adı mənə" deyərək deyilik.
>> İkinci seçim proqram bir ad verir.
Sonra cingilti-o və siz istədiyiniz adı demək olar
yürütülebilir fayl kimi və sonra program.c adına edilir.
Və həmçinin proqram etmək üçün, və ilk 2 hallarda görmək olar
Mən. C qoymaq və üçüncü mən yalnız proqramları var?
Bəli, həqiqətən qoymaq lazımdır. C siz istifadə zaman.
Əks halda compiler həqiqətən sizə fəğan edir.
Uşaqlar xatırlayıram varsa da, mən bilmirəm
lakin biz də istifadə-lcs50 ya-lm dəfə çox.
Bu keçid adlanır.
Bu, sadəcə, siz orada bu kitabxana istifadə edəcək compiler deyir
siz cs50.h istifadə etmək istəyirsinizsə əgər həqiqətən yazın var
zınqıltı program.c-lcs50.
Siz bunu deyil varsa, compiler bilmək niyyətində deyil
siz cs50.h. bu funksiyaları istifadə etdiyiniz
Və siz 2 variantları proqram çalıştırmak üçün istədiyiniz zaman.
Siz cingilti program.c Əgər sizin proqram üçün bir ad vermədi.
Siz. / A.out istifadə edərək, run var.
A.out siz bir ad vermək yoxsa cingilti proqram verir ki, standart ad.
Sizin proqram üçün bir ad verdi Əks təqdirdə siz. / Proqram nə olacaq,
siz proqram adı etmək Əgər, həmçinin bir proqram olacaq ki,
artıq c fayl eyni adı proqramlaşdırılmış edir.
Sonra data növləri və data danışdı.
>> Əsasən data növləri istifadə etdikləri kiçik qutu eyni şey
dəyərlər saxlamaq üçün, belə ki, data növləri yalnız Pokémons kimi əslində.
Onlar bütün ölçü və növ olur.
Ki, analogiya anlamlı əgər mən bilmirəm.
Bu data ölçüsü əslində maşın memarlıq asılıdır.
Burada göstərmək gidiyorum olan məlumatların ölçüləri
bizim cihaz halda olan bir 32-bit maşın üçün faktiki
lakin həqiqətən, sizin Mac və ya Windows də kodlaşdırma əgər
yəqin ki, bir 64-bit maşın var olacaq
Mən gedirəm ki, data ölçüləri burada göstərmək unutmayın
32-bit maşın üçün.
Gördük ki, birinci, bir int idi
olan olduqca sadə deyil.
Siz tam saxlamaq üçün int istifadə edin.
Biz, həmçinin, karakter ki, char gördüm.
Bir məktub və ya bir az simvol istifadə etmək istəyirsinizsə, siz yəqin ki, char istifadə olacaq.
A char Lexi bildirib kimi 8 bit, deməkdir 1 byte var.
Əsasən biz 256 olan bir ASCII Cədvəl var
0s və 1s mümkün birləşməsi,
və sonra bir char yazın zaman tərcümə olacaq
karakter giriş siz Lexi kimi ASCII masa var ki, bir sıra söylədi.
Biz həmçinin decimal nömrələri saxlamaq üçün istifadə edən float var.
Siz 3.14 seçmək istəyirsinizsə, misal üçün, bir float istifadə etmək olacaq
və ya daha dəqiq bir cüt.
A float 4 bayt var.
A ikiqat 8 bayt var, belə ki, yalnız fərq dəqiq deyil.
Biz də tam ədədlər üçün istifadə olunur ki, uzun var
və bir int və uzun eyni ölçüdə bir 32-bit maşın üçün bilərsiniz
belə ki, həqiqətən bir 32-bit maşın uzun istifadə etmək məntiqli deyil.
>> Mac və 64-bit maşın kullanıyorsanız Lakin, həqiqətən, uzun, ölçüsü 8 malikdir
belə ki, həqiqətən memarlıq asılıdır.
32-bit maşın üçün həqiqətən uzun istifadə etmək məntiqli deyil.
Və sonra uzun uzun, digər tərəfdən, 8 bayt var
bir daha tam etmək istəyirsinizsə buna çox yaxşıdır.
Və, nəhayət, biz, həqiqətən, char * olan, simli var
bir char bir göstəricisidir.
Bu simli ölçüsü kimi olacaq edirəm ki, çox asandır
siz var simvolların sayı
lakin əslində char * özü
4 bayt olan char, bir pointer də ölçüsü var.
Bir char * həcmi 4 bayt edir.
Bir kiçik söz və ya bir məktub və ya bir şey varsa, fərqi yoxdur.
O, 4 bayt olacaq.
Biz həmçinin tökmə haqqında bir az öyrəndim
varsa siz görə bilərsiniz kimi, misal üçün, proqram deyir ki,
int x = 3 və sonra printf ("% d" x / 2)
uşaqlar bu ekranda çap neler bilirik?
>> Biri? >> [Tələbələr] 2.
1. >> 1, evet.
3/2 nə zaman o, 1.5 olacaq
biz tam istifadə etdiyiniz ildən lakin decimal hissəsi ignore olacaq
və 1 var olacaq.
Siz ki, misal üçün, nə baş istəmirsinizsə
bir float elan olunur y = x.
Sonra 3 olmaq üçün istifadə ki, x indi y ildə 3.000 olacaq.
Və sonra y / 2 çap edə bilərsiniz.
Əslində, mən bir 2 olmalıdır. orada.
Bu, 3.00/2.00 nə olacaq
və 1,5 almaq olacaq.
Və biz yalnız decimal hissəsində 2 ədəd decimal soruşmaq üçün bu .2 f var.
Siz .3 f varsa faktiki 1.500 var olacaq.
O varsa 2 1.50 olacaq.
Biz də burada bu vəziyyət var.
Siz float Əgər x = 3.14 və sonra printf x
siz 3.14 almaq olacaq.
Və əgər x x = olan int,
bir int kimi x müalicə deməkdir və indi x çap hansı
siz 3.00 malik olacaq.
Bu mənada edirmi?
Ilk bir tam kimi x müalicə edirik Çünki, belə ki, siz decimal hissəsi məhəl edirik
və sonra x çap edirik.
Və nəhayət, siz də bunu edə bilərsiniz
int x = 65, və sonra bir char c = x bəyan
siz c çap əgər, sonra həqiqətən almaq olacaq
A, burada belə əsasən nə edirik
, karakter daxil tam tərcümə olunur
yalnız kimi ASCII Cədvəl edir.
Biz həmçinin riyaziyyat operatorları danışdı.
Onların çoxu olduqca sadə, belə +, -, *, /,
və həmçinin 2 ədəd bölgüsü qalan olan mod haqqında danışdı.
Məsələn, 10% 3, varsa,
3 10 bölmək deməkdir və qalan nədir?
Bu 1 olacaq, belə ki, proqramları bir çox üçün həqiqətən çox faydalıdır.
Vigenère və Caesar üçün Mən sizə uşaqlar bütün mod istifadə olduqca əminəm.
* Və / birləşən zaman riyaziyyat operatorlar haqqında, çox ehtiyatlı olun.
>> Əgər məsələn, (3/2) * 2 nə almaq üçün gedir?
[Tələbələr] 2.
Bəli, 2, 3/2, çünki 1.5 olacaq,
ancaq 2 integers arasında əməliyyatlar edirik bəri
həqiqətən, yalnız 1-hesab olacaq
və sonra 1 * 2 2 olacaq, belə ki, çox, çox ehtiyatlı olun
integers ilə hesab edərkən, çünki
siz bu halda ki, 2 = 3 əldə edə bilər.
Həmçinin üstün çox ehtiyatlı olun.
Siz adətən siz yapýyorsun nə əmin olmaq parantez istifadə etməlidir.
Bəzi faydalı qısa yolları, əlbəttə, bir i + + və ya i + = 1
və ya istifadə + =.
Bu i = i + 1 etməklə eyni şeydir.
Siz həmçinin i edə bilərsiniz - və ya i - = 1,
ki, i = i -1 eyni şey
bir şey uşaqlar ən azı, loops üçün bir çox istifadə edir.
Həmçinin, * üçün, * = və əgər, misal üçün istifadə əgər,
i * = 2 i = i * 2 deyərək eyni şey,
və şöbə üçün eyni şey.
Siz i / = 2 Əgər bu i = i / 2 eyni şey.
>> İndi funksiyaları haqqında.
Siz uşaqlar funksiyaları kodu saxlamaq üçün çox yaxşı bir strategiya olduğu öyrənildi
Əgər proqramlaşdırma etdiyiniz zaman, belə ki, həmin tapşırıq yerinə istəyirsinizsə
kodu təkrar, yəqin ki, bir funksiyasından istifadə etmək istəyirəm
yalnız belə yenə üzərində kodu seçin və yapışdırıb yoxdur.
Əslində, əsas funksiyası, və mən bir funksiyası format olanda
ki, olduqca aydın görmək olacaq.
Biz, həmçinin, bəzi kitabxana funksiyalarının istifadə
Məsələn, printf ki, CS50 kitabxana olan GetIn,
və toupper kimi digər funksiyaları.
Bu funksiyaları bütün həqiqətən, digər kitabxanalarda həyata keçirilir
və siz proqram əvvəlində o hörük faylları qoymaq zaman
Siz mənə funksiyaları üçün kodu verin bilər deyərək edirik
mən özüm onların həyata keçirilməsi üçün yoxdur?
Və siz də proqramlaşdırma başlamaq zaman, öz funksiyaları yaza bilərsiniz
siz kitabxana sizə lazım olan bütün funksiyaları yoxdur bilirik.
Son pset üçün, misal üçün, biz, scramble çəkmək və axtarış yazdı
və funksiyaları yazmaq etmək üçün çox vacibdir
onlar faydalıdır və biz onları proqramlaşdırma bütün vaxt istifadə, çünki,
və kodu bir çox saxlayır.
Bir funksiyasının format bu biridir.
Biz əvvəlində qayıtması növü var. Qaytarılması növü nədir?
Bu funksiya geri gedir zaman yalnız var.
Siz faktöryel məsələn bir funksiyası, varsa
ki, bir tam bir faktöryel hesablamaq gedir
Yəqin ki, bu da bir tam geri olacaq.
Sonra geri növü int olacaq.
Printf həqiqətən bir dönüş növü boşluq var
bir şey qaytarılması deyilik, çünki.
Siz yalnız ekran şeyi çap edirik
və sonra funksiyanı çıxdıqda.
Sonra, siz seçə bilərsiniz ki, funksiyası adı var.
Xyz kimi bir ad seçin yoxdur kimi Siz, bir az ağlabatan olmalıdır
və ya x2f kimi.
Anlamlı bir ad etmək üçün cəhd edin.
>> Məsələn, faktöryel varsa, faktöryel deyirlər.
Bir şey cəlb edir bir funksiya varsa, bu çəkmək adı.
Və sonra biz də dəlillər adlanan parametrləri, var,
Sizin funksiyası ehtiyacı resursları kimi olan var
kodunuzu onun vəzifəsi yerinə yetirmək.
Bir sıra faktöryel hesablamaq istəyirsinizsə
yəqin ki, bir faktöryel hesablanması üçün bir sıra lazımdır.
Siz olacaq ki, arqumentlərdən biri sayını özü edir.
Və sonra bir şey və sonunda dəyəri geri olacaq
bir boşluq funksiyası var halda.
Nin bir örnek görmek edək.
Mən integers bir sıra bütün nömrələri yekunlaşdırır bir funksiya yazmaq istəyirsinizsə
ilk növbədə, qaytarılması növü int olacaq
Mən integers bir sıra var.
Və sonra mən sumArray kimi funksiyası adı gedirəm
sonra, int nums üçün array özü almaq olacaq
və sonra mən vurmaq üçün nə qədər nömrələri bilirik belə serialın uzunluğu.
Sonra 0 misal üçün dəyişən deyilən məbləğ, başlamaq üçün
Mən array bir element görmək hər dəfə cəmi əlavə olunmalıdır, mən loop üçün etdi.
Lexi dediyi kimi, siz int i = 0, i <uzunluğu i + +.
Və array hər element üçün mən məbləğ + = nums [i] etdi
və sonra məbləği geri, belə ki, çox sadə, və kodu bir çox saxlayır
Bu funksiya dəfə çox istifadə edirsinizsə.
Sonra şərait nəzər etdi.
Biz başqa, əgər, və başqa varsa.
Arasında fərq nə edək.
Bu 2 kodları bir göz atın. Onların arasında fərq nədir?
Ilk bir əsasən etmişdir kodları siz demək istəyirəm
, və ya 0 - bir sıra +, əgər.
Ilk bir o> 0 varsa onda müsbət var deyir.
O 0 = varsa onda 0, ve <0 varsa onda mənfi var.
>> Başqa, əgər başqa, əgər biri edir.
Arasında fərq bu həqiqətən gedir ki,
yoxlamaq əgər> 0, <0 və ya = 0 üç dəfə,
siz 2 saylı varsa, məsələn, buraya gəlmişəm və demək olacaq
bu yes demək olacaq (x> 0) əgər, və mən müsbət çap.
Amma> 0 ki, bilirik və 0 və ya <0 olacaq deyil, baxmayaraq
Mən hələ 0 etməyə gedirəm, o, <0 olur
Mən, həqiqətən, Mən olmadığını ifs daxilində gedirəm
Mən artıq bu şərtlərdən hər hansı təmin etmək niyyətində deyil ki, bilirik, çünki.
Mən bəyanat başqa, əgər başqa, əgər istifadə edə bilərsiniz.
X = 0 I müsbət çap əgər əsasən deyir.
O deyil, mən də bu test gedirəm.
2 varsa mən bunu gidiyorum deyil.
Mən x = 2 olsa əsasən deyərdim
(x> 0) halda, bəli, bu çap.
İndi o> 0 ki, bilirik ki, bu, ilk əgər razı
Mən hətta bu kodu run niyyətində deyiləm.
Bu istifadə əgər kodu 3 dəfə daha sürətli, həqiqətən, daha sürətli uzanır.
Biz həmçinin və ya öyrənildi.
Mən Lexi artıq onlara danışdı çünki bu yolu getmək niyyətində deyiləm.
| Operator | Bu, yalnız && və var.
>> Mən demək lazımdır yalnız 3 şərait zaman ehtiyatlı edir.
Çox confusing çünki bir vəziyyət zaman mötərizə istifadə edin
və başqa bir və ya başqa biri.
Yalnız şərait mənada əmin olmaq parantez istifadə edin
Bu halda, misal üçün, siz təsəvvür edə bilərsiniz ki
Birinci vəziyyəti və bir və ya bir başqa ola bilər
və ya 2 birləşdirilmiş şərtləri və
və ya üçüncü, belə ki, yalnız ehtiyatlı olun.
Və, nəhayət, biz açarları haqqında danışdıq.
Bir dəyişən zaman bir keçid çox faydalıdır.
Gəlin siz n kimi bir dəyişən var ki,
ki, 0, 1, 2 və ya ola bilər, və bu halda hər bir
bir tapşırıq yerinə yetirmək üçün olacaq.
Siz dəyişən keçid demək olar ki, bu onu göstərir ki,
dəyəri, sonra value1 kimi mən bunu gidiyorum edir
və sonra qırmaq, hansı mən digər hallarda hər hansı baxmaq gitmiyorum deməkdir
biz artıq bu halda razı çünki
və sonra value2 və s və mən də bir-u mənim keçid ola bilər.
Mən olduğu hallarda hər hansı qane etmir əgər o deməkdir ki,
Mən başqa bir şey gedirəm, lakin isteğe var.
Mənim üçün bütün var. İndi Tommy var olsun.
Bütün hüquqlar, bu həftə 3-ish olacaq.
Bu, biz Et Cetera kripto, əhatə dairəsi, diziler, əhatə olacaq bəzi mövzuları var.
Kripto yalnız tez söz. Biz bu ev çəkic etmək fikrində deyilik.
>> Biz pset 2-də bu, ancaq viktorina üçün siz fərq bilirik əmin olun
olan Sezar parol və Vigenère parol arasında,
o ciphers iş həm və nə şifrelemek kimi necə
o 2 ciphers istifadə və decrypt mətn.
Unutmayın, Sezar parol sadəcə, həmin məbləğ hər bir xarakteri qaytarır
əlifba hərflərin sayı siz mod əmin edir.
Və Vigenère parol, digər tərəfdən, hər bir xarakteri qaytarır
müxtəlif məbləği, belə ki, daha çox dedi-dən çox
3 Vigenère hər xarakter qayıdacaqdır hər bir xarakter dönüşümlü
bir söz asılı olaraq müxtəlif məbləği
söz hər bir məktub bəzi fərqli məbləğ təmsil yerləşir
tərəfindən aydın mətn dönüşümlü.
Dəyişən həcmi barədə ilk müzakirəsi edək.
Dəyişənlərin 2 müxtəlif növü var.
Biz yerli dəyişənlər var və bu müəyyən edir
kənarda əsas və ya hər hansı funksiyası və ya blok kənarda,
və bu proqram hər hansı əlçatan olacaq.
Bir funksiyası var və funksiyası isə loop deyil
böyük qlobal dəyişən hər yerdə erişilebilir.
Yerli dəyişən, digər tərəfdən, bu, müəyyən yer scoped edir.
>> Burada bir funksiyası varsa, məsələn, biz bu funksiya g var
və g daxilində y çağırıb burada bir dəyişən var
və bu yerli dəyişən deməkdir.
Bu dəyişən y adlanır baxmayaraq,
və bu dəyişən bu 2 funksiyaları Y adlanır
bir-birinin yerli dəyişənlər nə heç bir fikrim yoxdur.
Digər tərəfdən, qədər burada biz int x = 5 demək
və bu heç bir funksiyası kənarda deyil.
Bu əsas kənarda deyil, bu qlobal dəyişir.
Və ya x + + - Mən x deyəndə ki, bu 2 funksiyaları ki, daxili deməkdir
Mən bu y və bu y müxtəlif dəyişənlər var vasitəsi eyni x daxil oldum.
Qlobal dəyişən və yerli dəyişən arasında fərq var.
Bildiyimə dizayn narahatdır kimi, bəzən yəqin ki, daha yaxşı bir fikirdir
siz bəlkə bilər zaman dəyişənlərin yerli saxlamaq
olan bəri qlobal dəyişənlər bir dəstə həqiqətən confusing əldə edə bilərsiniz.
Siz funksiyaları bir dəstə varsa, bütün eyni şey dəyişmək
bu funksiya təsadüfən bu qlobal düzəliş nə əgər siz unutmaq bilər
və bu digər funksiyası, bu barədə bilmir
daha çox kodunu və bu olduqca şaşırtıcı əldə edir.
Siz bəlkə bilər zaman dəyişənlərin yerli saxlanması
yalnız yaxşı dizayn edir.
Diziler, unutmayın, sadəcə eyni tipli elementlərin siyahıları var.
CI daxilində hello, 1, 2.0 kimi bir siyahı ola bilməz.
Biz yalnız bunu edə bilərsiniz.
>> Biz C bir sıra bəyan zaman bütün öğeleri eyni tipli olmalıdır.
Burada 3 integers bir sıra var.
Burada serialın uzunluğu var, amma yalnız bu sintaksis onu bəyan edirəm əgər
Mən bütün öğeleri mən texniki bu 3 ehtiyac yoxdur hansı daxil yerləşir.
Bu compiler serialın olmalıdır necə böyük anlamaq üçün kifayət qədər ağıllı deyil.
İndi bir sıra dəyəri almaq və ya qurmaq üçün istədiyiniz zaman
bu buna sintaksis edir.
, Xatırlayıram, çünki bu, həqiqətən, serialın ikinci element dəyişdirmək edəcək,
sayı 1 deyil, 0 başlayır.
Hesab edirəm ki, dəyəri oxumaq istəyirsinizsə mən kimi bir şey demək olar int x = array [1].
Hesab edirəm ki, dəyəri müəyyən etmək istəyirsinizsə və ya, kimi, mən burada yapýyorum
Mən array [1] demək olar = 4.
Onların indeksi elementləri daxil o zaman
və ya öz mövqeyini və ya onlar array var,
və siyahı 0 başlayır.
Biz, həmçinin, seriallarda və seriallarda ola bilər
və bu çox ölçülü array adlanır.
Biz çox ölçülü array zaman
biz satır ve sütun kimi bir şey ola bilər o deməkdir ki,
və bu görselleştirilmesi və ya bu barədə düşüncə yalnız bir yoludur.
Mən çox ölçülü array zaman ki ehtiyacı başlamaq gedirəm deməkdir
çox 1 index çünki bir grid var əgər
yalnız siz olduğunuz sıra deyərək bizə bir sıra deyil.
Bu, həqiqətən, yalnız bizə nömrələri siyahısını təqdim edəcək.
Gəlin burada bu array var deyirlər.
Mən grid deyilən bir sıra var və mən, bu 2 satır və 3 sütun dedi alıram
və bu o görselleştirilmesi bir yoldur.
Mən [1] olan element almaq istəyirəm deyəndə [2]
bu satır ilk və sonra sütunlar, çünki o deməkdir ki,
Mən 1 dedi ildən 1 Satırı atlamak üçün gedirəm.
>> Sonra sütun 2 buraya gəlib gedirəm, mən dəyəri 6 almaq üçün gedirəm.
Mənada etmək?
Multi-ölçülü Diziler, unutmayın, texniki serialların yalnız bir sıra var.
Biz seriallarda və seriallarda və seriallarda ola bilər.
Biz davam edə bilər, lakin düşünmək həqiqətən bir yolu
Bu müəyyən edilir və neler necə görüntüləmək üçün
bu kimi bir grid.
Biz funksiyaları serialların keçmək zaman, onlar hərəkət olacaq
biz funksiyaları müntəzəm dəyişənlərin keçmək zaman çox fərqli bir az
bir int və ya float keçən kimi.
Biz int və ya char və ya digər məlumatları heç bir növ keçmək zaman
biz yalnız funksiyası düzəliş əgər nəzər etdi
dəyişiklik qədər təbliğ etmək niyyətində deyil ki, dəyişən dəyəri
zəng funksiyası.
Bir sıra ilə, digər tərəfdən, bu baş verəcək.
Mən bəzi funksiyası bir sıra keçmək və funksiyası, elementləri bəzi dəyişikliklər varsa,
Mən bunu adlanan funksiya qədər geri gələndə
mənim array indi müxtəlif olacaq və üçün lüğət edir
biz sonra görəcəksiniz kimi seriallarda, arayış qəbul edilir.
Bu necə göstəricilərinə iş olduğu bu əsas məlumat növləri, bağlı
digər tərəfdən, dəyəri qəbul olunur.
>> Biz dəyişən surəti edilməsi və sonra surəti keçən kimi hesab edə bilər.
Bu dəyişən ilə nə əhəmiyyətli deyil.
Zəng funksiyası dəyişdirilə ki, xəbərdar olmayacaq.
Diziler bununla bağlı müxtəlif yalnız bir az var.
Biz yalnız gördüm Məsələn, əsas sadəcə bir funksiyası
ki, 2 mübahisələrdə bilər.
Əsas funksiyası ilk dəlil, argc, ya dəlilləri sayı
və ikinci arqument argv adlanır
və o bu arqumentləri faktiki dəyərlərdir.
Gəlin, mən this.c adlı proqram var demək
və mən bu etmək demək, mən command line bu çalıştırmak üçün gedirəm.
İndi proqram bəzi dəlilləri keçmək, bu deyilən
Mən bir şey kimi demək olar. / Bu cs 50.
Bu terminal hər gün David bunu təsəvvür edir.
Proqram Amma indi əsas funksiyası daxilində
bu dəyərləri var, belə argc 4.
Həqiqətən biz yalnız cs 50 keçən edirik, çünki bir az çaşdırıcı ola bilər.
Bu yalnız 3 var.
Amma unutmayın ki argv ilk element və ya ilk dəlil
funksiyası özü adı.
Belə ki, biz burada 4 şeylər var deməkdir
və ilk element. / Bu olacaq.
Bu simli kimi təmsil olunacaq.
Sonra qalan elementləri biz proqramı adına çap edir.
So kənara yalnız kimi, biz yəqin ki, pset 2 gördüm kimi,
simli 50 tam 50 ≠ ki, xatırlayıram.
Beləliklə, biz kimi bir şey deyə bilmərəm "int x = argv 3.
>> Bu simli Ona görə ki, yalnız hissi etmək niyyətində deyil və bu, bir tamsayı edir.
Siz 2 arasında çevirmək istəyirəm əgər, unutmayın, biz olacaq
atoi adlanan bu sehrli funksiyası var.
Bu simli edir və simli daxilində təmsil tam qaytarır.
Belə ki, viktorina etmək üçün asan bir səhv var
bu avtomatik olaraq düzgün növü olacaq düşünür.
Amma yalnız bu həmişə strings olacaq bilirik ki,
simli yalnız bir tam və ya bir simvol və ya bir float şey belə.
Belə ki, indi vaxt çalışan haqqında danışmaq edək.
Biz bütün bu crazy şeyi ki, bütün bu alqoritmlərin zaman,
ki, sual həqiqətən faydalı olur "onlar nə qədər alır?"
Biz asimptotik notation deyilən bir şey ilə təmsil edir.
Yaxşı, biz bizim alqoritm vermək deyək - bu o deməkdir ki,
həqiqətən, həqiqətən, həqiqətən, böyük girdi.
Biz sual soruşmaq istəyirəm, "nə qədər onu gedir?
Neçə addım run üçün alqoritm keçiriləcək
giriş həcmi funksiyası kimi? "
Beləliklə, biz İş Vaxtı təsvir edə bilərsiniz ilk yol böyük O. ilə
Bu bizim ən pis halda davam zamanı.
Biz array sort istəyirəm əgər, və biz alqoritm bir sıra vermək
it artan qaydada olmalıdır ki, azalan deyil
ki, ən pis halda olacaq.
Bu, bizim alqoritmi olacaq zaman maksimum uzunluğu bağlı bizim üst edir.
Digər tərəfdən, bu Ω ən yaxşı halda süresi təsvir edir.
Biz bir çeşidlənməsi alqoritm üçün artıq sıralanır array vermək əgər,
bu düzmək üçün nə qədər olacaq?
Bu, o zaman running bir aşağı bound təsvir edir.
Belə ki, burada bəzi ümumi running dəfə təsvir yalnız bir söz var.
Bu sıralama artan sıralama var.
Biz sürətli çalışan zaman sabit adlanır.
>> Bizim alqoritm vermək neçə elementləri olursa olsun, o deməkdir ki,
bizim array bu çeşidlənməsi, nə qədər böyük olursa olsun
və ya biz array etdiyini etdiyiniz nə etdiyini həmişə eyni miqdarda olacaq.
Belə ki, yalnız bir sabit olan, 1 ilə təmsil edə bilər.
Biz də logarithmic run zaman baxdı.
Belə ikili axtarış kimi bir şey, logarithmic edir
biz yarım hər vaxt problem kəsmək yerləşir
və sonra şeylər orada ali almaq.
Və heç bir faktöryel alqoritm bir O yazılı edirsinizsə,
yəqin ki, sizin gün iş kimi hesab edilməlidir.
Yayınlanmasını dəfə müqayisə zaman nəzərə bunlar saxlamaq vacibdir.
Mən O (n) ki, alqoritm və başqası varsa
O bir alqoritm (2n) Bu həqiqətən asimptotik bərabər olmuşdur.
We eleventy milyard kimi böyük bir sayı n təsəvvür əgər:
biz eleventy milyard kimi bir şey + 3 eleventy milyard müqayisə etdiyiniz zaman,
birdən that +3 həqiqətən artıq bir böyük fərq etmir.
Biz bu şeylər ekvivalent olması nəzərə başlamaq olacaq görə.
Burada bu sabitləri kimi şeylər ki, orada 2 x Bu,, ya 3 əlavə
bunlar yalnız sabitləri və bu qədər düşməsi davam edir.
These run dəfə bütün 3 onlar O (n) etdiyiniz deyərək eyni niyə Belə ki var.
Biz 2 digər run dəfə Benzer şekilde, O (n ³ + 2n ²), biz əlavə edə bilərsiniz deyək
Sonra + n + 7, və biz yalnız O ki, bir run zaman (n ³) var.
bu eyni deyil - bu, çünki yenə bu eyni şey var.
Bunlar eyni şeylər, sorry. Belə ki, bu eyni, çünki
this n ³ this 2n ² üstünlük təşkil edir.
>> We O (n ³) və O kimi dəfə run əgər nədir eyni şey deyil (n ²)
this n ³ this n ² çox böyük deyil.
We eksponent varsa Belə ki, birdən-birə bu məsələ başlayır
Burada qədər kimi deyil, biz yalnız, amillər ilə məşğul olduğunuz zaman
o, yalnız çıxmaq edir, çünki məsələ gedən deyil.
Biz bu günə qədər gördüm alqoritmlər bir nəzər salaq
və onların run zaman haqqında danışmaq.
Siyahısına bir sıra axtarır ilk yolu, gördük ki, xətti axtarış idi.
Və xətti axtarış həyata super sadə deyil.
Biz yalnız bir siyahısı var və biz siyahıda hər bir element baxmaq olacaq
biz sayı tapmaq qədər arıyorsanız.
Belə ki, deməkdir ki, ən pis halda, bu O (n).
Element əgər Və burada ən pis halda ola bilər
son element, sonra xətti istifadə edərək, hər bir element baxmaq
biz bu siyahıda həqiqətən olduğunu bilmək üçün son bir almaq qədər.
Biz yalnız yarıya qədər vermək və deyə bilmərəm, "Bu orada yəqin ki, yoxdur."
Xətti axtarış ilə biz bütün şey baxmaq var.
Ən yaxşı halda süresi, digər tərəfdən, daimidir
ən yaxşı halda biz aradığınız element yalnız siyahıda birinci çünki.
Belə ki, bizi düz 1 addım siyahısına necə böyük olursa olsun etmək olacaq
biz ilk element üçün hər zaman arıyorsanız.
>> Beləliklə, siz axtarış zaman, unutmayın, bu, bizim siyahı sıralanır tələb etmir.
Biz sadəcə hər bir element üzərində baxmaq olacaq və bu, həqiqətən vacib deyil, çünki
nə üçün bu elementləri daxil edir
Daha ağıllı axtarış alqoritm ikili axtarış kimi bir şeydir.
Siz olacaq zaman Unutmayın, ikili axtarış təzahürüdür
siyahısı orta axtarır saxlamaq.
Biz ortasında arıyorsanız, çünki, biz siyahısına çeşidlənir tələb
və ya başqa orta biz bilmirik, biz artıq baxmaq
tapmaq üçün bütün siyahısı, və sonra o nöqtədə biz yalnız vaxt israf edirik.
Biz sıralanır siyahısı var və biz orta tapmaq Belə ki, biz orta müqayisə etmək olacaq
element biz arıyorsanız.
Bu çox yüksək varsa, onda biz sağ yarım unuda bilər
biz bilirik ki bizim element artıq çox yüksək olduqda
və bu element hüququ hər şeyi hətta yüksəkdir,
sonra biz artıq orada baxmaq lazım deyil.
Harada digər tərəfdən, bizim element çox aşağı olduqda,
Biz bu element solunda hər şey də çox aşağı olduğunu
belə ki, həqiqətən də orada baxmaq məntiqli deyil.
Bu yolla, siyahısının orta hər addım və biz baxmaq hər zaman,
birdən-birə biz bilirik çünki biz yarısında bizim problem kəsilmiş olacaq
biz aradığınız bir ola bilməz ədəd bütöv bir dəstə.
>> Pseudocode bu, bu kimi bir şey görünür
və çünki, yarım hər bir vaxtında siyahısı kəsici edirik
logarithmic to xətti bizim ən pis halda run zaman atlamalar.
So birdən-birə biz giriş siyahısı bir element tapmaq üçün addımlar.
Ən yaxşı halda süresi baxmayaraq, hələ də daimidir
indi, çünki yalnız biz aradığınız element olduğunu deyək
orijinal siyahısı həmişə dəqiq orta.
Belə ki, biz istəyirik kimi böyük kimi siyahı inkişaf edə bilər, ancaq aradığınız element orta olmadığı halda
sonra bizə yalnız 1 addım olacaq.
We O (Giriş n) və Ω (1) və ya daimi etdiyiniz nə ki.
Nin həqiqətən bu siyahıda ikili axtarış edək.
Elə biz element 164 aradığınız ki, bildirin.
Biz gedirik ilk şey bu siyahıda olan orta tapmaq edir.
Bu, sadəcə, belə ki, orta bu 2 ədəd arasında azalmağa davam edir ki, baş
Beləliklə, orta 2 ədəd arasında düşür, hər dəfə yalnız özbaşına deyək
nin yalnız qədər ətrafında bildirin.
Biz yalnız biz bu yolu hər bir addım əmin etmək lazımdır.
Beləliklə, biz qədər ətrafında olacaq və biz 161 listemize ortasında demək olacaq.
So 161 <164, və 161 sola hər element
də <164, belə ki, biz bunu bütün bizə kömək etmək niyyətində deyil bilirik ki,
orada ola bilməz aradığınız element çünki burada axtarır başlamaq üçün.
Bəs biz nə edə bilər, biz yalnız siyahı ki, bütün sol yarım unuda bilər
və indi yalnız 161 irəli hüququndan hesab edir.
>> So, yenə bu orta edir; nin yalnız qədər ətrafında bildirin.
İndi 175 çox böyük.
Belə ki, o, bizim burada və ya burada axtarır yardım etmək niyyətində deyil bilirik
biz yalnız tullamaq olar, və nəticədə biz 164 hit olacaq.
Binar axtarış hər hansı suallar?
Gəlin bir artıq sıralaması siyahısını axtarış dən hərəkət
həqiqətən hər hansı bir sırada nömrələri siyahısı alaraq
və qaydada artan ki, siyahı edilməsi.
Biz baxdı ilk alqoritm bubble sırala adlanırdı.
Bu biz gördüm alqoritmləri sadə olacaq.
Bubble növ siyahı daxilində hər 2 elementləri yer həyata zaman deyir ki,
yüksək sayı aşağı sıra sol var, yəni
ki, siyahı olacaq deməkdir, çünki biz, onları dəyişdirmək olacaq
Əvvəl daha "daha çox sıralanır."
Və biz yalnız təkrar yenə bu proses davam edəcək və edirik
nəticədə elementləri onların doğru yeri bubble cür bir sorted siyahısı var qədər.
>> Bunun İş Vaxtı O olacaq (n ²). Niyə?
Yaxşı, ən pis halda, çünki biz hər element etmək niyyətində və edirik
biz siyahıda hər element üçün müqayisə başa olacaq.
Amma ən yaxşı halda, biz artıq sıralanır siyahısı var, bubble sırala nin
yalnız bir dəfə keçmək demək gedir "Xeyr. Mən heç svopları etmədiyini, mən bitirdim."
Beləliklə, biz Ω (n) bir ən yaxşı halda süresi var.
Üzrə siyahısı bubble sırala run edək.
Və ya ilk-nin yalnız həqiqətən tez bir pseudocode baxaq.
Biz loop hər iteration ildə izlemek istəyirsiniz istəyirəm
biz hər hansı elementləri dəyişdirilə və ya takip edin.
Ki, səbəbi Belə ki, biz hər hansı elementləri değiştirilecek heç zaman dayandırmaq olacaq.
Bizim loop əvvəlində bir şey değiştirilecek deyil, biz yalan olduğunu demək lazımdır.
İndi biz siyahı ilə getmək və i element i + 1 element müqayisə etmək olacaq
və bu böyük sayda kiçik sayda sol olduğu halda,
sonra biz yalnız onları dəyişdirmək olacaq.
>> Və sonra biz bir element değiştirilecek unutmayın olacaq.
Yəni siyahısını ən azı 1 dəfə daha getmək lazımdır o deməkdir ki,
bütün siyahı artıq çeşidlənir zaman dayandı olan şərtdir, çünki
biz hər hansı svopları qəbul etməyib deməkdir.
Bizim vəziyyəti aşağı burada niyə belə ki, "bəzi elementləri değiştirilecek edilmişdir isə.
Belə ki, indi yalnız bu siyahı çalışan baxaq.
Mən siyahısını 5,0,1,6,4 var.
Bubble sort sol bütün yol başlamaq üçün gedir və bu, müqayisə olacaq
i elementləri, belə element 1 olan 0 i + 1.
Bu, yaxşı 5> 0 demək olacaq, amma indi 5 sol edir
mən 5 və 0 dəyişdirmək lazımdır.
Mən onları dəyişdirmək zaman, birdən-birə mən bu müxtəlif siyahısını almaq.
İndi 5> 1, belə ki, biz onları dəyişdirmək olacaq.
5> 6 deyil, belə ki, biz burada heç bir şey etmək lazım deyil.
Lakin 6> 4, biz dəyişdirmək lazımdır.
Yenə nəticədə tapmaq üçün bütün siyahısını run lazımdır
these üçün həyata ki, biz onları dəyişdirmək,
və bu baxımdan biz siyahısını 1 dəfə daha run lazımdır
hər şey onun üçün var, və bu baxımdan bubble sırala başa əmin etmək.
Bəzi elementləri alaraq və onların çeşidlənməsi üçün müxtəlif alqoritm seçim sortudur.
Seleksiya sort arxasında ideyası biz siyahısı sıralanır hissəsi qurmaq olacaq ki,
Bir zamanda 1 element.
>> Və biz bunu olacaq yol siyahısı sol seqmentin yaradılması edir.
Və əsasən, hər - hər bir addım, biz yazmayıblar kiçik element etmək olacaq
hələ sıralanır deyil və biz sıralanır seqment daxil hərəkət olacaq.
Deməkdir ki, biz davamlı minimum çeşidlənməmiş element tapmaq lazımdır
və sonra minimum element almaq və nə ilə mübadilə
tərk-ən element sıralanır deyil.
Bunun İş Vaxtı O olacaq (n ²), çünki ən pis halda
biz hər element üçün hər bir element müqayisə etmək lazımdır.
Biz siyahısına sol yarısında başlamaq, biz lazımdır ki, olduğunuz Çünki
kiçik element tapmaq üçün bütün sağ seqment keçmək.
Və sonra yenə biz bütün sağ seqment üzərində getmək və lazım
yenidən və üzərində üzərində üzərində davam.
That n ² olacaq. We loop üçün başqa bir loop daxilində bir ehtiyac olacaq
olan n ² göstərir.
Ən yaxşı halda düşüncə, biz bu artıq sıralaması siyahısını təqdim deyək;
biz həqiqətən n ² daha yaxşı yoxdur.
Seleksiya sort ki, bilmədən heç bir yol var, çünki
minimum element yalnız mən axtarır üçün baş biridir.
Bu hələ əslində minimum əmin etmək lazımdır.
>> Bu alqoritm istifadə edərək, minimum və əmin etmək üçün yeganə yol,
again hər bir element baxmaq edir.
Ki, həqiqətən, onu vermək əgər - Siz seçim sort artıq sıralaması siyahısını təqdim edərsə,
bu hələ sıralanır olmayan bir siyahısını vermək daha yaxşı etmək niyyətində deyil.
Bu halda olur, əgər gəlmişkən, bir şey O (bir şey) ki,
və bir şey omega, biz yalnız daha müfəssəl şəkildə it şey θ ki, demək bilər.
Siz ki, yalnız nə deməkdir ki, hər yerdə ortaya görmək əgər.
>> Bir şey n teta Əgər ², o, həm də böyük O (n ²) və Ω (n ²) təşkil edir.
Ən yaxşı halda və ən pis halda Belə ki, o, fərq etməz
alqoritmi eyni şey hər vaxt gedir.
Belə ki, bu seçim cür pseudocode kimi baxmaq mümkün deyil.
We əsasən mən siyahı üzərində təkrarlamaq istəyirəm ki, demək olacaq
sağ və loop hər iteration da soldan, mən hərəkət gedirəm
siyahısını bu sıralanır hissəsi daxil minimum element.
Və bir dəfə mən bir şey hərəkət, mən daha element baxmaq lazımdır heç vaxt.
Tezliklə Mən siyahısını sol seqment üçün bir element dəyişdirmək kimi, sıralanır, çünki
biz minimum istifadə üçün artan hər şeyi edirik, çünki.
Beləliklə, biz tamam we mövqe i də istəyirik, və biz bütün öğeleri baxmaq lazımdır, dedi
minimum tapmaq üçün i sağa.
Belə ki, biz siyahısına sonuna i + 1 baxmaq istəyirəm deməkdir.
İndi biz hazırda da aradığınız ki, element, bu günə qədər bizim minimum az olduqda
unutmayın, biz yalnız olmaq üçün minimum off başlayaraq edirik ki,
hər hansı element biz hazırda olduğunuz, mən minimum olduğunu güman lazımdır.
Hesab edirəm ki, daha kiçik olan bir element tapmaq, onda mən, tamam, demək gedirəm
yaxşı, yeni minimum tapmışdır.
Hesab edirəm ki, minimum olduğu yadda gedirəm.
>> Beləliklə, bir dəfə mən ki, sağ çeşidlənməmiş seqment vasitəsilə getdi sonra
Mən mövqe i ki element ilə minimum element dəyişdirmək gedirəm deyə bilərəm.
Bu mənim siyahısı yaratmaq olacaq, soldan sağa siyahısı mənim sıralanır hissəsi,
və biz heç bu hissəsi var bir daha bir element baxmaq lazım deyil.
Sonra biz bu değiştirilecek etdik.
Belə ki, bu siyahıda seçim sort run bildirin.
Burada mavi element i olacaq və qırmızı element minimum element olacaq.
Mən 5-belə ki, siyahı sol bütün yol başlayır.
İndi biz minimum çeşidlənməmiş element tapmaq lazımdır.
Belə ki, 0 <5, belə ki, 0 Yeni minimum olduğunu söyləyirlər.
>> Biz, 0 kiçik olduğunu tanıya bilər baxmayaraq, çünki mən orada dayandırmaq bilməz
əmin etmək siyahısı hər element vasitəsilə run lazımdır.
, 6 böyükdür böyükdür 1 Belə ki, 4 böyükdür.
Bu elementlərin bütün baxaraq sonra, mən 0 kiçik is müəyyən etdik ki, deməkdir.
Mən 5 və 0 dəyişdirmək üçün gedirəm.
Bir edirəm ki, dəyişdirmək, yeni bir siyahısını almaq üçün gidiyorum və mən daha 0 baxmaq lazımdır heç vaxt bilirik ki,
bir dəfə mən bu değiştirilecek etdik, çünki Mən bunu sıralanır etdik və tamamlayın.
İndi yalnız belə, mavi element daha 5 ki, baş
və biz 1 müəyyənləşdirmək üçün 1 baxmaq üçün 6 və 4 ehtiyac
kiçik minimum element, belə ki, biz 1 və 5 dəyişdirmək lazımdır.
Yenə baxmaq lazımdır - 6 və 4 5 müqayisə
və biz 4 və 5 dəyişdirmək gedən və nəhayət, müqayisə edirik
o 2 ədəd və biz sıralanır siyahısını almaq qədər onlara dəyişdirmək.
Seleksiya sort hər hansı suallar?
Okay. Nin burada son mövzu hərəkət edək ki, recursion edir.
>> Recursion, unutmayın, bu, həqiqətən meta şey olduğu bir funksiyası
dəfələrlə özü çağırır.
So bir nöqtədə, bizim fuction dəfələrlə özü zəng edərkən,
biz özümüz zəng dayandırmaq olan bir nöqtə olmalıdır lazımdır.
Biz nə yoxdur, onda biz yalnız əbədi bunu davam edirik, çünki
və bizim proqram yalnız ləğv etmək niyyətində deyil.
Biz bu vəziyyəti əsasında işə çağırırıq.
Və baza halda, əksinə daha bir funksiyası zəng deyil, deyir
Mən yalnız bəzi dəyəri qayıtmaq üçün gedirəm.
Biz dəyər geri sonra Beləliklə, biz özümüzü zəng durdurduk
və biz bu günə qədər etdiyiniz zənglərin qalan da ola bilər.
Əsas işi əks recursive haldır.
Bu biz da hazırda olduğunuz funksiyası başqa bir zəng etmək üçün istədiyiniz zaman
Biz yəqin ki, həmişə, baxmayaraq ki, müxtəlif arqumentlər istifadə etmək istəyirik.
>> Biz f adlı bir funksiyası var, f yalnız 1 arqument take adlı Belə ki, əgər
və biz yalnız f (1), f (1), f (1) zəng edin və yalnız belə olur
arqumenti 1 recursive işə düşür, biz hələ dayandırmaq niyyətində heç edirik.
Biz baza halda belə, biz nəhayət ki, baza halda hit olacaq əmin etmək lazımdır.
Biz yalnız bu recursive halda qalaraq saxlamaq yoxdur.
Ümumiyyətlə, biz özümüz zəng zaman, biz yəqin ki, müxtəlif mübahisə hər zaman olacaq.
Burada həqiqətən sadə recursive funksiyası var.
Belə ki, bu bir sıra faktöryel hesablamaq edəcək.
Up bizim əsas işi var burada Əvvələ.
N ≤ 1, yenə faktöryel zəng etmək fikrində deyilik ki halda.
We dayandırmaq olacaq; biz yalnız bəzi dəyəri geri olacaq.
Bu doğru deyil, onda biz recursive halda hit olacaq.
Çox faydalı olardı, çünki biz yalnız, faktöryel (n) zəng deyilik ki, burada edək.
Başqa bir şey faktöryel zəng olacaq.
>> Və belə ki, biz bir faktöryel (5) və ya bir şey pass nəhayət, əgər bilərsiniz
we faktöryel (4) və s. zəng olacaq, və nəticədə biz bu baza halda hit olacaq.
Belə ki, bu yaxşı görünür. Biz, həqiqətən, bu çalıştırdığınızda nə olur bax edək.
Bu yığını, və qoy əsas mübahisə (4) ilə bu funksiya zəng edir ki.
So bir faktöryel görür və = 4, faktöryel özü zəng edəcək.
İndi birdən-birə, biz (3) faktöryel var.
Belə ki, bu funksiyaları sonda biz baza halda hit qədər artan saxlamaq niyyətindəyik.
Bu nöqtədə, bu qaytarılması dəyəri qaytarılması (NX bu qaytarılması dəyəri) ki,
Bu qaytarılması dəyəri bu NX qaytarılması dəyəri.
Nəhayət, biz bir sıra hit üçün lazımdır.
Burada başında, biz geri 1 deyirlər.
Bir dəfə biz sayı qayıtmaq o deməkdir ki, biz yığını off Bu POP bilər.
Beləliklə, bu faktöryel (1) edilir.
Zaman 1 qaytarır, bu faktöryel (1) qaytarır, 1 bu getiri.
Bu qaytarılması dəyəri, unutmayın, bu qaytarılması dəyəri NX idi.
So qəflətən, bu oğlan I 2 qayıtmaq istəyirəm ki, bilir.
>> Belə ki, saxla dəyəri burada qaytarılması dəyəri NX qədər geri.
Belə ki, indi zaman 3 x 2 demək olar, və nəhayət, burada demək olar
Bu yalnız 4 x 3 x 2 olacaq.
Bu gəlirlər sonra, əsas bir tam daxilində aşağı almaq.
Recursion hər hansı suallar?
Bütün hüquqlar. So suallar üçün daha çox vaxt, sonunda var
lakin indi Cozef qalan mövzuları əhatə edəcək.
>> [Joseph Ong] Bütün hüququ. Belə ki, indi biz recursions danışdı etdik ki,
nin növ birləşməsi nə haqqında bir az danışmaq edək.
Birleştirme sort əsasən nömrələri siyahısı çeşidlənməsi bir yoldur.
Və birleştirir sort ilə deyil, necə bir siyahısı var və biz bunu is
biz 2 yarıya indirir bu split edək deyirlər.
Biz ilk, sol yarısı daha sort daxil run lazımdır
sonra biz, sağ yarısında sort daxil run lazımdır
və indi bizim ayrılır ki, 2 yarıya indirir verir, indi biz birlikdə o yarıya indirir birləşdirmək olacaq.
Bu misal Məgər bir az çətindir, belə ki, biz ərizə ilə getmək və baş nə görürsünüz.
Belə ki, bu siyahı, biz 2 yarıya indirir daxil parçalanması başlanır.
Biz ilk sol yarısında sort daxil axır.
Belə ki, sol yarım, və indi biz bu siyahı vasitəsilə çalıştırmak
olan biz, yenə baxmaq sonra birləşmə cür keçdi və olur
Bu siyahıda sol tərəfində və biz bunun üzərində sort daxil axır.
İndi biz, 2 ədəd bir siyahısı üçün aşağı almaq
və indi sol yarısı yalnız 1 element uzun və biz deyil
yarım içinə yalnız 1 element olduğunu siyahısı split, biz yalnız bir dəfə 50 var, demək,
olan yalnız 1 element, o, artıq sıralaması edir.
>> Biz ilə tamamlayın sonra, biz əlimizdən bilərsiniz
Bu siyahıda hüququ yarısı üçün hərəkət,
və 3 də indi bu siyahı həm də yarıya indirir sıralanır ki, sıralanır, və
biz geri birlikdə bu nömrələr qoşula bilər.
Belə ki, 50 və 3 baxmaq; 3 50 daha kiçik, belə ki, birinci gedir və sonra 50 girer
İndi ki, həyata, biz onu sağ yarım ki, siyahısı və sort qədər geri.
42 öz sayı, belə ki, artıq sıralaması edir.
Belə ki, indi biz ilk qoymaq olur ki, 2 və 3 42 daha kiçik these et
İndi 42-ci qoymaq olur, 50 da qoymaq olur
İndi sıralanır ki, biz, üst geri 1337 və 15 bütün yol getmək.
Bəli, biz bu siyahı sol yarım baxmaq; 1337 özü belə bu 15 ilə sıralanır və eyni oldu.
Belə ki, indi biz orijinal siyahı, 15 <1337, sort bu 2 ədəd birləşdirmək
belə ki, ilk gedir, sonra 1337 da gedir
İndi biz üst qədər orijinal siyahı həm də yarıya indirir sıralanır.
Və biz bütün bu birləşdirmək edir.
Biz bu siyahının ilk 2 ədəd, 3 <15 baxmaq, belə ki, birinci sort array gider.
15 <42, belə ki, İndi daxil gedir 42 <1337, o da gedir
50 <1337, bunu da gedir və biz yalnız bu siyahıda 2 ədəd çıxardım ki, görürsünüz.
Belə ki, yalnız 2-siyahıları arasında alternativ deyilik.
Biz yalnız əvvəlində arıyorsanız, biz element qəbul etdiyiniz
kiçik və sonra array onu qoyulması edir.
İndi biz bütün yarıya indirir birləşdi etdik və tamamlayın.
>> Haqqında suallarınız sort daxil? Bəli?
[Tələbə] müxtəlif qruplara bölünmə varsa, niyə yalnız bir dəfə split yoxdur
və bir qrup, 3 və 2 var? [Sual anlaşılmaz istirahət]
Səbəbi - belə bir sual deyil, biz onları sonra niyə yalnız ilk addım onlara daxil ola bilmirəm?
Bunu edə səbəbi, hər iki tərəfin sol ən elementləri da başlayacaq
və sonra kiçik bir almaq və qoymaq ki BUNLARI BİLİYORMUSUNUZ ki,
fərdi siyahıları sıralanır sifariş var.
Mən də yarıya indirir və sol ən elementləri ilə arıyorum Beləliklə, əgər,
Mən həmin siyahıların ən kiçik elementləri olmaq olacaq bilirik.
Mən bu böyük siyahısı kiçik element ləkələr onları bilər.
Digər tərəfdən, mən orada ikinci səviyyədə olan 2 siyahıları baxsaq,
50, 3, 42, 1337, 15, həmin sıralanır deyil.
Mən 50 və 1337 baxmaq əgər, ilk mənim siyahısına 50 qoymaq üçün gedirəm.
Amma həqiqətən 3 hamısı yerinə ən kiçik element çünki, hiss etmir.
Biz bunu birləşən addım edə bilərsiniz yeganə səbəbi bizim siyahıları artıq sıralanır çünki edir.
Biz altındakı bütün yolu aşağı almaq niyə hansı
biz yalnız bir sıra zaman ki, bir sıra çünki
və özü artıq bir sorted siyahısı.
>> Hər hansı sual? No?
Mürəkkəbliyi? Bəli, hər addımda son nömrələri olduğunu görə bilərsiniz
və biz, yarım günlük n dəfə siyahısı bölmək olar
biz bu n x log n mürəkkəblik almaq yerləşir olan.
Və birləşmə sort üçün ən yaxşı halda n log n görürsünüz və bu, məhz belə olur
ən pis halda, və ya orada Ω da n n daxil edir.
Unutmayın şey.
Hərəkət isə bir super əsas fayl I / O. getmək bildirin
Siz Scramble baxdı varsa, biz sistemi bir növ idi görəcəksiniz
Əgər siz kodu vasitəsilə oxumaq əgər bir günlük faylı yazmaq bilər.
Sizə bunu necə görmək edək.
Bəli, biz fprintf var, siz, yalnız printf hesab edə bilər ki,
ancaq əvvəlində f səbəbdən əvəzinə fayl çap və.
Qədər burada kodu bu cür, sizin Scramble görüldü ola bilər nə yoxdur ki,
bu nömrələr nə cərgə cərgə həyata 2-ölçülü array çap keçir.
Bu halda, printf sizin terminal üçün çap və ya hissəsinin standart çıxış adlandırdıqları.
>> Və indi, bu halda, biz nə üçün bütün, fprintf ilə printf əvəz is
sizə çap etmək üçün istədiyiniz fayl demək, bu halda yalnız fayl üçün çap
yerine terminal onu çap.
Yaxşı, o sual begs: Biz hüququ, fayl bu cür alıram?
Biz bu fprintf fuction daxil keçdi ancaq haradan gəldiyi yox idi.
Yaxşı, erkən kodu, nə idi, burada kodu bu yığın idi
əsasən açıq fayl log.txt çağırır deyir ki, edir.
Ki, sonra biz nə biz fayl həqiqətən uğurla açılır əmin etmək lazımdır.
Belə ki, bir çox səbəblərə görə uğursuz bilər; misal üçün, bilgisayarınızda kifayət qədər yer yoxdur.
Siz fayl hər hansı əməliyyatları əvvəl Belə ki, həmişə vacibdir
ki, fayl uğurla açıldı olmadığını kontrol edin.
Yaxşı bir ki, fopen bir dəlil ki, yaxşı, biz bir çox yollarla bir fayl aça bilər.
Biz nə edə bilər, biz, bu çıxışları əgər artıq fayl yalnış deməkdir ki, w keçə bilər
Biz onlar əvəzinə əsas of fayl sonuna əlavə olan bir bir keçə bilər
və ya biz deməkdir ki, r daxil edə bilərsiniz, in fayl oxumaq-yalnız açıq bildirin.
Proqram, fayl hər hansı bir dəyişiklik etməyə çalışır əgər
onlara fəğan və onlara bunu imkan verməyin.
Nəhayət, bir dəfə biz bu əməliyyatları edərkən görülən, fayl ilə tamamlayın
biz fayl yaxın əmin etmək lazımdır.
Və proqram sonunda, daha onlara keçmək gedir
siz açıldı və yalnız yaxın bu faylı ki.
Belə ki, bu sizi əmin etmək lazımdır ki, mühüm bir şeydir.
Belə bir fayl aça bilər unutmayın, sonra, fayl yazmaq olar
fayl əməliyyatları, lakin sonra siz sonunda faylı bağlamaq lazımdır.
>> Əsas fayl Hər hansı bir sualınız I / O? Bəli?
[Tələbə sual, anlaşılmaz]
Burada. Sualına, bu log.txt fayl yerləşir görünür edir?
Yalnız log.txt vermək əgər Bəli, bu proqram eyni kataloq yaradır.
So you're əgər - >> [Tələbə sual, anlaşılmaz]
Bəli. Eyni qovluqda və ya eyni kataloq, siz zəng kimi.
İndi yaddaş yığını və yığın.
Belə ki, kompüter müəyyən yaddaş necə?
Yaxşı, burada bu blok növ as yaddaş təsəvvür edə bilərsiniz.
Və yaddaş biz orada vurulmuş yığın və orada olan yığını deyilən nə var.
Və yığın aşağı artır və yığını yuxarı artır.
Tommy qeyd etdiyim kimi - oh, yaxşı, və biz ikinci almaq lazımdır ki, bu digər 4 seqmentləri var -
Tommy əvvəllər dediyi kimi, onun funksiyaları özləri zəng və bir-birinə zəng necə?
Onlar yığını çərçivəsində bu cür qurmaq.
Bəli, əsas zəngləri foo, foo yığını qoymaq olur əgər.
Foo çağırır bar, bar nin yığını qoymaq almaq və sonra stack qoymaq olur.
Onlar qayıtmaq kimi, onlar hər yığını off atılan almaq.
Bu yerlərin hər yaddaş nə keçirilməsi edirsiniz?
Yaxşı, mətn seqmenti olan top, proqram özü edir.
Maşın kodu Belə ki, var ki, bir dəfə sizin proqram tərtib edir.
Sonrakı, hər hansı qlobal dəyişənlər başlatılmış.
>> Belə ki, proqram qlobal dəyişənlər var, və bir = 5, kimi demək
seqment qoymaq və doğru olduğunu altında olur ki,
Siz, bir int hər hansı uninitialized qlobal data var
ancaq bir şey bərabər demək deyil.
Bu qlobal dəyişənlər var, onlar əsas kənarda olduğunuz bilirik.
Beləliklə, bu elan amma başlatılmadı hər hansı qlobal dəyişənlər deməkdir.
Belə ki, yığın-yığın, nə var? Yaddaş biz bir az bit almaq bilərsiniz malloc istifadə ayrılıb.
Və nəhayət, yığını ilə hər hansı yerli dəyişənlər var
və hər hansı funksiyaları, onların parametrlərinin hər hansı zəng edə bilər.
Son şey, həqiqətən, ətraf dəyişənlər nə bilmək yoxdur
ancaq proqram run zaman bağlı bir şey kimi var
Bu proqram qaçmış şəxsin adınız.
Və bu alt növ olacaq.
Hexadecimal dəyərlərin olan yaddaş ünvanları, baxımından,
0 ilə üst əvvəlində dəyərlər və onlar aşağı bütün yolu aşağı gedin.
Bu halda, siz 32-bit sistemi istəyirsinizsə,
altındakı ünvan ki, 32 bit, çünki, af sonra 0x olacaq
8 bayt və bu halda 8 bayt 8 hexadecimal rəqəm uyğundur.
Belə ki, aşağı burada, kimi, 0xffffff var olacaq, və orada 0 malik olacaq.
Belə ki, nə göstəricilər var? Əgər bəziləri əvvəl bölməsində bu əhatə ola bilər.
lakin biz mühazirə üzərində getmək idi, bir pointer yalnız bir veri növü belə
əvəzinə 50 kimi dəyər bir növ, bu yaddaş bəzi yeri ünvan depolayan mağazalar.
Ki, yaddaş kimi [anlaşılmaz].
Belə ki, bu halda, biz nə, biz, bir tam və ya int * bir göstərici var
və 0xDEADBEEF bu hexadecimal ünvan var.
>> Belə ki, nə biz yaddaş bəzi yeri bu göstərici xal, indi ki,
və yalnız bir ki, dəyəri 50 bu yaddaş yeri var.
Bir 32-bit sistemləri, bütün 32-bit sistemləri, göstəricilərinə 32 bit və ya 4 bayt qədər.
Amma, məsələn, 64-bit sistem üzrə göstəricilər 64 bit var.
Belə ki, siz unutmayın lazımdır bir şey var.
Belə ki, son-bit sistem, bir göstərici son bit uzun.
Pointers əlavə şeylər olmadan cür həzm çətindir
belə dinamik yaddaş ayrılması misal ilə gedək.
Nə dinamik yaddaş ayrılması sizin üçün, və ya biz malloc dediyimiz
siz set xaricində data bir növ ayrılması imkan verir.
Beləliklə, bu data cür proqramın müddəti daha baqidir.
Bildiyiniz kimi, çünki bir funksiyası daxilində x və funksiyası yekunları elan əgər,
artıq x saxlanılır ki, data girmə imkanı vardır.
Nə göstəricilərinə bizə bildirin bizə yaddaş və ya mağaza dəyərlər saxlaya qoy edir
yəni yaddaş müxtəlif seqmenti ki, yığın-yığın.
İndi bir biz uzun bir göstərici kimi, funksiyaları həyata qayıtmaq
yaddaş ki, yeri, sonra biz nə edə biz orada dəyərlər baxmaq bilər.
Nin Məsələn baxaq: Bu daha yaddaş layout edir.
Və biz əsas, bu funksiya var.
Ne edir edir - tamam, belə sadə, sağ - int x = 5, yalnız əsas yığını bir dəyişən var.
>> Digər tərəfdən, indi biz funksiyası giveMeThreeInts tutan bir pointer bəyan edir.
Və indi biz bu funksiya daxil və biz bunun üçün yeni bir yığın çərçivəsində yaradır.
Lakin, bu yığını çərçivəsində, biz int * temp elan
olan bizim üçün mallocs 3 integers edir.
Belə ki, int ölçüsü, bu int nə qədər bytes bizə
və malloc bizə verir ki, yığın yer çox bytes.
Belə ki, bu halda, biz, 3 integers üçün kifayət qədər yer yaratmışdır
və yığın mən ali onu tərtib etdik nə ki, orada bir yoldur.
Biz Bitirdiğinizde sonra, biz burada qayıtmaq, yalnız 3 ints geri lazımdır,
və bu yaddaş olduğu artıq bu halda, ünvan qaytarır.
Və biz göstərici = keçid seçin və orada biz yalnız başqa göstərici var.
Amma nə funksiyası yekunları burada dizilir və yox edir.
Belə temp yox, ancaq hələ harada ünvan saxlamaq
o 3 integers elektrik daxilində var.
Belə ki, bu dəsti-ci ildə, göstəricilər də dizilir çərçivəsində üçün yerli scoped var
lakin onlar istinad üçün yaddaş yığın edir.
>> Bu mənada edirmi?
[Tələbə] Tekrar bilərmi? >> [Joseph] Bəli.
Mən yalnız bir az getmək əgər Belə ki, temp ayrılan bax
var yığın bəzi yaddaş.
Belə ki, bu funksiya, giveMeThreeInts yekunları, burada bu yığını yox gedir zaman.
Və bu halda dəyişənlərin hər hansı, dizilir çərçivəsində ayrılıb ki, bu göstərici ilə.
Biz temp geri yana yox olacaq, lakin
və biz = temp, pointer indi temp kimi yeri eyni yaddaş qeyd olacaq göstərici seçin.
Belə ki, indi biz temp ki, yerli pointer, itirmək baxmayaraq
biz hələ ki, dəyişən göstərici daxilində işarə nə xatirəsinə ünvan saxlayırlar.
Suallar? Siz bölməsində artıq getdi əgər bir confusing mövzu cür ola bilər.
Biz, sizin TF mütləq üzərində getmək edəcək və əlbəttə ki, biz suallara cavab
Bu nəzərdən sessiyasının sonunda.
Lakin bu kompleks mövzu sort və mən göstərmək üçün gedir ki, misal
ki göstəricilərinə həqiqətən nə aydınlaşdırmaq yardım edəcək.
>> Bu halda, göstəricilər serialların bərabər
Mən yalnız bir int dizi eyni şey kimi bu göstərici istifadə edə bilərsiniz.
Mən, 0 daxil indeksasiyası və 1 üçün ilk tam dəyişən alıram
2-İkinci tam dəyişdirilməsi, və 3-cü tam 3.
Göstəricilər üzrə daha çox. Yaxşı, Binky xatırlayıram.
Bu halda, biz bir pointer ayrılan sonra, və ya biz bir pointer elan
lakin ilk, yalnız bir göstərici elan zaman, hər yerdə yaddaş işarə deyil.
Bu daxilində yalnız zibil dəyərlər var.
Mən bu göstərici işarə yerləşir heç bir fikrim yoxdur.
Bu yalnız 0 və 1-in ilkin bəyan edildiyi ilə dolu olan bir ünvan var.
Mən bu barədə malloc zəng qədər mən bu ilə bir şey edə bilməz
və sonra mənə daxili dəyərlər qoymaq bilərsiniz yığın bir az yer verir.
Sonra yenidən, bu yaddaş içində nə bilmirəm.
Mən nə üçün ilk şey sisteminin kifayət qədər yaddaş olub kontrol edir
Mənə bu kontrol yapýyorum nə olan ilk yeri, 1 tam geri vermək.
Pointer null varsa, ki, kifayət qədər yer və ya başqa bir səhv baş olmadığını bildirir
mən mənim proqram həyata çıxmaq lazımdır.
Bu uğur əgər Lakin, indi pointer istifadə edə bilərsiniz
və nə * göstərici yoxdur ünvanı harada aşağıdakı
yerləşir ki, dəyər və bu, 1-bərabər müəyyən etmək.
Yaddaş mövcud Belə ki burada, biz kontrol edirik.
>> Siz mövcud bilirik sonra, onu qoya bilər
nə dəyəri siz onu qoymaq istəyirik, bu halda 1-ci.
Biz bu tamamlayın sonra, bu göstərici azad etmək lazımdır
biz sistemi, ilk növbədə istədi ki, yaddaş geri almaq lazımdır, çünki.
Çünki kompüter biz bu Bitirdiğinizde bilmir.
Bu halda biz aydın şəkildə onu izah edirik, tamam, biz yaddaş ilə tamamlayın.
Bəzi digər proses ehtiyacı varsa, bir sıra digər proqram lazımdır, irəli getmək və onu çekinmeyin.
Biz də edə bilərsiniz Biz yalnız müəyyən yerli dəyişənlərin ünvan almaq olar.
Belə ki, int x əsas və dizilir çərçivəsində daxilində deyil.
Və biz bu işareti istifadə edildikdə, bu və operator, nə yox edir
bu x edir, x yaddaşında yalnız bəzi məlumatlar, ancaq bir ünvan var.
Bu yerdə tesis edir. Bu nə zəng & x ki, bunu bu, bizi x ünvan verir.
Beləliklə, biz x yaddaşında olduğu üçün göstərici baxımından edirik.
İndi biz yalnız * kimi bir şey x, biz 5 geri almaq olacaq yoxdur.
Ulduz bu dereferencing adlanır.
Siz ünvan edin və orada saxlanılan bu dəyəri almaq.
>> Hər hansı sual? Bəli?
Siz 3 guşəli şey deyilsə [Tələbə], hələ də tərtib etmir?
Bəli. Siz 3-pointer şey deyilsə, o, hələ də tərtib olacaq
amma ikinci nə sizə göstərmək və etmədən olacaq
ki, bir yaddaş sızıntısı zəng budur. Siz sistem verən deyilik
onun yaddaş geri, bir sonra proqram toplamaq niyyətindədir isə
istifadə deyil, və başqa heç bir şey üçün istifadə edə bilərsiniz yaddaş ki.
Əgər sizin kompüter 1,5 milyon kilobayttan ilə Firefox gördüm varsa,
vəzifəsi meneceri ki, neler var.
Siz onlar idarə deyilik ki, proqram bir yaddaş sızıntısı var.
Belə ki, necə göstərici hesab işləyir?
Yaxşı, göstərici hesab bir sıra daxil kimi endeksleme növ edir.
Bu halda, bir göstərici var, nə mən, mən ilk element üçün göstərici baxımından olun
Mən ayrılmış etdiyiniz 3 integers bu serialın.
Belə ki, indi mən nə, star pointer yalnız siyahıda ilk element dəyişir.
Burada Star göstərici +1 xal.
Belə göstərici burada bitdi, göstərici +1 burada bitdi, pointer +2 burada bitdi.
>> Belə ki, yalnız 1 əlavə bu array boyunca hərəkət kimi eyni şeydir.
Biz nə, biz göstərici +1 nə zaman, buraya ünvanı almaq
və burada dəyəri almaq üçün, bütün ifadə bir ulduz qoymaq
bu dereference üçün.
Belə ki, bu halda, mən, 1 bu serialın ilk yeri müəyyən alıram
2 ikinci yer və 3-cü yer.
Sonra nə buraya edirəm, mən bizim göstərici +1 çap edirəm ki,
olan yalnız mənə 2 verir.
İndi göstərici incrementing edirəm, belə göstərici göstərici +1 bərabərdir
hansı irəli hərəkət edir.
Və indi mən göstərici +1 çap əgər göstərici +1, vaxt: 3
Bu halda, 3 çap edir.
Və pulsuz bir şey, mən verən göstərici üçün
Mən malloc geri alan serialın əvvəlində işarə edilməlidir.
Mən burada 3 Zəng idi Belə ki, bu halda, bu, düzgün olmazdı
bu array ortasında çünki.
Mən orijinal yeri almaq üçün çıxmaq üçün
Mən onu azad əvvəl ilkin ilk spot.
Belə ki, burada bir daha cəlb misal var.
Bu halda, biz bir xarakter sıra 7 simvol ayrılması edirik.
>> Bu halda biz edirik, nə biz onlara ilk 6 üzərində loop edirik ki,
və biz Z. onlara müəyyən edirik
Belə ki, int i = 0, i> 6, i + +,
Belə ki, pointer + i yalnız bu halda, bizə
pointer göstərici +1, pointer +2, pointer +3 və s və s loop.
Nə etmək olur ki, bu dəyər almaq üçün, dereferences ki ünvan olur ki,
bir Z. və dəyişikliklər dəyər
Sonra sonunda sağ, bu simli deyil saxla?
Bütün strings olan null xitam xarakteri ilə bitirmək lazımdır.
Belə ki, nə mən göstərici 6 I daxil olan null terminator xarakter qoymaq deyil
İndi mən əsasən burada yapýyorum nə bir string üçün printf hüququ həyata keçirir?
>> Belə ki, zaman printf indi bir simli sonunda əldə edir nedir?
Bu null xitam xarakter xit zaman.
Belə ki, bu halda, bu serialın əvvəlinə mənim orijinal göstərici xal.
Mən ilk xarakter çap. Mən artıq hərəkət.
Hesab edirəm ki, karakter çap. Mən artıq hərəkət.
Və mən sonunda çatana qədər bunu edin.
İndi isə end * göstərici olacaq dereference bu və null xitam xarakter geri almaq.
Və mənim isə loop ki, dəyəri null xitam xarakterli deyil, yalnız çalışır.
Belə ki, indi bu loop həyata çıxmaq.
Və mən, bu göstərici ilə 6 çıxmaq əgər
Mən geri əvvəlinə bütün yolu gedin.
Mən onu azad etmək üçün əvvəlinə getmək çünki Unutmayın, mən bunu edirəm.
>> Belə ki, mən bir çox idi. Hər hansı bir sualınız varmı?
Xahiş edirik, bəli?
[Tələbə sual anlaşılmaz]
Siz Qaraçuxurlu demək olarmı? Bağışlayın.
[Tələbə] siz göstərici azad sağ əvvəl son slayd-də,
burada faktiki göstərici dəyəri dəyişən idi?
[Joseph] Belə ki, burada. >> [Tələbə] Oh, tamam.
[Joseph] Belə ki, mən sağ, bir pointer minus minus var,
ki, mən onu azad sonra geri bir şey hərəkət və
Bu göstərici serialın əvvəlində qeyd etmək lazımdır, çünki.
Əgər xətt sonra dayandığına [Tələbə] Amma lazım deyil ki.
Mən bu sonra dayandırılıb əgər [Joseph] Belə ki, bu, yaddaş sızıntısı hesab olunacaq
Mən pulsuz run çünki.
[Tələbə] I [anlaşılmaz] Siz göstərici +1 [anlaşılmaz] olduğu ilk üç xətləri sonra.
[Joseph] Ah-ha. Belə ki, orada sual var?
Bağışlayın. Xeyr, yoxdur. Xahiş edirik, gedin, gedin.
[Tələbə] Belə ki, göstəricilər dəyəri dəyişən deyilik.
Siz göstərici mənfi mənfi nə var olmazdı.
[Joseph] Bəli, dəqiq.
Belə ki, mən göstərici +1 və pointer +2 nə zaman,
Mən göstərici məşğul deyiləm göstərici +1 bərabərdir.
Belə ki, pointer yalnız serialın əvvəlində işarə edilir.
, Mən plus nə zaman yalnız bir plus bu göstərici içərisində geri dəyəri müəyyən
faktiki yanaşı bu hərəkət.
Bütün hüquqlar.
Ətraflı suallar?
>> Bu böyük növ əgər Yenə, bu sessiya əhatə olunacaq.
Bunu tədris fellow soruş, biz sonunda suallara cavab verə bilərsiniz.
Və adətən biz bu mənfi şey kimi deyil.
Bu mənə sıra ofset sonra nə qədər track saxlanılması tələb edir.
Belə ki, ümumiyyətlə, bu göstərici hesab işləri necə izah etmək üçün kifayətdir.
Amma biz adətən etmək istəyirəm ki, biz göstərici bir kopyasını yaratmaq istəyirəm ki,
biz simli ətrafında hərəkət etdiyiniz zaman, daha sonra biz surəti istifadə edəcəyik.
Belə ki, bu halda surəti, bütün simli çap üçün istifadə
amma biz göstərici mənfi 6 kimi var və ya biz bu hərəkət nə qədər takip yoxdur
biz orijinal point hələ siyahısının başında işarə olduğunu yalnız
və biz dəyişdirilə ki, bütün bu surəti idi.
Belə ki, ümumiyyətlə, orijinal göstərici surəti dəyişdirmək.
Kimi və düzmək üçün cəhd etməyin - nüsxədə mehrab don't.
Orijinal yalnız nüsxə dəyişdirmək üçün çalışırıq.
Biz printf daxil simli keçmək zaman Belə ki, qeyd
Siz, biz bütün digər dereferences ilə olduğu kimi qarşısında bir ulduz qoymaq hüququ yoxdur?
Siz bütün simli% s gözləyir çap Belə ki, bir ünvanı
və bu halda bir göstərici və ya simvol bir sıra kimi bu halda.
>> Uchun, char * s, və seriallarda eyni şey var.
Pointer simvol və xarakter Diziler eyni şey var.
Beləliklə, biz bütün pointer qəbul edilir.
Biz * göstərici və ya bu kimi bir şey kimi keçmək yoxdur.
Belə ki, seriallarda və göstəricilər eyni şey var.
X kimi bir şey yapýyorsun zaman burada bir sıra üçün [y]
nə başlıq altında yapýyor deyirdik edir, tamam, bir xarakter array var
belə bir göstərici var.
Və x, eyni şey
və buna nə, o, x ilə y əlavə edir
çox yaddaş irəli hərəkət kimi eyni şey olan.
İndi x + y, bizə ünvan bir növ verir
və biz ünvan dereference və ya arrow edin
Ü yaddaş ki, yeri və biz yaddaş ki, yeri dəyəri almaq üçün.
Belə ki, belə bu iki tam eyni şey var.
Bu yalnız bir sintaktik şəkər var.
Onlar eyni şey. Onlar bir-biri üçün yalnız müxtəlif syntactics istəyirik.
>> Belə ki, göstəricilər ilə yanlış nə edə bilərsiniz? Bir çox kimi. Okay. Belə ki, pis şeylər.
Sizin malloc zəng null, sağ qaytarır, əgər nə edə bilər bəzi pis şeylər yoxlanılması deyil?
Bu halda, mənə vermək sistem xahiş edirəm - ki sayı nə qədərdir?
Bir tam həcmi 4 bayt çünki, 2 milyard dəfə 4 kimi.
Mən 8 milyard bayt kimi üçün xahiş edirəm.
Əlbəttə, mənim kompüter mənə çox yaddaş geri vermək etmək niyyətində deyil.
Bu null olduqda və biz orada dereference üçün cəhd zaman, yoxlamaq etmədi -
o olacaq Ü üçün ok edin - biz yaddaş yoxdur.
Bu bir null göstərici dereferencing zəng edir.
Bu mahiyyətcə siz segfault səbəb olur.
Bu segfault bilər yollarından biridir.
Bunu başqa pis şeylər - də oh.
Bu null göstərici dereferencing edilib. Okay.
Digər pis şeylər - yaxşı, yalnız orada bir çek qoymaq düzeltmek üçün
ki pointer null olub yoxlayır
ki malloc bir null göstərici qaytarır olur və proqram həyata çıxmaq.
Bu xkcd komik var. İnsanlar indi başa düşürəm. Növ.
>> Belə ki, yaddaş. Mən bu artıq getdi.
Biz bir döngü malloc zəng, ancaq malloc zəng hər zaman edirik
biz, bu göstərici işarə yerləşir izini itirmək etdiyiniz
biz bu clobbering etdiyiniz çünki.
Belə ki, malloc üçün ilkin zəng məni burada yaddaş üzərində verir.
Bu mənim göstərici göstəricilər.
İndi o azad deyil, belə ki, indi mən yenə malloc çağırırıq.
İndi burada göstərir. İndi mənim yaddaş burada işarə edir.
Burada toxunan. Burada toxunan.
Amma burada ayrılan bütün yaddaş ünvanları itirib etdik.
Və indi artıq onlara heç bir istinad yoxdur.
Beləliklə, mən bu loop kənarda onları azad edə bilməz.
Belə ki, bu kimi bir şey düzeltmek üçün
pulsuz yaddaş unutmayın və siz bu yaddaş sızıntısı almaq,
Siz ilə tamamlayın dəfə bu loop daxilində yaddaş azad var.
Bəli, bu nə edir. Mən sizin çox bu nifrət bilirik.
Amma indi - yay! Siz 44,000 kilobayttan kimi almaq.
Belə ki, siz loop sonunda azad
və yalnız yaddaş hər zaman azad olacaq.
Əsasən, proqram artıq bir yaddaş sızıntısı mövcut deyil.
>> İndi siz bunu edə bilər başqa bir şey iki dəfə xahiş etdik ki, bəzi yaddaş azad edir.
Bu halda, siz malloc bir şey, onun dəyəri dəyişir.
Siz həyata bildirib dəfə çünki Siz pulsuz.
Amma sonra biz daha azad.
Bu olduqca pis bir şeydir.
Bu, ilkin segfault gedən deyil
lakin sonra bu ikiqat bu corrupts sizin yığın strukturu azad olunur nə isə,
siz CS61 kimi bir sinif etmək seçerseniz və bu barədə bir az daha çox öyrənmək lazımdır.
Amma əhəmiyyətli bir sonra kompüterinizi qarışıq almaq üçün gedir isə
- yerləşir və harada saxlanılır nə yaddaş locations var haqqında
Ü data yaddaşında saxlanılır.
Və belə bir göstərici azad iki dəfə bunu istəmirəm ki, pis bir şey deyil.
>> Yanlış getmək bilər ki, başqa şeylər sizeof istifadə olunur.
Belə ki, bu halda, 8 bayt malloc
və sağ iki integers eyni şey var?
Belə ki, bu, gözəl təhlükəsiz, lakin?
Yaxşı, Lucas, müxtəlif mimarilerde danışdıq kimi
integers müxtəlif uzunluqlu var.
Belə ki, istifadə etdiyiniz cihaz haqqında, integers haqqında 4 bayt var
lakin bəzi digər sistem onlar 8 bayt ola bilər və ya onlar 16 bayt ola bilər.
Belə ki, mən yalnız burada bu rəqəm istifadə əgər,
Bu proqram cihaz haqqında iş bilər
lakin bəzi digər sistem kifayət qədər yaddaş ayrılması gedən deyil.
Bu halda, bu sizeof operator üçün istifadə edir.
Nə edir, biz zəng zaman sizeof (int)
bu, bizim proqram çalışan sistem bir tam ölçüdə verir.
Belə ki, bu halda, sizeof (int), Aracın kimi bir şey, 4 qayıdacaq
və indi 8 olan bu iradə 4 * 2,
olan yalnız iki integers üçün zəruri kosmik məbləği.
Fərqli bir sistem də, bir int 16 bayt və ya 8 bayt kimi, əgər
yalnız bu məbləğ saxlamaq üçün kifayət qədər bytes geri olacaq.
>> Və nəhayət, structs.
Belə ki, yaddaşında bir sudoku board saxlamaq istəyirdi, biz bunu edə bilər?
Siz ilk şey üçün bir dəyişən kimi hesab bilər
ikinci şey üçün bir dəyişən, üçüncü şey üçün bir dəyişən,
pis, doğru - dördüncü şey üçün bir dəyişən?
Belə ki, bu üst edə bilər bir irəliləyiş 9 x 9 array etməkdir.
Bu gözəl, lakin siz sudoku heyəti ilə başqa şeylər birləşmək istədiyini əgər
, şura çətinlik nə kimi
və ya, məsələn, nə üçün hesab və ya nə qədər zaman bu board həll qəbul olub?
Yaxşı, nə edə bilər bir struct yaratmaq bilər.
Mən əsasən dedi alıram, mən burada artıq bu strukturun müəyyən edirəm ki,
və mən x 9 9 bir board ibarət olan bir sudoku board müəyyən edirəm.
>> Və bunun səviyyəsi adı göstəricilərinə malikdir nə.
Bu da mən indi am yerləşir koordinatları olan x və y var.
Bu da zaman [anlaşılmaz] sərf edib və bu, mən indiyə qədər inputted etdiyiniz hərəkət sayı var.
Və bu halda, yalnız bir strukturu data bütöv bir dəstə gruplandırmak bilər
əvəzinə müxtəlif dəyişənlərin kimi ətrafında uçan kimi olan
Mən, həqiqətən, track saxlamaq bilməz.
Bu bizə bu struct daxilində fərqli şeylər sened növ yalnız gözəl sintaksis var imkan verir.
Mən board.board nə yalnız ola bilər, mən geri sudoku board almaq.
Board.level, mən nə qədər sərt almaq.
Board.x və board.y mənə board ola bilər harada koordinatları verir.
Və mən, biz struct sahələri zəng nə daxil oldum.
Bu ki, bir növü olan sudokuBoard, müəyyən edir.
Və indi biz buradayıq. Mən növü sudokuBoard və "board" adlı dəyişən var.
Və indi mən burada artıq bu quruluş edir ki, bütün sahələrində əldə edə bilərsiniz.
>> Structs suallarınız? Bəli?
Int x, y üçün [Tələbə], bir xətt, həm də elan? >> [Joseph] Ah-ha.
[Tələbə] Belə ki, yalnız onlara bütün bunu edə bilər?
X kimi, y vergül dəfə ümumi?
[Joseph] Bəli, siz mütləq eyni xətt üzərində x və y qoyulan səbəbi, lakin bilər -
biz yalnız eyni xətt üzrə bu edə bilərsiniz niyə və sual?
Niyə biz yalnız eyni xətt üzrə bütün bunlar qoymaq deyil
x və y-birinə bağlı,
və bu, bir mənada, yalnız stylistically daha doğru
eyni xətt üzrə iki şeyi qruplaşdırılması, çünki
ki kimi sort eyni şey aiddir.
Mən yalnız başqa bu split. Bu yalnız bir stil şey.
Bu funksional heç bir fərq edir.
Structs hər hansı digər suallar?
Siz struct ilə Pokédex müəyyən edə bilərsiniz.
A Pokemon bir sıra və bir məktub, bir sahibi bir növü var.
Əgər Pokemon bir sıra varsa, sonra sağ, bir Pokédex etmək olar?
OK, sərin. Belə ki, structs haqqında suallar. Bu structs əlaqəsi.
>> Nəhayət, gdb. Gdb nə imkan vermir? Bu proqram debug imkan verir.
Siz gdb istifadə əgər, mən qısa seyr tövsiyə edərdi
və yalnız gdb nə üzərində gedən, necə, siz onu istifadə edə bilər necə, bu iş
və bir proqram bu test.
Və gdb nə imkan verir nə fasilə [anlaşılmaz] qədər proqram imkan verir ki,
və praktiki xətti.
Məsələn, mən, mənim proqram xətti 3 kimi duraklatabilirsiniz icra istəyirəm
və mən line 3 Ben isə mən var ki, bütün dəyərlər çap edə bilərsiniz.
Bir xətt duraklatarak kimi və biz dediyimiz
biz ki, bu xətt bir breakpoint qoyulması zəng edir
və biz o zaman proqramı dövlət dəyişənlərin çap edə bilərsiniz.
>> Biz sonra proqram line-by-line vasitəsilə orada addım bilər.
Və sonra biz zaman yığın dövlət baxmaq olar.
Və gdb, nə biz, biz C fayl cingilti zəng ki, istifadə etmək üçün
lakin biz bu-ggdb bayrağı keçməlidirlər.
Və bir dəfə biz yalnız yaranan çıxış fayl gdb çalışan ilə tamamlayın.
Və belə ki, bu kimi mətn bəzi kimi kütləvi almaq
lakin siz həqiqətən bütün əvvəlində əmrləri yazın olunur.
Fasilə əsas əsas bir breakpoint qoyur.
Siyahısı 400 line 400 ətrafında kodu xətləri siyahıları.
Və bu halda yalnız, oh, ətrafında baxmaq və demək olar
Mən bu xətt olan line 397 bir breakpoint, təyin etmək istədiyiniz
və sonra proqramı addım daxil çalışır və pozmaq olacaq.
Orada fasilə olacaq və siz, məsələn, aşağı və ya yüksək dəyər çap edə bilərsiniz.
Və siz bilmək lazımdır əmrləri bir dəstə var
və bu Slideshow, saytında qədər davam edəcək
yalnız bu istinad etmək istəyirəm və ya istifadə etmək vərəqələri onları qoymaq istəyirəm əgər, çekinmeyin.
>> Cool. Bu Quiz Review 0 idi, və hər hansı bir sualınız varsa, biz ətrafında qalmaq lazımdır.
Bütün hüquqlar.
>> [Alqış]
>> [CS50.TV]