Another Noob MATLAB Question - For loop

  • Thread starter Thread starter GreenPrint
  • Start date Start date
  • Tags Tags
    Loop Matlab Noob
Click For Summary

Discussion Overview

The discussion revolves around a MATLAB homework problem that involves using the primes function to generate a list of prime numbers below 100 and then applying a for loop to multiply adjacent prime numbers together. Participants share their code attempts and seek clarification on specific programming practices within MATLAB.

Discussion Character

  • Homework-related
  • Technical explanation
  • Debate/contested

Main Points Raised

  • One participant shares their code and results, expressing confusion about needing to redefine a variable within the loop.
  • Another participant points out that the variable used in the for loop should not be reassigned within the loop, suggesting that it could lead to issues.
  • A different participant recommends setting up loop limits before the loop and provides an alternative code structure for clarity.
  • One participant expresses improved understanding of loop commands after receiving feedback.

Areas of Agreement / Disagreement

Participants do not reach a consensus on the best practices for using variables in for loops, as different coding approaches are suggested without agreement on a single correct method.

Contextual Notes

Some participants highlight potential issues with variable reassignment within loops and suggest alternative coding structures, but the discussion does not resolve the best approach to take.

GreenPrint
Messages
1,186
Reaction score
0

Homework Statement



Use the primes function to create a list of all the primes below 100. Now use a for loop to multiply adjacent values together. For example the first 4 primes numbers are

2 3 5 7

your calculation would be

2*3 3*5 5*7

which gives

6 15 35

Homework Equations





The Attempt at a Solution


Ok I spent a very long time trying to solve this problem. I eventually solved it with the following program.

PLEASE CHECK SECOND POST
i uploaded a easier version to read, i myself couldn't stand even looking at my program below so i took a snip of it in a easier to read form

z=0;
a=length(primes(100));
for b=primes(100);
if z>1;
y=y-1;
else
y=a;
end
b=primes(100);
c(y)=b(y).*b(y-1);
z=z+1;
end
d=find(c>0);
c(d)


which produces the following results, just the way I wanted them to

ans =

Columns 1 through 9

6 15 35 77 143 221 323 437 667

Columns 10 through 18

899 1147 1517 1763 2021 2491 3127 3599 4087

Columns 19 through 24

4757 5183 5767 6557 7387 8633

my only question and concern is why in my program must I include b=primes(100); after the end statement? I thought it was enough for me to just define it once and only once after the for command? I however noticed when I did so that b would get defined as 2 for some strange reason and that's it not what primes(100) is suppose to produce.

I was hoping someone could explain this to me. Thanks in advance!
 
Last edited:
Physics news on Phys.org
Check attachments
 

Attachments

  • Capture.JPG
    Capture.JPG
    7.9 KB · Views: 1,345
Hm.

You don't define b as a vector before the loop, you just run through it in the for loop, so b in the loop takes on a integer value, and not a vector.

Generally: don't use b as running variable in loop, while re-assigning it a value IN the loop. Bound for troubles.


Define b before the for loop, and use a running variable i=1:1:a in the for loop.

HTH
 
Hi Greenprint, use "code" tags to preserve formatting in posts.

That's really bad use of a for loop as outlined by Laiva above. Set up your for loop limits before the loop, something like the following.
Code:
p=primes(100);
sp=max(size(p))-1;
for k=1:sp
   pp(k)=p(k)*p(k+1);
end
 
Last edited:
thanks I think I better understand the loop commands now =)
 

Similar threads

  • · Replies 8 ·
Replies
8
Views
2K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 3 ·
Replies
3
Views
23K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 3 ·
Replies
3
Views
7K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 7 ·
Replies
7
Views
2K