DEV Community

Cover image for CS50 - Week 1
Dilbar
Dilbar

Posted on

CS50 - Week 1

بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيم
Mashinalar faqat binarni tushunadi. Biz kompyuter uchun biror-bir inson o'qiy oladigan ko'rsatmalar ro'yxatini yozganimizda, mashinalar faqat biz hozir mashina kodi deb ataydigan narsani tushunadilar. Bu mashina kodi faqat 1 va 0 lardan iboratdir.
Kompilyator deb ataladigan maxsus dastur yordamida dastlabki kodni mashina kodiga aylantira olamiz.

Yaxshi kodni 3 asosga ko'ra baholashimiz mumkin:

  • to'g'rilik (kod istalgan natijani beryabdimi?),
  • dizayni (kod dizayni yoki strukturasi yaxshi tuzilganmi?),
  • stil (kod qanchalik chiroyli ko'rinishda yozilgan?).

Salom, dunyo!

C dasturlash tilida ekranga biror-bir matnni chiqarmoqchi bo'lsak, printf funksiyasidan foydalanamiz:

#include <stdio.h>

int main(void)
{
    printf("salom, dunyo\n")
}
Enter fullscreen mode Exit fullscreen mode

printf funksiyasi salom, dunyo matnini ekranga chiqaradi. Undagi maxsus \ belgisi kompilyatorga keyingi keladigan belgi maxsus ko'rsatma ekanligini anglatadi. Undan keyin kelayotgan n belgisi esa "new line" (yangi qator) belgisini bildiradi.
Kodning birinchi qatoridagi ifoda stdio.h nomli kutubxona imkoniyatlaridan foydalanmoqchi ekanligimizni bildiruvchi juda maxsus buyruqdir. Bu kutubxona bizga printf funksiyasidan foydalanish imkonini beradi.
Kutubxonalar - bu bizning kodimizda foydalanishimiz mumkin bo'lgan tayyor funktsiyalar to'plamidir.

O'zgaruvchilar

Keling, foydalanuvchidan uning ismi nima ekanligini so'rab, unga salom beruvchi kodni C tilida yozamiz:

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    string answer = get_string("Ismingiz nima? ");
    printf("Assalomu alaykum, %s\n", answer);
}
Enter fullscreen mode Exit fullscreen mode

CS50 kursi uchun maxsus ishlab chiqilgan cs50.h kutubxonasi imkoniyatlaridan ushbu kurs davomida foydalaniladi. Ulardan biri get_string funksiyasidir. get_string funksiyasi foydalanuvchi kiritgan matnni olish uchun ishlatiladi.
answer - bu biz o'zgaruvchi deb ataydigan maxsus foydalanuvchi kiritadigan matnni eslab qolish uchun ajratilgan joy. answer string turiga kiradi. Shuningdek, undan tashqari int, bool, char va boshqalar kabi ko'plab ma'lumotlar turlari mavjud.
%s - bu printf funksiyasiga qandaydir string turidagi o'zgaruvchini qabul qilib olishga tayyorgarlik ko'rishini bildiruvchi format kodi deb ataladigan to'ldiruvchidir.
Shuningdek, boshqa ma'lumot turlari uchun ham format kodlari mavjud, masalan:
%i - int (butun sonlar) uchun.

Shart operatorlari

Keling, foydalanuvchidan int turidagi x va y o'zgaruvchilarini kiritishini so'rab, kiritilgan sonlarni bir-biri bilan solishtiramiz:

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    int x = get_int("x ni kiriting: ");
    int y = get_int("y ni kiriting: ");

    if (x < y)
    {
        printf("x soni y sonidan kichik\n");
    }
}
Enter fullscreen mode Exit fullscreen mode

Bu yerda biz int (butun son) turidagi ikkita o'zgaruvchini, x va y o'zgaruvchilarini yaratyabmiz. Ularning qiymatlari cs50.h kutubxonasining get_int funksiyasi yordamida to'ldiriladi. Shart operatori yordamida x va y qiymatlarini bir-biriga solishtirib, natijaga qarab ekranga xabar chiqaryabmiz.

Blok-sxema - kompyuter dasturi qanday ishlashini tekshirishimiz mumkin bo'lgan usuldir. Bu usul yordamida biz kodimizning samaradorligini tekshirishimiz mumkin.
Yuqoridagi kodimizning blok-sxemasini ko'ramiz:
Conditional 1

Dasturni quyidagi tarzda kodlash orqali yaxshilashimiz mumkin:

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    int x = get_int("x ni kiriting: ");
    int y = get_int("y ni kiriting: ");

    if (x < y)
    {
        printf("x soni y sonidan kichik\n");
    }
    else if (x > y)
    {
        printf("x soni y sonidan katta\n");
    }
    else
    {
        printf("x soni y soniga teng\n");
    }
}
Enter fullscreen mode Exit fullscreen mode

Endi barcha mumkin bo'lgan holatlar hisobga olinadi. Uning blok-sxemasini ko'ramiz:
Conditional 2

Takrorlash operatorlari

Keling, 3 marta ekranga "meow" xabarini chiqaramiz:

#include <stdio.h>

int main(void)
{
    printf("meow\n");
    printf("meow\n");
    printf("meow\n");
}
Enter fullscreen mode Exit fullscreen mode

Yozgan kodimiz to'g'ri ishlaydi, lekin undagi takrorlanishlarni oldini olib, dasturimizni quyidagicha yaxshilashimiz mumkin:

#include <stdio.h>

int main(void)
{
    int i = 0;
    while (i < 3)
    {
        printf("meow\n");
        i++;
    }
}
Enter fullscreen mode Exit fullscreen mode

Bunda int turidagi i o'zgaruvchisi yaratilib, unga 3 qiymati berilgan. Keyin i < 3 bo'lgan vaqt davom etadigan while sikli yaratilgan. Har safar i++ ifodasi yordamida i sonimiz bittaga oshib boradi va qachonki i = 3 bo'lganida sikl to'xtaydi.
for sikli yordamida dasturimiz dizaynini yanada yaxshilashimiz mumkin:

#include <stdio.h>

int main(void)
{
    for (int i = 0; i < 3; i++)
    {
        printf("meow\n");
    }
}
Enter fullscreen mode Exit fullscreen mode

for sikli uchta argumentni o'z ichiga oladi.
Birinchi argument: int i = 0 hisoblagichimizni noldan boshlaydi.
Ikkinchi argument: i < 3 - tekshirilayotgan shart.
Nihoyat, i++ argumenti har safar i sonimiz bittaga oshishini bildiradi.
Biz o'zimizning funksiyamizni yaratishimiz ham mumkin:

void meow(void)
{
    printf("meow\n");
}
Enter fullscreen mode Exit fullscreen mode

void - funktsiya hech qanday qiymat qaytarmasligini bildiradi. Qavslar ichidagi (void) - funktsiya hech qanday parametr qabul qilmasligini bildiradi.
Ushbu yaratgan meow funksiyamizni asosiy funksiya ichida ishlatamiz:

#include <stdio.h>

void meow(void);

int main(void)
{
    for (int i = 0; i < 3; i++)
    {
        meow();
    }
}

void meow(void)
{
    printf("meow\n");
}
Enter fullscreen mode Exit fullscreen mode

meow funksiyasini asosiy funksiya ichida chaqira olishimiz uchun funksiya prototipi kodning yuqori qismida void meow(void) sifatida berilgan.

Arifmetik operatorlar va akstraksiya

Keling, C tilida kalkulyator yasaymiz:

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    // x qiymati kiritilsin
    int x = get_int("x: ");

    // y qiymati kiritilsin
    int y = get_int("y: ");

    // Qo'shish amalini bajarish
    printf("%i\n", x + y);
}
Enter fullscreen mode Exit fullscreen mode

get_int funktsiyasi yordamida foydalanuvchidan butun son bo'lgan x va y o'zgaruvchilariga qiymat berishi so'ralyabdi. Keyin printf funksiyasi butun son uchun format kodi - %i belgisi yordamida x + y qiymatini chop etadi.

Arifmetik operatorlar kompilyator tomonidan qo'llab-quvvatlanadigan matematik operatsiyalardir. C tilida arifmetik operatorlarga quyidagilar kiradi:

  • + - qo'shish uchun;
  • - - ayirish uchun;
  • * - ko'paytirish uchun;
  • / - bo'linish uchun;
  • % - bir sonni ikkinchi songa bo'lgandagi qoldiqni hisoblash uchun.

Abstraksiya - bu muammoni kichik-kichik bo'laklarga bo'lib hal qilish orqali kodimizni soddalashtirish san'ati.
Biz yuqoridagi kodimizni quyidagicha abstraktlashimiz mumkin:

#include <cs50.h>
#include <stdio.h>

int add(int a, int b);

int main(void)
{
    // x qiymati kiritilsin
    int x = get_int("x: ");

    // y qiymati kiritilsin
    int y = get_int("y: ");

    // Qo'shish amalini bajarish
    printf("%i\n", add(x, y));
}

int add(int a, int b)
{
    return a + b;
}
Enter fullscreen mode Exit fullscreen mode

Bunda parametr sifatida a va b butun sonlarini qabul qilib oladigan va ularning yig'indisini qaytaradigan alohida add funksiyasi e'lon qilingan va asosiy funksiya ichida argument sifatida x va y butun sonlarini olib add(x, y) funksiyamiz chaqirilyabdi.

Kommentlar (izohlar)

Kommentlar - kompyuter dasturining asosiy qismlari bo'lib, yozgan kodimiz nima vazifa bajarayotganini ifodalovchi, boshqa dasturchilarga, shuningdek o'zimizga tushunarli hamda qisqa qilib qoldirgan izohlarimizdir. Kommentni yozish uchun shunchaki ikkita // beligisidan foydalanamiz:

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    // Musbat butun son kiritilsin
    int n;
    do
    {
        n = get_int("Musbat butun son kiriting: ");
    }
    while (n < 1);
}
Enter fullscreen mode Exit fullscreen mode

Ma'lumot turlari

Ma'lumotlar turlari o'zgaruvchida saqlanishi mumkin bo'lgan ma'lumotlar turini belgilaydi. Misol uchun, o'zgaruvchilar raqamlar, belgilar yoki mantiqiy qiymatlarni saqlashi mumkin. O'zgaruvchining turi kompyuterga ushbu ma'lumotlarni qanday boshqarishni aytadi.
C tilidagi umumiy maʼlumotlar turlari:

  • bool: rost (true) yoki yolg'on (false) kabi mantiqiy qiymatlarni saqlashi mumkin.
  • char: faqat bitta belgini saqlashi mumkin.
  • float: o'nlik qiymatlari bo'lgan haqiqiy son.
  • int: kasrsiz butun son.
  • long: int dan kattaroq butun sonni saqlashi mumkin, chunki u ko'proq bit ishlatadi.
  • string: belgilar ketma-ketligini saqlashi mumkin (masalan, so'z).

Har bir turning o'ziga xos chegaralari bor. Misol uchun, xotiradagi cheklovlar tufayli int ning eng yuqori qiymati 4294967295 bo'lishi mumkin. Agar biz int ni uning eng yuqori qiymatidan o'tkazib sanashga harakat qilsak, bu o'zgaruvchida noto'g'ri qiymat saqlanishiga (integer overflow) olib keladi.
Xotirani noto'g'ri ishlatish kodimizdagi xatolar yoki muammolarga olib kelishi mumkin. Muammolarni oldini olish uchun biz to'g'ri ma'lumot turidan foydalanayotganimizga ishonch hosil qilishimiz kerak.

Ushbu maqolada CS50x 2024 manbasidan foydalanilgan.

Top comments (1)

Collapse
 
samandar0021305 profile image
_

juda foydali bo'libdi.