Make a loop to calculate molecular weight

2 ビュー (過去 30 日間)
Mike
Mike 2013 年 11 月 15 日
編集済み: Walter Roberson 2016 年 10 月 9 日
"Use a while loop to ask the user to enter the elemental symbols of the elements in the compound and store these in a padded character array. The user should be asked if there are any more elements to be added and the loop should continue as long as the user enters an upper or lower case y.
Use a second loop that will prompt the user to enter the atomic mass and number of atoms in the compound for each element. These should be stored in separate arrays."
Please help I can't get it to word.
  2 件のコメント
dpb
dpb 2013 年 11 月 15 日
Well, haven't even seen your start at what doesn't work...show that and a specific question may elicit hints. Full solutions are rarely, if ever, forthcoming.
Mike
Mike 2013 年 11 月 17 日
編集済み: Walter Roberson 2013 年 11 月 17 日
disp('Enter atomic symbols in single quotesEnter atomic symbols in single quotes.')
disp('When the symbol is a single letter, precede the letter with a space.')
element=input('Enter the atomic symbol: ','s')
more=input('Are there more elements? 1 for yes 2 for no ','s')
while (1)
if more==1
element=input('Enter the atomic symbol: ')
more=input('Are there more elements? y/n ')
end
end
best i can do so far.. can't figure out how to get the loop to continue when user writes y or n... its giving me error saying y is not a variable

サインインしてコメントする。

回答 (3 件)

Walter Roberson
Walter Roberson 2013 年 11 月 17 日
more = input('Are there more elements? y/n','s');
while strcmpi(more, 'y')
element{end+1} = input('Enter the atomic symbol: ', 's);
more = input('Are there more elements? y/n','s');
end
  5 件のコメント
Mike
Mike 2013 年 11 月 19 日
編集済み: Walter Roberson 2013 年 11 月 20 日
yes I learned cell arrays... I revised my code a little bit, I got it to work, just a part of my problem that I didn't post on here is to: • Create a table containing the elemental symbols, the number of the those elements in the compound and the wt% of that element in compound (these should be in columns)
And I'm getting an error msg saying :
Error using horzcat
Dimensions of matrices being concatenated are not consistent.
Error in proj5_problem2 (line 26)
table=[done, a,b,c]
Anytime I input 3 or more elements. It stops asking for molecular weight after the second element and says that error message... Please help, I cannot figure out whats wrong. Here is my code:
more='y';
n=1;
disp('Enter atomic symbols in single quotesEnter atomic symbols in single quotes.')
disp('When the symbol is a single letter, precede the letter with a space.')
while more=='y'
element=input('Enter the atomic symbol: ','s');
element1=char(element);
theelement(n)={element1};
more=input('Are there more elements? y/n ','s');
n=n+1;
end
for x=1:length(theelement{n-1})
disp(['For the element:' theelement(x)])
weight(x)=input('Please enter the weight: ');
atoms(x)=input('Enter the number of these atoms in the compound: ');
end
totalweight=sum(weight.*atoms);
nweight=weight.*atoms;
fprintf('The total weight is %f \n',totalweight)
weightpercent=(nweight./totalweight)*100
done=char(theelement)
a=num2str(nweight')
b=num2str(atoms')
c=num2str(weightpercent')
table=[done, a,b,c]
disp('symbol weight number wt%')
disp(num2str(table))
Marc
Marc 2013 年 11 月 19 日
I have to say that this question becomes redundant when you look at molmass() in the file exchange. The logic used in that function DOES what you are asking the user to input....
So if you want the molecular weight for C6H6 or Pt(NH3)4Cl2.... It figures out the atoms and the amounts, along with "stuff" in parenthesis...
Thus the weight percent becomes trivial...
%C in benzene = 100*6*MolMass('C')/MolMass('C6H6)

サインインしてコメントする。


Marc
Marc 2013 年 11 月 19 日
I really hate doing others homework...
But... This works really well and shows one how to use recursive programming.
Next time try google...

Ngoc Tran
Ngoc Tran 2016 年 10 月 8 日
I just ran into this today and this is the code that I have. I don't use a loop.
Create a container map (similar to Python's dictionary):
key = {'C','H','O'};
value = [12,1,16];
atom = containers.Map(key,value);
molecule = {'C','H','H','H','H'} %CH4
MW = sum(cellfun(@(x) atom(x), molecule))
This will go through every element in the "molecule" list, get the atom mass. You will have an array of atom mass, in this case [12 1 1 1 1], and then sum them up.
To get a more extensive key/value pair you can find .csv files online. I'm just giving an example.

カテゴリ

Help Center および File ExchangeNumerical Integration and Differentiation についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by