Với n <= 4 thì chương trình chạy ngon, n > 4 thì lỗi tùm lum

Chèn giá x vào dãy a[] sao cho dãy a[] vẫn tăng dần. G/s dãy a[] tăng dần.

#include<stdio.h>
#include<conio.h>
void chenx(float a[], int *n, float x)
{	
	*n = *n + 1;
	int k = -1;

	while (x >= a[k])
	{
		 k++;
	}
	if (k == -1)
	a[-1] = x;
	for (int i = *n-1; i > k; i--)
	{
		a[i] = a[i-1];		
	}
	a[k] = x;
}
main()
{
	int n = 5;
	float a[5] = {1, 3, 5, 7, 9};
	float x = 5;
	chenx(a, &n, x);
	for(int i = 0; i < n; i++)
	printf("%.0f ", a[i]);
	
}

làm gì có giá trị nào a[-1] đâu bạn

Đoạn a[-1] hơi lạ nhưng mình chạy code của bác bt,n>4 có làm sao đâu

mảng thì chỉ có từ 0 thui nếu đánh là -1 giá trị nó là khác rồi

a[-1] = 0. Thử trong C++ thì lại = x

a[-1] = 0

Lập trình lại, bỏ a[-1] ra khỏi code, giá trị a[-1] không có thật, mảng mặc định bắt đầu từ 0. Nếu để a[-1] trong code thì ráng mà chịu chứ hỏi chi nữa nà.

hướng dẫn cho e ko có a[-1] đi, nếu số ý nhỏ hơn a[0] thì gán tn

Bạn muốn chèn cho dãy bao nhiêu phần tử? Nếu dãy với số phần tử không lớn lắm thì bạn cứ chèn phần tử mới vào cuối dãy, rồi dùng thuật toán xếp cho dãy tăng dần là xong.

Bạn tham khảo code mình ko ?

#include <stdio.h>

int insert(int* tab, int len, int value);

int main(void){
	int tab[] = {1, 3, 7, 8, 10};

	int result = insert(tab, 5, -10);

	if (result == 0)
		printf("Inserted \n");
	else 
		printf("Can't insert\n");

       return 0;
}

int insert(int* tab, int len, int value){
	size_t posToInsert = 0;

	for(size_t i = 0; i < len ; i++){ // tìm vị trí chèn
		if (tab[i] <= value)
			posToInsert = i+1;
		else
			break;
	}

	if (posToInsert >= len) // ko thể chèn 
		return -1;
	else {
		for(size_t i = posToInsert; i < len; i++){
			int temp = tab[i]; // lưu giá trị của phần tử sẽ bị chèn
			tab[i] = value;
			value = temp; 
		}
		return 0; // success
	}
}
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?