How can I print the result of a function using fprintf? (matrix and string!)
2 views (last 30 days)
Show older comments
Ashley Hayden
on 18 Mar 2020
Commented: Ashley Hayden
on 18 Mar 2020
The variable countries is a 27x1 column vector with 3 letter abbreviations (ex. 'CAN'). Results is a 27x4 matrix with values ranging from 0-40 ish. Why can't I print them together or row by row?
I want the result to look like this:
Country Gold Silver Bronze
CAN 2 1 3
ITA 3 1 4
... etc.
My code:
Please skip to the bottom of this code for the part I'm having issues with.
function [] = Untitled6()
load('olympics.mat')
results = zeros(size(countries,1),4);
results = compute_medals(gold,silver,bronze,countries);
print_country_results(countries,results);
end
function results = compute_medals(gold,silver,bronze,countries);
% computes number of gold, silver, bronze medals and
% total medal tally for a given country and a given sport type
% results = zeros(size(countries,1),4);
for i = 1:length(countries)
country = countries(i, :);
goldCount = 0;
silverCount = 0;
bronzeCount = 0;
for j = 1: length(gold)
if country == gold(j, :)
goldCount = goldCount+ 1;
end
if country == silver(j, :)
silverCount = silverCount + 1;
end
if country == bronze(j, :)
bronzeCount = bronzeCount + 1;
end
end
results(i,1) = goldCount;
results(i,2) = silverCount;
results(i,3) = bronzeCount;
results(i,4) = goldCount + silverCount + bronzeCount;
end
results
end
% HERE! Below is the part I'm having issues with! Please Help!
function [ ] = print_country_results(countries,results)
% prints formatted results
fprintf('Country Gold Silver Bronze Total\n')
for i = 1:length(countries) % = 27
fprintf('%s %d \n', countries(i, :), results (i,:));
end
end
Can I print a matrix & string row by row? Please help!
EDIT: We are not allowed to use a table. :(
2 Comments
James Tursa
on 18 Mar 2020
Edited: James Tursa
on 18 Mar 2020
What is the variable 'countries'? I.e., class. Same question for gold, silver, bronze.
Accepted Answer
Ameer Hamza
on 18 Mar 2020
Edited: Ameer Hamza
on 18 Mar 2020
You can change your function like this
function [ ] = print_country_results(countries,results)
% prints formatted results
fprintf('Country\tGold\tSilver\tBronze\tTotal\n')
for i = 1:length(countries) % = 27
fprintf('%s\t%d\t%d\t%d\t%d\n', countries(i, :), results (i,:));
end
end
Output:
Country Gold Silver Bronze Total
AUS 2 1 0 3
AUT 4 6 6 16
BLR 1 1 1 3
CAN 14 7 5 26
CHN 5 2 4 11
CRO 0 2 1 3
CZE 2 0 4 6
EST 0 1 0 1
FIN 0 1 4 5
FRA 2 3 6 11
GBR 1 0 0 1
GER 10 13 7 30
ITA 1 1 3 5
JPN 0 3 2 5
KAZ 0 1 0 1
KOR 6 6 2 14
LAT 0 2 0 2
NED 4 1 3 8
NOR 9 8 6 23
POL 1 3 2 6
RUS 3 5 7 15
SLO 0 2 1 3
SUI 6 0 3 9
SVK 1 1 1 3
SWE 5 2 4 11
USA 9 15 13 37
XXX 1 0 2 3
More Answers (2)
James Tursa
on 18 Mar 2020
Edited: James Tursa
on 18 Mar 2020
When comparing strings, it is not a good idea to use the == operator, which is an element-wise operator. Instead, use a string comparison function or a general comparison function. E.g., instead of this
if country == gold(j, :)
do something like this
if isequal( country, gold(j, :) )
or maybe
if strcmpi( country, gold(j, :) )
Also, in your print statement you need to print four numerical values, not one. E.g. this
fprintf('%s %d \n', countries(i, :), results (i,:));
should be something like this instead
fprintf('%s %7d %6d %6d %5d \n', countries(i, :), results (i,:));
0 Comments
Adam Danz
on 18 Mar 2020
Put the data into a table and display the table. There are lots of way to create a table. Here's one way,
data = [2 1 3; 3 1 4];
T = array2table(data, 'VariableNames', {'Gold','Silver','Bronze'}, 'RowNames', {'CAN','ITA'});
To display it,
disp(T)

See Also
Categories
Find more on Cell Arrays in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!