Старый 19.12.2007, 20:26   #1   
Форумец
 
Сообщений: 13
Регистрация: 19.12.2007

2R1Zt вне форума Не в сети
Помогите с задачко по C++

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

Помогите пожалуйста - не знаю что делать
  Ответить с цитированием
Старый 20.12.2007, 17:34   #2   
Mоdеrаtоr
 
Аватар для DeniSS1
 
Сообщений: 1,617
Регистрация: 09.10.2007
Возраст: 32

DeniSS1 вне форума Не в сети
Вообщем, используй классы. Свойствами массива объектов palat[14] класса Palats будет массив булевых значений bool Koiki[3] и имя пациента string Nane[3] и string SoName[3]. Если заполнять с нуля, то как раз по четыре. Койки инициализируешь конструктором как true - свободные. В функции main спрашиваешь, что вы хотите - вывести номер свободных коек, заполнить ещё одну или найти пациента. Если заполнить, то выводишь в текстовый файл номер занятой теперь койки, а в другой - имя и фамилию больного. Если найти свободную - читаешь файл, койки с номерами из файла инициализируешь как false, а затем выводишь номера true-коек. А если найти пациента, то ищешь с помощью цикла во втором файле имя/фамилию, одновременно увеличивая на 1 счётчик (нап. s++; )
Допустим, имя в списке 4-е. Тогда ищешь в первом файле 4-й номер и выводишь его!
  Ответить с цитированием
Старый 20.12.2007, 23:38   #3   
Форумец
 
Сообщений: 210
Регистрация: 24.04.2007

Amur вне форума Не в сети
2 2R1Zt: мож я глупый но как можно подобрать конкретное решение(я о задаче) из безчисленно количества вариантов входных данных?
Условие нужно ставить более конкретней: что должно быть на входе, а что на выходе, какие исходные данные. Или хотябы опиши как заполнены места в палатах хаотично или упорядочено.
2 DeniSS1: в С++ при инициализации массива указывается его длинна и она на 1 больше чем индекс последнего элемента массива
  Ответить с цитированием
Старый 21.12.2007, 10:50   #4   
Форумец
 
Сообщений: 2,417
Регистрация: 05.10.2005
Возраст: 46

Kikoz вне форума Не в сети
Amur, ды какая разниуа как они заполнены. Пихаешь пациента в первую по порядку свободную койку и все. По-моему, все предельно просто.
Писать программу не буду. Или автор сам ее напишет и ему это будет полезно, или ему это действительно нах не надо, тогда зчем ее писать?
  Ответить с цитированием
Старый 21.12.2007, 11:18   #5   
Я псих...
 
Аватар для [Ариец]
 
Сообщений: 6,342
Регистрация: 25.10.2004
Возраст: 38

[Ариец] вне форума Не в сети
Два массива:
один двухмерный: 4 на 60
второй: динамический двумерный массив m (в зависимости от данных пациента) на n

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

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

Второй вариант: можно сделать второй массив просто динамическим массивом из записей.
Структура записи будет тогда такая: ФИО, Возраст, дата поступления, ещё чего-нибудь, номер комнаты, номер койки.... Либо номер комнаты и номер койки объеденить через запятую или точку с запятой или слеш в одном поле....
  Ответить с цитированием
Старый 21.12.2007, 20:48   #6   
Out There
 
Аватар для Part!zan
 
Сообщений: 5,910
Регистрация: 13.12.2004
Возраст: 47

Part!zan вне форума Не в сети
Блин, скоро будут про сортировку массивов "пузырьком" спрашивать... Или Хелло ворлд...
  Ответить с цитированием
Старый 22.12.2007, 18:19   #7   
Крик=/
 
Аватар для liness
 
Сообщений: 599
Регистрация: 23.03.2007
Возраст: 36

liness вне форума Не в сети
Part!zan, =)
  Ответить с цитированием
Старый 23.12.2007, 20:48   #8   
Форумец
 
Сообщений: 13
Регистрация: 19.12.2007

2R1Zt вне форума Не в сети
Народ помогите мне лучше програмным кодом я не знаю как это записать
  Ответить с цитированием
Старый 23.12.2007, 20:55   #9   
Я псих...
 
Аватар для [Ариец]
 
Сообщений: 6,342
Регистрация: 25.10.2004
Возраст: 38

[Ариец] вне форума Не в сети
Цитата:
Сообщение от 2R1Zt
Народ помогите мне лучше програмным кодом я не знаю как это записать
уууууууууу..... Тогда ты попал...
Могу помочь только с
Цитата:
Сообщение от Part!zan
Хелло ворлд...
и только на языке, приближенном к Си. (php)
  Ответить с цитированием
Старый 23.12.2007, 21:23   #10   
Mоdеrаtоr
 
Аватар для DeniSS1
 
Сообщений: 1,617
Регистрация: 09.10.2007
Возраст: 32

DeniSS1 вне форума Не в сети
2R1Zt, ты хотя бы В ОБЩИХ ЧЕРТАХ знаешь, что такое С++? :-)
  Ответить с цитированием
Старый 23.12.2007, 22:00   #11   
IGBT
 
Аватар для Pengvin
 
Сообщений: 534
Регистрация: 09.10.2005

Pengvin вне форума Не в сети
во написал тебе код на самом лучшем языке программирования на свете. Компилировать 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битных и висты).

Мда Сори забыл тебе ведь по С++ надо. Щас подправим код почуть.
Блин какой-то С++ этот сложный я в нем фиг что могу понять.
  Ответить с цитированием
Старый 23.12.2007, 22:51   #12   
Я псих...
 
Аватар для [Ариец]
 
Сообщений: 6,342
Регистрация: 25.10.2004
Возраст: 38

[Ариец] вне форума Не в сети
Pengvin, ЖЖОШЬ!
  Ответить с цитированием
Старый 23.12.2007, 23:06   #13   
IGBT
 
Аватар для Pengvin
 
Сообщений: 534
Регистрация: 09.10.2005

Pengvin вне форума Не в сети
Ну вот почитал 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;
}
  Ответить с цитированием
Старый 23.12.2007, 23:38   #14   
IGBT
 
Аватар для Pengvin
 
Сообщений: 534
Регистрация: 09.10.2005

Pengvin вне форума Не в сети
И это кстати не стеб, а работающая программа.
Я вот только сомневаюсь возможно я использовал не самый оптимизированный вариант. Может поиск
Цитата:
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.12.2007, 23:45   #15   
Я псих...
 
Аватар для [Ариец]
 
Сообщений: 6,342
Регистрация: 25.10.2004
Возраст: 38

[Ариец] вне форума Не в сети
Pengvin, перестань курить!
  Ответить с цитированием
Старый 23.12.2007, 23:46   #16   
Форумец
 
Сообщений: 13
Регистрация: 19.12.2007

2R1Zt вне форума Не в сети
Спасиб за помощь все м очень помогли.Pengvin уважуха
  Ответить с цитированием
Старый 24.12.2007, 00:05   #17   
Форумец
 
Сообщений: 13
Регистрация: 19.12.2007

2R1Zt вне форума Не в сети
И еще один вопрос - можно этот код преписать в просто C? -я что-то попробывал, наделал кучу ошибок
  Ответить с цитированием
Старый 24.12.2007, 00:07   #18   
Я псих...
 
Аватар для [Ариец]
 
Сообщений: 6,342
Регистрация: 25.10.2004
Возраст: 38

[Ариец] вне форума Не в сети
/me стёк по креслу пацстол....
  Ответить с цитированием
Старый 24.12.2007, 00:10   #19   
IGBT
 
Аватар для Pengvin
 
Сообщений: 534
Регистрация: 09.10.2005

Pengvin вне форума Не в сети
Ну ты... нехороший человек. Сразу сказать не мог? Написал на С++ я класс и наваял. Я изначально на С писал.

#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;
}
  Ответить с цитированием
Старый 24.12.2007, 02:17   #20   
Out There
 
Аватар для Part!zan
 
Сообщений: 5,910
Регистрация: 13.12.2004
Возраст: 47

Part!zan вне форума Не в сети
Цитата:
Сообщение от Pengvin
какой код лучше подскажите
scasb стопудов будет быстрее...
  Ответить с цитированием
Старый 24.12.2007, 03:32   #21   
Форумец
 
Аватар для The_God
 
Сообщений: 1,109
Регистрация: 19.12.2004
Возраст: 43

The_God вне форума Не в сети
клёво. народ ассемблер знает, давайте лучше шашки соптимизим в соседнем топике, а то будут тормозить когда начнут грабить караваны
  Ответить с цитированием
Поиск в теме: 



Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind