Member
Статус: Не в сети Регистрация: 01.04.2005 Откуда: Москва-Лубянка
Faier Злобный майкрософт не дает conio, надо же!))
Тогда мучайся так:
Код:
/* Standard error macro for reporting API errors */ #define PERR(bSuccess, api){if(!(bSuccess)) printf("%s:Error %d from %s \ on line %d\n", __FILE__, GetLastError(), api, __LINE__);}
void cls( HANDLE hConsole ) { COORD coordScreen = { 0, 0 }; /* here's where we'll home the cursor */ BOOL bSuccess; DWORD cCharsWritten; CONSOLE_SCREEN_BUFFER_INFO csbi; /* to get buffer info */ DWORD dwConSize; /* number of character cells in the current buffer */
/* get the number of character cells in the current buffer */
Member
Статус: Не в сети Регистрация: 09.08.2005 Откуда: Земля
Здравствуйте
Задали нам по Информатике написать прогу на Си.
Я её практически сделал, но не не знаю, как написать "нельзя делить на ноль" при вычислении f=(-x)/b+(-c)/x (Если х=0 или b=0)
[code]#include <stdio.h>
void main()
{
double a,b,c,x,f;
printf("Vvedite a");
scanf("%lf",&a);
printf("Vvedite b");
scanf("%lf",&b);
printf("Vvedite c");
scanf("%lf",&c);
printf("Vvedite x");
scanf("%lf",&x);
if (x<0.3 && a>c)
f=2*x-c-a+b;
if (x>0.3 && a<c)
f=(x-a)/(x-c);
else f=(-x)/b+(-c)/x;
printf("Funkcia F=%lf",f);
}
if (x<0.3 && a>c) { f=2*x-c-a+b; } else if (x>0.3 && a<c) { if(x==c) { printf("x=c, cannot divide by zero"); return 1; /* что ты должен делать в этом случае, я не знаю. */ } f=(x-a)/(x-c); } else { while(b == 0) { printf("cannot divide by zero, please input b again:"); scanf("%lf",&b); } while(x == 0) { printf("cannot divide by zero, please input x again:"); scanf("%lf",&b); } f=(-x)/b+(-c)/x; }
Прога работает, но как вставить if (b==0 || x==0 )
printf("Delit na nuli neliza");
В сторочку с третьим условием(f=(-x)/b+(-c)/x), а то оно выполняется
для всей системы?
P.S. Если в (b==0 || x==0) поставить вместо || && то компилятор выдаёт ошибку: Runtime error occured
Member
Статус: Не в сети Регистрация: 03.01.2004 Откуда: Питер
Код:
else if (!((b==0) || (x==0))) { f=(-x)/b+(-c)/x; } else printf("Деление на 0");
это если только к 3-му, но во втором тоже может возникнуть исключение, когда x=c. Так что вариант, который предложил Anoss все попытки поделить на 0 вылавливает. Чем он собственно не устраивает?
_________________ Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)
Member
Статус: Не в сети Регистрация: 31.08.2005 Откуда: Мир
здраствуйте, надо бы Разработать и отладить С-программу, которая определяет размер заданного файла (Int 21h, AH=23h). используя прерывания. ктото в курсе как это сделать?
Member
Статус: Не в сети Регистрация: 30.01.2006 Откуда: Минск
pretorian а подробного описания этого прерывания нет? А то никогда не сталкивался. Сама структура программы такова:
Код:
#include <stdio.h> #include <conio.h> #include <dos.h> void main() { char s[50]; printf("Enter name of file:"); gets(s); /*здесь должна быть установка регистров, возможно указатель на имя файла или дескриптор файла, возможно понадобятся дополнительные прерывания. Все зависит от требуемых входных параметров для 23h функции 21h прерывания.*/ _AH=0x23; geninterrupt(0x21); //здесь будет вывод значения регистров, в которые помещается размер getch(); }
пробовал в DS:DX устанавливать адрес строки s-не получается.
Member
Статус: Не в сети Регистрация: 01.04.2005 Откуда: Москва-Лубянка
В DS:DX должен быть адрес таблицы FCB, заполненной следующим образом:
Код:
смещение описание
00H !! ID диска (1 — A:...) 01H - 08H !! Имя файла (8 символов, до 8 добить пробелами) 09H - 0BH !! Расширение (3 символа, до 3 добить пробелами) 0CH - 0DH номер блока 0EH - 10H !! Размер записи — если хотим получить размер файла в байтах, то тут единичка 10H - 13H размер файла 14H - 15H дата создания 16H - 17H 16H - 17H время создания 18H - 1FH 20H номер записи 21H - 25H !! (относительный номер записи) — ТУТ будет результат, размер файла, измеренный в числе записей, т.е. размер файла в байтах, деленный на размер записи и округленный вверх..
после вызова прерывания в поле «относительный номер записи» будет размер файла, а в AL — 0 в случае успеха или FF в случае провала) Уф)
Member
Статус: Не в сети Регистрация: 30.01.2006 Откуда: Минск
Задам и я вопрос. Лаба у меня- игра в крестики-нолики. В принципе я её написал, только нормальный ИИ написать не получается. У меня он построен на простом рекурсивном переборе вариантов до определённой глубины. Проблема в том, что уже при глубине 6 ходов на поле 6x6 ждать ответа весьма долго. А на глубине 4 играет он весьма примитивно(уровень normal).Возможно, у кого-нибудь будут другие предложения по реализации ИИ? Заодно, кто желает, может на глюки прогу проверить.
Предупреждаю! Больше 5 на hard и 3 на very hard лучше не вводить-ответа вряд ли дождётесь . Буквы вместо чисел-тоже не надо.
Сама прога здесь Компилятор-BC 3.0.
Ну конечно, будет тормозить. Полный перебор - это ж экспоненциальный рост количества вариантов (6 ходов ~ 36^6 = 2176782336 вариантов)... Придумай эвристику какую-нибудь, которая будет отсеивать явно не нужные ходы.
Member
Статус: Не в сети Регистрация: 12.12.2003 Откуда: Уфа
Такой вопрос, создаю класс, членом этого класса должен быть динамический двумерный массив. То есть я объявляю класс, на этом этапе я еще не знаю размеры массива, они должны определятся в ходе работы одной из функций. Как это реализовать? С помощью vector<vector<int>> matrix? Желателен вариант с наибольшим быстродействием..
vector - это управляемый аналог обычного массива C, так что проблем с быстродействием при доступе к элементам быть не должно. Разве что при изменении размеров, поэтому лучше один раз, когда будет известен размер, зарезервировать место и не менять его. Добавлено спустя 1 минуту, 7 секунд А ещё есть valarray, который рекомендует сам Страуструп.
Member
Статус: Не в сети Регистрация: 12.12.2003 Откуда: Уфа
Билли Бонс а по подробнее можно? Когда я объявляю в классе массив, мне же еще неизвестны его размеры, то есть я не могу в классе объявить int [num_x][num_y]? num_x и num_y Я узнаю только при выполнении какой-либо функции класса.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения