Список форумов Шадринский форум -> Программирование -> Delphi, Pascal, C, C# -> Паскаль умер!
Начать новую тему   Ответить на тему   вывод темы на печать

Паскаль умер!

Автор
Сообщение
vladislav
Запомнил кнопки...



Зарегистрирован: 04.02.2005
Сообщения: 147


Статус: Offline
СообщениеДобавлено: 2005.02.08 19:28.47
Ответить с цитатой
Написание этого "опуса" побуждает мой опыт и программиста и преподавателя. Здесь уже много говорилось о "знаниях" студентов. Я, в данном случае, не хочу говорить о самих студентов это особый разговор для другой темы. Меня
волнует, как преподается программирование. Я не хочу сказать, что преподаватели плохие. Преподаватели разные, как и в любом институте и это хорошо. Мне не нравится, прежде всего, чему учат, т.е. попросту говоря учебные планы. Конечно,
программирование в массовом порядке преподают не так давно и стандарты и учебные планы и, я бы сказал еще традиции преподавания, не устоялись. Проблема в Паскале. На мой взгляд, преподавание Турбо Паскаля губит многих студентов
на корню. Я попытаюсь объяснить, в чем здесь проблема. На мой взгляд, в технологии программирования, чем и следует овладеть студенту, присутствуют следующие компоненты: алгоритм, язык программирования, среда программирования, технология разработки ПО, среда выполнения (обычно ОС). Так вот, по моему глубокому убеждению, на какие бы курсы не было разбито преподавание программирования, любой курс должен преподаваться как курс программирования. Другими словами, среда программирования, например Windows не может изучаться иначе как через само программирование. Кроме этого, в каждом курсе программирования должны присутствовать все компоненты программирования. Если бы это удалось сделать, то, мне кажется, мы бы сдвинули обучение программированию с нулевой (или отрицательной) точки. Что же происходит с Турбо Паскалем. Он изучается очень подробно, два семестра. Теперь вдумайтесь в следующее: нигде и никто уже давно не пишет прикладные программы на Турбо Паскале 7.0. Почему? А потому-то этот продукт был предназначен для программирования в операционной системе MS DOS. Но этой
системы уже нет в природе - Windows только эмулирует ее, чтобы дать возможность запускать программы 15-летней давности. И вот бедные студенты два семестра программируют на ТурбоПаскале, совсем не понимая, что они программируют
в MS DOS и не зная какое это отношение имеет к Windows. Более того, они изучают даже те темы, которые уж никак нельзя пристегнуть к Windows - графику, файлы и т.п. И вот проучившись два семестра, не понявший, где он программировал студент, переходит к Delphi, и начинает программировать уже в Windows, до конца так и поняв, что это такое. При этом с самой ОС он опять не взаимодействует,
но это уже другой разговор. Возникает вопрос - зачем нужен Турбо Паскаль? Если мы принимаем, что преподавать алгоритмы надо в отрыве от всего остального, почему не взять, например, какую-нибудь программу для дошкольников - управлять какой-нибудь лягушкой или кенгуренком. Результат будет точно тот же самый, но без введения студента в заблуждение, так как он здесь прекрасно поймет, что
программирует не в Windows. Если кто-то мне скажет, что паскаль помогает затем программировать на Дельфи. Но, во-первых, Дельфи не должен быть самоцелью, а во-вторых, почему бы тогда не начать сразу на Дельфи и писать в начале
разные алгоритмы в простых консольных программах.
Ребята, забудьте про ТурбоПаскаль 7.0. Нет его, давно умер. Я этот вопрос уже давно ставлю на факультете, но пока переубедить коллег мне не удается.
Посмотреть профиль Отправить личное сообщение
 
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2008.11.28 11:10.02
Ответить с цитатой
условия в ИЕ не показываются. это нормально? Smile

Добавлено спустя 1 минуту 24 секунды:

в задаче самой первой "объем каталогов" ссылка и ... всё
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
xdsl
просто хороший человек


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 1252
Откуда: shadrinsk

Статус: Offline
СообщениеДобавлено: 2008.11.28 13:21.00
Ответить с цитатой
Э-э ... Не понял, щас гляну ...

Добавлено спустя 16 минут 57 секунд:

Дошло. В некоторых задачах условие - в отдельном файле.
В IE все работает. По крайней мере в шестой версии.

Добавлено спустя 2 минуты 21 секунду:

Цитата
а ничего не надо делать. как раз показательно будет, в отличии от тупого перебора чисел в памяти.

Столь-же показательно, как тупое создание ста тысяч объектов, вызов пары виртуальных методов в каждом, потом - уничтожение. О скорости работы С# ничего не скажет, а скажет только об эффективности бинарной реализации OOП-модели. Лично мне это на текущий момент неинтересно.
Посмотреть профиль Отправить личное сообщение
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2008.11.28 13:31.15
Ответить с цитатой
ну так будет или нет пример-то?
на паскале написаный. без внешних библиотек, и тп

xdsl писал(а):
скажет только об эффективности бинарной реализации OOП-модели
тупой перебор огромного массива данных и арифметической действие скажет только об эффективности работы с памятью. это мне не интересно. на C# пишут вон утилиты для работы с видео-потоком, так что смысл для меня вполне понятен - скорость достаточна.
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
xdsl
просто хороший человек


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 1252
Откуда: shadrinsk

Статус: Offline
СообщениеДобавлено: 2008.11.28 15:30.56
Ответить с цитатой
andy ice писал(а):
ну так будет или нет пример-то?
на паскале написаный. без внешних библиотек, и тп

xdsl писал(а):
Если вариант устраивает, прошу кивнуть тех, кто будет писать на C#


Добавлено спустя 5 минут 58 секунд:

Сначала условие задачи согласовать. Иначе потом замаюсь ответный пример на C# выбивать. Начнутся всякие отговорки, знаем, кушали уже. Игра в одни ворота.
Посмотреть профиль Отправить личное сообщение
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2008.11.28 15:44.33
Ответить с цитатой
не надо свои заморочки на других перекладывать. я свой пример дал когда как раз из вас еле выбил ответный.

xdsl писал(а):
Если вариант устраивает, прошу кивнуть тех, кто будет писать на C#

чем не устроил такой вариант
andy ice писал(а):
попробую в лоб перевести на c#
???
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
xdsl
просто хороший человек


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 1252
Откуда: shadrinsk

Статус: Offline
СообщениеДобавлено: 2008.11.28 15:44.47
Ответить с цитатой
Условие старой олимпиадной задачки

В видеоадаптерах EGA и VGA, распространненых для IBM PC-совместимых систем в конце 20 века, использование больших объемов видепамяти сдерживалось ограниченостью адресного пространства. Архитектура IBM PC предполагала, что видеопамять отображается на определенную область обычной памяти объемом максимум 64 килобайта. Таким образом, с первого взгляда становится невозможно использовать, например, графический режим 640x350, 16 цветов (640*350/2=112000 байт). В результате разработчики видеодаптеров пошли на "хитрость". Всю видепамять разделили на так называемые "плоскости", каждая из которых содержала данные только об одном из битов, из которых строится цвет точки. Таким образом, каждый байт плоскости содержал частичную информацию о 8 точках видеопамяти. Для 16-цветного графического режима таких плоскостей было 4 (по одной на каждый бит). Естественно, что каждая плоскость по отдельности умещалась в объем памяти 64 килобайта. С помощью регистров контроллера программист мог переключаться между плоскостями, манипулировать специальной битовой маской, с помощью которой удавалось выполнять запись данных сразу в несколько плоскостей и т.д.

Расмотрим хранение 16 точек 16-цветного режима в 4 плоскостях видеадаптеров EGA и VGA
Каждая из плоскостей будет содержать по 2 байта (2*8=16 битов)
129 1
128 2
130 3
1 4
В битовом представлении получим
10000001 00000001
10000000 00000010
10000010 00000011
00000001 00000100
Формируем цвет каждой точки из соответствующих четырех битов плоскостей.
0111 0000 0000 0000 0000 0000 0100 1001 0000 0000 0000 0000 0000 1000 0110 0101  
В десятичном представлении получаем коды цветов 16 точек:
7  0  0  0  0  0  4  9  0  0  0  0  0  8  6  5

Задание: Определить цвета точек по содержимому 4 плоскостей видепамяти

Исходные данные (файл input.txt или стандартный входной поток):
4 строки, содержащие набор байтов (через пробел) каждой из плоскостей. Количество байтов в каждой строке одинаково.

Результирующие данные (файл output.txt или стандартный выходной поток):
Строка, в которой через пробел перечислены коды цветов полученного набора точек

Пример исходных данных 1:

129 1
128 2
130 3
1 4

Пример результирующих данных 1:

7  0  0  0  0  0  4  9  0  0  0  0  0  8  6  5

Пример исходных данных 2:

1 2 3
4 5 6
6 5 4
3 2 1

Пример результирующих данных 2:

0  0  0  0  0  6 12  9  0  0  0  0  0  6  9  6  0  0  0  0  0  6  3  9


Возможные модификации: увеличение кол-ва плоскостей и гигантский объем входных данных.

Есть желающие порешать на C#?
Посмотреть профиль Отправить личное сообщение
Vladislav_133
Old Programmer


Пол: Пол:Муж.
Зарегистрирован: 27.09.2006
Сообщения: 4502


Статус: Offline
СообщениеДобавлено: 2008.11.28 20:31.31
Ответить с цитатой
ну ты даешь, Дима. А покороче нельзя? Мне больше двух строчек тяжело читать (буков много). Я свои примерчики набросаю на C и C#.
_________________
http://asm.shadrinsk.net
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
xdsl
просто хороший человек


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 1252
Откуда: shadrinsk

Статус: Offline
СообщениеДобавлено: 2008.11.30 19:36.45
Ответить с цитатой
В.Ю., задачка-то жизненная. Мы ее с Вами во множестве комбинаций решали в свое время. Дано содержимое четырех видеоплоскостей, побайтно через пробел четыре строки на стандартном входе. На стандартном выходе - одна строка через пробел цвета точек.

Потестировать входные данные и получаемый результат можно здесь: http://shgpi.shadrinsk.net/scripts/tasks/ . В списке - четвертая снизу задача. Там она на фрипаскале прорешанная лежит. Единственное ограничение - длина строк до 1000 значений. Если действительн начнем тестировать, перекомпилирую на длину до миллиона значений. По идее должно хватить на получение достоверных результатов.
Посмотреть профиль Отправить личное сообщение
Vladislav_133
Old Programmer


Пол: Пол:Муж.
Зарегистрирован: 27.09.2006
Сообщения: 4502


Статус: Offline
СообщениеДобавлено: 2008.11.30 20:49.14
Ответить с цитатой
Согласен.
_________________
http://asm.shadrinsk.net
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
xdsl
просто хороший человек


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 1252
Откуда: shadrinsk

Статус: Offline
СообщениеДобавлено: 2008.11.30 22:03.16
Ответить с цитатой
Отлично, как будет готово, выкладывайте. Сравним эффективность, сведём решения к более эффективному варианту и потестим на виндовсе и линуксе.
Посмотреть профиль Отправить личное сообщение
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2008.12.01 20:10.45
Ответить с цитатой
ну чо где уже программа на паскале? даёшь опенсорс!

хватить мять титьку, даешь свой алгоритм!

или опенсорсники опять хотятЪ выехать на других?

ps Wink
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
xdsl
просто хороший человек


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 1252
Откуда: shadrinsk

Статус: Offline
СообщениеДобавлено: 2008.12.01 23:16.39
Ответить с цитатой
Че, самому слабо?
Посмотреть профиль Отправить личное сообщение
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2008.12.01 23:17.38
Ответить с цитатой
хех. чтд
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
xdsl
просто хороший человек


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 1252
Откуда: shadrinsk

Статус: Offline
СообщениеДобавлено: 2008.12.01 23:40.41
Ответить с цитатой
Значит, слабо. Пойдите, поадминьте там чего где. Мы с ВЮ тут порешаем/потестим и Вас позовем.
Посмотреть профиль Отправить личное сообщение
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2008.12.01 23:51.39
Ответить с цитатой
ага ага. давай. отмазывайся.

ps: и не боюсь свои исходники в паблик выкладывать.

pss: смешно даже.

Добавлено спустя 32 секунды:

академики блин

Добавлено спустя 8 минут 5 секунд:

я вообще этого не понимаю. ВООБЩЕ. была речь про то, что мол программы на .NET тормозные. я выложил исходник простейшей популярной задачи, компилятор есть в любом компе с виндой, переписывай на паскале - выкладывай. началось тупня про командную строку, про левые утилиты, в итоге выманили исходник чего-то. толку НОЛЬ ибо исходник convert так и не был выдан. ладно. предложил предоставить любой исходник на паскале, для перевести его на си шарп. было какое-то на две страницы текста херни предоставлено. мы тут олимпиадные задачи решаем или где???

или, если у вас уже эта задача миллион раз решена - что мешает выдать хоть какой-то пример??? ЧТО??? какие нахрен алгоритмы? ДАВАЙ УЖЕ ПРОГРАММУ НА ПАСКАЛЕ!!! ЗАДРАЛ ОТМАЗЫВАТЬСЯ!!!
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral


Последний раз редактировалось: andy ice (2008.12.02 08:11.08), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
xdsl
просто хороший человек


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 1252
Откуда: shadrinsk

Статус: Offline
СообщениеДобавлено: 2008.12.02 01:05.50
Ответить с цитатой
Да закругляй уже, в мусорку тред превратил. Как дитя малое, чесслово. Сказал-же - дяди-академики разберутся и позовут.

Добавлено спустя 7 минут 6 секунд:

Исходник аналога на паскале "популярнейшой" программы даден? Даден. Сcылка на компилятор дадена? Дадена. Интернет есть? Вот скачивай, компилируй и сравнивай. Исходник convert ему не выдали, понимаш. Глаза разуй: http://forum.shadrinsk.net/viewtopic.php?p=599040#599040

Добавлено спустя 1 час 2 минуты 48 секунд:

ОЙ! А вдруг ИнтерНетуНету! Тогда компилятор - тута: ftp://shgpi.shadrinsk.net/ftp.vc.shgpi/langs/freepascal/2.2.2
Под винду - с довеском в виде лазаруса. Ну его почикать можно будет потом.
Посмотреть профиль Отправить личное сообщение
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2008.12.02 08:24.37
Ответить с цитатой
не знаю, чего они эти дяди разбираются,
xdsl писал(а):
во множестве комбинаций решали в свое время
архивы поднимите чтоли свои
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
Петрович
Ведущий банщик


Пол: Пол:Муж.
Зарегистрирован: 31.08.2005
Сообщения: 1392
Откуда: Сибирь...

Статус: Offline
СообщениеДобавлено: 2008.12.02 09:17.38
Ответить с цитатой
Ну если дома лень поборю, я тоже пожалуй накидаю решение. Чтоб уж до кучи и джаву сравнить Smile Веселее будет.
Посмотреть профиль Отправить личное сообщение ICQ Number
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2008.12.02 13:10.18
Ответить с цитатой
Накидал побыстрому:

using System;
using System.Text;
using System.IO;

namespace egavgabgi
{
    class Program
    {
        static void Main(string[] args)
        {
            StreamReader sr = File.OpenText(@"d:\input.txt");
            char[] delim = { ' ' };
            string r = sr.ReadLine().Trim();
            string[] c1 = r.Split(delim);
            r = sr.ReadLine().Trim();
            string[] c2 = r.Split(delim);
            r = sr.ReadLine().Trim();
            string[] c3 = r.Split(delim);
            r = sr.ReadLine().Trim();
            string[] c4 = r.Split(delim);
            sr.Close();

            int n = c4.Length;
            int[] output = new int[n * 8];
            byte b0;
            byte b1;
            byte b2;
            byte b3;
            int b;
            byte c = 0;
            for (int i = 0; i < n; i++)
            {
                b0 = byte.Parse(c1[i]);
                b1 = byte.Parse(c2[i]);
                b2 = byte.Parse(c3[i]);
                b3 = byte.Parse(c4[i]);
                for (int j = 7; j >= 0; j--)
                {
                    b = 0;
                    b = (b0 & (1 << j)) == 0 ? b : b | 1;
                    b = (b1 & (1 << j)) == 0 ? b : b | 2;
                    b = (b2 & (1 << j)) == 0 ? b : b | 4;
                    b = (b3 & (1 << j)) == 0 ? b : b | 8;
                    output[c++] = b;
                }
            }
            StreamWriter sw = new StreamWriter(@"d:\output.txt");
            for (int i = 0; i < n * 8; i++)
            {
                sw.Write("{0} ",output[i]);
            }
            sw.Close();
        }
    }
}


Исправлено для совместимости со старыми версиями .NET и MONO
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral


Последний раз редактировалось: andy ice (2008.12.02 14:51.43), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
xdsl
просто хороший человек


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 1252
Откуда: shadrinsk

Статус: Offline
СообщениеДобавлено: 2008.12.02 14:29.12
Ответить с цитатой
Что-то на mono сходу не работает. Linq найти не может, а если удалить, то Count найти не может в строке int n = c4.Count(), а если заменить на length, то при исполнении Exception: System.IndexOutOfRangeException в строке b0 = byte.Parse(c1[i]);

Ладно, с mono потом разберусь. Чего надо под винду установить, чтобы все это скомпилировать-запустить?
Посмотреть профиль Отправить личное сообщение
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2008.12.02 14:46.33
Ответить с цитатой
убрал linq, заменил Count на length, не ругается.

так как корябано на коленке по-быстрому, то файл с данными должен быть валидным, ни в начале ни в конце не должно быть пробелов.

чтобы скомпилить нужно поставить .net framework, соотвественно пути где-то так:

C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\csc.exe

или

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc.exe

или

C:\WINDOWS\Microsoft.NET\Framework\v3.5\csc.exe

Добавлено спустя 1 минуту 56 секунд:

впрочем можно сделать так:

r = sr.ReadLine().Trim();
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
xdsl
просто хороший человек


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 1252
Откуда: shadrinsk

Статус: Offline
СообщениеДобавлено: 2008.12.02 14:47.15
Ответить с цитатой
Ха, заработало! У меня в исходном файле пробел был в конце, вот c4.Length и возвращало значение на 1 больше.
Домой с работы приду, выложу исходник на freepascal и погоняю решения на паре героических тестов.
Посмотреть профиль Отправить личное сообщение
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2008.12.02 14:52.05
Ответить с цитатой
исправил исходник
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
xdsl
просто хороший человек


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 1252
Откуда: shadrinsk

Статус: Offline
СообщениеДобавлено: 2008.12.02 17:40.33
Ответить с цитатой
Вот мой вариант, можно начинать тестить.
const maxLen=100000;
var  planes:array[0..3,1..maxLen] of byte;
     points:array[0..7] of byte;
//     len, count,
     len, count: longint; 
     tmp,i:byte;
     cur:byte;
begin
for cur:=0 to 3 do begin
 len:=0;
 while not eoln do begin
  inc(len);  read(planes[cur][len]);
 end;
 readln;
end;
for count:=1 to len do begin
 fillchar(points,8,#0);
 for cur:=0 to 3 do begin
  tmp:=planes[cur][count];
  for i:=7 downto 0 do begin
   points[7-i]:=points[7-i] or ((tmp shr i)and 1)shl cur;
  end;
 end;
 for i:=0 to 7 do write(points[i]:3);
end;
writeln;
end.


Последний раз редактировалось: xdsl (2008.12.02 22:54.12), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2008.12.02 18:24.03
Ответить с цитатой
xdsl писал(а):
for cur:=0 to 3 do begin
len:=0;
while not eoln do begin
inc(len); read(planes[cur][len]);
end;
readln;
end;
что-то сомнения в этой части. разве read не один символ считывает?

Добавлено спустя 56 секунд:

а ну и пожелание вынести вывод за расчеты.

Добавлено спустя 31 минуту 45 секунд:

если пойти той же методой, через перенаправление вывода, то как-то так:

using System;
using System.Text;
using System.IO;

namespace egavgabgi
{
    class Program
    {
        static void Main(string[] args)
        {
            char[] delim = { ' ' };
            string[] c1 = Console.ReadLine().Trim().Split(delim);
            string[] c2 = Console.ReadLine().Trim().Split(delim);
            string[] c3 = Console.ReadLine().Trim().Split(delim);
            string[] c4 = Console.ReadLine().Trim().Split(delim);

            int n = c4.Length;
            int[] output = new int[n * 8];
            byte b0;
            byte b1;
            byte b2;
            byte b3;
            int b;
            for (int i = 0; i < n; i++)
            {
                b0 = byte.Parse(c1[i]);
                b1 = byte.Parse(c2[i]);
                b2 = byte.Parse(c3[i]);
                b3 = byte.Parse(c4[i]);
                for (int j = 7; j >= 0; j--)
                {
                    b = 0;
                    b = (b0 & (1 << j)) == 0 ? b : b | 1;
                    b = (b1 & (1 << j)) == 0 ? b : b | 2;
                    b = (b2 & (1 << j)) == 0 ? b : b | 4;
                    b = (b3 & (1 << j)) == 0 ? b : b | 8;
                    Console.Write("{0} ", b);
                }
            }
        }
    }
}

_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
xdsl
просто хороший человек


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 1252
Откуда: shadrinsk

Статус: Offline
СообщениеДобавлено: 2008.12.02 22:49.03
Ответить с цитатой
andy ice писал(а):
что-то сомнения в этой части. разве read не один символ считывает?

Только если считывает в символьную переменную. В общем случае ожидает на входе литерал того-же типа, что и переданная переменная.

Добавлено спустя 1 час 22 минуты 34 секунды:

Для подсчета времени выполнения кода в микросекундах модифицирую код на freepascal:

{ $DEFINE timetest}

{$MODE OBJFPC}
{$H+}
{$ifdef timetest}
uses unix, unixtype;
{$endif}
const maxLen=10000000;
var  planes:array[0..3,1..maxLen] of byte;
     points:array[0..7] of byte;
//     len, count,
     count,len: longint;
     tmp,i:byte; cur:byte;

{$ifdef timetest}
var _td:timeval;
procedure SetTimer; begin fpGetTimeOfDay(@_td,nil); end;
function GetTimer:int64; var td:timeval;
 begin 
  fpGetTimeOfDay(@td,nil);
  result:=(int64(td.tv_sec)*1000000+td.tv_usec)-(int64(_td.tv_sec)*1000000+_td.tv_usec); 
 end;
{$endif}

begin
for cur:=0 to 3 do begin
 len:=0;
 while not eoln do begin
  inc(len);
  read(planes[cur][len]);
 end;
 readln;
end;

{$ifdef timetest}
SetTimer;
{$endif}
for count:=1 to len do begin
 fillchar(points,8,#0);
 for cur:=0 to 3 do begin
  tmp:=planes[cur][count];
  for i:=7 downto 0 do begin
   points[7-i]:=points[7-i] or ((tmp shr i)and 1)shl cur;
  end;
 end;
{$ifndef timetest}
 for i:=0 to 7 do write(points[i]:3);
{$endif}
end;

{$ifdef timetest}
writeln(GetTimer);
{$endif}

writeln; 

end. 

компилируем без директивы timetest (первая строка), работает как обычно

компилируем с директивой timetest, засекает время непосредственно перед началом рассчетов, непосредственно после окончания рассчетов и вместо цветов точек выводит разницу в микросекундах. По просьбе трудящихся вывод (а заодно и ввод) вынесен за пределы рассчетов.

К сожалению, не знаю механизма получения времени в микросекундах под виндовс, хотя, по слухам, queryperfomancecounter эту задачу решает. Поэтому таймер - специфичный для юникса.

Теперь хотелось-бы увидеть аналог кода на C#, чтобы приступить к тестированию.

Добавлено спустя 37 минут 35 секунд:

Подправил код для работы с максимум 10-ю миллионами значений в каждой плоскости.

Вот генератор тестового файла:
{$mode objfpc}
 const maxlen=10000000;
 var i:integer; k: byte;
begin
 for k:=1 to 4 do begin
  for i:=1 to maxlen do write (' ', i mod 256);
  writeln;
 end;
end.

На выходе чуть меньше 140 мегабайт
Посмотреть профиль Отправить личное сообщение
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2008.12.02 23:43.18
Ответить с цитатой
xdsl писал(а):
Только если считывает в символьную переменную

слабо верится. т.е. если вводится 123 - то что в итоге? сомнительно. проверить пока лениво, я пока так, размышляю. получается что функция read на ввод 123 в байт-переменную записывает 123 как число? гм гм
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
xdsl
просто хороший человек


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 1252
Откуда: shadrinsk

Статус: Offline
СообщениеДобавлено: 2008.12.03 00:35.55
Ответить с цитатой
andy ice писал(а):
слабо верится.
Синтаксис языка от этого не изменится. Ему фиолетово, верят в него или нет. Прими как аксиому. Или как настоящий мачо изучи (fpcsourcedir)/rtl/inc/text.inc и будешь просветлен

Продолжаю ждать таймер-вставку в C#-код.
Посмотреть профиль Отправить личное сообщение
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2008.12.03 07:00.05
Ответить с цитатой
ну ладно, в консольке на паскале я лет 15 ничего не писал.

и по ночам я не пишу. почему-то Smile
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
Петрович
Ведущий банщик


Пол: Пол:Муж.
Зарегистрирован: 31.08.2005
Сообщения: 1392
Откуда: Сибирь...

Статус: Offline
СообщениеДобавлено: 2008.12.03 08:17.59
Ответить с цитатой
Тэкс товарищи.
Вчера вечерком сплагиатил Айсов код в джаву, немного оптимизировав по потреблению памяти. Сгенерил предложенным скриптом инпут файл (250 метров получилось). И вот при выделении джава машине 800 метров памяти все это счастье всеравно дохнет от нехватки памяти Smile Уж больно не потоковая структурка хранения Smile

Так что выкладывать пока ничего не буду. Вечером подумаю как передалать алгоритм чтоб не жрало так память

andy ice
У тебя как с потреблением?
Посмотреть профиль Отправить личное сообщение ICQ Number
Страница 9 из 21
Начать новую тему   Ответить на тему   вывод темы на печать
На страницу Пред.  1, 2, 3 ... 8, 9, 10 ... 19, 20, 21  След.
Показать сообщения:   
Список форумов Шадринский форум -> Программирование -> Delphi, Pascal, C, C# -> Паскаль умер!

 
Перейти: 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы можете скачивать файлы