Member
Статус: Не в сети Регистрация: 05.05.2007 Откуда: Украина
Надо бы мне сделать курсач по делфе... Тема - "Шахматы". Подбиралась она спецом для легкого поиска и изменения исходника. На днях гуглю и вижу картину маслом: исходников шашек - навалом, шахмат под плюсы - навалом, даже есть вроде исходники под Палм. А под Дельфу - кот наплакал. Скачал парочку(больше реально не нашел), глянул - ничего не понятно. Да и не компиляться они. Одна прога - куча всяких юнитов(40 файлов всего) - не компилиться ибо что-то с подключением этих самых юнитов. Другая - проблемы с типами в АСМ-вставке(если дельфу я еще понимаю, то в асм - полный нуб).
Уточняю задачу - надо написать простейший клиент без поддержки сети, без ии(на 2 игрока),без таймера, без всяких извращений типа асм, на стандартные шахматы. Функции сохранения - минимальные или нет вообще. Главное - как можно больше использовать ООП. Если попадеться достаточно понятный код - обрежу и доделаю сам.
Хотел бы попросить этот самый "достаточно понятный код". Лучше, если он будет найден где-либо, а не написан самостоятельно. Ибо отблагодарить материально я вряд-ли смогу(а человек немало времени потратит), да и сдача в среду утром.
ЗЫ Для здачи курсовой достаточно работающей проги. Тестить ее вряд-ли будут. Потому можно схалтурить на некоторых "специфических" правилах(рокировка, взятие пешки при прохождении(вроде так)).
ЗЫЫ Програмирую я достаточно медленно(даже не владею методом быстрого набора). Мне просто жалко тратить пару месяцев на курсач, который никто и не глянет. Было бы иначе - писал бы сам и не за 3 дня до сдачи.
ЗЫЫЫ Вот что выдает проэкт при загрузке.
#77 Юнит с даным типом - в папке с проэктом. Глюк дельфы? Или глюк меня?
Всем доброго времени суток, вот и меня по информатике недавно грузанули на две задачки, помогите решить, знаю, что задачи простые для понимающих людей, но я полный нуб, да и учусь не на факультете информатики ( слава Богу ), так вот задачки в следующем - написать две программки на языке Turbo Pascal.
Задания: 1 работа: сформировать одномерный массив х, значениями элементов которого являются минимальные значения элементов строк массива Н ( 5х5 элементов ).
2 работа: написать подпрограмму - функцию или подпрограмму общего вида, осуществляющую заданные вычисления, и программу её тестирования. При тестировании подпрограммы использовать массивы с количеством элементов не менее 16! ( Например, А ( 16 ), В ( 4,4 )).
Работы надо сдавать завтра =), помогите пожалуйста, тонУ))))
Member
Статус: Не в сети Регистрация: 05.05.2007 Откуда: Украина
Gumanist Первое задание:
Код:
uses crt; var x:array [1..5] of byte; h:array [1..5,1..5] of byte; i,j:byte; begin clrscr; writeln('Vvedite H:'); for i:=1 to 5 do for j:=1 to 5 do read(h[i,j]); for i:=1 to 5 do x[i]:=255; for i:=1 to 5 do for j:=1 to 5 do if h[i,j]<x[i] then x[i]:=h[i,j]; writeln('Iskomuj masiv:'); for i:=1 to 5 do write(x[i],' '); end.
Спасибо за первое =), второе не дописал случайно, дико сорри =), вот как оно звучит полностью: написать подпрограмму - функцию или подпрограмму общего вида, осуществляющую заданные вычисления, и программу её тестирования. При тестировании подпрограммы использовать массивы с количеством элементов не менее 16! ( Например, А ( 16 ), В ( 4,4 )). Вычислить площадь треугольника по длине его стороны и прилежащих к ней углам.
Member
Статус: Не в сети Регистрация: 05.05.2007 Откуда: Украина
Второе все равно не понял. Зачем для проверки масив прикрутили??? Функцию площади я бы написал, но формулу нигде не найду.
Обрати внимание, что если первое надо было делать ч/з функцию(может это задания одной лабы?), то у тебя это решение не приймут. Я старался написать как можно проще и без функций.
Member
Статус: Не в сети Регистрация: 11.01.2006 Откуда: Таганрог
P s i l o n Гениально, а если а) Препод в качестве проверки введет число больше чем 255?
б) Ну хрен с ошибкой, связанной с типом, пусть будет integer, возвратимся к пункту а), то массив х будет пустым, хотя в массиве h[i,j] в "строке" i все же есть минимальный элемент.
Первая проблема решается изменением типа обеих массивов на integer или longint (не помню как пишется точно), хотя, пофиг на память, я бы поставил вобще тип real, чтобы препод докапаться уже точно не мог.
Вторая проблема решается вобще красиво: в 12 строке X[i]:=H[i,1] (т.е. принимаем за минимальный первый элемент в i-ой строке массива H, а потом сравниваем с элементами этой строки) Чуть не забыл, вставляем эту строчку в циклы обработки массивов, т.е. перед оператором if (сравнением). Про составной оператор напомнить?
P s i l o n Принято что, когда находиться минимальное или максимальное число в каком-либо массиве, то первоначально таким числом является число хранящаеся в первом же элементе. И никогда не используют вот такой способ:
Member
Статус: Не в сети Регистрация: 11.01.2006 Откуда: Таганрог
sashar2 писал(а):
P s i l o n Принято что, когда находиться минимальное или максимальное число в каком-либо массиве, то первоначально таким числом является число хранящаеся в первом же элементе. И никогда не используют вот такой способ:
P s i l o n писал(а):
for i:=1 to 5 do x[i]:=255;
Нужно лишь в условие:
Цитата:
if h[i,j]<x[i] then x[i]:=h[i,j];
добавить:
Код:
or (j = 1)
Что-то я не пойму чего вы хотите добиться последним оператором, предположим что в i-ой строке H стоят следующие элементы: 1 2 3 4 5, по логике вещей в BP7 компилятор после объявлении переменных и типов присвоит массиву X нули, в итоге получаем:
1) Значение элемента массива H[i,j] (значение =1, см. выше) меньше H[i] (нуля)?
2) Нет (т.к. 1 больше 0)
3) По оператору or, как вы предлагаете, j станет равным 1, в таком случае на каждом шаге (кроме первого) счетчик по j будет равен 2, в итоге мы получим классическое и неизбежное зацикливание.
Как мне кажется мой способ, т.е. сначало оператор присваивания, потом сравнение, это будет более благоразумнее. (т.е. после изменения каждого i x[i]:=h[i,1]
Последний раз редактировалось Kserion 03.06.2008 4:16, всего редактировалось 1 раз.
Member
Статус: Не в сети Регистрация: 05.05.2007 Откуда: Украина
Kserion а) А если препод введет 10^100? У нас преподы звери, но если в проге написано "байт", то они интежер не вводят.
б) Вообще прога писалась "руками гуманитария", поэтому я применил такой прием. Мне самому не нравиться. Я бы написал функцию(причем применил что-то типа твоего метода), которая ищет минимальное в строке масива и вызвал бы ее 5 раз.(это если не сидеть и не думать над оптимизацией) Но если это написал бы "гуманитарий"(да еще если они "условно" еще не знают функций...), то возникли бы страшные сомнения в самостоятельности написания. По своему опыту знаю - если не знаешь програмирование, то не здавай крутые, быстрые, идеально написаные и безкосячные проги.
ЗЫ С моей проблемой кто нибудь поможет???(см. пост выше...)
Member
Статус: Не в сети Регистрация: 11.01.2006 Откуда: Таганрог
P s i l o n писал(а):
Kserion а) А если препод введет 10^100? У нас преподы звери, но если в проге написано "байт", то они интежер не вводят.
Может для гуманитария и сойдет, просто я привык в высоким требованиям преподов, от нас в подобных заданиях требовалось еще проработать вопрос, связанный с вводом некорректных символов (например ввод букв, в то время когда массив численного типа) К тому же вопросы с определением типов в своих заданиях я не встречал, либо написанно "...целочисленный массив..." или просто "...массив...", в первом случае использовали интеджер, во втором реал.
На всякий случай приведу полностью исправленный код:
Код:
var x:array [1..5] of byte; h:array [1..5,1..5] of byte; i,j:byte; begin writeln('Vvedite H:'); for i:=1 to 5 do for j:=1 to 5 do read(h[i,j]); for i:=1 to 5 do for j:=1 to 5 do if (h[i,j]<x[i]) or (j=1) then x[i]:=h[i,j]; writeln('Iskomuj masiv:'); for i:=1 to 5 do write(x[i],' '); end.
Смысл моего
Цитата:
or (j=1)
В том, чтобы первый элемент строки стал изначально минимальным (а не ноль или минимальное или максимальное значение как в вашем случае), а после уже идет сравнение его со всеми остальными. И только мой вариант здесь верный.
P.S>
Так же правильным был бы вариант, когда в x[i] записывается до оператора сравнения первый же элемент строки.
Member
Статус: Не в сети Регистрация: 20.11.2005 Откуда: Орск
Нужна помощь.... нужно решить задачу на строки на языке Си...что что, а строки я вобще не врубаю задача вроде бы легкая...
Суть задачи: В строке В вычеркнуть все гласные буквы.. Вывести на экран все слова измененной строки, количество букввкоторых нечетно....
Если кто знает, помогите плз
Всем привет ещё раз, спасибо за помощь в предыдущих заданиях, появилось новое, не могу с ним справится))).
Вот тут фото с заданиями №3 и №5: http://foto.rambler.ru/users/pupok2400/_photos/1/ , помогите сделать. Добавлено спустя 4 часа, 23 минуты, 44 секунды Люди, помогите пожалуйста.! Срочно нужно!
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения