JavaRush /Java blogi /Random-UZ /Garvard CS50: 1-hafta topshiriqlari (3 va 4-ma'ruzalar)
Masha
Daraja

Garvard CS50: 1-hafta topshiriqlari (3 va 4-ma'ruzalar)

Guruhda nashr etilgan
Garvard CS50: 1-hafta topshiriqlari (3 va 4-ma'ruzalar) - 1Do'stlar, siz asosiy nazariy ma'lumotlarni seminar eslatmalaridan olishingiz mumkin . U erda, C asoslaridan tashqari, u maxsus bulutli IDE CS50 ga qanday ulanishni tasvirlaydi (bu vazifalarni bajarish va tekshirish uchun bajarilishi kerak) va asosiy zarur Linux buyruqlari va til tuzilmalarini tavsiflaydi. Agar ma'ruza va eslatmalarda C haqida yetarlicha material topmasangiz, boshqa manbalarga murojaat qiling. Masalan, ushbu maqolaning oxirida sanab o'tilganlar. " Qo'shimcha materiallar " mavzusida
  • Birinchi hafta maqsadlari
  • IDE CS50
  • Buyruqlar qatori va ish stoli yangilanishi
  • IDE da ishlash
  • Salom, C!
  • Xatolarmi?
  • Tasdiqlash tekshiruvi: check50 testi
  • C asoslari: Scratch bilan solishtirish
  • C tilidagi asosiy ma'lumotlar turlari
  • Kutubxonalar C
  • Salom C yana: eng oddiy dasturlarning sintaksisini tahlil qilish
  • C tilida I/U haqida bir oz ko'proq
Ushbu mavzu bo'yicha materiallar:
  • Tasdiqlangan ma'lumotlarni kiritish: cs50.h kutubxonasining maxsus funktsiyalari
  • Vazifa 1. Suv sarfini aqlli hisoblash
  • Vazifa 2. Mario biz bilan!
  • Vazifa 3. O'zgarish vaqti
  • Kodni qanday tekshirish va belgilarni olish
  • Kod manbai
  • qo'shimcha adabiyotlar

Tasdiqlangan ma'lumotlarni kiritish: cs50.h kutubxonasining maxsus funktsiyalari

Ushbu kursni yanada qulay qilish uchun biz maxsus CS50 kutubxonasini ishlab chiqdik, u, xususan, foydalanuvchi tomonidan kiritilgan ma'lumotlarni qayta ishlash uchun juda foydali funktsiyalarga ega.
  • GetString()foydalanuvchi kiritgan satrni o'qiydi;

  • GetInt()foydalanuvchi kiritgan satrni o'qiydi va unda butun son bor yoki yo'qligini tekshiradi;

  • GetFloat()foydalanuvchi kiritgan satrni o'qiydi va unda suzuvchi nuqta raqami mavjudligini tekshiradi;

  • GetLongLong()foydalanuvchi kiritgan satrni o'qiydi va unda uzun haqiqiy raqam mavjudligini tekshiradi.

Vazifa 1. Suv sarfini aqlli hisoblash

Garvard CS50: 1-hafta topshiriqlari (3 va 4-ma'ruzalar) - 2Bu mantiqan to'g'ri: siz qancha uzoq dush qabul qilsangiz, bu jarayonga ko'proq suv sarflanadi. Keling, aniqlaylik, qancha? Dushingiz zo'rg'a ochiq bo'lsa ham, undan daqiqada taxminan 6 litr suv oqib chiqadi. Va bu siz ichish uchun olib yuradigan 12 shisha suv. Odatda odam taxminan 10 daqiqa dush oladi.Jami yuvish uchun 120 yarim litrli shisha kerak bo'ladi. Juda ko'p! water.cO'zingizning faylingizda fayl yarating ~/workspace/pset1. Dastur vaqtga qarab dush uchun qancha shisha suv ishlatilishini hisoblashi kerak. Ya'ni:
  1. Dastur foydalanuvchidan dushda qancha daqiqa sarflanganini so'raydi
  2. Foydalanuvchi musbat butun son kiritadi
  3. Dastur foydalanuvchi tomonidan ishlatiladigan shishalar sonini ko'rsatadi.
username:~/workspace/pset1 $ ./water
minutes: 10
bottles: 120
Oddiylik uchun bu safar foydalanuvchi daqiqalar sonini doim to'g'ri kiritadi deb faraz qilamiz, ya'ni kiritilgan raqam musbat va butun son ekanligini tekshirmaymiz. Keyinchalik cheklarni qanday yozishni o'rganamiz, ammo hozircha bu etarli. Dasturning to'g'ri ishlashini tekshirish uchun check50,terminalda quyidagi qatorni kiritishingiz kerak:
check50 2015.fall.pset1.water water.c
Va agar siz kurs xodimlari tomonidan yozilgan dastur qanday ishlashini ko'rishni istasangiz water, quyidagi buyruqni bajaring:
~cs50/pset1/water

Vazifa 2. Mario biz bilan!

Garvard CS50: 1-hafta topshiriqlari (3 va 4-ma'ruzalar) - 3Dunyodagi eng mashhur plumberni bilasizmi? Nintendo yordamida qizil qalpoqchadagi xayoliy mo'ylovli va biroz to'la yigit geymerlarning bir necha avlodi uchun qahramonga aylandi. Agar siz kim haqida gapirayotganimizni bilmasangiz, 1985 yilgi klassik o'yinga havola : menga ishoning, u hali ham yaxshi va tekshirishga arziydi! Smartfonlar yoki oflayn emulyatorlar uchun klassik Super Mario versiyasini ham topishingiz mumkin. Bularning barchasi bizga umumiy rivojlanish uchun kerak, bu, afsuski, hali vazifa emas;). Va vazifa bu. Birinchi Mario darajasining oxirida har bir o'yinchi ushbu yarim piramidani ko'rdi: mario.co'zingizning faylingizda fayl yarating ~/workspace/pset1. Bizning dasturimiz siz ko'rganga o'xshash yarim piramidani chizadi, lekin to'g'ridan-to'g'ri konsolda grafiksiz: bloklarning har biri xesh belgisidan iborat bo'ladi (#). Agar buni qanday qilishni hali tushunmagan bo'lsangiz ham, menga ishoning: bu oson. Masalani qiziqarliroq qilish uchun unga yarim piramidaning balandligini 0 dan 23 gacha manfiy bo'lmagan butun son yordamida o'rnatish imkoniyatini qo'shamiz. Rasmdagi piramidaning balandligi eng yuqori o'rinda deb hisoblanadi, ya'ni 8 ga teng. Agar foydalanuvchi raqamni noto'g'ri kiritgan bo'lsa, uni yana bir marta takrorlashni so'rashingiz kerak. Keyin hosil qiling (printf piramidasidan foydalanib). Quyidagi misolda bo'lgani kabi yarim piramidangizning pastki chap burchagini terminal oynasining chap qirrasi bilan tekislang. Belgilangan matn foydalanuvchining o'zi kiritgan narsadir.
username:~/workspace/pset1 $ ./mario

height: 8
       ##
      ###
     ####
    #####
   ######
  #######
 ########
#########
E'tibor bering, eng o'ngdagi ikkita ustun bir xil balandlikda. Quvurlar, bulutlar va Marioning o'zi hali =) hosil qilishning hojati yo'q. Hech bo'lmaganda bu vazifa uchun. Agar foydalanuvchi noto'g'ri ma'lumotlarni kiritgan bo'lsa (raqamni kiritmagan yoki bittadan kichik yoki 23 dan katta raqamni kiritgan bo'lsa), dastur undan quyidagi misoldagi kabi ma'lumotlarni qayta kiritishni so'rashi kerak, bu erda tagiga chizilgan matn nima? foydalanuvchi klaviaturadan kiritdi. Kiritilgan qatorni o'qish uchun dan foydalaning GetInt. Bu noto'g'ri kiritishni tekshirishga yordam beradi, lekin hamma hollarda emas.
username:~/workspace/pset1 $ ./mario
Height: -2
Height: -1
Height: foo
Retry: bar
Retry: 1
##
Dasturni kompilyatsiya qilish uchun terminalga qatorni kiriting:
make mario
yoki shaffofroq, ammo uzunroq versiya:
clang -o mario mario.c -lcs50
Shundan so'ng, dasturni bajarish uchun ishga tushiring:
./mario
Agar dastur to'g'ri ishlayotganligini tekshirishni istasangiz, ishga tushiring check50:
check50 2015.fall.pset1.mario mario.c
Va agar siz mario o'yinining kurs yordamchilari versiyasi bilan o'ynashni istasangiz, quyidagi qatorni kiriting:
~cs50/pset1/mario

Vazifa 3. O'zgarish vaqti

Garvard CS50: 1-hafta topshiriqlari (3 va 4-ma'ruzalar) - 4Bizning kengliklarda biz buni ko'rmaganmiz, ammo AQShda fotosuratda ko'rsatilgan o'yinchoq borga o'xshaydi: silindrlar turli diametrdagi (va nominaldagi) tangalar uchun mo'ljallangan, ular bahor mexanizmi bilan chiqariladi. , va jihozning o'zi bolalar kassirining kamariga biriktirilishi mumkin. Biroq, kimdir kassirga katta hisob-kitob bilan to'lasa nima bo'ladi? O'zgartirish uchun tangalarni hisoblash qanchalik qiyin bo'lishini tasavvur qiling. Chiqarilgan tangalar sonini kamaytirish uchun siz "ochko'z" deb ataladigan algoritmlardan foydalanishingiz mumkin. Ular, Milliy Standartlar va Texnologiyalar Instituti (NIST) tomonidan ta'riflanganidek, har doim muammoni hal qilishning har bir bosqichida yakuniy yechim (bunday bosqichlar yig'indisidan olingan) ham optimal bo'ladi, deb hisoblab, har doim optimal echimni topadi. Bu nima degani? Tasavvur qilaylik, kassir mijozdan 41 tsent pul qarzi bor va uning kamarida 25, 10, 5 va 1 tsent nominaldagi tangalar silindrlari bor. "Ochko'z" algoritmga amal qilgan kassir birinchi qadamda darhol maksimal miqdorni berishni xohlaydi. Shu nuqtada, optimal yoki eng yaxshi yechim 25 pens berish bo'ladi. 41-25 = 16. To'lash uchun 16 pens qoldi. Shubhasiz, 25 pens juda ko'p, shuning uchun 10 qoldiradi. 16-10 = 6. Endi biz xuddi shu printsip bo'yicha 5 pensni beramiz, keyin esa 1. Shunday qilib, xaridor 25, 10 nominaldagi faqat to'rtta tanga oladi. , 5 va 1 pens. Ma'lum bo'lishicha, pul chiqarish bo'yicha "ochko'z" bosqichma-bosqich ko'rsatmalar nafaqat bu ish uchun, balki AQSh valyuta nominallari uchun ham (va Evropa Ittifoqi uchun ham) maqbuldir. Ya'ni, agar kassirda har qanday nominaldagi tangalar etarli bo'lsa, algoritm eng yaxshi ishlaydi, ya'ni barcha mumkin bo'lgan holatlardan tangalarning minimal sonini chiqaradi. Xo'sh, o'zgartirish berishimiz kerak bo'lgan minimal tangalar soni qancha? Bu bizning uchinchi vazifamiz. greedy.cKatalogingizda fayl yarating ~/workspace/pset1. Berilgan: 25, 10, 5, 1 tsent nominaldagi tangalar Dasturda:
  1. Foydalanuvchidan qancha o'zgarish berishini so'rang
  2. Buni amalga oshirishingiz mumkin bo'lgan minimal tangalar sonini hisoblang
Eslatma:GetFloatKirish uchun CS50 kutubxonasi funksiyasidan va printfchiqish uchun standart I/U kutubxonasidan foydalanamiz . Bundan tashqari, dastur kiritilgan ma'lumotlarning to'g'riligini tekshirishi kerak. GetFloatFoydalanuvchiga nuqta bilan ajratilgan dollar va sentlarda qiymat kiritishiga ruxsat berish uchun sizdan foydalanishingizni soʻradik . Misol uchun, agar bizda $9,75 qarz bo'lsa, foydalanuvchi $9,75 yoki 975 emas, balki 9,75ni kiritishi kerak. Siz foydalanuvchining mantiqiy raqamni kiritishiga ishonch hosil qilishingiz kerak. Aytaylik, salbiy emas; funktsiyaning o'zi bunga GetFloatyordam bermaydi . Agar foydalanuvchi noto'g'ri kiritgan bo'lsa, uni takrorlashni va dasturni faqat to'g'ri ma'lumotlar bilan ishga tushirishni so'rashingiz kerak. O'zgaruvchan nuqta raqamlariga xos bo'lgan noaniqliklardan ehtiyot bo'ling. Masalan, 0,01 ni to'g'ridan-to'g'ri ko'rsatish mumkin emas float. Quyidagi koddan foydalanib, masalan, 50 kasrdan iborat formatlangan chiqishdan foydalanishga harakat qiling:
float f = 0.01;
printf("%.50f\n", f);
Aytgancha, biror narsani sanashdan oldin, butun miqdorni sentlarga aylantirish (va shu bilan birga uni dan ga aylantirish float) mantiqan to'g'ri keladi int, bu ko'p xato va qiyinchiliklardan qochishga yordam beradi. Bizning avtomatik kod analizatorimiz muammoingizni to'g'ri tekshira olishini ta'minlash uchun dasturingiz chiqishining oxirgi qatorida tangalarning minimal sonidan boshqa hech qanday ma'lumot yo'qligiga ishonch hosil qiling: undan keyin \n bo'lgan butun son (JavaRush-ni o'rganuvchilar uchun) Bu erda nima haqida gaplashayotganimizni yaxshi tushunamiz =)). Quyida dasturingiz natijasi qanday bo'lishi kerakligiga misol keltirilgan.
username:~/workspace/pset1 $ ./greedy
O hai! How much change is owed?
0.41
4
O'zgaruvchan nuqtali raqamlarning tabiatini hisobga olgan holda, siz nolga e'tibor bermasligingiz va bunday raqamni .41 shaklida kiritishingiz mumkin. Albatta, dasturni noto'g'ri ma'lumotlarni to'liq kiritish imkoniyatini tekshirmoqchi bo'lgan foydalanuvchilar quyidagilarni ko'rishlari kerak:
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
Ushbu talablarga va yuqorida ko'rgan misolga asoslanib, sizning kodingiz, ehtimol, qandaydir tsiklni o'z ichiga olishi kerak. Agar dasturni sinab ko'rayotganda, tsikl to'xtamasligini tushunsangiz, dasturning bajarilishini ctrl-c kombinatsiyasi bilan to'xtatishingiz mumkin (ba'zan bir necha marta). Siz dasturni kompilyatsiya qilish va ishga tushirishni allaqachon bilasiz. Yordamchi dastur yordamida dasturingiz to'g'ri ishlayotganligini tekshirmoqchi bo'lsangiz check50, terminalga quyidagi qatorni kiriting:
check50 2015.fall.pset1.greedy greedy.c
Va agar siz kurs yordamchilari tomonidan yaratilgan ushbu dastur bilan o'ynashni istasangiz, quyidagi buyruqni yozing:
~cs50/pset1/greedy

Kodni qanday tekshirish va belgilarni olish

  1. Variant 1

    Yakuniy baho olish uchun emas, balki kodning to'g'riligini tekshirish siz uchun muhim bo'lsa, uni buyruq yordamida tekshirishingiz va tuzatishingiz mumkin.

    check50 2015.fall.pset1.name name.c

    CS50 IDE terminal liniyasiga kiritilganmi? namevazifa faylingizning nomi qayerda .

  2. Variant 2

    Agar siz baho olishni istasangiz (asosan check50 bilan bir xil, lekin natijani eslab, ingliz tilida ba'zi shakllarni to'ldirgan holda, quyidagi amallarni bajaring:

    • 1/2 qadam

      1. Ilovalar tayyor bo'lgach, CS50 IDE-ga kiring.
      2. CS50 IDE ning yuqori chap burchagida, uning fayl brauzerida, terminal oynasida emas, hello.c faylingizni (pset1 katalogida joylashgan) sichqonchaning chap tugmasi yoki o'ng tugmasi bilan bosing va Yuklab olish tugmasini bosing. Brauzer hello.c ni yuklaganligini bilib olishingiz kerak.
      3. Suv uchun takrorlang.c.
      4. mario.c uchun takrorlang.
      5. ochko'zlik uchun takrorlang.c.
      6. Alohida yorliq yoki oynada CS50 Submit ga kiring .
      7. Oynaning pastki chap burchagidagi Submit tugmasini bosing.
      8. Ko'rsatilgan oynada 1-muammolar to'plami ostida Yangi topshirishni yuklash tugmasini bosing.
      9. Ko'rsatilgan oynada "Fayllarni qo'shish ..." tugmasini bosing. Fayllarni ochish deb nomlangan oyna paydo bo'lishi kerak.
      10. hello.c yuklab olingan joyga o'ting. Odatda u Yuklashlar papkasida yoki yuklab olish uchun sukut bo'yicha sizga tayinlangan papkada joylashgan. Hello.c-ni topganingizdan so'ng, uni belgilash uchun bir marta bosing, so'ngra Ochish tugmasini bosing.
      11. Yana "Fayllarni qo'shish..." tugmasini bosing va "Fayllarni ochish" oynasi yana paydo bo'ladi.
      12. Endi xuddi shu tarzda water.c faylini toping. Unga bosing va keyin Ochish (yoki "Ochish") tugmasini bosing.
      13. Endi mario.c ni toping. Va xuddi shu tarzda bosing va oching.
      14. greedy.c fayli bilan hamma narsa bir xil.
      15. Fayllaringizni CS50 serverlariga yuklashni boshlash uchun Yuklashni boshlash tugmasini bosing.
      16. Ko'rsatilgan ekranda siz "Fayl tanlanmagan" deb nomlangan oynani ko'rasiz. Agar siz sichqoncha kursorini ekranning chap tomoniga o'tkazsangiz, siz yuklab olgan fayllar ro'yxatini ko'rasiz. Har birining mazmunini tasdiqlash uchun ustiga bosing. (Boshqa tugmalar yoki piktogrammalarni bosish shart emas). Agar siz faylni tekshirish uchun yuborishga tayyor ekanligingizga ishonchingiz komil bo'lsa, ish tugadi deb hisoblang! Agar siz kodingizni qayta tekshirmoqchi bo'lsangiz yoki biror narsani tuzatmoqchi bo'lsangiz, CS50 Submit-ga qayting va ushbu amallarni takrorlang. Siz xohlagancha qayta yuborishingiz mumkin; Faqat eng so'nggi taqdimot baholanadi.
  3. 2/2 qadam (baholash uchun shart emas, agar shunday bo'lsa =))

    Endi https://www.edx.org/course/cs50s-introduction-computer-science-harvardx-cs50x saytiga o'ting , u erda siz maxsus shakllarni topasiz. Ularda siz bir nechta nazariy savollarga javob berishingiz kerak va keyin ularning ostidagi "Yuborish" tugmasini bosing.

Yulduzchali savollar talab qilinadi:
  • Mayli, buni ko'rish kerak edi! Bir necha jumla bilan aytganda, kutubxona nima? * (Kutubxona nima ekanligini qisqacha tavsiflab bering)
  • Bir necha jumlada, #include <cs50.h> uni biron bir dastur ustiga yozganingizda qanday rol o'ynaydi? *(ba'zi dasturlarning tepasida paydo bo'ladigan #include <cs50.h> qatori qanday rol o'ynaydi?)
  • Muammolar to‘plami 0: Scratchga taxminan necha soat vaqt sarflaganingizni aytasizmi?
  • Muammolar to‘plami 1: C ga taxminan necha soat vaqt sarflaganingizni aytasizmi?
  • Hozirgacha CS50x haqida qanday fikrdasiz? *(Hozirgi vaqtda CS50 haqidagi fikringiz, yoqtirish yoki yoqtirmaslik variantini tanlang)
  • Siz http://www.facebook.com/groups/cs50 manzilidagi CS50s Facebook Group orqali sinfdoshlaringiz yoki xodimlardan yordam so'raganmisiz? *(Facebook guruhida boshqa talabalar yoki yordamchilardan yordam so'raganmisiz)
  • Siz http://www.reddit.com/r/cs50 manzilida CS50s Subreddit orqali sinfdoshlaringiz yoki xodimlardan yordam so'raganmisiz *(Subreddit orqali boshqa talabalar yoki yordamchilardan yordam so'raganmisiz)
  • @cs50 yoki #cs50 orqali Twitter orqali sinfdoshlaringiz yoki xodimlardan yordam so'raganmisiz? *(Twitterda @cs50 yoki #cs50 yordamida boshqa talabalar yoki TA lardan yordam so'raganmisiz).
Do'stlar, agar sizda biron bir savol bo'lsa, ularni ushbu qo'llanma ostidagi izohlarda yozing. Agar siz JavaRushning 5-darajasiga chiqmagan bo'lsangiz, ma'lumot uchun taklifnomani qabul qilishingizni tavsiya qilamiz. Bu bepul, qiziqarli va unchalik qiyin emas.

Kod manbai:

  1. Uchinchi ma'ruza

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

  2. To'rtinchi ma'ruza

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

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

qo'shimcha adabiyotlar

http://cpp.com.ru/kr_cbook - Til mualliflari Brayan Kernigan va Dennis Ritchidan C bo'yicha klassik kitobning ruscha versiyasi. Tor doiralarda K&R nomi bilan mashhur. Biroq tarjima eng yangi nashr emas. Birinchi uchta bobni o'qing. Sizga kerak bo'lgandan bir oz ko'proq material bo'ladi, lekin muammolarni hal qilish uchun etarli. https://computer.howstuffworks.com/c.htm CS50 mualliflari tomonidan tavsiya etilgan manbadir. Inglizchada. Sahifa 1-7, 9 va 10.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION