Random về mảng khoảng từ -100 đến 100 không trùng nhau

Đề bài: Viết chương trình tạo một mảng số nguyên ngẫu nhiên có n phần tử, giá trị các
phần tử nằm trong khoảng từ -100 đến 100 và không trùng nhau. Thực hiện các
chức năng sau:

  • In các phần tử ra màn hình
  • Thêm 1 phần tử vào đầu mảng
  • Thêm 1 phần tử vào cuối mảng
  • Thêm 1 phần tử vào vị trí bất kỳ

Em bị lỗi nào đó mọi người giúp em sửa bài với :< do mới học

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>

void CreateRandomArray(int A[], int N)
{
	srand(time(0));
	for (int i=0; i<N; i++)
		A[i] = rand() % 201 - 100 ; 
}

void CreateRandomDoubleArray(double A[],int N)
{
	srand(time(0));
	for (int i = 0; i < N; i++)
		A[i] = rand() % 201 - 100;
}
void OutputArray(double A[], int N)
{
	for (int i = 0; i < N; i++)
		printf("%6.1lf",A[i]);
}
void InsertFirst(int A[], int &N, int x)
{
	for (int i = N; i > 0; i--)
		A[i] = A[i - 1];
	A[0] = x;
	N++;
}
void InsertLast(int A[], int &N, int x)
{
	A[N] = x;
	N++;
}
int main()
{
	double A[100];
	int N;
	int x;
	printf("Mang ngau nhien:");
	CreateRandomDoubleArray(A,N);
	OutputArray(A,N);
	InsertLast(A,N);
	printf("\nCuoi mang:");
	InsertFirst(A,N);
	printf("\nDau mang:");
	OutputArray(A,N);
}

Hai hàm này của bạn đều thiếu một argument là x, vì trên prototype bạn khai báo có 3 argument mà bạn điền có 2.

Lỗi này thì đọc error message là biết mà, chưa fix bug mà đã lập topic, bạn xứng đáng được nhận 1 :black_flag:.

1 Like

Mình thử x rồi các kiểu rồi cũg như thế :<

Mã sau khi bạn sửa đâu?

2 Likes
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>

void CreateRandomArray(int A[], int N)
{
	srand(time(0));
	for (int i=0; i<N; i++)
		A[i] = rand() % 201 - 100 ; 
}

void CreateRandomDoubleArray(double A[],int N)
{
	srand(time(0));
	for (int i = 0; i < N; i++)
		A[i] = rand() % 201 - 100;
}
void OutputArray(double A[], int N)
{
	for (int i = 0; i < N; i++)
		printf("%6.1lf",A[i]);
}
void InsertFirst(int A[], int &N, int x)
{
	for (int i = N; i > 0; i--)
		A[i] = A[i - 1];
	A[0] = x;
	N++;
}
void InsertLast(int A[], int &N, int x)
{
	A[N] = x;
	N++;
}
int main()
{
	double A[100];
	int N;
	int x;
	printf("Mang ngau nhien:");
	CreateRandomDoubleArray(A,N);
	OutputArray(A,N);
	InsertLast(A,N,x);
	printf("\nCuoi mang:");
	InsertFirst(A,N,x);
	printf("\nDau mang:");
	OutputArray(A,N);
}

Khai báo mà không khởi tạo mà vẫn chèn x vào như thật vậy.

  • Mình nghĩ nên dùng số nguyên (int).
  • Chèn vị trí bất kì thì chẳng khác gì chèn vào vị trí đầu tiên cả. Thay vì lặp (for) từ N đến 0 thì thành N đến vị trí đó.
  • Bạn chưa làm được phần không trùng nhau. Mỗi khi tạo giá trị mới thì kiểm tra nó đã có trong mảng chưa. Chưa có thì thêm vào, có rồi thì không thêm hoặc tạo mới giá trị khác. Nên tạo 1 hàm kiểm tra sự tồn tại của 1 giá trị, tránh trùng lặp.
  • Từ -100 đến 100 không trùng nhau với số nguyên thì nên tạo mảng có 201 phần tử nhé.
  • Có thể giá trị x được nhập động. Khi này thao tác chèn sẽ kiểm tra có trùng lặp không trước khi chèn.
3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?