پاسخ مسائل جلسه هشتم
حل مسائل جلسه هشتم (بدون آرایههای دو بعدی)
پاسخ سوال 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;}تیم تدریسیاران درس - © ۱۴۰۳