Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: Tính tổng các số dương nằm giữa 2 số âm trong mảng

  1. #1
    Ngày gia nhập
    12 2012
    Bài viết
    0

    Mặc định Tính tổng các số dương nằm giữa 2 số âm trong mảng

    Đây là code của mình mong các bạn sửa dùm
    Code:
    // aaaaaaaaaaa.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include "stdio.h"
    #include "conio.h"
    void NhapMang(float M[],int &spt);
    void XuatMang(float M[],int spt);
    void TaoMangAm(float M[],int spt,float A[],int &spta);
    void TaoMangDuong(float M[],int spt,float A[],int &spta);
    float TinhTongDuong(float M[],int amdau,int amcuoi);
    int TimAmCuoi(float M[],int spt);
    int TimAmDau(float M[],int spt);
    
    //=================================================
    void main()
    {
    	float M[20],A[20],NT[20];
    	int spt,spta,sptnt,luachon,amdau,amcuoi;
    	float tong;
    	printf("Nhap lua chon ");scanf_s("%d",&luachon);
    	switch (luachon)
    	{
    
    	case 1:
    			
    		printf("Nhap Mang ");
    		NhapMang(M,spt);
    		XuatMang(M,spt);break;
    	case 2:
    		printf("\nTao Mang Am");
    		NhapMang(M,spt);
    		TaoMangAm(M,spt,A,spta);
    	    XuatMang(A,spta);break;
    	case 3:
    		printf("\nTao Mang Am");
    		NhapMang(M,spt);
    		TaoMangDuong(M,spt,A,spta);
    	    XuatMang(A,spta);break;
    	case 4:
    		NhapMang(M,spt);
    		amdau=TimAmDau(M,spt);
    		amcuoi=TimAmCuoi(M,spt);
    		printf("am dau %d",amdau);
    		printf("am cuoi %d",amcuoi);
    		tong=TinhTongDuong(M,amdau,amcuoi);
    	}
    	_getch();
    }
    void NhapMang(float M[],int &spt)
    {
    	printf("Nhap phan tu ");scanf_s("%d",&spt);
    	for (int i=0;i<spt;i++)
    	{
    		printf("M[%d] = : ",i);scanf_s("%f",&M[i]);
    	}
    }
    void XuatMang(float M[],int spt)
    {
    	for (int i=0;i<spt;i++)
    		printf("\t%.2f",M[i]);
    }
    void TaoMangAm(float M[],int spt,float A[],int &spta)
    {
    	int i=0;
    	for (int j=0;j<spt;j++)
    	{
    		if ( M[i] < 0 )
    		{
    			A[j]=M[i];
    			i++;
    		}
    		
    	}
    	spta=i;
    }
    void TaoMangDuong(float M[],int spt,float A[],int &spta)
    {
    	int i=0;
    	for (int j=0;j<spt;j++)
    	{
    		if ( M[i] >= 0 )
    		{
    			A[j]=M[i];
    			i++;
    		}
    		
    	}
    	spta=i;
    }
    int TimAmDau(float M[],int spt)
    {
    	int amdau;
    		for(int i=0;i<spt;i++)
    	{
    		if (M[i]<0)
    			amdau=i;
    			break;
    	}return amdau;
    }
    int TimAmCuoi(float M[],int spt)
    {
    	int amcuoi;
    
    	for(int j=spt-1;j>=0;j--)
    	{
    		if (M[j]<0)
    			amcuoi=j;
    			break;
    	}return amcuoi;
    }
    float TinhTongDuong(int M[],int amdau,int amcuoi)
    {
    		float tong=0;
    		for(int i=amdau+1;i<amcuoi;i++)
    		{
    			if(M[i]>0)
    			{
    				tong+=M[i];
    			}
    		}
    		return tong;
    }
    Đã được chỉnh sửa lần cuối bởi briankun : 13-01-2013 lúc 10:02 PM.

  2. #2
    Ngày gia nhập
    11 2012
    Bài viết
    136

    bài của bạn sai ở đây chắc của bạn bị lặp vô hạn đúng không sai đây nếu
    while(M[j] > 0 )
    s+=M[j];

    Nếu điều kiện trong while đúng thì lặp liên tục thay bằng if xem.
    Giao lưu và học hỏi
    https://www.facebook.com/kimcy1992

  3. #3
    Ngày gia nhập
    12 2012
    Bài viết
    0

    Trích dẫn Nguyên bản được gửi bởi kimcy1992 Xem bài viết
    bài của bạn sai ở đây chắc của bạn bị lặp vô hạn đúng không sai đây nếu
    while(M[j] > 0 )
    s+=M[j];

    Nếu điều kiện trong while đúng thì lặp liên tục thay bằng if xem.
    dùng if nó cho kết quả s ban đầu = 0

  4. #4
    Ngày gia nhập
    11 2012
    Bài viết
    136

    Trích dẫn Nguyên bản được gửi bởi briankun Xem bài viết
    dùng if nó cho kết quả s ban đầu = 0
    còn tùy đầu vào của bạn đúng không nếu toàn lẻ chẳng hạn hay là có 1 số lẻ thì tổng sẽ bằng 0, mình có cách này bạn xem được không nhé tìm hai số lẻ đầu và cuối cùng của dãy số, ledau !=0 và lecuoi != ledau và 0. do vậy tổng sẽ là các phần tử dương từ ledau+1 tới <lecuoi.
    Giao lưu và học hỏi
    https://www.facebook.com/kimcy1992

  5. #5
    Ngày gia nhập
    12 2012
    Bài viết
    0

    Trích dẫn Nguyên bản được gửi bởi kimcy1992 Xem bài viết
    còn tùy đầu vào của bạn đúng không nếu toàn lẻ chẳng hạn hay là có 1 số lẻ thì tổng sẽ bằng 0, mình có cách này bạn xem được không nhé tìm hai số lẻ đầu và cuối cùng của dãy số, ledau !=0 và lecuoi != ledau và 0. do vậy tổng sẽ là các phần tử dương từ ledau+1 tới <lecuoi.
    Cái này là âm nhưng nếu lỡ có 3 số âm thì sao????

  6. #6
    Ngày gia nhập
    11 2012
    Bài viết
    136

    Mặc định Tính tổng các số dương nằm giữa 2 số âm trong mảng

    các ngoại lệ bạn tự xét đi mình chỉ có thể đưa ra những phương án mình thấy khả thi thôi, chứ không giúp bạn hết được, bạn thông cảm nếu có thời gian mình sẽ làm luôn nhưng khuyên bạn không nên cho 1 hàm tất cả các nhiệm vụ của nó như hàm trên bạn cho in ra luôn tổng trong hàm. hãy nên chia nhỏ nó, cái hàm đấy chẳng hạn chỉ tính tổng thôi, và có thể có thêm hàm hiển thị tổng.
    Giao lưu và học hỏi
    https://www.facebook.com/kimcy1992

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn