Để xác dinh dãy có tang hay giảm hay ko?thì ta nên dung địa chỉ đi để biết.
Đấu tiên ta nên gán nó vào một mảng nào đó .sau đó ta xắp xếp cái mảng vừa gán ,sau đó ta so sánh giá trị của mảng vừa gán với mảng ban đầu.
Cho dãy số , xác định dãy tăng , giảm hay ko tăng ko giảm
nếu là dãy ko tăng ko giảm thì tìm dãy tăng con có nhiều phần tử nhất
Đây là code
giả sử nhập dãy 1 2 3 5 2 3 9 2 5 6 1Code:#include <iostream.h> #include <conio.h> void daymax(float x[],int m) { int index,luu_size; index=luu_size=0; float luu[m]; for(int i=1;i<m;i++) { if(x[i-1]<=x[i]) { index++; } if(x[i-1]>x[i]) { luu_size++; luu[luu_size-1]=index; index=0; } } float max=luu[0]; for(int i=0;i<luu_size;i++) { if(max<=luu[i]) { max=luu[i]; } } cout << "Day con tang lon nhat co " << max << " phan tu"; } int main() { int n; cout << "n = "; cin >> n; float a[n]; for(int i=0;i<n;i++) { cin >> a[i]; } //xac dinh day tang , giam , ko tang ko giam float tang_index,giam_index; tang_index=giam_index=a[0]; int tang,giam; tang=giam=0; for(int i=1;i<n;i++) { if(tang_index<=a[i]) { tang_index=a[i]; tang++; } if(giam_index>=a[i]) { giam_index=a[i]; giam++; } } if(tang==(n-1)) cout << "Day la day tang \n"; else if(giam==(n-1)) cout << "Day la day giam \n"; //day ko tang ko giam , tim day tang con co nhieu phan tu nhat else { cout << " Day ko tang ko giam \n"; daymax(a,n); } getch(); }
Thì đã xác định được dãy là ko tăng ko giảm , có hàm daymax() để in ra dãy con tăng lớn nhất nhưng sao nó ko in ra , mong mọi người giúp đỡ
Đã được chỉnh sửa lần cuối bởi Xcross87 : 03-05-2007 lúc 06:37 AM. Lý do: Yêu cầu viết trong thẻ CODE
Để xác dinh dãy có tang hay giảm hay ko?thì ta nên dung địa chỉ đi để biết.
Đấu tiên ta nên gán nó vào một mảng nào đó .sau đó ta xắp xếp cái mảng vừa gán ,sau đó ta so sánh giá trị của mảng vừa gán với mảng ban đầu.
Hix , bác nói rõ hơn được ko
Em muốn xác định dãy tăng con có số phần tử lớn nhất trong dãy ko tăng ko
giảm mà
Bạn làm khá rối, chưa hiểu rõ ngôn ngữ C lắm và cách sử dụng các vòng lặp cũng chưa được thành thạo. Chẳng hạn như:
+ Khai báo float luu[m]; trong hàm daymax() và float a[n]; trong hàm main(). Khi dịch, C chắc chắn sẽ báo lỗi vì nó ko thể xác định được số phần tử của mảng ngay tại thời điểm biên dịch nên ko thể cấp phát bộ nhớ cho mảng này được. Bạn nên dùng số phần tử cố định ( miễn sao đủ lớn cho ứng dụng của bạn ) chẳng hạn 20, 50, 100... Bạn cũng có thể sử dụng cấp phát động để xin cấp phát vừa đủ một mảng các phần tử ( đối với ứng dụng nhỏ thì cũng ko cần thiết lắm ).
+ Bạn nên dùng while() cho những vòng lặp ko xác định, dù rằng for cũng có thể làm được. Chẳng hạn để kiểm tra một dãy là tăng, giảm hay ko tăng, ko giảm có thể dựa vào: nếu 1 dãy đang tăng( giảm ) mà gặp phần tử tiếp theo ko phù hợp với điều kiện tăng (giảm) đó thì kết luận ngay dãy là ko tăng, ko giảm. Nếu đến cuối dãy thì kết luận dãy tăng (giảm).
+ Trong hàm daymax() bạn chỉ quan tâm đến dãy tăng thì có thể làm như sau:
Như vậy khi kết thúc hàm, ta lấy được chỉ số đầu tiên của dãy tăng lớn nhất và số phần tử của nó ( có lẽ bạn quan tâm đến dữ liệu này ). Có thể in dãy ra nếu cần.Code:int chisodau = 0; // chỉ số của phần tử đầu tiên của dãy tăng int sopt = 0; // số phần tử của dãy tăng Khi chưa hết dãy, duyệt từ đầu dãy để tìm 1 dãy tăng; if( số phần tử của dãy này > sopt ) { lưu sopt này lại; lưu chỉ số đầu của dãy này; } else tăng chỉ số duyệt của dãy lên;
Thân!
Nơi nào khiến anh dừng bước, nơi đó có em.
cho index++ trong if thứ hai nó lại chạy được mất roài
Ko có gì khác nhau đâu bạn. Tuy nhiên người ta thường dùng int *a ( ý nói khai báo a là một con trỏ - tức là dấu *báo hiệu con trỏ là thuộc về biến *a) để tránh nhầm lẫn. Trường hợp khai báo theo cách thứ nhất VD int* a, b; có thể gây hiểu sai vì quan niệm a, b đều là con trỏ ( thực tế theo khai báo đó a là con trỏ, b là biến int ).Nhân tiện ở đây cho mình hỏi mọi người một câu là int* a; và int *a
Nếu post code, bạn nên chú thích 1 chút về mục đích sử dụng các biến, người khác đọc đỡ đau đầu hơn.
Thân!
Nơi nào khiến anh dừng bước, nơi đó có em.
Cảm ơn whoru nhiều
Hàm kiểm tra tăng hay giảm thì rất dể làm bạn nào cũng biết
còn kiểm tra dãy con tăng có nhiều phần tử nhất thì mình nghỉ làm thế này ngắn gọn hơn
có thể là:
int max = 0,index = 0;
for(int i = 0;i < m;i++)
{
if(x[i]<=x[i+1])
{
index++;
}
if(x[i]>x[i+1])
{
if(index >= max)
max = index;
index=0;
}
}
nhưng khi in ra thì phải có max+1 phần tử vì phần tử đầu tiên ko so sánh
3 phần tử mình sao so sánh 2 lần thì max = 2 nhưng có 3 phần tử ví du 1 3 5
Hix , mình thiếu đề rồi , giờ muốn in ra dãy con lớn nhất đó luôn thì làm sao đây