رفتن به محتوا

پاسخ مسائل جلسه هشتم

حل مسائل جلسه هشتم (بدون آرایه‌های دو بعدی)

پاسخ سوال 1: عملیات اشاره‌گر و آرایه‌های دوتایی (بدون استفاده از آرایه دو بعدی)

#include <stdio.h>
void matrixMultiply(int *A, int *B, int *Result, int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
*(Result + i * n + j) = 0;
for (int k = 0; k < n; k++) {
*(Result + i * n + j) += *(A + i * n + k) * *(B + k * n + j);
}
}
}
}
int main() {
int A[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int B[9] = {9, 8, 7, 6, 5, 4, 3, 2, 1};
int Result[9];
int n = 3;
matrixMultiply(A, B, Result, n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%d ", *(Result + i * n + j));
}
printf("\n");
}
return 0;
}

پاسخ سوال 2: جابجایی پوینترها و محاسبات حافظه

#include <stdio.h>
void transferArray(int *arr1, int *arr2, int size) {
for (int i = 0; i < size; i++) {
*(arr2 + i) = *(arr1 + i);
*(arr1 + i) = 0;
}
}
int main() {
int arr1[3] = {1, 2, 3};
int arr2[3] = {0, 0, 0};
transferArray(arr1, arr2, 3);
printf("Array 2: ");
for (int i = 0; i < 3; i++) {
printf("%d ", arr2[i]);
}
printf("\nArray 1: ");
for (int i = 0; i < 3; i++) {
printf("%d ", arr1[i]);
}
printf("\n");
return 0;
}

پاسخ سوال 3: عملیات آرایه‌ای و اشاره‌گرها

#include <stdio.h>
void copyAndSum(int *arr1, int *arr2, int size) {
int sum = 0;
for (int i = 0; i < size; i++) {
*(arr2 + i) = *(arr1 + i);
sum += *(arr2 + i);
}
printf("Sum of Array 2: %d\n", sum);
}
int main() {
int arr1[3] = {4, 5, 6};
int arr2[3] = {0, 0, 0};
copyAndSum(arr1, arr2, 3);
printf("Array 2: ");
for (int i = 0; i < 3; i++) {
printf("%d ", arr2[i]);
}
printf("\n");
return 0;
}

پاسخ سوال 4: پیدا کردن بزرگترین و کوچکترین عنصر در آرایه

#include <stdio.h>
void findMinMax(int *arr, int size, int *min, int *max) {
*min = *arr;
*max = *arr;
for (int i = 1; i < size; i++) {
if (*(arr + i) < *min) {
*min = *(arr + i);
}
if (*(arr + i) > *max) {
*max = *(arr + i);
}
}
}
int main() {
int arr[5] = {12, 3, 45, 6, 7};
int min, max;
findMinMax(arr, 5, &min, &max);
printf("Min: %d\n", min);
printf("Max: %d\n", max);
return 0;
}

پاسخ سوال 6: پیاده‌سازی حرکت اشاره‌گر در حافظه

#include <stdio.h>
#include <stdbool.h>
bool canReachEnd(int *arr, int size) {
int *ptr = arr;
int steps = *ptr;
printf("Initial pointer: %p\n", (void *)ptr);
while (steps > 0) {
printf("Current: %p (value: %d) -> ", (void *)ptr, *ptr);
ptr += steps;
if (ptr >= arr + size) {
printf("Jump out of bounds\n");
return true;
}
steps = *ptr;
printf("Jump to: %p\n", (void *)ptr);
}
printf("Final pointer: %p\n", (void *)ptr);
return ptr == arr + size - 1;
}
int main() {
int arr[5] = {2, 3, 1, 1, 4};
if (canReachEnd(arr, 5)) {
printf("true\n");
} else {
printf("false\n");
}
return 0;
}

پاسخ سوال 5: شبیه‌سازی ساختار رشته با استفاده از اشاره‌گرها

#include <stdio.h>
#include <string.h>
void str_copy(char *src, char *dest) {
while (*src) {
*dest++ = *src++;
}
*dest = '\0';
}
void str_concat(char *str1, char *str2, char *result) {
while (*str1) {
*result++ = *str1++;
}
while (*str2) {
*result++ = *str2++;
}
*result = '\0';
}
void str_reverse(char *str, char *result) {
int len = strlen(str);
for (int i = 0; i < len; i++) {
*(result + i) = *(str + len - i - 1);
}
*(result + len) = '\0';
}
int main() {
char str1[] = "hello";
char str2[] = "world";
char copy[100], concat[100], reverse[100];
str_copy(str1, copy);
printf("Copy: %s\n", copy);
str_concat(str1, str2, concat);
printf("Concat: %s\n", concat);
str_reverse(str1, reverse);
printf("Reverse: %s\n", reverse);
return 0;
}



تیم تدریس‌یاران درس - © ۱۴۰۳