Зручний контрол для завантаження з файлу чисел, коли
кожне з нового рядка. Теж код завантаження записується в один рядок! Але все по
порядку.
Задача
Справність деталі оцінюється по розміру A, який повинен
відповідати інтервалy [А-b;А+b].
Визначити в партії із N деталей
браковані і справні (вивести результат по кожній деталі), підрахувати їх
кількість, а також кількість справних деталей. Встановити відсоток браку.
Вхідні дані:
У файлі detali.in записані розміри деталей,
кожна цифра з нового рядка. У першому рядку файлу записано A. Другий рядок містить менший допуск -b. третій - більший допуск +b.
Вихідні дані:
У файлі analiz.out записати: кількість деталей,
кількість справних деталей, кількість
бракованих деталей,
відсоток браку.
Розміщуємо
TListBox на формі.
Читаємо
числа з файлу в TListBox:
listbox1.Items.LoadFromFile('detali.in');
listbox1 – ім’я контролу в
проекті, Items – рядки
контролу, LoadFromFile – завантаження з файлу 'detali.in'. Після
виконання цього коду числа будуть розміщені на listbox1 так
само, як і в файлі – кожне з нового рядка.
Нумерація
рядків починається з 0, дані, як і в попередніх контролах, мають тип String.
Щоб
прочитати рядок із listbox у змінну,
потрібно вказати номер (індекс) рядка властивості Items.
Як видно
в попередньому малюнку та як виходить з умови задачі, перші три числа – це
відповідно розмір, нижній та верхній
допуски розміру деталі. Їх потрібно зчитати у змінні:
A:=StrToInt(listbox1.Items[0]); - розмір деталі
mb:=StrToInt(listbox1.Items[1]); - нижній та
pb:=StrToInt(listbox1.Items[2]); - верхній
допуски
Функція StrToInt використовується, бо в listbox , дані мають тип String.
Щоб
опрацювати масив рядків listbox, нам
потрібно знати межі циклу. Нижню межу (початкове значення змінної і лічильника циклу) ми вже знаємо.
Оскільки перші три рядки містять службові числа, ми їх вже зчитали, то
початкове значення змінної і
лічильника циклу буде 3. А от кінцеве
значення змінної і лічильника циклу ми
можемо дізнатися, якщо отримаємо кількість усіх рядків listbox . А цю інформацію
має властивість Count. Отже,
N:=listbox1.Count; -
кількість усіх рядків listbox.
Тепер
запускаємо цикл:
for i:=3 to N-1 do - цикл від
четвертого до останнього рядку
begin
pot:=StrToInt(listbox1.Items[i]); -
отримуємо черговий рядок
if
(pot>=(A-mb)) and
(pot<=(A+pb)) - якщо розмір
деталі
не перевищує допусків
не перевищує допусків
then
begin
inc(Sprav); -
збільшуємо кількість справних на 1
listbox2.Items.Add(listbox1.Items[i]+' Справна'); - виводимо на другий
listbox поточний зчитаний розмір та слово Справна
listbox поточний зчитаний розмір та слово Справна
end
else
інакше
begin
inc(Brak); ); - збільшуємо кількість
несправних на 1
listbox2.Items.Add(listbox1.Items[i]+' Бракована'); - виводимо на другий
listbox поточний зчитаний розмір та слово Бракована
несправних на 1
listbox2.Items.Add(listbox1.Items[i]+' Бракована'); - виводимо на другий
listbox поточний зчитаний розмір та слово Бракована
end;
end;
Далі
розраховуємо відсоток браку, додаємо на memo рядки з результуючою інформацією та
виводимо її з memo до
файлу analiz.out. Все.
Proz:=Brak*100/N;
memo2.Clear;
memo2.Lines.Add('Кількість деталей -
'+IntToStr(N-3));
memo2.Lines.Add('Кількість справних деталей
- '+IntToStr(Sprav));
memo2.Lines.Add('Кількість бракованих
деталей - '+IntToStr(Brak));
memo2.Lines.Add('Відсоток браку - '+FloatToStrF(Proz,fffixed,2,2)+'%');
memo2.Lines.SaveToFile('analiz.out');
Ось що в
нас вийшло
Я
виставив у memo колір
фону, як форми, щоб зімітувати лейбли.
Програмний
код:
Немає коментарів:
Дописати коментар