Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Trang 1 của 2 12 CuốiCuối
Kết quả 1 đến 10 của 20
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Bài tập C về mảng 1 chiều

    tìm số âm lớn nhất

    Mã:
    int soamlonnhat(int a[],int n) //tra ve so am lon nhat ? k phai tra ve vi tri dau nha{    int soamlonnhat = 1;        for (int i=0;i<n;i++)    {        if (a[i]<0) { soamlonnhat = a[i];break;}            if (soamlonnhat = 1)        return 1 ; //khong co so am lon nhat    }    for (int j=i;j<n;j++)            if ((a[j]<0) && (a[j]>soamlonnhat)) soamlonnhat = a[j];        return soamlonnhat;
    Thắt mắt là khí mình nhập mảng mình phải nhập mảng đầu tiên A[0]=số âm thì nó mới tiềm số âm nhỏ nhất còn nhập mảng đầu tiên (A[0]= số dương) thì nó ko tìm cho kết quả là 1 luôn ai fix dùm mình thank nhiều ( đầu năm làm đều tốt vận may nhân khắp mà)

    Còn tìm số dương nhỏ nhất (cũng giống ý tưởng trên ai sữa dùm mình) thank nhiều

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Sai nhiều .. Không có logic .
    * Cách tìm số âm lớn nhất trong mảng :
    1. Quét từng phần tử
    2. Kiểm tra nó có âm hay không ?
    3. Nếu là số âm thì so sánh nó với số trước đó.
    4. Sau mỗi lần so sánh gán giá trị vào một biến ( biến này phải là số âm nhỏ nhất trong khoảng xác định )
    5. Trả lại giá trị số âm lớn nhất đó.

    Have Fun [IMG]images/smilies/biggrin.png[/IMG] !

    * Số dương tương tự

  3. #3

    Pete thiếu 1 điều, làm sao xác định số âm đầu tiên để so sánh với các số sau đó, Đây là giải thuật của mình:
    Sao lại không nhỉ? Duyệt từ đầu, nếu thấy một số <0 nào đó thì nó sẽ là số âm đầu tiên chứ?. Nếu duyệt đến hết mảng mà chẳng thấy một số <0 nào thì kết luận: "Làm gì có số âm nào mà bảo tìm số âm lớn nhất?? " Hì hì

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Sao lại không nhỉ? Duyệt từ đầu, nếu thấy một số <0 nào đó thì nó sẽ là số âm đầu tiên chứ?. Nếu duyệt đến hết mảng mà chẳng thấy một số <0 nào thì kết luận: "Làm gì có số âm nào mà bảo tìm số âm lớn nhất?? " Hì hì
    Ặc, bác Dreaminess ko hiểu ý của em rồi, Pete chỉ nói chung chung là so sánh số âm đang xét với số trước đó

    * Cách tìm số âm lớn nhất trong mảng :
    1. Quét từng phần tử
    2. Kiểm tra nó có âm hay không ?
    3. Nếu là số âm thì so sánh nó với số trước đó.
    4. Sau mỗi lần so sánh gán giá trị vào một biến ( biến này phải là số âm nhỏ nhất trong khoảng xác định )
    5. Trả lại giá trị số âm lớn nhất đó.
    Cái giải thuật này thiếu nên em mới hỏi Pete câu đó chứ đâu phải em ko biết, giải thuật của em có đầy đủ mà bác.

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mã:
    int i = 0, t;while ((i < n) && (a[i] >= 0)) ++i; //xac dinh so am dau tienif (i = n) cout <<"Day so ko co so am."; // day ko co so amelse{     t = a[i];     for (int j = i+1; j < n; ++j) //vong lap tim so am lon nhat         if ((a[j] < 0) && (a[j] > t))             t = a[j];     cout <<"So am lon nhat: " <<t;}
    Mình thử chạy hàm của bạn. nó báo lỗi là cần phải trả về giá trị. bạn có thể fix lại ko

    Mình làm như vậy nhưng kết quả vẫn ko chính xác


    Mã:
    int i = 0, t;while ((i < n) && (a[i] >= 0)) ++i; //xac dinh so am dau tienif (i = n) cout <<"Day so ko co so am."; // day ko co so amelse{     t = a[i];     for (int j = i+1; j < n; ++j) //vong lap tim so am lon nhat         if ((a[j] < 0) && (a[j] > t))             t = a[j];     cout <<"So am lon nhat: " <<t;} return t;
    có đúng là trả về giá trị t hay là giá trị khác
    thank! gà lắm mấy bác đừng chửi tội nghiệp

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Mình thử chạy hàm của bạn. nó báo lỗi là cần phải trả về giá trị. bạn có thể fix lại ko
    Hàm mình viết là hàm void, đâu có cần trả về giá trị, chắc là bạn đặt kiểu cho hàm là int hay gì đó rồi. Bạn đặt tên hàm thế này: void TimSoAm() là được rồi. Nếu dùng C thì hình như là void TimSoAm(void) thì phải, mình ko có học C nên cũng ko nhớ rõ, còn C++ thì viết void TimSoAm() là đủ rồi.

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    * Cách tìm số âm lớn nhất trong mảng :
    1. Quét từng phần tử
    2. Kiểm tra nó có âm hay không ?
    3. Nếu là số âm thì so sánh nó với số trước đó.
    4. Sau mỗi lần so sánh gán giá trị vào một biến ( biến này phải là số âm nhỏ nhất trong khoảng xác định )
    5. Trả lại giá trị số âm lớn nhất đó.
    Pete thiếu 1 điều, làm sao xác định số âm đầu tiên để so sánh với các số sau đó, Đây là giải thuật của mình:

    Mã:
    int i = 0, t;while ((i < n) && (a[i] >= 0)) ++i; //xac dinh so am dau tienif (i = n) cout <<"Day so ko co so am."; // day ko co so amelse{     t = a[i];     for (int j = i+1; j < n; ++j) //vong lap tim so am lon nhat         if ((a[j] < 0) && (a[j] > t))             t = a[j];     cout <<"So am lon nhat: " <<t;}

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Em thấy ý của pete97 đầy đủ rồi

    "biến này phải là số âm nhỏ nhất trong khoảng xác định"
    Ta hoàn toàn có thể lấy giá trị đầu tiên là số âm nhỏ nhất mà biến đó có thể biểu diễn được ví dụ :-32768 đối với int. Duyệt qua từng phần tử :
    + Kiểm tra xem có âm hay không
    - Nếu có và bằng -32768 thì chọn luôn làm số nhỏ nhất và thoát
    - Nếu có và không bằng thì số ấy cho biến

  9. #9
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    @huynguyen : thuật giải của mình chẳng thiếu gì cả ... Đọc lại nhé : 2. Kiểm tra từng phần tử xem có âm hay không chắc chắn phải đưa ra số đầu tiên chứ ( ngoại trừ trường hợp toàn =0 hoặc >0 ) . 3. " Số trước đó " =>cái này phải hiểu là số âm vì đi tìm số âm cơ mà .

    Đọc kĩ lại nhé [IMG]images/smilies/biggrin.png[/IMG] .. 5 ý của mình logic với nhau đấy[IMG]images/smilies/biggrin.png[/IMG]

  10. #10
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    minh co cach lam bai loai nay don gian hon mot chut.minh se khoi tao hai mang.mang tim so nguyen lon nhat.va mot mang la mang so nguyen am lon nhat.No hoi dai nhung minh nghi dai nhung ma no chat che hon.


    Mã:
    int lonnhat(int a[],int n){          int lc=a[0];          for(int i=0;i<n;i++)              if(lc<a[i])                  lc=a[i];         return lc; }int amlonnhat(int a[],int n){         int x=lonnhat(a,n);         for(int i=0;i<n;i++)             if(a[i]==x && a[i]<0)                 return lc;        return -1;//truong hop nay la trong mang khong co so am nao lon nhat}

 

 
Trang 1 của 2 12 CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •