Большой Воронежский Форум
» Программирование>Помогите с задачко по C++
2R1Zt 20:26 19.12.2007
стационар.
В стационарном отделении 60 мест по 4 койки в отдельной палате.Написать программу ,которая бы выдавала номер свободного места, чтобы госпитализировать пациента, или номер палаты , где располагался пациент.

Помогите пожалуйста - не знаю что делать [Ответ]
DeniSS1 17:34 20.12.2007
Вообщем, используй классы. Свойствами массива объектов palat[14] класса Palats будет массив булевых значений bool Koiki[3] и имя пациента string Nane[3] и string SoName[3]. Если заполнять с нуля, то как раз по четыре. Койки инициализируешь конструктором как true - свободные. В функции main спрашиваешь, что вы хотите - вывести номер свободных коек, заполнить ещё одну или найти пациента. Если заполнить, то выводишь в текстовый файл номер занятой теперь койки, а в другой - имя и фамилию больного. Если найти свободную - читаешь файл, койки с номерами из файла инициализируешь как false, а затем выводишь номера true-коек. А если найти пациента, то ищешь с помощью цикла во втором файле имя/фамилию, одновременно увеличивая на 1 счётчик (нап. s++; )
Допустим, имя в списке 4-е. Тогда ищешь в первом файле 4-й номер и выводишь его! [Ответ]
Amur 23:38 20.12.2007
2 2R1Zt: мож я глупый но как можно подобрать конкретное решение(я о задаче) из безчисленно количества вариантов входных данных?
Условие нужно ставить более конкретней: что должно быть на входе, а что на выходе, какие исходные данные. Или хотябы опиши как заполнены места в палатах хаотично или упорядочено.
2 DeniSS1: в С++ при инициализации массива указывается его длинна и она на 1 больше чем индекс последнего элемента массива [Ответ]
Kikoz 10:50 21.12.2007
Amur, ды какая разниуа как они заполнены. Пихаешь пациента в первую по порядку свободную койку и все. По-моему, все предельно просто.
Писать программу не буду. Или автор сам ее напишет и ему это будет полезно, или ему это действительно нах не надо, тогда зчем ее писать? [Ответ]
[Ариец] 11:18 21.12.2007
Два массива:
один двухмерный: 4 на 60
второй: динамический двумерный массив m (в зависимости от данных пациента) на n

В первом массиве - койки свободные - значение 0, занятые - 1

во втором массиве - m-1 колонок - данные о пациенте: ФИО, Возраст, дата поступления больного.. не знаю что туда ещё вписать можно, в последней - номер комнаты и номер койки через запятую.

Второй вариант: можно сделать второй массив просто динамическим массивом из записей.
Структура записи будет тогда такая: ФИО, Возраст, дата поступления, ещё чего-нибудь, номер комнаты, номер койки.... Либо номер комнаты и номер койки объеденить через запятую или точку с запятой или слеш в одном поле.... [Ответ]
Part!zan 20:48 21.12.2007
Блин, скоро будут про сортировку массивов "пузырьком" спрашивать... Или Хелло ворлд... [Ответ]
liness 18:19 22.12.2007
Part!zan, =) [Ответ]
2R1Zt 20:48 23.12.2007
Народ помогите мне лучше програмным кодом я не знаю как это записать [Ответ]
[Ариец] 20:55 23.12.2007

Сообщение от 2R1Zt:
Народ помогите мне лучше програмным кодом я не знаю как это записать

уууууууууу..... Тогда ты попал...
Могу помочь только с

Сообщение от Part!zan:
Хелло ворлд...

и только на языке, приближенном к Си. (php) [Ответ]
DeniSS1 21:23 23.12.2007
2R1Zt, ты хотя бы В ОБЩИХ ЧЕРТАХ знаешь, что такое С++? :-) [Ответ]
Pengvin 22:00 23.12.2007
во написал тебе код на самом лучшем языке программирования на свете. Компилировать Fasm`ом

Сообщение от :
org 100h
;начало поиска
xor al,al
mov cx,60
mov di,Palati
repne scasb
mov ax,di
sub ax,Palati
;конец поиска номер палаты в ax
;дальше идет вывод данных
push ax
shr al,4
cmp al,10
sbb al,69h
das
mov ah,0Eh
int 10h
pop ax
push ax
and al,00001111b
cmp al,10
sbb al,69h
das
mov ah,0Eh
int 10h
mov al,' '
int 10h
pop ax
;получаем номер палаты
shr ax,2
inc ax
;дальше опять вывод данных
push ax
shr al,4
cmp al,10
sbb al,69h
das
mov ah,0Eh
int 10h
pop ax
and al,00001111b
cmp al,10
sbb al,69h
das
mov ah,0Eh
int 10h
ret
Palati:
db 1,1,1,1
db 1,1,1,1
db 1,0,1,1
db 1,1,1,1
db 1,1,1,1
db 1,0,1,1
db 1,0,1,1
db 1,1,0,1
db 1,1,1,1
db 1,1,1,1
db 1,1,0,1
db 1,0,1,1
db 1,1,0,1
db 1,0,1,1
db 1,1,1,1

выводит данные в шестнадцатиричном виде. Запустится во всех творениях мелкософта (возможно кроме 64битных и висты).

Мда Сори забыл тебе ведь по С++ надо. Щас подправим код почуть.
Блин какой-то С++ этот сложный я в нем фиг что могу понять. [Ответ]
[Ариец] 22:51 23.12.2007
Pengvin, ЖЖОШЬ! [Ответ]
Pengvin 23:06 23.12.2007
Ну вот почитал msdn насчет inline ассемблера, подправил код. Гнилая винда не захотела перывания обрабатывать пришлось printf использовать.
#include <stdio.h>
class UberClass
{
private:
int palata,mesto;
public:
UberClass();
int GetMesto();
int GetPalata();
};

UberClass::UberClass()
{
unsigned char Palati[59]={
1,1,1,1,
1,1,1,1,
1,1,1,1,
1,1,1,1,
1,0,1,1,
1,1,1,1,
1,1,1,1,
1,1,1,1,
1,1,1,1,
1,1,1,1,
1,1,1,1,
1,1,1,1,
1,1,1,1,
1,1,1,1,
1,1,1,1};
int a=0;;
int b=0;
__asm
{
lea ebx,Palati
xor al,al
mov ecx,60
mov edi,ebx
repne scasb
mov eax,edi
sub eax,ebx
lea ebx,a
mov [ebx],eax
shr eax,2
inc eax
lea ebx,b
mov [ebx],eax;palata
}
palata=b;
mesto=a;
}

int UberClass::GetMesto()
{
return mesto;
}

int UberClass::GetPalata()
{
return palata;
}



int main()
{

UberClass c=UberClass();

printf("Mesto %d , Palata %d",c.GetMesto(),c.GetPalata());
while(1) {};
return 0;
} [Ответ]
Pengvin 23:38 23.12.2007
И это кстати не стеб, а работающая программа.
Я вот только сомневаюсь возможно я использовал не самый оптимизированный вариант. Может поиск

Сообщение от :
mov ecx,60
mov edi,ebx
repne scasb
mov eax,edi

стоит заменить на

Сообщение от :
mov esi,ebx
p11:
lodsb
test al,al
jnz p11
mov eax,esi

Кто знает какой код лучше подскажите плизззззззззззззз [Ответ]
[Ариец] 23:45 23.12.2007
Pengvin, перестань курить! [Ответ]
2R1Zt 23:46 23.12.2007
Спасиб за помощь все м очень помогли.Pengvin уважуха [Ответ]
2R1Zt 00:05 24.12.2007
И еще один вопрос - можно этот код преписать в просто C? -я что-то попробывал, наделал кучу ошибок [Ответ]
[Ариец] 00:07 24.12.2007
/me стёк по креслу пацстол.... [Ответ]
Pengvin 00:10 24.12.2007
Ну ты... нехороший человек. Сразу сказать не мог? Написал на С++ я класс и наваял. Я изначально на С писал.

#include <stdio.h>
unsigned char Palati[60]={
1,1,1,1,
1,1,1,1,
1,1,1,1,
1,1,1,1,
1,0,1,1,
1,1,1,1,
1,1,1,1,
1,1,1,1,
1,1,1,1,
1,1,1,1,
1,1,1,1,
1,1,1,1,
1,1,1,1,
1,1,1,1,
1,1,1,1};
int palata=0;
int mesto=0;
int main()
{

__asm
{
xor al,al
mov ecx,60
mov edi,offset Palati
repne scasb
mov eax,edi
sub eax,offset Palati
mov mesto,eax
shr eax,2
inc eax
mov palata,eax;palata
}
printf("Mesto %d , Palata %d",mesto,palata);
while (1) {};
return 0;
} [Ответ]
Part!zan 02:17 24.12.2007

Сообщение от Pengvin:
какой код лучше подскажите

scasb стопудов будет быстрее... [Ответ]
The_God 03:32 24.12.2007
клёво. народ ассемблер знает, давайте лучше шашки соптимизим в соседнем топике, а то будут тормозить когда начнут грабить караваны [Ответ]
Вверх