22.11.2011, 19:13 | #1 (permalink) |
Member
Регистрация: 21.11.2011
Сообщений: 56
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Задача о численности населения городов
|
22.11.2011, 19:13 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Похожие темы на нашем форуме, почитайте Перепись населения Задача по С + + Задача по С++ Задача в Pascal'е (ЕГЭ) |
22.11.2011, 19:45 | #2 (permalink) |
support
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
|
gazon
Может быть, вы имели в виду увеличение на 5% численности населения каждого города? А в чем проблема возникла при решении этого типа задачи? Работа с типизированными файлами расписана от и до на нашем форуме, напомню основные моменты: F:Text; {в разделе var определяем файловую переменную для работы с текстовыми файлами} assign(F,patch); {связываем файловую переменную с конкретным названием файла, прописывая полный путь к нему} reset(F); {открываем файл по чтению} rewrite(F); {открываем файл по перезаписи} append(F); {открываем файл по дозаписи} read(F,s,n); {считать из файла F значения и присвоить их переменным s и n} write(F,s,n); {записать в файл F значения переменных s и n} Основные операторы работы с файлами описаны, обдумать, как их применить на практике - ваша главная задача. Листинг с решением потом выложите сюда, мы поможем возможные ошибки исправить. |
23.11.2011, 19:32 | #4 (permalink) |
Member
Регистрация: 21.11.2011
Сообщений: 56
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Program srs1307;
type city=record name:string; chis:real; end; fl=file of city; var f,f2:fl; i,k:integer; s:string; n:real; Begin assign(f,'d:\lab\4\file.txt'); reset(f); while not eof(f) do begin read(s,n); end; assign(f2,'d:\lab\4\file2.txt'); rewrite(f2); write(f2,s,n); close(f); close(f2); End. Я в PascalABC пишу что то не получается |
23.11.2011, 20:23 | #5 (permalink) |
support
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
|
Хех, судя по вашему листингу, вы записываете в файл 2 введенные с клавиатуры значения переменных s и n, причем совсем без изменения числовых данных
Навскидку, ряд грубейших ошибок: Вы не определили массив, в который будете считывать данные из файла, хотя тип для него прописали. пишется в разделе переменных, а не до него Вы пишете, что численность населения всегда целое число, а определяете переменную для нее вещественной, хотя на рассчеты это не повлияет, скорее уж на форму вывода числа. Совершенно непонятно, чем вы руководствовались, определяя эти переменные для хранения считанных из файла данных, вы же уже определили свой тип, так создайте массив вашего типа и считывайте данные непосредственно в него. Исходя из вышесказанного, использование переменных s и n бессмысленно, тем более так, как вы прописали, то есть в данном цикле вы просто запрашиваете ввод с клавиатуры, так как в команде read(s,n) вы не ссылаетесь на файловую переменную как на источник, следовательно, программа будет считывать данные из стандартного потока ввода, то есть с клавиатуры. Правильнее будет так read(f,s,n), хотя лучше все же использовать массив типа city. Это явно нужно поместить в другое место, а то вы открываете результирующий файл по перезаписи и вносите в него последние значения переменных s и n, даже не увеличивая числовое значение. Предлагаю строки поместить до цикла, а в цикл, чтобы данные сразу после чтения передавались во второй файл. Естественно, опять повторюсь, что считывать данные из файла лучше в массив, причем наилучшим вариантом будет динамический массив, то есть с изменяемой размерностью. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
23.11.2011, 20:53 | #6 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Оно и понятно. Ошибок - просто море.
Итак. 1. На кой пёс Вы вводите запись? Всё равно в программе она не используется, и даже переменных это типа Вы не объявляете, только тип файла, но об этом - дальше. 2. С файлами и их типами. Тут возможны два варианта - либо, как советует AlexZir, объявить файлы текстовыми, либо объявить их файлами записей. Но если Вы работаете с файлами записей, то заранее подготовить файл с перечнем городов и населением в текстовом редакторе невозможно, и придется заполнять его программно. 3. Строки нужно считывать как с экрана, так и из файла, оператором readln, а не read. Очень желательно и числа тоже. Ниже я приведу два варианта программы - один с текстовыми файлами и простыми переменными, другой - с записями и файлами записей. В последнем случае предусмотрен вывод на экран результатов "увеличения" численности населения, потому что если Вы откроете файл записей текстовым редактором, то ничего, кроме крякозябров, там не увидите. Имена и пути файлов, разумеется, можете поменять. В обеих программах предусмотрен консольный ввод исходных данных. И еще, как всегда - я пользуюсь нормальным Турбо-Паскалем и за глюки этого идиотизма (АВС) не отвечаю. Код:
Const Nt=3; Var f1,f2:Text; S:String; n:Real; i:Integer; Begin Assign(f1,'D:\lab1.txt'); Rewrite(f1); For i:=1 to Nt do begin Writeln('Name of the town:'); Readln(S); Writeln(f1,S); Write('Population: '); Readln(n); Writeln(f1,n:0:0); end; Close(f1); Reset(f1); Assign(f2,'D:\lab2.txt'); Rewrite(f2); For i:=1 to Nt do begin Readln(f1,S); Writeln(f2,S); Readln(f1,n); Writeln(f2,n*1.05:0:0); end; Close(f1); Close(f2); End. Код:
Const Nt=3; Type city=record name:string; chis:real; end; Var f1,f2:file of city; A:city; i:Integer; Begin Assign(f1,'D:\lab1'); Rewrite(f1); For i:=1 to Nt do begin Writeln('Name of the town:'); Readln(A.name); Write('Population: '); Readln(A.chis); Write(f1,A); end; Close(f1); Reset(f1); Assign(f2,'D:\lab2'); Rewrite(f2); For i:=1 to Nt do begin Read(f1,A); A.chis:=A.chis*1.05; Write(f2,A); end; Close(f1); Close(f2); Reset(f2); For i:=1 to Nt do begin Read(f2,A); Writeln(A.name); Writeln(A.chis:0:0); end; Readln End. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|