В банк положили 5000 р. под 6 % годовых, проценты начинаются каждый месяц к сумме на счёте. Написать программу, которая подсчитает сумму на счёте через N месяцев. (Pascal)
Во-первых, тут есть синтаксическая ошибка: в конце первой строки отсутствует точка с запятой. Во-вторых, неверно определены диапазоны дат: нет названия города до 1703 года (на самом деле города тогда еще не было, но что-то все равно надо сообщить), не определен 1914 год, когда город был переименован в Петроград и 1924 год, когда город был переименован в Ленинград. И в-третьих, хоть это и не ошибка, но недочет программы: будут выполняться все три оператора if, даже если в первом из них искомая дата будет найдена.
Ниже предлагается исправленный вариант программы.
program name; uses crt; var a:integer; begin ClrScr; Readln(a); if a<1703 then Writeln('Город не существовал') else if (a>=1703) and (a<1914) or (a>=1991) then Writeln ('Санкт-Петербург') else if (a>=1914) and (a<1924) then Writeln ('Петроград') else Writeln ('Ленинград'); ReadKey end.
Const n = 20; { размер массивов } p=0; { минимальное значение элемента } q=15; { максимальное значение элемента } type V=array[1..n] of integer;
procedure VInit(var a:V; s:string); { процедура заполняет элементы массива a случайными значениями из интервала [p;q]. Элементы сформированного массива выводятся с заголовком, в который добавляется значение s } var i,kol:integer; begin kol:=q-p+1; Writeln('Элементы массива ',s); for i:=1 to n do begin a[i]:=Random(kol)+p; Write(a[i],' ') end; Writeln end;
procedure SortBubble(var a:V); { сортировка методом пузырька } var i,j,t:integer; begin for i := 1 to n-1 do for j := 1 to n-i do if a[j] > a[j+1] then begin t := a[j]; a[j] := a[j+1]; a[j+1] := t end end;
procedure VOut(var a:V;s:string); { Элементы массива a выводятся с заголовком s } var i:integer; begin Writeln(s); for i:=1 to n do Write(a[i],' '); Writeln end;
function BinSearch(var a:V;key:integer):boolean; { двоичный поиск элемента со значением key в массиве a Возвращает true, если элемент найден и false, если нет } var li,ri,mi:integer; begin li:=1; ri:=n; while li<ri do begin mi:=(li+ri) div 2; if a[mi]<key then li:=mi+1 else ri:=mi; end; BinSearch:=(a[ri]=key) end;
var a,b,c:V; i,ai1,s:integer; found:boolean; begin Randomize; VInit(a,'A'); SortBubble(a); VOut(a,'Отсортированный массив A'); VInit(b,'B'); SortBubble(b); VOut(b,'Отсортированный массив B'); VInit(c,'C'); SortBubble(c); VOut(c,'Отсортированный массив C'); s:=0; found:=false; for i:=1 to n do begin if found then if a[i]=ai1 then Inc(s,ai1) else found:=false; if not found then begin found:=BinSearch(b,a[i]); if found then found:=BinSearch(c,a[i]); if found then begin ai1:=a[i]; Inc(s,ai1) end end end; Writeln('Искомая сумма равна ',s); end.