| Другое > Hard'n'Soft |
| Вспоминаем Turbo Pascal и решаем задачи на нём |
| << < (11/15) > >> |
| igarexa:
Народ, помогите пожалуйста кто может. Паскаль не может скомпилировать написанное: выводит на непонятную мне ошибку: iganew.pas(5.20) Fatal: Syntax error, 'identifier' excepted but ":" found На эту строчку: var A, Pie, Sie, Z,: real; А именно на двоеточие, но ведь там ведь вроде всё в порядке. Как же так? Если необходимо, могу весь код сюда кинуть. |
| paul_met:
--- Цитата: igarexa ---var A, Pie, Sie, Z,: real; --- Конец цитаты --- Убери запятую после "Z". |
| igarexa:
paul_met, благодарю! :) и как же я так не догнал... ладно пойду дальше разбираться с ошибками... |
| igarexa:
Блин, не могу никак сделать что бы всё идеально работало... Помогите пожалуйста разобраться с заданием. Алгоритм придумал, блок схему нарисовал, код написал как смог, но вычисления неправильные делает. Подскажите в чем же дело, где у меня ошибка? Задание с латышского языка, переведу как понял на русский для вас. Квадрат характеризует сторона А, периметр P и площадь S. Точность с (плавающей точкой?) проверяется значением Z. Ввести A, P, S, Z значения. Вычислить P, S, и сравнить с введёнными значениями, проверить с точностью Z, если не правильно - попросить ввести значения снова. Алгоритм я понял такой: Sr и Pr я назвал так реальные значения площади и периметра, вычисляемые по формулам. Sie и Pie я назвал вводимые нами значения Код я написал такой: --- Код: ---Program Kvadrat; Uses Crt; Label Vvod_dannih; Label Vse_rabotaet; Label Variants1; Label Variants2; var A, Pie, Sie, Z, Pr, Sr: real; Begin clrscr; Vvod_dannih: Writeln('Vvedi neobhodimie dannie'); Writeln('Vvedi storonu A'); Readln(A); Writeln('Vvedi perimetr P'); Readln(Pie); Writeln('Vvedi ploshadj S'); Readln(Sie); Writeln('Vvedi to4nostj Z'); Readln(Z); Pr := A*4; Sr := A*A; if( A<0 ) or ( Pie <0 ) or ( Sie <0 ) or ( Z <0 ) then begin writeln('Nelza vvoditj negativnie 4isla' ); goto Vvod_dannih; end; if (Pr > Pie) and (Sr > Sie) then begin goto Variants1; end else begin goto Variants2; end; Variants1: begin if ((Pr - Pie) <=Z ) and ((Sr - Sie) <=Z ) then begin writeln ('To4nostj pozvolaet'); goto Vse_rabotaet; end else begin writeln ('To4nostj ne pozvolaet'); goto Vvod_dannih; end; if (Pr < Pie) and (Sr < Sie) then goto Variants2; Variants2: if ((Pie - Pr) <=Z ) and ((Sie - Sr) <=Z ) then begin writeln ('To4nostj pozvolaet'); goto Vse_rabotaet; end else begin writeln ('To4nostj ne pozvolaet'); goto Vvod_dannih; end; end; Vse_rabotaet: Writeln('Vse rabotaet!'); Readln; End. --- Конец кода --- Буду рад любой помощи.. То есть, если возмём сторону A=3, то реальный периметр (Pr)=12 и реальная площадь (Sr)=9 если я ввожу P=10 и S=7 точность Z=2, то он разрешает такие значения. если я ввожу P=10 и S=7 точность Z=1, то он не разрешает такие значения. То есть здесь всё в порядке, но: если я ввожу P=12 и S=7 точность Z=1, то он разрешает такие значения. Программа видит что одно значение годится для такой точности, и значит этого достаточно, но в этом случае S не должно подходить. Кстати, за это время нашёл 1 недочёт, и исправил уже. В вариантах надо было сделать <=Z (меньше или равно Z, а не просто меньше). |
| Planestranger:
неправильно. а если у тебя введенный периметр будет больше вычисленного, а площадь меньше? разницу бери по модулю для проверки, и тогда будет достаточно одного условного оператора. |
| igarexa:
lost_hero, у меня на такой случай, если введённые данные больше реальных, программа вычисляет по другой формуле, то есть "введённые - реальные" а не "реальные - введённые", сейчас проверил, и когда вводимые больше реальных, программа работает безотказно при любых значениях. Но да, ты прав, с модулями было бы намного лучше. Спасибо. То есть есть 1 проблемный случай: при условиях того что вводимые данные меньше реальных, и если хоть 1 значение удовлетворяет заданной точностью, то программа пишет что всё в порядке. Конечно я могу надеяться что профессор просто не заметит и не проверит этот случай :D |
| igarexa:
Всё, засада... Оказывается, я неправильно понял задачу. А именно момент про точность. Точность надо задавать количеством цифр после запятой... Но по идее всё остальное зато уже понятно. Поэтому у меня только один вопрос. Да и то небольшой: Как сделать так, что бы при заданной точностью (например 0.001), проверялось определённое значение. В смысле, как задать это свойство какому либо значению? |
| gepar:
Вообще точность подразумевает дисперсию (разброс) значения. |
| igarexa:
Всем привет... снова я :blush: Помогите пожалуйста с заданием в паскале, уже сколько времени сижу, не могу никак догнать как его сделать. Задание двумерного массива. По идее, надо лишь составить алгоритм заполнения двумерного массива. Только я никак не могу додуматься как его сделать. У меня есть пример как он составляется по горизонтали: wrk:=1; for i:=1 to 6 do {cikl po strokam} begin j:=5-i; if j<1 then j:=1; while(j <= 7-i) do {cikl po kolonnam} begin ms[i,j]:=wrk; wrk:=wrk+1; j:=j+1 end; end; { . . . 1 2 3 . . . . } { . . 4 5 6 . . . . . } { . 7 8 9 . . . . . . } {101112 . . . . . . . } {1314 . . . . . . . . } {15 . . . . . . . . . } { . . . . . . . . . . } { . . . . . . . . . . } { . . . . . . . . . . } { . . . . . . . . . . } А надо, что бы составлялось вот так: { . . 1 . . . . . . . } { . . 2 7 . . . . . . } { . . 3 813 . . . . . } { . . 4 91419 . . . . } { . . 510152025 . . . } { . . 611162126 . . . } { . . .12172227 . . . } { . . . .182328 . . . } { . . . . .2429 . . . } { . . . . . .30 . . . } Добрался до того, что бы вводить по вертикали, первая колонна заполняется правильно, остальное - нет... Выложил файл .pas , думаю с ним разобраться легче с программой. http://ifolder.ru/27046988 Большая помощь помочь мне :) Такс... сделал несколько ошибок когда отправлял задание. Отправил то, над чем уже работал, соответственно внёс там изменения. Сейчас уже всё исправил, перезалил заново .pas файл, на правильный. |
| gepar:
igarexa,какое-то странное у тебя задание, не алгоритмическое я бы сказал, почему данные вводить нужно именно с 3ей строки и почему только до 6 в столбец мы считаем? А если у нас строк меньше (2) например, а если столбцов меньше (2), тогда что? Вот есть у нас матрица 2x2, что тогда твой алгоритм будет делать, ничего? Ты бы лучше задание написал, а не то как ты его понимаешь. |
| igarexa:
gepar, Да вот такое дали.. это кстати только А часть, Б часть ещё более странное, там вообще заполняется по спирали... но это уже другой вопрос. Пишу задание: Разработать программу, которая в двумерном массиве заполняет указанные элементы значениями 1, 2, 3, 4, 5,.... по вертикали. В программе нельзя использовать операторы присвоения, для заполнения массива, которые не находятся в теле цикла. И соответственно картинка: { . . 1 . . . . . . . } { . . 2 7 . . . . . . } { . . 3 813 . . . . . } { . . 4 91419 . . . . } { . . 510152025 . . . } { . . 611162126 . . . } { . . .12172227 . . . } { . . . .182328 . . . } { . . . . .2429 . . . } { . . . . . .30 . . . } Ну и нам дали другой вариант, для примера, я его уже выкладывал на http://ifolder.ru/27046988 |
| HoRRoR:
Мне такое решение нравится: --- Код: --- for i := 0 to 29 do begin y := i div 6 + i mod 6; x := i div 6 + 2; arr[y, x] := i + 1; end; --- Конец кода --- |
| igarexa:
HoRRoR, Спасибо, попробую разобраться с этим :) хотя пока не особо ясно |
| HardWareMan:
Набрал ради теста вариант хоррора: Результат работы: Работает, можно пользовать. :3 |
| gepar:
--- Цитата: igarexa ---Разработать программу, которая в двумерном массиве заполняет указанные элементы значениями 1, 2, 3, 4, 5,.... по вертикали. В программе нельзя использовать операторы присвоения, для заполнения массива, которые не находятся в теле цикла. --- Конец цитаты --- Картинка не соответствует заданию так как три точки подразумевают дальнейшую прогрессию, а не только цифру 6, скорее всего они подразумевают 1,2,3,4,5,...,n где n - количество строк. Также в задании не указано что значения должны заполнятся именно с 3 строки матрицы что подразумевает заполнение с начала матрицы... Но так как сдавать это не мне то можешь воспользоваться и вариантом HoRRoR'а ;) |
| igarexa:
gepar, ну даже не знаю, я с листа переписывал, если что, проблемы профессора :) HardWareMan, Спасибо ;) так стало понятнее :) Выводит то что как раз хочу видеть, щас заточу под пример который нам дали, для маскировки :D Надеюсь со вторым вариантом уже разберусь. HoRRoR,HardWareMan,gepar, Благодарю за помощь и отзывчивость! :) |
| HoRRoR:
Кстати, чтобы не писать "if xxx < 10 then write(' ', xxx)" можно писать "write(xxx:2)". Поправьте, если не во всех паскалях так. |
| HardWareMan:
--- Цитата: HoRRoR от 19 Ноябрь 2011, 19:21:02 ---Кстати, чтобы не писать "if xxx < 10 then write(' ', xxx)" можно писать "write(xxx:2)". Поправьте, если не во всех паскалях так. --- Конец цитаты --- Ах да, уже забывать начинаю. Все верно. |
| igarexa:
HoRRoR, да спасибо, так и сделал :) как раз в примере задания так и надо было сделать. По идее программа готова, щас допишу протокол с блок-схемой, и задание выполнено :) |
| HoRRoR:
--- Цитата: HardWareMan от 19 Ноябрь 2011, 22:42:35 ---Ах да, уже забывать начинаю. Все верно. --- Конец цитаты --- Я вот вспоминал, как массивы объявлять :lol: Хотя несколько лет на Delphi кодил... |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |