Часовой пояс: UTC + 3 часа




Куратор(ы):   Lord_of_Darkness   



Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 985 • Страница 2 из 50<  1  2  3  4  5 ... 50  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 
Прилепленное (важное) сообщение

Убедительная просьба ко всем, кто выкладывает исходники:
1. Обязательно пользуйтесь тэгом code (иначе очень трудно читать)
2. Старайтесь делать отступы

Если вы хотите чтобы вам помогли в написании программы, внятно излагайте задание!

Прежде чем задать вопрос, воспользуйтесь учебником


Возможно, что нужная вам программа уже написана, поэтому советую просмотреть список здесь и здесь

Отредактировано куратором: Lord_of_Darkness. Дата: 07.07.2006 19:36



Партнер
 

Дело тут не в размерах памяти которую может выделить паскаль а в ПРАВИЛЬНОМ ЭФФЕКТИВНОМ АЛГОРИТМЕ (т.е. должна хорошо поработать голова а не компилятор, на него не стоит надеяться)
правильным решением же будет такое:
сождаем массив
Код:
mas: array [1..100] of longint;

- т.е. есть массив который занимает всего 4*100 байт :)
при нахождении в файле числа k просто увеличиваем содержимое ячейки k
а при выводе делаем так:
пробегаем по всем элементам масива
Код:
for i:=1 to 100

и если они не равны 0, то выводим это число mas[i] раз!!!
Вот и все и не нада никакие дэлфы и динамические массивы! :)


 

Цитата:
сделай массив of byte, а i, n и все что может быть больше 32000 LongInt

но никак не больше 65535, а человеку нада аж 100000
поправлю одну свою неточность:
Цитата:
и если они не равны 0, то выводим это число mas[i] раз!!!

т.е. выводим число i mas[i] раз, если mas[i]<>0


 

Member
Статус: Не в сети
Регистрация: 27.11.2004
Откуда: Россия/Саратов
Для начала скажите, как мне округлить число (intrger) после вычислений, да как чтобы запятая не прыгала куда попвло!!!

Добавлено спустя 1 час, 1 минуту, 39 секунд:
Код:
 
PROGRAM CALC_130 (input, output);

  LABEL d1 ;
    VAR a,b,c:real;
        v,k:integer;

  BEGIN
       writeln('+-----------------------------------------+');
       writeln('| ‚ б ЇаЁўҐвбвўгҐв Їа®Ја ¬¬ -Є «мЄг«пв®а! |');
       writeln('+-----------------------------------------+');
       writeln;
       writeln('            ‚лЎҐаЁвҐ ¤Ґ©бвўЁҐ:');
       Writeln;
       writeln('    +-------------------------------+');
       writeln('    |           ‘«®¦Ёвм ¤ў  зЁб« -1 |');
       writeln('    |           ‘лзҐбвм ¤ў  зЁб« -2 |');
       writeln('    |          “¬­®¦Ёвм ¤ў  зЁб« -3 |');
       writeln('    |         ђ §¤Ґ«Ёвм ¤ў  зЁб« -4 |');
       writeln('    |    ‚®§ўҐбвЁ зЁб«® ў б⥯Ґ­м-5 |');
       writeln('    | ‚лзЁб«Ёвм Єў ¤а в­л© Є®аҐ­м-6 |');
       writeln('    +-------------------------------+');
       readln(k);
       readln;

       If k=1 then begin
                    writeln('‚ўҐ¤ЁвҐ ЇҐаҐ¬Ґ­­лҐ');
                    readln(a);
                    readln(b);
                    c:=a+b;
                   end;


       If k=2 then begin
                    writeln('‚ўҐ¤ЁвҐ ЇҐаҐ¬Ґ­­лҐ');
                    readln(a);
                    readln(b);
                    c=a-b;


       If k=3 then begin
                    writeln('‚ўҐ¤ЁвҐ ЇҐаҐ¬Ґ­­лҐ');
                    readln(a);
                    readln(b);
                    c:=a*b;
                   end;


       If k=4 then begin
                    writeln('‚ўҐ¤ЁвҐ ЇҐаҐ¬Ґ­­лҐ');
                    readln(a);
                    readln(b);
                    c:=a/b;
                   end;


       If k=5 then begin
                    writeln('‚ўҐ¤ЁвҐ ЇҐаҐ¬Ґ­­го');
                    readln(a);
                    c:=a*a;
                   end;


       If k=6 then begin
                    writeln('‚ўҐ¤ЁвҐ ЇҐаҐ¬Ґ­­лҐ');
                    readln(a);
                    c=sqrt(a)
                   end;


       writeln('+-----------------------------------------+');
       writeln('|             ђҐ§г«мв в: ',c);
       writeln('+-----------------------------------------+');







       readln;
   END.


Почему эта прога не компилиркется????
Отредактировано куратором: Lord_of_Darkness. Дата: 05.03.2006 14:18

_________________
...from Toshk@ :-)


 

Member
Статус: Не в сети
Регистрация: 21.09.2004
Откуда: Санкт-Петербург
Integer? Это же целое число куда его округлять?
Не знаю чем отличается FreePascal от обычного, но вобщем в паскале округление происходит с помощью этих двух операторов: trunc() и round(), где первый просто отрезает дробную часть, а второй округляет до целого.

Добавлено спустя 2 минуты, 7 секунд:
Цитата:
If k=6 then begin
writeln('‚ўҐ¤ЁвҐ ЇҐаҐ¬Ґ­­лҐ');
readln(a);
c=sqrt(a)
end;

точку с запятой поставь.

_________________
Безжалостна глубь океана!
Но твари, скользящие в ней..... хороши к холодному пиву! <<Fishing Overclan>>


 

Member
Статус: Не в сети
Регистрация: 27.11.2004
Откуда: Россия/Саратов
Короче фишка такая,(я написал Integer а имел в виду real) после вычислений надо вывести ответ, но не так как обычно это делает real : 1,00000000000000+Е300 ну или что-то вроде того, мне наде если после запятой нет нулей то чтобы было целое число, а если после запятой есть цифры то чтоб он показал послезапятой 5 или например 8 чисел..................вот так!

_________________
...from Toshk@ :-)


 

Member
Статус: Не в сети
Регистрация: 21.09.2004
Откуда: Санкт-Петербург
А чтоб заново не запускать каждый раз заключи это дело в цикл:

repeat

// тут вся прога

writeln('Еще раз? 1-Да, 2-Нет');
readln(k);
Until k<>2;


 

Member
Статус: Не в сети
Регистрация: 27.11.2004
Откуда: Россия/Саратов
sKs5th для повторения будет использоваться GOTO

А прога некомпилится не из за того что нет точки с запятои, а из-за чегото другого!
Отредактировано куратором: Lord_of_Darkness. Дата: 05.03.2006 14:20

_________________
...from Toshk@ :-)


 

Member
Статус: Не в сети
Регистрация: 21.09.2004
Откуда: Санкт-Петербург
Цитата:
он показал послезапятой 5 или например 8 чисел..................вот так!


Короче. Берешь свое число умножаешь его на 10 в той степени в которой тебе надо потом цифр после запятой (5 значит 100 000), затем округляешь его Round() и делишь на тоже число ( 100 000 ). В итоге получишь число с пятью знаками после запятой.

Добавлено спустя 2 минуты, 17 секунд:
Цитата:
If k=2 then begin
writeln('‚ўҐ¤ЁвҐ ЇҐаҐ¬Ґ­­лҐ');
readln(a);
readln(b);
c=a-b;

Ты тут еще End; забыл.


Последний раз редактировалось sKs5th 25.01.2005 18:54, всего редактировалось 1 раз.

 

Member
Статус: Не в сети
Регистрация: 27.11.2004
Откуда: Россия/Саратов
sKs5th Большое спасибо!

Добавлено спустя 2 минуты, 10 секунд:
Ошибка error: illegal expression выдаётся после строчек с:=а-б; и с:=sqrt(a);

Добавлено спустя 1 минуту, 58 секунд:
Цитата:
Ты тут еще End; забыл.[/code]
поставил я END всё равно то же самое![/code]

_________________
...from Toshk@ :-)


 

Member
Статус: Не в сети
Регистрация: 21.09.2004
Откуда: Санкт-Петербург
Цитата:
If k=2 then begin
writeln('‚ўҐ¤ЁвҐ ЇҐаҐ¬Ґ­­лҐ');
readln(a);
readln(b);
c=a-b;


Тут как сказал уже End; поставь и двоеточие перед равно.

Цитата:
If k=6 then begin
writeln('‚ўҐ¤ЁвҐ ЇҐаҐ¬Ґ­­лҐ');
readln(a);
c=sqrt(a)
end;


Тут только двоеточие перед равно

Добавлено спустя 2 минуты, 9 секунд:
Цитата:
goto - выполняется не аппаратно, и с ним могут быть проблемы

Не то чтобы проблемы, но его использование сильно затрудняет чтение кода и можно посасть в дыру из пересылок. Программа получается не структурированной. Вобщем его использование не принято и считается дурным тоном.


Последний раз редактировалось sKs5th 25.01.2005 19:03, всего редактировалось 1 раз.

 

Member
Статус: Не в сети
Регистрация: 27.11.2004
Откуда: Россия/Саратов
sKs5th Во теперь заработало, всё не упомниш, и написать прогу без ошибок(темболее таких мелких) чел который впервые увидил FP(и вообще тока сел за програмирование), помоему не реально...........но остались ещё люди которые могут помоч.....спасибо огромное!

_________________
...from Toshk@ :-)


 

Member
Статус: Не в сети
Регистрация: 09.11.2004
Toshk@
я вот одного не пойму: насколько я знаю в Паскале символ 'означает' РАВНО а символ ' := " означает присвоить, а у тебя везде
в проге используется символ '=' (т.е. равно).
Например чтобы присвоить переменной С результат сложения переменных А и В надо писать так - С:=A+B а не С=A+B


 

Куратор темы
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
Toshk@
Цитата:
он показал послезапятой 5 или например 8 чисел..................вот так!

Код:
writeln('a = ',a:10:5);

где 10-всего выводимых знаков, 5 - после запятой.

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Member
Статус: Не в сети
Регистрация: 14.08.2004
Откуда: Москва
в чём ошибка, подскажите
требуется считать переменные из inputa и вывести результат в output, но он мне выдаёт, что "File not open for output".
Код:
var a,b,c,s,p:longint;
procedure readdata;
begin
assign(input, 'input.txt');
reset(input);
read(a,b,c);
s:=a+b+c;
p:=a*b*c;
close(input);
end;
procedure outdata;
var s,p:longint;
begin
assign(output,'output.txt');
reset(output);
writeln(s,p);
close(output);
end;
begin
readdata;
outdata;
end.


 

You should use ether
rewrite(output); (Create or overwrite existing file)
or
append(output); (Append to file)
in oder to write to file.


 

Member
Статус: Не в сети
Регистрация: 14.08.2004
Откуда: Москва
riskie
вроде заработало, только новая трабла появилась...
в инпуте у меня
Код:
1 2 3

теоретически в аутпуте должно быть сумма и произведение этих чисел, т.е.
6(сумма) и 6(произведение)
он выдаёт 413532370 как сумму и 413532341 как произведение... что не так?


 

Advanced member
Статус: Не в сети
Регистрация: 23.10.2003
Откуда: Иркутск/Майкоп
cj_remix
Убрать объявление переменных из процедуры outdata, например... Вы бы лучше учебник почитали, чем на форуме такие вещи спрашивать.

_________________
Края каждого совершенно нового крышка процессора не на 100% гладкая. Это связано с тем, что следов мастерства не избежать. (c) Али.


 

Куратор темы
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
cj_remix
смотри ветку книги по программированию

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Member
Статус: Не в сети
Регистрация: 14.08.2004
Откуда: Москва
Помогите плиз, чтобы программа выполнялась без вылета...... например:
Код:
var a,b,s:integer;
begin
read(a,b);
s:=a+b;
writeln(s);
end.

что нужно изменить чтобы после нажатия Ctrl+F9 и введения a u b, прога не вылетала в "редактор", а сразу же выдавала результат???

дописать readln; или readkey; Lord_of_Darkness
Отредактировано куратором: Lord_of_Darkness. Дата: 05.03.2006 14:28


 

Куратор темы
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
cj_remix
Ррр! Попробуй:
1. скачать
2. прочитать учебник по паскалю.
Второе обязательно!

Добавлено спустя 5 минут, 23 секунды:
вот еще один учебник

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 985 • Страница 2 из 50<  1  2  3  4  5 ... 50  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan