Xin chào. Hôm nay mình có làm 1 bài tập C như sau:
Xây dựng hàm thực hiện chức năng sau trên mảng 1 chiều các số nguyên: Thêm y lần phần tử z vào vị trí có chỉ số x trong mảng
Ví dụ:
Ta có mảng : 1 2 3 4 5
VD: x = 3; y = 4; z = 6 => Tức là thêm 4 lần phần tử mang giá trị 6 vào vị trí 3 trong mảng
=> Mảng sau khi thêm: 1 2 3 6 6 6 6 4 5
Đoạn code giải của mình như sau:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <Windows.h>
void NhapMang(int *a, int n)
{
for (int i = 0; i < n; i++)
{
printf("\nNhap a[%d] = ", i);
scanf("%d", &a[i]);
}
}
void XuatMang(int *a, int n)
{
for (int i = 0; i < n; i++)
printf("%4d", a[i]);
}
void Themphantu(int *a, int &n, int ViTriThem, int PhanTuThem, int Soluongthem)
{
realloc(a, (n + Soluongthem) * sizeof(int *));
for (int i = n + (Soluongthem - 1); i >= n; i--)
a[i] = a[i - Soluongthem];
n += Soluongthem;
for (int j = n - (Soluongthem + 1); j >= ViTriThem; j--)
a[j] = PhanTuThem;
}
int main()
{
int *a, n;
do
{
printf("\nNhap so luong phan tu: ");
scanf("%d", &n);
if (n < 0)
printf("\nSo luong phan tu khong hop le\n");
} while (n < 0);
a = (int *)realloc(0, n * sizeof(int *));
NhapMang(a, n);
XuatMang(a, n);
int ViTriThem, PhanTuThem, Soluongthem;
do
{
printf("\nNhap vi tri them: ");
scanf("%d", &ViTriThem);
if (ViTriThem < 0 || ViTriThem > n)
printf("\nVi tri them khong hop le\n");
} while (ViTriThem < 0 || ViTriThem > n);
printf("\nNhap phan tu them: ");
scanf("%d", &PhanTuThem);
printf("\nNhap so luong them: ");
scanf("%d", &Soluongthem);
printf("\nMang sau khi them: ");
Themphantu(a, n, ViTriThem, PhanTuThem, Soluongthem);
XuatMang(a, n);
free(a);
getch();
return 0;
}
Cái lỗi của mình là khi thêm phần tử x vào vị trí y với số lượng z trong mảng thì bị lỗi. Mong mọi người giúp mình nhé.
Xin cảm ơn!


83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?