Снизу кусок кода и то, что он выдаёт, минимально число - не правильное, что можно или нужно сделать для того, чтобы оно выдавало правильное минимально число. Заранее
Можешь сразу читать 3 пункт, если интересна проблема только данного кода.
Объяснение:
1) Во-первых, обычно для максимальных и минимальных значений используют противоположные значения, чтобы их потом с чем-либо сравнивать, то бишь вместо nmin:=n[1] тебе следовало бы написать что-то типа nmin:=1000, а не nmin:=n[1], ибо первый элемент у тебя пуст, то есть у тебя nmin изначально равно 0, что не очень хорошо.
2) Во-вторых, когда ты пробегаешься по массиву, чтобы найти минимальное значение, ты почему-то начинаешь со второго элемента, не обращая внимания на первый, - это не очень хорошо. В данном случае, конечно, это не сыграло никакой роли, но если бы первый элемент был минимальным, то он бы был пропущен и программа бы вывела неправильный ответ.
3) Но в твоём случае это на правильный ответ никак не влияет - проблема кода в том, что если он найдёт минимальный элемент, то в nmin уйдёт индекс этого элемента, а не сам элемент, то есть надо поменять строчку nmin:=b на nmin:=n[b].
'На первом листе внесите данные 'При добавлении записей формулу вычисления задолженности добавлять не надо 'Запускаете макрос - результат (отчет) на втором листе 'На первом листе формулы пересчитывается - результаты обновляются 'Форма в этом случае -излишне Dim i, j, s, a
Sub Othet () Dim info As Variant
'Clear OTHET(2 list) Sheets(2).Select Range("A1:I1").Select With Selection .HorizontalAlignment = xlGeneral: .VerticalAlignment = xlBottom .AddIndent = False: .IndentLevel = 0: .ShrinkToFit = False: .MergeCells = True End With Selection.Font.Bold = True With Selection End With Sheets(2).Cells(1, 1) = "ОТЧЕТ"
'Shapka 1 list Sheets(1).Select info = Array("", "фамилия", "адрес", "дата", "стоимость заказа", "сумма аванса", "задолженность", "вид заказа") For i = 1 To UBound(info) Cells(1, i) = info(i) Next
Замечание: данные в файле должны быть записаны по одному числу в строке.
const m=100; { максимальное количество чисел в файле } var f:Text; i,j,n,k:integer; a:array[1..m] of integer; begin { читаем данные из файла в массив } Assign(f,'SuperFile.txt'); Reset(f); i:=0; while not Eof(f) do begin Inc(i); Readln(f,a[i]) end; Close(f); n:=i; { сортируем массив по возрастанию методом пузырька } for i := 1 to n-1 do for j := 1 to n-i do if a[j] > a[j+1] then begin k := a[j]; a[j] := a[j+1]; a[j+1] := k end; { заполняем файл из массива } Rewrite(f); for i:=1 to n do Writeln(f,a[i],' '); Close(f) end.
Можешь сразу читать 3 пункт, если интересна проблема только данного кода.
Объяснение:
1) Во-первых, обычно для максимальных и минимальных значений используют противоположные значения, чтобы их потом с чем-либо сравнивать, то бишь вместо nmin:=n[1] тебе следовало бы написать что-то типа nmin:=1000, а не nmin:=n[1], ибо первый элемент у тебя пуст, то есть у тебя nmin изначально равно 0, что не очень хорошо.
2) Во-вторых, когда ты пробегаешься по массиву, чтобы найти минимальное значение, ты почему-то начинаешь со второго элемента, не обращая внимания на первый, - это не очень хорошо. В данном случае, конечно, это не сыграло никакой роли, но если бы первый элемент был минимальным, то он бы был пропущен и программа бы вывела неправильный ответ.
3) Но в твоём случае это на правильный ответ никак не влияет - проблема кода в том, что если он найдёт минимальный элемент, то в nmin уйдёт индекс этого элемента, а не сам элемент, то есть надо поменять строчку nmin:=b на nmin:=n[b].