JavaRush /Java Blogu /Random-AZ /Harvard CS50: 1-ci həftənin tapşırıqları (3 və 4-cü mühaz...
Masha
Səviyyə

Harvard CS50: 1-ci həftənin tapşırıqları (3 və 4-cü mühazirələr)

Qrupda dərc edilmişdir
Harvard CS50: 1-ci həftə tapşırıqları (3 və 4-cü mühazirələr) - 1Dostlar, əsas nəzəri məlumatları seminar qeydlərindən əldə edə bilərsiniz . Orada, C dilinin əsaslarına əlavə olaraq, xüsusi bulud IDE CS50-yə necə qoşulmağı izah edir (bu, tapşırıqları yerinə yetirmək və yoxlamaq üçün edilməlidir) və əsas zəruri Linux əmrlərini və dil strukturlarını təsvir edir. Mühazirədə təqdim olunan material və C ilə bağlı qeydlər sizə kifayət etmirsə, başqa mənbələrə müraciət edin. Məsələn, bu məqalənin sonunda sadalananlar. " Əlavə materiallar " mövzusunda
  • İlk həftə hədəfləri
  • IDE CS50
  • Komanda xətti və iş masası yeniləməsi
  • IDE-də işləyir
  • Salam, C!
  • Bugs?
  • Doğrulama yoxlanışı: check50 testi
  • C Əsasları: Scratch ilə müqayisə
  • C-də əsas məlumat növləri
  • Kitabxanalar C
  • Yenidən Hello C: ən sadə proqramların sintaksisinin təhlili
  • C-də I/O haqqında bir az daha çox
Bu mövzuda materiallar:
  • Təsdiqlənmiş məlumat girişi: cs50.h kitabxanasının xüsusi funksiyaları
  • Tapşırıq 1. Su sərfinin ağıllı hesablanması
  • Tapşırıq 2. Mario bizimlədir!
  • Tapşırıq 3. Dəyişiklik əldə etmək vaxtıdır
  • Kodunuzu necə doğrulamaq və işarələr əldə etmək olar
  • Kod resursu
  • əlavə ədəbiyyat

Təsdiqlənmiş məlumat girişi: cs50.h kitabxanasının xüsusi funksiyaları

Bu kursu daha rahat etmək üçün biz xüsusi CS50 kitabxanası işləyib hazırlamışıq ki, bu kitabxana xüsusilə istifadəçi tərəfindən daxil edilmiş məlumatların emalı üçün çox faydalı funksiyalara malikdir.
  • GetString()istifadəçinin daxil etdiyi sətri oxuyur;

  • GetInt()istifadəçinin daxil etdiyi sətri oxuyur və onun tərkibində tam ədəd olub-olmadığını yoxlayır;

  • GetFloat()istifadəçinin daxil etdiyi sətiri oxuyur və orada üzən nöqtə nömrəsinin olub-olmadığını yoxlayır;

  • GetLongLong()istifadəçinin daxil etdiyi sətri oxuyur və onun uzun həqiqi ədədi olub-olmadığını yoxlayır.

Tapşırıq 1. Su sərfinin ağıllı hesablanması

Harvard CS50: 1-ci həftənin tapşırıqları (3 və 4-cü mühazirələr) - 2Məntiqlidir: nə qədər uzun müddət duş qəbul edirsinizsə, bu prosesə bir o qədər çox su sərf olunur. Gəlin anlayaq nə qədərdir? Duşunuz güclə açıq olsa belə, dəqiqədə ondan təxminən 6 litr su axır. Bu da içmək üçün özünüzlə apardığınız 12 şüşə sudur. Adətən insan təxminən 10 dəqiqə duş qəbul edir.Ümumilikdə yuyulmaq üçün 120 yarım litrlik şüşə lazımdır. Olduqca çox! water.cSizdə fayl yaradın ~/workspace/pset1. Proqram duş üçün vaxtdan asılı olaraq neçə şüşə suyun istifadə olunduğunu hesablamalıdır. Yəni:
  1. Proqram istifadəçidən duşda sərf olunan dəqiqələrin sayını soruşur
  2. İstifadəçi müsbət tam ədəd daxil edir
  3. Proqram istifadəçinin istifadə etdiyi şüşələrin sayını göstərir.
username:~/workspace/pset1 $ ./water
minutes: 10
bottles: 120
Sadəlik üçün bu dəfə hesab edəcəyik ki, istifadəçi həmişə dəqiqələrin sayını düzgün daxil edir, yəni daxil edilən rəqəmin müsbət və tam ədəd olub-olmadığını yoxlamırıq. Daha sonra çek yazmağı öyrənəcəyik, amma hələlik bu kifayətdir. Proqramın düzgün işlədiyini yoxlamaq üçün check50,terminala aşağıdakı sətri daxil etməlisiniz:
check50 2015.fall.pset1.water water.c
Kurs işçiləri tərəfindən yazılmış proqramın necə işlədiyini görmək istəyirsinizsə water, aşağıdakı əmri yerinə yetirin:
~cs50/pset1/water

Tapşırıq 2. Mario bizimlədir!

Harvard CS50: 1-ci həftənin tapşırıqları (3 və 4-cü mühazirələr) - 3Dünyanın ən məşhur santexnikasını tanıyırsınız? Nintendo-nun köməyi ilə qırmızı papaqlı uydurma bığlı və bir qədər dolğun oğlan bir neçə nəsil oyunçular üçün qəhrəmana çevrildi. Kimdən danışdığımızı bilmirsinizsə, burada klassik 1985 oyununa keçid var : mənə inanın, o, hələ də yaxşıdır və yoxlamağa dəyər! Siz həmçinin smartfonlar və ya oflayn emulyatorlar üçün klassik Super Mario versiyasını tapa bilərsiniz. Bütün bunlar ümumi inkişaf üçün lazımdır, bu, təəssüf ki, hələ bir vəzifə deyil ;). Və vəzifə budur. Birinci Mario səviyyəsinin sonunda hər bir oyunçu bu yarım piramidanı gördü mario.c: ~/workspace/pset1. Proqramımız gördüyünüz birinə bənzər, lakin birbaşa konsolda qrafikasız yarım piramida çəkəcək: blokların hər biri hash işarəsindən (#) ibarət olacaq. Bunu necə edəcəyinizi hələ başa düşməmisinizsə belə, mənə inanın: bu asandır. Məsələni daha maraqlı etmək üçün ona 0-dan 23-ə qədər mənfi olmayan tam ədəddən istifadə edərək yarım piramidanın hündürlüyünü təyin etmək qabiliyyətini əlavə edək.Şəkildəki piramidanın hündürlüyü ən yüksək yerdə hesab olunur, yəni 8-ə bərabərdir. Əgər istifadəçi nömrəni səhv daxil edirsə, ondan bunu bir dəfə təkrar etməsini xahiş etmək lazımdır. Sonra yaradın (printf bir piramidadan istifadə edərək). Aşağıdakı nümunədə olduğu kimi, yarım piramidanızın aşağı sol küncünü terminal pəncərəsinin sol kənarı ilə hizalamağa diqqət yetirin. Altını çizilmiş mətn istifadəçinin özü daxil etdiyi mətndir.
username:~/workspace/pset1 $ ./mario

height: 8
       ##
      ###
     ####
    #####
   ######
  #######
 ########
#########
Ən sağdakı iki sütunun eyni hündürlükdə olduğuna diqqət yetirin. Boruları, buludları və Marionun özünü hələ yaratmağa dəyməz =). Ən azından bu vəzifə üçün. Əgər istifadəçi səhv məlumat daxil edibsə (rəqəm daxil etməyibsə və ya birdən kiçik və ya 23-dən çox rəqəm daxil edibsə), proqram ondan aşağıdakı nümunədə olduğu kimi, altından xətt çəkilmiş mətnin nə olduğu kimi məlumatları yenidən daxil etməyi xahiş etməlidir. istifadəçi klaviaturadan daxil oldu. Daxil edilmiş sətri oxumaq üçün istifadə edin GetInt. Bu, səhv daxilolmaların olub olmadığını yoxlamağa kömək edə bilər, lakin bütün hallarda deyil.
username:~/workspace/pset1 $ ./mario
Height: -2
Height: -1
Height: foo
Retry: bar
Retry: 1
##
Proqramı tərtib etmək üçün terminala sətri daxil edin:
make mario
və ya daha şəffaf, lakin daha uzun versiya:
clang -o mario mario.c -lcs50
Bundan sonra, icra üçün proqramı işə salın:
./mario
Proqramın düzgün işlədiyini yoxlamaq istəyirsinizsə, işlədin check50:
check50 2015.fall.pset1.mario mario.c
Kurs köməkçilərinin mario versiyası ilə oynamaq istəyirsinizsə, aşağıdakı sətri yazın:
~cs50/pset1/mario

Tapşırıq 3. Dəyişiklik əldə etmək vaxtıdır

Harvard CS50: 1-ci həftənin tapşırıqları (3 və 4-cü mühazirələr) - 4Bizim genişliklərimizdə bunu görməmişik, amma ABŞ-da, görünür, fotoşəkildə göstərilən belə bir oyuncaq var: silindrlər müxtəlif diametrli (və nominallı) sikkələr üçün nəzərdə tutulmuşdur, onlar yay mexanizmi ilə buraxılır. , və bölmənin özü uşaq kassirinin kəmərinə bağlana bilər. Bununla belə, kimsə kassirə böyük hesabla ödəsə nə olar? Dəyişiklik üçün sikkələri saymağın nə qədər çətin olacağını təsəvvür edin. Buraxılan sikkələrin sayını minimuma endirmək üçün "acgöz" alqoritmlərdən istifadə edə bilərsiniz. Onlar, Milli Standartlar və Texnologiya İnstitutunun (NIST) müəyyən etdiyi kimi, problemin həllinin hər bir addımında həmişə optimal həlli tapırlar və son həllin (belə addımların cəmindən əldə edilən) də optimal olacağını güman edirlər. Bunun mənası nədi? Təsəvvür edək ki, bir kassirin müştəriyə 41 sent dəyərində pul borcu var və onun kəmərində 25, 10, 5 və 1 sentlik sikkələrin dəyişdirilməsi üçün silindrlər var. "Acgöz" alqoritmi rəhbər tutan kassir dərhal ilk addımda maksimumu vermək istəyəcək. Bu nöqtədə, optimal və ya ən yaxşı həll yolu 25 pens vermək olardı. 41-25 = 16. Ödəməyə 16 pens qalıb. Aydındır ki, 25 pens çox çoxdur, buna görə də 10 qalır. 16-10 = 6. İndi eyni prinsipdən istifadə edərək 5 pens veririk, sonra 1. Beləliklə, alıcı 25, 10 nominalında yalnız dörd sikkə alacaq, 5 və 1 pens. Məlum oldu ki, pul emissiyası üçün "acgöz" addım-addım təlimatlar təkcə bu iş üçün deyil, həm də ABŞ valyuta denominasiyaları (və Avropa Birliyi) üçün də optimaldır. Yəni, kassirin kifayət qədər hər hansı nominalda sikkələri varsa, alqoritm ən yaxşı şəkildə işləyəcək, yəni bütün mümkün hallardan minimum sikkə buraxacaq. Beləliklə, dəyişməyə ehtiyacımız olan minimum sikkə sayı nə qədərdir? Bu, bizim üçüncü vəzifəmizdir. greedy.cKataloqunuzda bir fayl yaradın ~/workspace/pset1. Verildi: 25, 10, 5, 1 sent nominalında sikkələr Proqramda:
  1. İstifadəçidən nə qədər dəyişikliyin veriləcəyini soruşun
  2. Bunu edə biləcəyiniz minimum sikkə sayını hesablayın
Qeyd:GetFloatBiz giriş üçün CS50 kitabxanasından və printfçıxış üçün standart I/O kitabxanasından funksiyadan istifadə edəcəyik . Bundan əlavə, proqram girişin düzgünlüyünü yoxlamalıdır. GetFloatİstifadəçiyə nöqtə ilə ayrılmış dollar və sentdə dəyər daxil etməyə icazə vermək üçün istifadə etməyinizi xahiş etdik . Məsələn, 9,75 ABŞ dolları borcumuz varsa, istifadəçi 9,75 və ya 975 dollar deyil, 9,75 daxil etməlidir. Siz istifadəçinin məntiqli nömrə daxil etməsinə əmin olmalısınız. Deyək ki, qeyri-mənfi; funksiyanın özü buna GetFloatkömək etməyəcək . İstifadəçi səhv daxil edərsə, onu təkrarlamasını və proqramı yalnız düzgün məlumatlarla işlətməsini xahiş etməlisiniz. Üzən nöqtə nömrələrinə xas olan qeyri-dəqiqliklərdən çəkinin. Məsələn, 0.01 birbaşa olaraq göstərilə bilməz float. Aşağıdakı kodu istifadə edərək, məsələn, 50 onluq yerlə formatlanmış çıxışdan istifadə etməyə çalışın:
float f = 0.01;
printf("%.50f\n", f);
Yeri gəlmişkən, bir şeyi hesablamazdan əvvəl, bütün məbləği sentlərə çevirmək (və eyni zamanda onu -ə çevirmək float) məntiqli olardı intki, bu da çoxlu səhvlərdən və çətinliklərdən qaçmağa kömək edəcək. Avtomatik kod analizatorumuzun probleminizi düzgün yoxlaya bilməsini təmin etmək üçün proqramınızın çıxışının son sətirində sikkələrin minimum sayından başqa heç bir məlumat olmadığından əmin olun: özündən sonra \n olan tam ədəd (JavaRush öyrənənlər) burada nədən danışdığımızı yaxşı bilirik =)). Aşağıda proqramınızın nəticəsinin necə görünəcəyinə dair bir nümunə verilmişdir.
username:~/workspace/pset1 $ ./greedy
O hai! How much change is owed?
0.41
4
Üzən nöqtəli ədədlərin xarakterini nəzərə alaraq, siz sıfıra məhəl qoymayaraq belə bir ədədi .41 formasında daxil edə bilərsiniz. Əlbəttə ki, proqramı tam olaraq səhv məlumat daxil etmək imkanı üçün yoxlamaq istəyən istifadəçilər belə bir şey görməlidirlər:
username:~/workspace/pset1 $ ./greedy
O hai! How much change is owed?
-0.41
How much change is owed?
-0.41
How much change is owed?
foo
Retry: 0.41
4
Bu tələblərə və yuxarıda gördüyünüz nümunəyə əsasən, kodunuz çox güman ki, hansısa döngədən ibarət olmalıdır. Tətbiqi sınaqdan keçirərkən, dövrənin dayanmadığını başa düşsəniz, ctrl-c kombinasiyası ilə proqramın icrasını dayandıra bilərsiniz (bəzən bir neçə dəfə). Siz artıq proqramı necə tərtib etməyi və işlətməyi bilirsiniz. Proqramınızın düzgün işlədiyini yoxlamaq istəyirsinizsə, köməkçi proqramdan istifadə edərək check50terminala aşağıdakı sətri daxil edin:
check50 2015.fall.pset1.greedy greedy.c
Kurs köməkçiləri tərəfindən hazırlanmış bu proqramla oynamaq istəyirsinizsə, aşağıdakı əmri yazın:
~cs50/pset1/greedy

Kodunuzu necə doğrulamaq və işarələr əldə etmək olar

  1. Seçim 1

    Kodun düzgünlüyünü yoxlamaq sizin üçün vacibdirsə və yekun qiymət almaq deyilsə, əmrdən istifadə edərək onu yoxlaya və düzəldə bilərsiniz.

    check50 2015.fall.pset1.name name.c

    CS50 IDE terminal xəttinə daxil edilib? nametapşırıq faylınızın adı haradadır .

  2. Seçim 2

    Qiymətlər əldə etmək istəyirsinizsə (əslində check50 ilə eynidir, lakin nəticəni yadda saxlamaq və bəzi formaları ingilis dilində doldurmaqla, bu addımları yerinə yetirin:

    • Addım 1/2

      1. Proqramlar hazır olduqda, CS50 IDE-ə daxil olun.
      2. CS50 IDE-nin yuxarı sol küncündə, onun fayl brauzerində, terminal pəncərəsində deyil, hello.c faylınıza (pset1 qovluğunda yerləşən) sol və ya sağ klikləyin və Yüklə düyməsini basın. Brauzerin hello.c yüklədiyini görməlisiniz.
      3. Su üçün təkrarlayın.c.
      4. mario.c üçün təkrarlayın.
      5. Acgözlük üçün təkrarlayın.c.
      6. Ayrı tab və ya pəncərədə CS50 Submit -ə daxil olun .
      7. Pəncərənin aşağı sol küncündə Göndər düyməsini klikləyin.
      8. Görünən pəncərədə Problem Set 1 altında, Yeni Təqdimatı Yüklə üzərinə klikləyin.
      9. Görünən pəncərədə Fayl əlavə et... düyməsini basın. Açıq Fayllar adlı bir pəncərə görünməlidir.
      10. hello.c-nin endirildiyi yerə gedin. O, adətən Yükləmələr qovluğunda və ya yükləmələr üçün defolt olaraq sizə təyin edilmiş qovluqda yerləşir. hello.c tapdıqdan sonra onu qeyd etmək üçün üzərinə bir dəfə klikləyin, sonra Açıq düyməsini basın.
      11. Yenidən Fayl əlavə et... klikləyin və Faylları Aç pəncərəsi yenidən görünəcək.
      12. İndi eyni şəkildə water.c faylını tapın. Bunun üzərinə vurun, sonra Aç (və ya "Aç") düyməsini basın.
      13. İndi mario.c tapın. Həm də eyni şəkildə klikləyin və açın.
      14. greedy.c faylı ilə hər şey eynidir.
      15. Fayllarınızı CS50 serverlərinə yükləməyə başlamaq üçün Yükləməyə başlayın.
      16. Görünən ekranda Fayl Seçilmədi etiketli bir pəncərə görəcəksiniz. Siçan kursorunu ekranın sol tərəfinə aparsanız, yüklədiyiniz faylların siyahısını görəcəksiniz. Hər birinin məzmununu təsdiqləmək üçün üzərinə klikləyin. (Digər düymələrə və ya nişanlara basmağa ehtiyac yoxdur). Əgər faylı yoxlamaq üçün göndərməyə hazır olduğunuza əminsinizsə, işin bitdiyini hesab edin! Əgər kodunuzu yenidən özünüz yoxlamaq və ya nəyisə düzəltmək istəyirsinizsə, CS50 Submit-ə qayıdın və bu addımları təkrarlayın. İstədiyiniz qədər təkrar göndərə bilərsiniz; Yalnız ən son təqdimat qiymətləndiriləcək.
  3. Addım 2/2 (qiymətləndirmə üçün tələb olunmur, əgər =))

    İndi xüsusi formaları tapa biləcəyiniz https://www.edx.org/course/cs50s-introduction-computer-science-harvardx-cs50x ünvanına keçin . Onlarda bir neçə nəzəri suala cavab verməli və sonra onların altında Təqdim et düyməsini sıxmalısınız.

Ulduz işarəsi olan suallar tələb olunur:
  • Yaxşı, bunun gəldiyini görməliydim! Bir neçə cümlə ilə kitabxana nədir? * (Kitabxananın nə olduğunu qısaca təsvir edin)
  • Bir neçə cümlə ilə #include <cs50.h> onu hansısa proqramın üstünə yazanda hansı rol oynayır? *(bəzi proqramların yuxarısında görünən #include <cs50.h> xəttinin rolu nədir?)
  • Problem Set 0: Scratch-a təxminən neçə saat sərf etdiyinizi söyləyərdiniz?
  • Problem Set 1: C-yə təxminən neçə saat sərf etdiyinizi söyləyərdiniz?
  • İndiyə qədər CS50x haqqında nə düşünürsünüz? *(Hal-hazırda CS50 haqqında rəyiniz, bəyənmə və ya bəyənməmə seçimini seçin)
  • http://www.facebook.com/groups/cs50 ünvanında CS50s Facebook Group vasitəsilə sinif yoldaşlarınızdan və ya heyətdən kömək istəmisiniz? *(facebook qrupunda digər tələbələrdən və ya köməkçilərdən kömək istəmisiniz)
  • http://www.reddit.com/r/cs50 ünvanında CS50s Subreddit vasitəsilə sinif yoldaşlarınızdan və ya heyətdən kömək istəmisinizmi *(Subreddit vasitəsilə digər tələbələrdən və ya köməkçilərdən kömək istəmisiniz)
  • @cs50 və ya #cs50 istifadə edərək Twitter vasitəsilə sinif yoldaşlarından və ya işçilərdən kömək istəmisiniz? *( @cs50 və ya #cs50 istifadə edərək Twitter-də digər tələbələrdən və ya TA-lardan kömək istədinizmi).
Dostlar, hər hansı bir sualınız varsa, bu təlimatın altındakı şərhlərdə yazın. Məlumata dəvət almaq üçün JavaRush 5 səviyyəsinə çatmamısınızsa, bunu etməyi tövsiyə edirik. Pulsuz, maraqlı və çox çətin deyil.

Kod mənbəyi:

  1. Üçüncü mühazirə

    http://cdn.cs50.net/2015/fall/lectures/1/w/src1w.zip

  2. Dördüncü mühazirə

    http://cdn.cs50.net/2015/fall/lectures/1/f/src1f.zip

    http://cdn.cs50.net/2015/fall/lectures/1/f/src1f/

əlavə ədəbiyyat

http://cpp.com.ru/kr_cbook - Dilin müəllifləri - Brian Kernighan və Dennis Ritchie-dən C üzrə klassik kitabın rus versiyası. Dar dairələrdə K&R kimi tanınır. Lakin tərcümə ən yeni nəşr deyil. İlk üç fəsli oxuyun. Lazım olduğundan bir az daha çox material olacaq, lakin problemləri həll etmək üçün kifayətdir. https://computer.howstuffworks.com/c.htm CS50 müəllifləri tərəfindən tövsiyə olunan mənbədir. İngiliscə. Səhifə 1-7, 9 və 10.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION