Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2016, 21:50   #1
gleensande
Пользователь
 
Регистрация: 03.04.2016
Сообщений: 39
Сообщение Ошибка, которая не видна

И снова здравствуйте!
Была написана программа по такому условию:

"Даны массивы:
N1, ... , N10 - наименования предприятий;
F1, ... , F10- фонды заработной платы.
Вывести два списка: 1-й - предприятия, у которых фонд меньше среднего по всей группе;
2-й - предприятия, у которых фонд меньше 250000 р"

Она выглядит так:
Код:
program pr44_9;
const 
  m=10;
var
  n: array[1..m] of string;
  f: array[1..m] of integer;
  s: real;
  i: integer;
begin
	writeln('Введите наименования предприятий ');
	for i:=1 to m do
		read(n[i]);
	writeln('Введите их фонды заработной платы ');
	for i:=1 to m do
		read(f[i]);
	s:=0;
	for i:=1 to m do 
		s:=s+f[i];
	s:=s/m; 
	writeln('');
	writeln('1. Список предприятий, у которых фонд меньше среднего: ');
	for i:=1 to m do 
		if f[i]<s then 
			write(n[i],' ');
	writeln('');		
	writeln('2. Список предприятий, у которых фонд меньше 250000: ');
	for i:=1 to m do 
		if f[i]<250000 then 
			write(n[i],' ');		
end.
Почему-то программа выводит все, кроме самого важного - того, что в циклах. В PascalABC не выдает никакую ошибку, просто не выводит нужное. В Turbo - выдает какие-то совершенно рандомные, на мой взгляд, ошибки. То пишет, что line is too long, то выдает ошибку синтаксиса или несответствие типов при обнулении переменной s...

И заранее большое спасибо!
gleensande вне форума Ответить с цитированием
Старый 12.05.2016, 22:05   #2
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

при чтении строк замените read на readln.
FPaul вне форума Ответить с цитированием
Старый 12.05.2016, 22:13   #3
gleensande
Пользователь
 
Регистрация: 03.04.2016
Сообщений: 39
По умолчанию

Цитата:
Сообщение от FPaul Посмотреть сообщение
при чтении строк замените read на readln.
Точно, недавно было то же самое, но память подводит. Спасибо огромное, все заработало.
А Вы случайно не знаете, почему так происходит?
gleensande вне форума Ответить с цитированием
Старый 13.05.2016, 17:46   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

Знаю, но ...
Заходим в раздел литературы, качаем Т.А. Павловская, Программирование на ЯВУ. Находим ответ.


Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 13.05.2016, 17:59   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
Знаю, но ...
Заходим в раздел литературы, качаем Т.А. Павловская, Программирование на ЯВУ. Находим ответ.


Как-то так, ...
А лучше сразу нормальную книгу.
Например из этого списка http://stackoverflow.com/a/388282/964478

И если уж качать, а не брать в библиотеке или покупать, то лучше с торрентов, а не с помоек типа депозитфайлса, куда ведут почти все ссылки в "разделе литературы".

UPD: ой, показалось, что тема в С++ разделе. Но тема с литературой все равно не торт.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 13.05.2016 в 18:09.
Alex11223 вне форума Ответить с цитированием
Старый 13.05.2016, 18:06   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Alex11223, а Вы со списком ничего не напутали?
Уверены, что в книгах по C++ найдётся ответ, чем в Turbo Pascal (Pascal) в консоли отличается read() от readln() ?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.05.2016, 18:35   #7
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Цитата:
Сообщение от gleensande Посмотреть сообщение
почему так происходит?
Код:
program test;

var
  s1, s2: string;
begin
  Read(s1);
  Read(s2);
  writeln('---------------------');
  writeln('"', s1, '"');
  writeln('"', s2, '"');
end.
Потому, что read(s1) вводит символы в s1 до символов перевода строки. Сами символы перевода строки оставляет в буфере клавиатуры.
Следующий read(s2) также вводит символы в s2 до символов перевода строки, но буфер уже содержит в начале перевод строки, ввод сразу завершается. Как результат, в s2 пустая строка.

Чтобы извлечь перевод строки из буфера - readln.
FPaul вне форума Ответить с цитированием
Старый 24.05.2016, 20:03   #8
gleensande
Пользователь
 
Регистрация: 03.04.2016
Сообщений: 39
По умолчанию

Спасибо, стало гораздо понятнее!
gleensande вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не видна флешка chipside Компьютерное железо 8 26.11.2013 19:49
Background image видна граница изображения mafia239 HTML и CSS 2 10.08.2012 14:31
При использование Transparentcolor для картинки картинка которая находиться на заднем фоне не видна Hunter_bog Мультимедиа в Delphi 2 21.01.2012 02:22
Рисование Эдита, чтобы была видна каретка. Zeraim Общие вопросы Delphi 3 28.02.2010 23:27
как определить видна ли форма? Leo20 Общие вопросы Delphi 10 30.11.2009 15:58