Announcement

Collapse
No announcement yet.

[C] kiểm tra xem mảng tăng hay giảm hay không tăng không giảm

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [C] kiểm tra xem mảng tăng hay giảm hay không tăng không giảm

    đề bài là cho 1 mảng gồm n phần tử ngẫu nhiên( n nhập từ bàn phím)...kiểm tra xem mảng tăng hay giảm hay không tăng không giảm!!!
    tình hình là Chương trình chạy được nhưng khi mảng giảm hoặc tăng thì nó k print ra màn hình!!!!
    e nghĩ nó sai ở đâu đó chỗ "dem"...
    các huynh tìm lỗi dùm e...
    Code:
    #include "stdafx.h"
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <time.h>
    void xuatmang(int a[],int b)
    {
    	for(int i=0;i<b;i++)
    		printf("%4d",a[i]);
    }
    void kiemtra(int a[],int b)
    {
    	int dem=0;
    	for(int i=0;i<b;i++)
    	{
    		if(a[i]==a[i+1]) dem++;
    		if(a[i]<a[i+1])
    		{
    			if(a[i+1]>a[i+2])
    			{
    				printf("\nmang k tang k giam");
    				break;
    			}
    			else
    				dem++;
    		}
    		if(a[i]>a[i+1])
    		{
    			if(a[i+1]<a[i+2])
    			{
    				printf("\nmang k tang k giam");
    				break;
    			}
    			else
    				dem=dem+2;
    		}
    	}
    	if(dem==b-1) printf("\nmang tang");
    	if(dem==(b-1)*2) printf("\nmang giam");
    }
    void main()
    {
    	int n,A[100];
    	printf("nhap so phan tu cua mang dy kung: ");
    	scanf("%d",&n);
    	srand(time(NULL));
    	for(int i=0;i<n;i++)
    		A[i]=rand()%100;
    	xuatmang(A,n);
    	kiemtra(A,n);
    	getch();
    }

  • #2
    đây là hàm kiemtra, bạn tham khảo thuật toán nhé:
    void kiemtra(int a[])
    {
    for( int i=0;i<=n;i++)
    for( int j=i+1;j<n; j++)
    if( a[i]<=a[j] ) printf ("mang tang");
    else if ( a[i]=>a[j] ) printf ("mang giam");
    else printf(" khong phai tang, giam");
    }

    Comment


    • #3
      Đặt Break point và debug đi em
      Không có gì là không thể nếu chúng ta có lòng tin.
      http://gabrielbl.com

      Comment


      • #4
        oc...lam như huynh thì nó cứ print ra "mang tang mang tang mang tang..." hoai lun ak!!!!:adore:
        Originally posted by 10520197 View Post
        đây là hàm kiemtra, bạn tham khảo thuật toán nhé:
        void kiemtra(int a[])
        {
        for( int i=0;i<=n;i++)
        for( int j=i+1;j<n; j++)
        if( a[i]<=a[j] ) printf ("mang tang");
        else if ( a[i]=>a[j] ) printf ("mang giam");
        else printf(" khong phai tang, giam");
        }

        Comment


        • #5
          Originally posted by 09520548 View Post
          Đặt Break point và debug đi em
          em năm nhất new vào!!!còn gà lắm huynh ơi.:smile:

          Comment


          • #6
            int i;bool tang = false, giam = false;
            for (i = 1;i < n;++i) if (a[i - 1] < a[i]) tang = true; else if (a[i - 1] > a[i]) giam = true;
            if (tang == true && giam == true) printf("Mang khong tang khong giam");
            if (tang == false && giam == true) printf("Mang giam");
            if (tang == true && giam == false) printf("Mang tang");
            if (tang == false && giam == false) printf("Mang hang"); //(Mảng hằng, VD 5 5 5 5)

            1 for 6 if, ai ngắn hơn mềnh . Mại dô
            Last edited by 09520019; 06-12-2012, 03:21.
            Khoảng cách giữa bạn và ước mơ của bạn là bao xa ?

            Comment


            • #7
              Originally posted by 12520471 View Post
              em năm nhất new vào!!!còn gà lắm huynh ơi.:smile:
              Bởi vậy anh mới nói như vậy để em google thử nó là cái gì và làm nó như thế nào. Tập debug đi em
              Không có gì là không thể nếu chúng ta có lòng tin.
              http://gabrielbl.com

              Comment


              • #8
                Originally posted by 09520019 View Post
                int i;bool tang = false, giam = false;
                for (i = 1;i < n;++i) if (a[i] < a[i + 1]) tang = true; else if (a[i] > a[i + 1]) giam = true;
                if (tang == true && giam == true) printf("Mang khong tang khong giam");
                if (tang == false && giam == true) printf("Mang tang");
                if (tang == true && giam == false) printf("Mang giam");
                if (tang == false && giam == false) printf("Mang hang"); //(Mảng hằng, VD 5 5 5 5)

                1 for 6 if, ai ngắn hơn mềnh . Mại dô
                hình như ngược ak huynh...
                tang=true print tang
                giảm = true print giảm chứ nhj~:sogood:

                Comment


                • #9
                  Originally posted by 12520471 View Post
                  hình như ngược ak huynh...
                  tang=true print tang
                  giảm = true print giảm chứ nhj~:sogood:
                  à lúc đấy mình copy true false xong sửa nhầm. Thanks bạn
                  Khoảng cách giữa bạn và ước mơ của bạn là bao xa ?

                  Comment


                  • #10
                    Originally posted by 09520019 View Post
                    à lúc đấy mình copy true false xong sửa nhầm. Thanks bạn
                    e chạy thử sao cũng chưa được huynh ơi...Vd co 2 so 50 60 no van print la k tang k giam....:beatbrick:

                    Comment


                    • #11
                      Originally posted by 12520471 View Post
                      oc...lam như huynh thì nó cứ print ra "mang tang mang tang mang tang..." hoai lun ak!!!!:adore:
                      ah quên do không thoát khỏi vòng lặp for, bạn test lại thử:


                      #include "stdafx.h"
                      #include "conio.h"
                      #include "stdio.h"
                      void NhapMang(int A[],int &N)
                      {
                      printf( "So luong phan tu:" ); scanf( "%d",&N);
                      for( int i=0;i<N;i++)
                      {
                      printf( "a[%d]=", i );
                      scanf( "%d",&(A[i]) );
                      }
                      }
                      void XuatMang( int A[], int N )
                      {
                      printf( "\n Mang :" );
                      for( int i=0;i<N;i++)
                      printf( "%5d ", A[i] );
                      printf( "\n" );
                      }
                      int kiemtra(int a[], int n)
                      {
                      int k=0;
                      for (int i=0; i<n-1; i++)
                      {

                      if (k != 1 && a[i] < a[i+1])
                      k= k+1;
                      if (k != 2 && a[i] > a[i+1])
                      k = k+2;
                      }
                      return k;
                      }


                      void main()
                      {
                      int n,a[100];
                      NhapMang(a,n);
                      XuatMang(a,n);
                      if (kiemtra(a,n)==1) printf("mang tang");
                      else if (kiemtra(a,n)==2) printf("mang giam");
                      else if((kiemtra(a,n)!=1)&&(kiemtra(a,n)!=2)) printf("mang khong tang, khong giam");
                      getch();
                      }

                      Comment


                      • #12
                        PHP Code:
                        Code:
                        #include <stdio.h>
                        #include <conio.h>
                        #include <windows.h>
                        int checkarray(int a[],int n)
                        {
                            
                        int count=0;
                            for (
                        int i=0;i<n-1;i++)
                                if(
                        a[i]<a[i+1])
                                    
                        count++;
                                else 
                        count--;
                                return 
                        count;
                        }
                        void main ()
                        {
                            
                        int n,a[1000];
                            
                        printf("\n\tNhap so phan tu cua mang:\n\t->");
                            
                        scanf("%d",&n);
                            
                        printf("\n\tNhap phan tu cua day:\n");
                            for(
                        int i=0;i<n;i++)
                                
                        scanf("%d",&a[i]);
                            if(
                        n==1
                            {
                                
                        printf("\n\tMot phan tu ko the biet dc\n");
                                exit(
                        0);
                            }
                            
                        int checkcheckarray(a,n);
                            if (
                        check==n-1)
                            { 
                                
                        printf("\n\t day tang!");
                                exit (
                        0);
                            }
                            else
                                if(
                        check==-(n-1)) printf("\n\tday giam");
                                else 
                        printf("\n\t ko tang ko giam");
                            
                        getch();

                        Chắc chạy đc không tới nổi sai!
                        Last edited by 11520285; 05-12-2012, 04:15.
                        Delete:brick::brick:

                        Comment


                        • #13
                          Originally posted by 09520019 View Post
                          1 for 6 if, ai ngắn hơn mềnh . Mại dô
                          Em cũng 1 for 5 hoặc 6 if thôi này.

                          Originally posted by 12520471 View Post
                          e chạy thử sao cũng chưa được huynh ơi...Vd co 2 so 50 60 no van print la k tang k giam....:beatbrick:
                          Code anh ấy bị lỗi vòng lập. Bạn fix lại cho nó chạy tới n-1 thôi là đúng nha.
                          Delete:brick::brick:

                          Comment


                          • #14
                            Originally posted by 11520285 View Post
                            Em cũng 1 for 5 hoặc 6 if thôi này.

                            Code anh ấy bị lỗi vòng lập. Bạn fix lại cho nó chạy tới n-1 thôi là đúng nha.
                            là sao huynh...e nghj~ i<n thì i chạy đến n-1 là dừng đúng rùi mà!!!!:confuse:

                            Comment


                            • #15
                              ây là cách của mình, bạn có thể tham khảo:

                              Code:
                              int tang = 0, giam = 0, hang = 0;
                              
                              	for (int i = 0; i < n - 1; i++)
                              	{
                              		if (a[i] < a[i+1])
                              			tang++;
                              		else if (a[i] > a[i+1])
                              			giam++;
                              		else
                              			hang++;
                              	}
                              
                              	if (tang == n - 1)
                              		printf("Mang tang");
                              	else if (giam == n - 1)
                              		printf("Mang giam");
                              	else if (hang == n - 1)
                              		printf("Mang hang");
                              	else
                              		printf("Mang k tang k giam");
                              Top Best Online - The Best Products Review Website

                              Comment

                              LHQC

                              Collapse
                              Working...
                              X