ধরুন আমরা একটি লাইব্রেরি সিস্টেম তৈরির দায়িত্বে আছি যা লাইব্রেরিতে বিভিন্ন ক্রিয়াকলাপ নিরীক্ষণ করে এবং জিজ্ঞাসা করে। আমাদের এখন তিনটি ভিন্ন কমান্ড প্রয়োগ করতে বলা হয়েছে যা নিম্নলিখিত −
সম্পাদন করে-
কমান্ড 1 ব্যবহার করে, আমরা শেলফ x এ y পৃষ্ঠা সহ একটি বইয়ের সন্নিবেশ রেকর্ড করতে পারি।
-
কমান্ড 2 ব্যবহার করে, আমরা শেলফ x এ y-ম বইয়ের পৃষ্ঠা নম্বর প্রিন্ট করতে পারি।
-
কমান্ড 3 ব্যবহার করে, আমরা শেলফ x এ বইয়ের সংখ্যা প্রিন্ট করতে পারি।
এই ফরম্যাটে {কমান্ড টাইপ, x, y} কমান্ডগুলি আমাদেরকে 2D অ্যারে হিসাবে দেওয়া হয়েছে। যদি কোন y মান না থাকে, মানটি ডিফল্ট 0 এ থাকবে। আমরা প্রদত্ত কমান্ডের ফলাফল প্রিন্ট করি।
সুতরাং, যদি ইনপুটটি হয় তাক সংখ্যা =4, প্রশ্ন =4, input_arr ={{1, 3, 23}, {1, 4, 128}, {2, 3, 0}, {3, 4, 0 }}; তাহলে আউটপুট হবে
23 1
Command 1 inserts a book with 23 pages on shelf 3. Command 2 inserts a book with 128 pages on shelf 4. Command 3 prints the page number of book 0 on shelf 3. Command 4 prints the number of books on shelf 3.
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- b :=s আকারের একটি নতুন অ্যারে
- p :=s আকারের একটি নতুন অ্যারে
- আরম্ভ করার জন্য i :=0, যখন i
- b[i] :=0
- p[i] :=একটি নতুন অ্যারে
qtype :=q_array[loopCount, 0] যদি qtype 1 এর মত হয়, তাহলে −
- x :=q_array[loopCount, 1]
- y :=q_array[loopCount, 2]
- b[x] :=b[x] + 1
- p[x] :=p[x] দ্বারা নির্দেশিত বস্তুকে ডিলোকেট করুন এবং সাইজের একটি পয়েন্টার ফেরত দিন
- b[x]
- p[x, b[x] - 1] =y
অন্যথায় যখন qtype 2 এর মত হয়, তখন −
- x :=q_array[loopCount, 1]
- y :=q_array[loopCount, 2]
- প্রিন্ট(p[x, y])
অন্যথায়
- x :=q_array[loopCount, 1]
- মুদ্রণ(b[x])
- b দ্বারা অর্জিত মেমরি নিষ্কাশন করুন
- p[i] দ্বারা অর্জিত মেমরি নিষ্কাশন করুন
- p দ্বারা অর্জিত মেমরি ডিলোকেট করুন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
#include <stdio.h>
#include <stdlib.h>
void solve(int s, int q, int q_array[][3])
{
int* b;
int** p;
b = (int*)malloc(sizeof(int)*s);
p = (int**)malloc(sizeof(int*)*s);
for(int i = 0; i < s; i++)
{
b[i] = 0;
p[i] = (int*)malloc(sizeof(int));
}
int loopCount;
for(loopCount = 0; loopCount < q; loopCount++)
{
int qtype;
qtype = q_array[loopCount][0];
if (qtype == 1)
{
int x, y;
x = q_array[loopCount][1];
y = q_array[loopCount][2];
b[x] += 1;
p[x] = realloc(p[x], b[x]*sizeof(int));
p[x][b[x] - 1] = y;
}
else if (qtype == 2)
{
int x, y;
x = q_array[loopCount][1];
y = q_array[loopCount][2];
printf("%d\n", p[x][y]);
}
else
{
int x;
x = q_array[loopCount][1];
printf("%d\n", b[x]);
}
}
if (b)
free(b);
for (int i = 0; i < s; i++)
if (p[i])
free(p[i]);
if (p)
free(p);
}
int main() {
int input_arr[][3] = {{1, 3, 23}, {1, 4, 128}, {2, 3, 0}, {3, 4, 0}};
solve(4, 4, input_arr);
} ইনপুট
int input_arr[][3] = {{1, 3, 23}, {1, 4, 128}, {2, 3, 0}, {3, 4, 0}};
solve(4, 4, input_arr); আউটপুট
23 1