|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
01.11.2011, 14:30 | #1 |
Пользователь
Регистрация: 24.03.2011
Сообщений: 28
|
Работа с файлами
Всем привет. Нужна ваша помощь с решением задачи на паскале. Вот условие:
Есть показания недельной температуры в 3 городах страны. Нужно сделать программу, которая посчитает среднюю недельную температуру. В файле данных на первой строчке указано количество городов, затем 7 цифр - температура. Результат нужно записать в спец.файл, по 2 числа: 1 число - номер города, 2 число - средняя температура, с точностью до 3 цифр после запятой. Начальные данные: Код HTML:
3 -5 -7 -5 0 1 -6 –9 -2 -2 0 1 -4 -7 -7 -8 -5 -4 -1 0 -2 -5 Код HTML:
program Bevarde2; var Df,Rf:text; n,i,k:integer; sum, sr:real; temp:array[1..50] of integer; begin sum:=0; Assign(Df,'duom.txt'); Reset(Df); Read(Df,n); for i:=1 to n do begin Read(Df,temp[i]); sum:=sum+temp[i]/temp[i]; end; Close(Df); Assign(Rf,'rez.txt'); Rewrite(Rf); writeln(Rf,sum:3:3); Close(Rf); end. |
01.11.2011, 15:10 | #2 |
Форумчанин
Регистрация: 18.10.2009
Сообщений: 185
|
Я бы сделал примерно так (массив здесь использовать необязательно)
Код:
На С# пишу лучше чем на русском.
"У меня правильнописание хромает. Оно хорошее, но почему-то хромает." |
06.11.2011, 12:29 | #3 |
Пользователь
Регистрация: 24.03.2011
Сообщений: 28
|
Решил не создавать новую тему, а здесь задать вопрос по поводу очередной задачи. Вот условие:
Учительница начальных классов решила подготовить задания, которые помогли бы помочь проверить, как дети могут складывать, вычитать, делить и умножать. Чтобы ей было быстрее, она попросила помочь программистов. Учительница указала границы двух чисел [x1;x2] и сказала, что каждый ученик получит четыре задания(сложение, вычитание, умножение, деление без остатка). Создать программу, которая из начальных данных прочтет 2 числа x1,x2, а в файл результата будут записаны всевозможные действия с цифрами. Код:
Код:
Мой код: Код:
|
06.11.2011, 14:45 | #4 |
Форумчанин
Регистрация: 18.10.2009
Сообщений: 185
|
Код:
есть ещё решение более оптимальное по скорости. Оно выдаёт теже результаты но в другом порядке. Код:
На С# пишу лучше чем на русском.
"У меня правильнописание хромает. Оно хорошее, но почему-то хромает." Последний раз редактировалось val_nnm; 06.11.2011 в 15:15. |
06.11.2011, 16:08 | #5 |
Пользователь
Регистрация: 24.03.2011
Сообщений: 28
|
val_nnm, если появится время, напишите пожалуйста как решали эту задачу. А то по вашему коду мне не совсем понятно... Если сможете, напишите в ЛС подробнее.
|
06.11.2011, 16:47 | #6 |
Форумчанин
Регистрация: 18.10.2009
Сообщений: 185
|
Попробую обьяснить по быстрому.
Договоримся первое число в выражении называть i а второй j 1) Из условия что деление должно быть без остатка (т.е. отстаток от деления i на j должен быть равен 0) 2) Из примера видно что учительнице нехочет видить примеры вида 3/3 4/4 5/5 и.т.д. (т.е. можно сказать что i неравно j) из обоих условий можно также сказать что i>j ( если i=j то это противоречит 2му условию, а если i<j то тогда невозможно без остатка разделить i на j) кроме того з этого условия i неможет быть меньше или равное x1 (т.к. бесполезно делать x1/x1 из за 2го условия) Поэтому for i := x1+1 to x2 do начинаем с x1+1 и в нём i последовательно принимает значения (для приведённого примера) 4, 5, 6, 7, 8, 9, 10 Затем следует внутренний цикл for j := x1 to i-1 do он переберает числа начиная с x1 и заканчивает i-1 (это изза условия что i<j) т.е. в результате мы проверяем пары чисел 4,3 5,3 5,4 6,3 6,4 6,5 7,3 6,4 7,5 7,6 8,3 8,4 8,5 8,6 8,7 9,3 9,4 9,5 9,6 9,7 9,8 10,3 10,4 10,5 10,6 10,7 10,8 10,9 и теперь для каждой из этой пары чисел проверяем равен лиостаток от деления i на j нулю "if ((i mod j)=0) then Begin" если равен, то тогда выводим строки уравнений, для этой пары чисел, в файл. а и ещё по поводу if (x1<=0) then x1 := 1; это мы просто проверяем чтобы введённый x1 небыл равен 0 (т.к. неохотовозиться с ошибкой от деления на 0) ещё в первом примере можно заменить for j := x1 to i-1 do на for j := x1 to i div 2 do т.к. очевидно что для выполнения условия j должны быть как минимум в 2 раза меньше i. Ну и всё это сказанно для первого примера. Во втором примере мы проходим по всем возможным j (от x1 до x2/2) и для каждого выбираем ряд i которые кратные j. начинаем с i=2*j затем i=3*j и.т.д. пока i не станет больше x2
На С# пишу лучше чем на русском.
"У меня правильнописание хромает. Оно хорошее, но почему-то хромает." Последний раз редактировалось val_nnm; 06.11.2011 в 17:38. |
06.11.2011, 18:23 | #7 |
Пользователь
Регистрация: 24.03.2011
Сообщений: 28
|
Теперь стало немного понятно. Спасибо вам огромное!
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа с файлами | malenkaya | Помощь студентам | 5 | 23.04.2011 08:24 |
Работа с файлами на Си | genia | Общие вопросы C/C++ | 4 | 19.02.2011 16:29 |
Работа с файлами | Funtick | Помощь студентам | 2 | 17.02.2011 15:30 |
Работа с файлами | Гелена | Помощь студентам | 1 | 18.03.2010 23:31 |
Работа с файлами | DJ Socol | Win Api | 1 | 17.07.2007 09:18 |