کلیدستان

نسخه‌ی کامل: حلقه for
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
با سلام
من میخواستم برنامه ای بنویسم که یک رشته عدد رندمی بین 4 تا 80 تولید کنم و اگر جمع این عددها بیشتر از 840 بود از آخر مجموعه عددها رو حذف کنم یعنی بزرگترین مجموعه عددهایی که جمعش کمتر از 840 بشه رو به عنوان یه مجموعه جدید انتخاب کنم. کد زیر رو نوشتم اما نمیدونم اشکالش کجاست.

کد:
Nusers=input('Nusers=');
B=randi([4,80],1,Nusers);
for i=1:Nusers;
     sigma= sum(B(i));
  if sigma<=840
  end
  if sigma>840;
     Nusers=Nusers-1;
  end
       Bprime=B(i);
  sigmaprime= sum(Bprime(i));
end

کد:
Nusers=30

حلقه for درست عمل نمیکنه sigma فقط عدد آخر ارایه رو میده
ممنون میشم اگر لطف کنید و کمکم کنید
سلام.
من کدهاتون رو به صورت زیر تغییر دادم :

کد:
clear all
close all
clc

Nusers=input('Nusers=');
B=randi([4,80],1,Nusers);
L=Nusers;
for i=1:Nusers;
    sigma=sum(B(1:i));
    if (sigma>840)
        L=i-1;
        break
    end
end
C=B(1:L)
C_length=length(C)

سه خط اول برنامه، برای عدم تداخل برنامه فعلی با برنامه های قبلی اجرا شده در متلب می باشد.
C همان بردار نهایی است که شما می خواهید داشته باشید. درون حلقه for ، با دستور if چک می کنیم که در چندمین عنصر بردار B ، مجموع عناصر از شماره 1 تا آن عنصر، بیش از عدد 840 می شود. هر وقت این اتفاق بیفتد، شماره یک عنصر قبل از آن (یعنی i-1) را در L ذخیره می کنیم و با دستور break از اجرای ادامه حلقه for جلوگیری می کنیم (برنامه از حلقه بیرون می آید).

با اجرای برنامه متلب بالا و دادن مقدار 50 به Nusers ، نتایج زیر در خروجی متلب نمایش داده شد :

کد:
C =

  Columns 1 through 15

    46    41    72    65    60     7     9    10    65    76    56    14    59    12    13

  Columns 16 through 19

    53    29    54    61


C_length =

    19

مشاهده می کنید که طول بردار C برابر 19 می باشد و مجموع عناصر آن نیز کمتر از عدد 840 است.
موفق باشید. Iran
بینهایت ازتون ممنونم