实验要求:
使用Matlab编写程序实现以下功能:
1. 给定一组商品,每一商品包含名称、价格,把商品排序。
要求:
(1) 从文本文件input.txt读入。第一行包含一个数 N,表示商品个数。之后跟着 N 行,每行包含一个字符串(商品名称)和一个数(商品价格)。
(2) 删除价格是3的倍数的商品;
(3) 显示剩余商品的个数 K;
(4) 当数 K 为奇数时,从小到大排列并输出显示;
(5) 当数 K 为偶数时,从大到小排列并输出显示;
(6) 把结果保存到文件 result.txt 。
(7) 自己实现排序功能,不能调用库里的排序函数。
input.txt:
4
苹果 20
香蕉 10
水果 30
铅笔 60
matlab代码:
file_address = 'E:\input.txt';
[name,price] = textread(file_address, '%s %n', 'headerlines', 1);
% 获取三的倍数的下标
delete_index = find(rem(price, 3) == 0);
% 删除这些行
name(delete_index) = [];
price(delete_index) = [];
% 获取剩余的商品数
k = size(name, 1);
% 当剩余为奇数时
if rem(k, 2) ~= 0
for i = k-1 : -1 : 1
for j = 1 : i
% 冒泡排序
if price(j, 1) > price(j + 1, 1)
m = price(j, 1);
price(j,1) = price(j+1, 1);
price(j + 1, 1) = m;
% 名字也替换
m = name(j, 1);
name(j, 1) = name(j + 1, 1);
name(j + 1, 1) = m;
end
end
end
for mm = 1 : k
disp(sprintf('name:%s price:%d',char(name(mm)),price(mm)))
end
else
for i = k-1 : -1 : 1
for j = 1 : i
% 冒泡排序
if price(j, 1) < price(j + 1, 1)
m = price(j, 1);
price(j,1) = price(j+1, 1);
price(j + 1, 1) = m;
% 名字也替换
m = name(j, 1);
name(j, 1) = name(j + 1, 1);
name(j + 1, 1) = m;
end
end
end
% 输出
for mm = 1 : k
disp(sprintf('name:%s price:%d',char(name(mm)),price(mm)))
end
end
fileName = 'E:\result.txt';
fid = fopen(fileName, 'wt');
for i = 1:k
fprintf(fid, '%s\t', char(name(i)));
fprintf(fid, '%d\n', prize(i));
end
fclose(fid);
输出:
result.txt: