انجمن سایت کلیدستان


رتبه موضوع:
  • 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
حلقه for

حلقه for

#1
با سلام
من میخواستم برنامه ای بنویسم که یک رشته عدد رندمی بین 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 فقط عدد آخر ارایه رو میده
ممنون میشم اگر لطف کنید و کمکم کنید
پاسخ

حلقه for

#2
سلام.
من کدهاتون رو به صورت زیر تغییر دادم :

کد:
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
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ

حلقه for

#3
بینهایت ازتون ممنونم
پاسخ
 سپاس شده توسط admin ، شماره مجازی امارات ، تلگرام ضد فیلتر 2023


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان