CodeBlanks Logo Icon CodeBlanks

Görev tamamlama

  • C kursu
  • Başlangıç
  • Ders 86/116
  • 6 dk

CompleteTask ile görev durumunu güncellemeyi öğrenirsin.

complete_task fonksiyonu

Bir görevi tamamlandı işaretlemek için complete_task fonksiyonu yazıyoruz. Görevin done alanını 1 yapar.

void complete_task(struct Task tasks[], int id) {
    tasks[id - 1].done = 1;
}

id - 1 kullanırız çünkü kimlikler 1'den başlar ama dizi indisleri 0'dan. Bu yüzden 1 tabanlı kimliği 0 tabanlı indise çeviririz.

1 tabanlı kimlik, 0 tabanlı indis

Görev kimlikleri 1'den başlar (ilk görevün kimliği 1). Ama C dizileri 0'dan başlar. Bu yüzden tasks[id - 1] yazarak 1 tabanlı kimliği 0 tabanlı indise çeviririz.

complete_task(tasks, 1);  /* tasks[0].done = 1 */
complete_task(tasks, 2);  /* tasks[1].done = 1 */

Bu ayrım kullanıcı dostu kimliklerle dizi erişimini uzlaştırır. Kullanıcı 1 girer, program 0 tabanlı kullanır.

Uygulama complete_task fonksiyonunu ekle

Aşağıdaki koda void complete_task(struct Task tasks[], int id) fonksiyonunu ekle. İçinde tasks[id - 1].done = 1; yaz. main içinde list_tasks çağrısından önce complete_task(tasks, 1); çağrısı ekle (ilk görevi tamamlandı yap). Çıktı 1 Alışveriş 1 ve 2 Spor 0 olmalı.

Başlangıç kodu

main.c
#include <stdio.h>
#include <string.h>

struct Task {
    int id;
    char title[50];
    int done;
};

int add_task(struct Task tasks[], int count, const char *title) {
    tasks[count].id = count + 1;
    strcpy(tasks[count].title, title);
    tasks[count].done = 0;
    return count + 1;
}

void list_tasks(struct Task tasks[], int count) {
    for (int i = 0; i < count; i++) {
        printf("%d %s %d\n", tasks[i].id, tasks[i].title, tasks[i].done);
    }
}

int main(void) {
    struct Task tasks[10];
    int count = 0;
    count = add_task(tasks, count, "Alışveriş");
    count = add_task(tasks, count, "Spor");
    list_tasks(tasks, count);
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>
#include <string.h>

struct Task {
    int id;
    char title[50];
    int done;
};

int add_task(struct Task tasks[], int count, const char *title) {
    tasks[count].id = count + 1;
    strcpy(tasks[count].title, title);
    tasks[count].done = 0;
    return count + 1;
}

void list_tasks(struct Task tasks[], int count) {
    for (int i = 0; i < count; i++) {
        printf("%d %s %d\n", tasks[i].id, tasks[i].title, tasks[i].done);
    }
}

void complete_task(struct Task tasks[], int id) {
    tasks[id - 1].done = 1;
}

int main(void) {
    struct Task tasks[10];
    int count = 0;
    count = add_task(tasks, count, "Alışveriş");
    count = add_task(tasks, count, "Spor");
    complete_task(tasks, 1);
    list_tasks(tasks, count);
    return 0;
}

Beklenen çıktı

1 Alışveriş 1
2 Spor 0

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Tamamlama kavramlarını eşleştir

Kavram Anlamı
done = 1 tamamlandı
done = 0 bekliyor
id - 1 dizi indisi
tasks[i] görev dizisi

2 Bir görevi tamamlandı olarak işaretlemek için ne yapılır?

  • tasks[i].id = 1
  • tasks[i].title = "tamam"
  • tasks[i].done = 1 Doğru cevap
  • tasks[i] = NULL

Açıklama: done alanını 1 yapmak görevi tamamlandı işaretler.

3 Tamamlandı yap

Soru
tasks[id].____;  /* görevi tamamlandı yap */
Cevap
tasks[id].done = 1;  /* görevi tamamlandı yap */

Açıklama: done = 1 görevi tamamlandı yapar.

Başlangıç bölümündeki tüm dersler