Вопросы по программированию

Автор Богдан, 03 Листопад 2007, 11:41:18

Попередня тема - Наступна тема

Богдан

#400
Я з олімпіади по програмінгу. Ось завдання, може комусь цікаво.

1. У тексті розташовані слова - послідовності малих латинських літер, розділені одним чи кількома пропусками. Визначити кількість слів, що розпочинаються з даної літери. 20 балів.


Приклад вхідних даних:

a
kjhsadkljah    dasd  a fkldsjf asd    asdfdasf ljglkjdf

Вихідні дані:

3



_____________________________

2. Один математик вирішив перевірити, яке число більш щасливе: 7 чи 13. Для цього він бере випадкову послідовність цілих чисел а1, а2, ... аn і послідовно перетворює її на одне число за (N-1) крок. На k-му кроці математик вилучає з послідовності числа А та В і дописує до отриманої послідовності А² + B² таким чином:

  • Бере з послідовноcті число з порядковим номером
    Цитата(7^k mod (N-k+1)) + 1
    і вилучає його з послідовності (знак "^" означає степінь).
  • Потім він обирає число з порядковим номером
    Цитата(13^k mod (N-k+1)) + 1
    і вилучає його з послідовності.
  • Дописує число А² + B² у початок послідовності
  • Після кроку в послідовності залишиться одне число. Якщо це число парне, то число 7 вважається щасливішим, якщо це число непарне, то число 13 вважається щасливішим. Х_Х
30 балів.


Приклад вхідних даних (перше число - к-сть членів послідовності):
7
1 2 3 4 5 6 7

Вихідні дані:
7

Вхідні:
13
13 12 11 10 9 8 7 6 5 4 3 2 1

Вихідні:
13


_____________________________

3. Група альпіністів подолала багато вершин і повернулася в рідне місто. Одна з місцевих газет вирішила надрукувати статтю про їх подорож. Як з'ясувалося, у процесі подорожі альпіністи N разів зупинялися на тій чи інший висоті hi...
Цитата...Головний редактор наполягає, щоб назва статті була "Вгору і вниз" вирішили розповісти про (2k+1) день походу, причому має виконуватись умова...



Знайти максимальне k, для якого можна відповідним чином вибрати (2k+1). Иииииииии.
40 балів


Вхідні (перше число - N, далі послідовність h1, h2, ... , hn)
13
13 12 11 10 9 8 7 6 5 4 3 2 1

Вихідні (перше число - k, в другому рядку (2k+1) число - номери днів в порядку зростання, репортаж про яких слід включити в репортаж):
13

Вхідні:
4
1 2 3 4

Вихідні:
0
1



_____________________________

4. Є N предметів з відомою вагою і вартістю. Знайти такий набір предметів, щоб їх сумарна вага не перевищувала вантажність автомобіля М, а вартість була найбільшою.
40 балів.


Вхідні (у першому рядку - к-сть предметів і вантажність авто відповідно, в наступних рядках вага предмету і ціна):
5 15
6 3
1 2
7 4
5 1
4 8

Вихідні (номери предметів в порядку зростання):
2 3 5




***

Першу задачу я розв'язав, а інші - цекапєц.
Щось таке:


...

bool spaced = true;

...


for(int i = 0; i < length; i++)
{
if(spaced && text[i] == letter) { c++, spaced = false; }
else if(text[i] == ' ') { spaced = true; }
else spaced = false;
}

fprintf(out, "%d", c);


Edd.Dragon

Ну вторая тоже легкая как и первая - формулы даны, алгоритм по сути расписан - только в коде его описать. Чего не сделал?

А вот задачи как 3-я я жуть не люблю )))))
Тем более, что 4-я мне кажется более легкой...

Богдан

Цитата: edd_k від 13 Грудень 2008, 16:27:57
Ну вторая тоже легкая как и первая - формулы даны, алгоритм по сути расписан - только в коде его описать. Чего не сделал?
По-перше, я потратив багато часу, поки не додумався спитати і не дізнався, що mod - це не модуль. От паскальщики >_<
А потім щось не виходило, і я взявся за 4-у, яка мені здавалась легшою. 3-ю я прочитав, і мені навіть не захотілось в неї вникати.

Цитата: edd_k від 13 Грудень 2008, 16:27:57
Тем более, что 4-я мне кажется более легкой...
Я б її розв'язав, але не встиг.

Edd.Dragon

Цитата: Богдан від 13 Грудень 2008, 16:47:45
Я б її розв'язав, але не встиг.
Та лучше б вторую продолжил

Цитатаfor(int i = 0; i < length; i++)
{
if(spaced && text == letter) { c++, spaced = false; }
else if(text == ' ') { spaced = true; }
else spaced = false;
}
Можно и проще без доп переменной:


int c = 0;
for (int i = 0; i < length; i++)
{
    if (text[i] == letter)
    {
        if(i == 0 || text[i - 1] == ' ')
        {
            c++;
        }
    }
}


т.е. с твоей стилистикой:

int c = 0;
for (int i = 0; i < length; i++)
{
    if (text[i] == letter) { if (i == 0 || text[i - 1] == ' ') { c++; } }
}



Вторая задача "такая же простая" в том смысле, что заумностей нет (если не считать незнание значения mod), но писанины несколько больше конечно


resiver

подскажите как написать следуюший код:
есть матрица например 5на5 как написать на С цикл которий находит наименьший елемент в строке и записивает его в массив dop.
вот что я написал но оно не работает:

for (i = 0; i<M; i++){
       dop[i]=0; 
       for(j=0;j<N; j++)
         {
          if (a[0][j]<min) min = a[0][j];
         }
       dop[i] = a[i][j];
       }   

Подпись отображается внизу каждого Вашего сообщения. Вы также можете использовать BB код и смайлы.

Edd.Dragon

Цитата: resiver від 13 Грудень 2008, 21:39:57
и записивает его в массив dop.
А у тебя что такое dop? Объявления ты не привел, но в алгоритме ты к нему обращаешься как к обыкновенному числу, но не как к массиву.

resiver

ну и почему же я обрашаюсь к массиву dop как к обичному числу? я же написал dop
вот вся прога:

#include<stdio.h>
#include <conio.h>
#include <stdlib.h>
#define M 5
#define N 5

int main (){
    int a[M][N] = {{2,7,4,3,1},{4,9,2,11,3}, {7,1,4,9,0}, {12,3,8,6,4}, {21,5,13,9,4}};
    int i,j,k;
    int min;
    int dop[5];

    min = a[0][0];


    for (i = 0; i<M; i++){
       dop[i]=0; 
       for(j=0;j<N; j++)
         {
          if (a[0][j]<min) min = a[0][j];
         }
       dop[i] = a[i][j];
       }   

    for(i=0;i<M;i++){
       printf("%4d", dop[i]); 
      }
getch();
return 0;
}     

исправтье пожулауйста
Подпись отображается внизу каждого Вашего сообщения. Вы также можете использовать BB код и смайлы.

Edd.Dragon

Цитата: resiver від 13 Грудень 2008, 21:49:35
ну и почему же я обрашаюсь к массиву dop как к обичному числу? я же написал dop
Я успел увидеть другой код  ???


Цитатаif (a[0][j]<min) min = a[0][j];
1. Ищешь ты минимум в i-ой строке (например в 4-ой), а сравниваешь элементы нулевой строки?

2. Складываешь минимум в переменную min, а в ячейку массива dop заносишь какое-то a[ i ][ j ]

3. min = a[0][0]; это тоже нужно внести в цикл по строкам. Ведь сбрасывать значение минимума надо на каждой строке после завершения работы с предыдущей?

resiver

#408
edd_k обяснили вы хорошо, а исправить код можете теперь? хотя б часть кода где происходит поиск минимального елемента в строке и запись его в dop

for (i = 0; i<M; i++){
       dop[i]=0; 
       min = a[0][0];
       for(j=0;j<N; j++)
         {
          if (a[i][j]<min) min = a[i][j];
         }
       dop[i] = min;
       }   

правильно?
Подпись отображается внизу каждого Вашего сообщения. Вы также можете использовать BB код и смайлы.

Edd.Dragon

#409
Цитата: resiver від 13 Грудень 2008, 22:02:45
правильно?
Совершенно верно.
Только по поводу пункта 3 - не [ 0 ][ 0 ], а [ i ][ 0 ]

Ну и цикл по j нет смысла начинать с 0, нулевой элемент мы уже предположили минимумом. Осталось проверить с 1-го и до последнего.

resiver

Цитата: edd_k від 13 Грудень 2008, 22:08:59
Совершенно верно.
Только по поводу пункта 3 - не [ 0 ][ 0 ], а [ i ][ 0 ]
RESPECT TO EDD_K!!!
все ошибки исправил!есть ешё один вопросик из той же серии массивов:
как по отсортированному массиву dop поменить местами строки исходной матрицы a {i}{ j}  ?
вот таким методом можна?

for(k = 0; k < M; k++) {
    tmp = a[i][k];
    a[i][k] = a[i+1][k];
    a[i+1][k] = tmp;
     }
Подпись отображается внизу каждого Вашего сообщения. Вы также можете использовать BB код и смайлы.

Edd.Dragon

Цитатакак по отсортированному массиву dop поменить местами строки исходной матрицы a {i}{ j}  ?
Менять местами надо в процессе сортировки массива dop. Т.е. когда при сортировке ты меняешь местами dop[i1] и dop[i2], то тут же должен поменять местами и a[i1] с a[i2].

А что ты будешь менять ПОСЛЕ сортировки?
После сортировки стало 61, 61, 48, 34, 13. Какие строки в матрице с какими надо поменять?

resiver

Цитата: edd_k від 13 Грудень 2008, 22:23:32
Менять местами надо в процессе сортировки массива dop. Т.е. когда при сортировке ты меняешь местами dop[i1] и dop[i2], то тут же должен поменять местами и a[i1] с a[i2].

А что ты будешь менять ПОСЛЕ сортировки?
После сортировки стало 61, 61, 48, 34, 13. Какие строки в матрице с какими надо поменять?

логично!

for (pr = 1; pr<5; pr++){ //количество проходов
   for (i = 0; i<5; i++){ //число сравненний
       if (dop[i] < dop[i+1]){
tmp = dop[i];
dop[i] = dop[i+1];
dop[i+1] = tmp;
   for(k = 0; k < M; k++) {//меняем изначальную матрицу
     tmp = a[i][k];
     a[i][k] = a[i+1][k];
     a[i+1][k] = tmp;
     }

правильно?
Подпись отображается внизу каждого Вашего сообщения. Вы также можете использовать BB код и смайлы.

Edd.Dragon

чтоты поменять местами два одномерных массива (строки) вовсе не обязательно явно в цикле менять местами их элементы

не помню точно как сработает в C
или так

int atmp[M] = a[i];
a[i] = a[i + 1];
a[i + 1] = atmp;


или так

int* atmp = a[i];
a[i] = a[i + 1];
a[i + 1] = atmp;



А вот алгоритм сортировки у тебя какой-то странный...

Кроме того
Цитата
for (i = 0; i<5; i++){ //число сравненний
          if (dop < dop[i+1])
при i = 4   i+1 - это уже за пределами массива...

resiver

#414
Цитата: edd_k від 13 Грудень 2008, 22:37:22
чтоты поменять местами два одномерных массива (строки) вовсе не обязательно явно в цикле менять местами их элементы

не помню точно как сработает в C
или так

int atmp[M] = a[i];
a[i] = a[i + 1];
a[i + 1] = atmp;


или так

int* atmp = a[i];
a[i] = a[i + 1];
a[i + 1] = atmp;



А вот алгоритм сортировки у тебя какой-то странный...

Кроме тогопри i = 4   i+1 - это уже за пределами массива...

чем же мой алгоритм сортировки странний? обичная пузирьковая сортировка!прогу подправил и все правильно заработало!

Вопрос следуюший: как записать в массив dop{i} первие елменти матрицы  5на5?

ето уже другая программа!
Подпись отображается внизу каждого Вашего сообщения. Вы также можете использовать BB код и смайлы.

Edd.Dragon

Цитата: resiver від 13 Грудень 2008, 22:43:19
чем же мой алгоритм сортировки странний?
Хотя бы тем, что ты вылазишь за пределы массива
Как минимум цикл по i должен быть не до <5, а до <4

Цитатакак записать в массив dop{i} первие елменти матрицы  5на5?
В смысле? dop[ i ] = a[ i ][ 0 ]?

resiver

#416
Цитата: edd_k від 13 Грудень 2008, 22:46:42
В смысле? dop[ i ] = a[ i ][ 0 ]?
напишыте пожалуйста цикл которий берет первий елемент каждой строки и и записывает его в масив dop{i}
Подпись отображается внизу каждого Вашего сообщения. Вы также можете использовать BB код и смайлы.

Edd.Dragon

Цитата: resiver від 13 Грудень 2008, 23:02:16
напишыте пожалуйста цикл которий берет первий елемент каждой строки и и записывает его в масив dop{i}
Ты шутишь?

Учитывая то, что ты писал сам выше, не можешь строчку dop[ i ] = a[ i ][ 0 ] обрамить циклом по i? )))))

Anton T.

Помоги сделать задачу на C++:
1. Написать программу, которая по введённой температуре, выраженной по Фаренгейту, преобразует в абсолютное значение температуры º F=1.8∙º C + 32.
2. По введённым коэффициентам квадратного уравнения найти его корни. Учесть существование комплексных корней.

firefire

Цитата: AntonT від 15 Грудень 2008, 09:18:00
Помоги сделать задачу на C++:
2. По введённым коэффициентам квадратного уравнения найти его корни. Учесть существование комплексных корней.
php:
<form action='' method="GET">
a=<input type='text' name=a><br>
b=<input type='text' name=b><br>
c=<input type='text' name=c><br>
<input type='submit' value='OK'>
</form>
<?
$a=$_GET["a"];
$b=$_GET["b"];
$c=$_GET["c"];@$d=$b*$b-4*$a*$c;
if ($d<0) {
echo "You are stupid! D<0!";
}
else{
$d=sqrt($d);
@$xx=(-$b+$d)/(2*$a);
@$xy=(-$b-$d)/(2*$a);
if($xx=$xy){
echo 'x='. $xx;
}
else{
echo 'x1='. $xx .'<br>';
echo 'x2='. $xy;
}
}

?>

Скажи что такие комплексные корни для начала. И как их найти  :%)

βεερ_βooρ

Цитата: firefire від 15 Грудень 2008, 16:06:57
php:
А это ничего, что автору надо было на С++? :-X
Цитата: firefire від 15 Грудень 2008, 16:06:57
Скажи что такие комплексные корни для начала. И как их найти  :%)
Комплексные корни для чайников.
Пускай у нас есть квадратное уравнение с отрицательным дискриминантом.
x12= (-b+-sqrt(-D))/(2*a)
Представляем sqrt(-D) как sqrt(D)*sqrt(-1)
sqrt(-1)=i(мнимая единица)
далее Представляем ответ в форме x=q+w*i
Пример:
x^2+1=0;
[x=-%i,x=%i]
x^2-42*x+641=0;
[x=21-10*sqrt(2)*%i,x=10*sqrt(2)*%i+21]

Подробнее в википедии:
http://ru.wikipedia.org/wiki/Мнимая_единица
http://ru.wikibooks.org/wiki/Комплексные_числа

P.S. Уточни -те условие. Когда в детской задачке про решение квадратного уравнения говорят "учесть комплексные корни", то как правило это значит что программа должна просто проверить отрицательностьдискриминанта и вежливо сообщить, что в R решений нет, а не вылетать с рантайм-еррор.
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

firefire

Цитата: beep_boop від 15 Грудень 2008, 16:28:53
А это ничего, что автору надо было на С++? :-XКомплексные корни для чайников.
Пускай у нас есть квадратное уравнение с отрицательным дискриминантом.
x12= (-b+-sqrt(-D))/(2*a)
Представляем sqrt(-D) как sqrt(D)*sqrt(-1)
sqrt(-1)=i(мнимая единица)
далее Представляем ответ в форме x=q+w*i
Пример:
x^2+1=0;
[x=-%i,x=%i]
x^2-42*x+641=0;
[x=21-10*sqrt(2)*%i,x=10*sqrt(2)*%i+21]

Подробнее в википедии:
http://ru.wikipedia.org/wiki/Мнимая_единица
http://ru.wikibooks.org/wiki/Комплексные_числа

P.S. Уточни -те условие. Когда в детской задачке про решение квадратного уравнения говорят "учесть комплексные корни", то как правило это значит что программа должна просто проверить отрицательностьдискриминанта и вежливо сообщить, что в R решений нет, а не вылетать с рантайм-еррор.
Все понял :). Только Википедия у меня уже 2 дня не пашет  :(. А то что С++ я не увидел(да и С++ не знаю :) )

Anton T.

Цитата: beep_boop від 15 Грудень 2008, 16:28:53
А это ничего, что автору надо было на С++? :-XКомплексные корни для чайников.
Пускай у нас есть квадратное уравнение с отрицательным дискриминантом.
x12= (-b+-sqrt(-D))/(2*a)
Представляем sqrt(-D) как sqrt(D)*sqrt(-1)
sqrt(-1)=i(мнимая единица)
далее Представляем ответ в форме x=q+w*i
Пример:
x^2+1=0;
[x=-%i,x=%i]
x^2-42*x+641=0;
[x=21-10*sqrt(2)*%i,x=10*sqrt(2)*%i+21]

Подробнее в википедии:
http://ru.wikipedia.org/wiki/Мнимая_единица
http://ru.wikibooks.org/wiki/Комплексные_числа

P.S. Уточни -те условие. Когда в детской задачке про решение квадратного уравнения говорят "учесть комплексные корни", то как правило это значит что программа должна просто проверить отрицательностьдискриминанта и вежливо сообщить, что в R решений нет, а не вылетать с рантайм-еррор.
Программный код в студию! Но это мне не нужен, а клиенту надо.

βεερ_βooρ

Цитата: AntonT від 16 Грудень 2008, 21:22:36
Программный код в студию! Но это мне не нужен, а клиенту надо.
Жуть людям уже 20 строчек для _клиента _ написатьлень.

#include <complex>
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
double a,b,c;
complex<double> x1,x2,D;
cout <<"a=\n";
cin >> a;
cout <<"b=\n";
cin >> b;
cout <<"c=\n";
cin >> c;
D=b*b - 4*a*c;
x1 = (-b+sqrt(D))/(2*a);
x2 =  (-b-sqrt(D))/(2*a);
cout << x1 << endl;
cout << x2 << endl;
return 0;
}
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Ivan_32

#424
Подскажите хорошую книгу по программированию аппаратной части для Win32 на ASM. Нашел для С++ но там все испорчено этим дурацким ООП.

Глядишь лет через 10 99.9% программистов будет писать программы в одну строчку или что еще хуже лепить... :(


Сразу видно - предпосылка глубоко проанализирована.
А главное, неясно каким боком в вопросах по программированию. Сиди теперь, кусай себе локти, а ответить не моги. Спасибо.
Чем больше я узнаю, тем больше чувствую себя дураком...

Haker

Какая сейчас самая новая версия Borland C++?
А то мой 3.1 не понимает команд из новой книги.

Edd.Dragon

Цитата: Haker від 18 Грудень 2008, 18:07:41
Какая сейчас самая новая версия Borland C++?
А то мой 3.1 не понимает команд из новой книги.
А в книге то в каком продукте предлагается пробовать примеры и как книга называется?

Haker

Цитата: edd_k від 18 Грудень 2008, 19:11:58
А в книге то в каком продукте предлагается пробовать примеры и как книга называется?

книга "Как программировать на С++": пятое малое издание под редакцией Дейтел. Насчет компиляторов точно не сказано, но помоему VisuaI С++.Net, так 3.1 я дошел аж до 3 главы "введение в классы и объекты" там пошли команды getline и т.д.
Видел еще симантек визуал Си++(первый раз)

Ivan_32

#428
edd_k, мне просто нужен пример как написать обвязку+драйвер для работы с портами и прерываниями.
Я читал вот эту книгу:
Программирование аппаратных средств в Windows. Всеволод Несвижский
http://www.labirint-shop.ru/books/53529/. Но в ней все идет на С++.
Вобщем если не вдаватся в подробности то все что я понял, это то что хендл на драйвер открывается функцией
CreateFile() с путем "\\\\.\\DriverName" и дальше идет ввод\вывод с помощью, DeviceIOControl.
Вопросов у меня два, каким образом мне создать драйвер на asm , если VistaDDK это куча header-ов и нигде нету .inc-ов и второй пособие о том как его написать. Фактически мне нужна книга что то вроде "Программирование аппаратных средств на MASM". 

2Haker:
MSVC++ 6.0 хватит с головой. Тем более эта версия еще не испорчена заразой .NET
В институте если к вам приезжали представители Microsoft, могут выдать лицензионные ключи к оной, правда большой уверенности нет - версия старая, могут сослаться на это и предложить 2005/2008.
Чем больше я узнаю, тем больше чувствую себя дураком...

βεερ_βooρ

Цитата: Ivan_32 від 18 Грудень 2008, 13:30:20
Подскажите хорошую книгу по программированию аппаратной части для Win32 на ASM. Нашел для С++ но там все испорчено этим дурацким ООП.

Глядишь лет через 10 99.9% программистов будет писать программы в одну строчку или что еще хуже лепить... :(


Сразу видно - предпосылка глубоко проанализирована.
А главное, неясно каким боком в вопросах по программированию. Сиди теперь, кусай себе локти, а ответить не моги. Спасибо.

Цитата: Ivan_32 від 19 Грудень 2008, 02:37:28
edd_k, мне просто нужен пример как написать обвязку+драйвер для работы с портами и прерываниями.
Я читал вот эту книгу:
Программирование аппаратных средств в Windows. Всеволод Несвижский
http://www.labirint-shop.ru/books/53529/. Но в ней все идет на С++.
Вобщем если не вдаватся в подробности то все что я понял, это то что хендл на драйвер открывается функцией
CreateFile() с путем "\\\\.\\DriverName" и дальше идет ввод\вывод с помощью, DeviceIOControl.
Вопросов у меня два, каким образом мне создать драйвер на asm , если VistaDDK это куча header-ов и нигде нету .inc-ов и второй пособие о том как его написать. Фактически мне нужна книга что то вроде "Программирование аппаратных средств на MASM". 

2Haker:
MSVC++ 6.0 хватит с головой. Тем более эта версия еще не испорчена заразой .NET
В институте если к вам приезжали представители Microsoft, могут выдать лицензионные ключи к оной, правда большой уверенности нет - версия старая, могут сослаться на это и предложить 2005/2008.
Лучшая из всех виденых мною книг по программированию на ассемблере для новичков - П.И. Рудаков, К.Г. Финогенов ЯЗЫК АССЕМБЛЕРА. УРОКИ ПРОГРАММИРОВАНИЯ. Одна часть книги посвящена программированию драйверов для Win 9x на ассемблере. Но! Для семейства NT драйвера традиционо пишутся на С(ведь раньше эта былапереносимая ОС), поэтому применение для этих целей ассемблера нецелесообразно. Хотите поиграться с ассемблером и железками - берите дистрибутивчик FreeDOS-a или KolibriOS, спецификацию и вперед.  Есть более продвиутый учебнк Зубкова - " Ассемблер для DOS, Windows и Unix" и несколько эксперементальный учебник Юрова "Assembler. Учебник для вузов". Ну и не забываем статьи в интернете читать на сайтах типа wasm.ru, в журнале Phrack и т.д.
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Edd.Dragon

#430
Цитата: Haker від 19 Грудень 2008, 00:39:34
дошел аж до 3 главы "введение в классы и объекты" там пошли команды getline и т.д.
Видел еще симантек визуал Си++(первый раз)
Если ты посмотрел встроенную справку в BC++ и там о getline() действительно ничего, то значит борланд тебе точно ничем не поможет.

Вот только ты оговорился, что разбираешь классы, так может это не просто отвлеченная функция сама по себе, а метод конкретного класса? Так тогда ее имя например cin.getline() (т.е. метод экземпляра класса stream - он?)

Если так, то это класс из STL (стандартной библиотеки шаблонов). Во времена досовских компилеров ее и близко не было в нынешнем виде. Ставь Visual Studio Express, зачем тебе старый Борланд?

Цитата: Ivan_32 від 19 Грудень 2008, 02:37:28
Тем более эта версия еще не испорчена заразой .NET
Если ты НЕ используешь NET, то какая разница? У меня на столе набор инструментов. В том числе и молоток. Я собираю комп. Неужели комп будет содержать следы молотка только потому, что молоток лежит на столе? Если я его в руки не брал, то и следов не будет ;)


Цитата: Ivan_32 від 19 Грудень 2008, 02:37:28
edd_k, мне просто нужен пример как написать обвязку+драйвер для работы с портами и прерываниями.
Я читал вот эту книгу:
Программирование аппаратных средств в Windows. Всеволод Несвижский
http://www.labirint-shop.ru/books/53529/. Но в ней все идет на С++.
Красным я прокоментировал твое последнее предложение ))
А на счет С++ в конкретном случае:
а) CreateFile() и прочая полученная тобой полезная информация никаким боком к С++ не относится, это функции виндовых API, т.е. независимо от того на чем программить - ты будешь использовать именно их;
б) никто не мешает тебе не брать во внимание именно С++-шный код и вместо него программить на старом обычном С, но тем не менее именно на языке более высокого уровня чем asm - прежде чем что-то писать на асме, нужно хорошо знать КАК это писать, ну и иметь в этом вообще необходимость. Ты же сейчас учишься, а значит гораздо выгоднее, понятнее и проще будет использовать C. Ты сэкономишь время, но абсолютно ничего не потеряешь, что может быть важным, тем более на этапе вникания в суть и разбирательстве с предметной областью. Чем-то не нравится C++ - не используй (себе же в ущерб). Ну а имея рабочий экземпляр на С, уже можно будет заняться его копией на ASM.


Haker

Цитата: edd_k від 19 Грудень 2008, 09:50:21
Если ты посмотрел встроенную справку в BC++ и там о getline() действительно ничего, то значит борланд тебе точно ничем не поможет.

Вот только ты оговорился, что разбираешь классы, так может это не просто отвлеченная функция сама по себе, а метод конкретного класса? Так тогда ее имя например cin.getline() (т.е. метод экземпляра класса stream - он?)

Если так, то это класс из STL (стандартной библиотеки шаблонов). Во времена досовских компилеров ее и близко не было в нынешнем виде. Ставь Visual Studio Express, зачем тебе старый Борланд?
Если ты НЕ используешь NET, то какая разница? У меня на столе набор инструментов. В том числе и молоток. Я собираю комп. Неужели комп будет содержать следы молотка только потому, что молоток лежит на столе? Если я его в руки не брал, то и следов не будет ;)

не знаю. Сегодня покопаюсь еще, посмотрю что к чему. Старый борланд использую из-за того, что, преподователь сказала "пользуйтесь борландом и турбо 3.1". Не знаю даже почему..

Edd.Dragon

Цитата: Haker від 19 Грудень 2008, 13:29:41
не знаю. Сегодня покопаюсь еще, посмотрю что к чему. Старый борланд использую из-за того, что, преподователь сказала "пользуйтесь борландом и турбо 3.1". Не знаю даже почему..
Ну так тогда "фильтруй" книгу и ищи чем заменить то, чего нету. Или же найди книгу именно по BC++

resiver

вот задача: Вычислить значение суммы
S = 1/1! + 1/2! + ... + 1/k!
Избавиться от вычисления факториала для каждого слагаемого.

вот то что я написал
#include<stdio.h>
#include<conio.h>

   unsigned long int k;
   unsigned long int i;
   unsigned long int factorial;
   unsigned long int tmp;
   unsigned int S = 0;

    unsigned long int f(unsigned long int k)
    {
      factorial = 1;
      for (i = 2; i <= k; i++) factorial *= i;
   
      return factorial;
     }


int main(int argc, _TCHAR* argv[])
{
       
       printf ("VVedit 4islo :%ld");
       scanf ("%ld", &k);     
             
       for (i = 0; i<=k; i++ ) S = S + 1/f(k);

       printf ("Otvet:%ld", S);         

getch();
return 0;
}

ну оно почему то не работает. Сказали что задача имеет значение динамическое.

а вот решение етой проги на паскале, только я в паскале не разбираюсь!

Можно, конечно, каждый раз вычислять очередное p!, затем 1/p!, и полученное слагаемое добавлять к сумме. Но обратим внимание на следующее очевидное равенство:

1/(p+1)! = (1/p!)/(p+1),

и программа вычисления запишется следующим образом

S:=1; p:=1; {S = p = 1/1!}
for i:=2 to k do
begin
p:=p/i;
S:=S+p;
end;
Подпись отображается внизу каждого Вашего сообщения. Вы также можете использовать BB код и смайлы.

Edd.Dragon

Цитатану оно почему то не работает
И наверное оно как партизан не признается почему и не говорит в каких строках ошибки. Ну не будем же мы тут набирать твою прогу, чтобы посмотреть какие компилятор ошибки выдает, если их текст ты уже получил.

Цитатаunsigned long int f(unsigned long int k)
Тебя попросили не вычислять каждый раз факториал заново. А ты таки вычисляешь. Т.е. сначала 1. Потом 1*2. Потом снова 1*2, но еще и на 3. Потом все тоже самое, но еще и на 4. Зачем на каждом шаге повторять заново вычисление предыдущего факториала? Когда ты считаешь n!, это же n * (n-1)!, который ты на прошлом шаге уже получил. Т.е. прошлый факториал надо умножить на n и это будет нынешний факторил. Это тебя и попросили реализовать.  Т.е. сделать вычисление факториала в основном цикле, не пересчитывая его заново

P.S.: В C если ты делишь целое число на целое, то и результат - ЦЕЛЫЙ, т.е. целочисленное деление. 1 / 10 = 0; 1 / 10.0 = 0.1

resiver

Цитата: edd_k від 19 Грудень 2008, 15:38:15
И наверное оно как партизан не признается почему и не говорит в каких строках ошибки. Ну не будем же мы тут набирать твою прогу, чтобы посмотреть какие компилятор ошибки выдает, если их текст ты уже получил.
Тебя попросили не вычислять каждый раз факториал заново. А ты таки вычисляешь. Т.е. сначала 1. Потом 1*2. Потом снова 1*2, но еще и на 3. Потом все тоже самое, но еще и на 4. Зачем на каждом шаге повторять заново вычисление предыдущего факториала? Когда ты считаешь n!, это же n * (n-1)!, который ты на прошлом шаге уже получил. Т.е. прошлый факториал надо умножить на n и это будет нынешний факторил. Это тебя и попросили реализовать.  Т.е. сделать вычисление факториала в основном цикле, не пересчитывая его заново

P.S.: В C если ты делишь целое число на целое, то и результат - ЦЕЛЫЙ, т.е. целочисленное деление. 1 / 10 = 0; 1 / 10.0 = 0.1

Великолепний ответ! ну все таки помогите написать цыкл которий вычисяет значение факториала!
Подпись отображается внизу каждого Вашего сообщения. Вы также можете использовать BB код и смайлы.

Edd.Dragon

Цитата: resiver від 19 Грудень 2008, 15:45:23
ну все таки помогите написать цыкл которий вычисяет значение факториала!
Не помогите, а напишите? А то помог я выше

S = 1/1! + 1/2! + ... + 1/k!


double sum = 0, f = 1;
for (int i = 1; i<=k; i++)
{
    f *= i;   
    s += 1.0 / f;
}


Это сложно?

Подобные циклы у тебя в каждой задаче. Раз ты до сих пор не можешь их писать самостоятельно, то выходит у нас тут тема "Кто решит мне задачку?"? Так не катит. Вопросы - это вопросы, а не просьбы решить задачу. 


resiver

#437
Цитата: edd_k від 19 Грудень 2008, 15:59:51
Не помогите, а напишите? А то помог я выше

S = 1/1! + 1/2! + ... + 1/k!


double sum = 0, f = 1;
for (int i = 1; i<=k; i++)
{
    f *= i;   
    s += 1.0 / f;
}


Это сложно?

Подобные циклы у тебя в каждой задаче. Раз ты до сих пор не можешь их писать самостоятельно, то выходит у нас тут тема "Кто решит мне задачку?"? Так не катит. Вопросы - это вопросы, а не просьбы решить задачу. 
ну вот чо вы так? я же попросил вас написать всего одну функцию, которая вычисляет значение факториала. Я же не просил вас решить мне задачу!понимаете?
Подпись отображается внизу каждого Вашего сообщения. Вы также можете использовать BB код и смайлы.

FalseMan

resiver, вот я читаю тему и хочу спросить, тебе это надо в школу/институт, а учишься ты на экономиста там или геолога? или ты для общего развития? просто интересно ;)

resiver

#439
Цитата: FalseMan від 19 Грудень 2008, 20:44:07
resiver, вот я читаю тему и хочу спросить, тебе это надо в школу/институт, а учишься ты на экономиста там или геолога? или ты для общего развития? просто интересно ;)
FalseMan просто интересно не бывает, зачем тебе?
Подпись отображается внизу каждого Вашего сообщения. Вы также можете использовать BB код и смайлы.

firefire

У меня есть вопрос по пхп.
У меня есть первое изображение (1.png), второе (2.png). Как их "склеить" в 1 пхп скриптом или же вставить оба в другое пустое изображение?

βεερ_βooρ

Цитата: firefire від 20 Грудень 2008, 17:50:30
У меня есть вопрос по пхп.
У меня есть первое изображение (1.png), второе (2.png). Как их "склеить" в 1 пхп скриптом или же вставить оба в другое пустое изображение?
Используй биндинг PHP к ImageMagick
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

firefire

Цитата: beep_boop від 20 Грудень 2008, 19:16:13
Используй биндинг PHP к ImageMagick
А есть ли встроенные возможности?

Haker

Доброй ночи. У меня 2 вопроса.
1: достал лиц.копию C++ Builder 5.0. Теперь все работает без ошибок. Но когда компилирую вместо приглашения ввести название курса просто белый фон. Может я чего не настроил?
И как сохранить екзешник?
2: скачал к нему freeComandLineTool 5.5.1, но незнаю как правильно установить. Куда распаковывать?
Спс.

firefire

Цитата: Haker від 21 Грудень 2008, 01:23:11
И как сохранить екзешник?
2: скачал к нему freeComandLineTool 5.5.1, но незнаю как правильно установить. Куда распаковывать?
Спс.
А разве в С++ Builder нет компилятора?

βεερ_βooρ

Цитата: firefire від 21 Грудень 2008, 09:04:38
А разве в С++ Builder нет компилятора?
Есть. И freeComandLineTool 5.5.1 являются его консольной версией.
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

firefire

Цитата: beep_boop від 21 Грудень 2008, 17:58:27
Есть. И freeComandLineTool 5.5.1 являются его консольной версией.
Спасибо, но я нашел способ решение проблемы;
$img = imagecreatetruecolor(150, $i*70);
for ($i=0;$i<count($artist);$i++){
$im[$i]=imagecreatefrompng("logo/$artist[$i].PNG");
imagecopy($img, $im[$i], 0, $i*70, 0, 0, 150, 700);
}
header('Content-type: image/png');
imagepng($img);

toxi

Здравствуйте!
Возможно ли написать батник или небольшую программку, которая выполняла бы сделующее:
Есть два компьютера дома. Они соеденениы в локальную сеть. Один подключён к Интернету, а второй компьютер подключается к первому через VPN соеденение. Но когда первый компьютер не работает, то второй компьютер подключён напрямую к Интернету, через PPPoE.
Собственно вопрос:
Хочу сделать так, что при включении первого компьютера, второй компьютер отключался от Интернета и автоматически устанавливал VPN соеденение с первым компьютером, через 30 секунд например. А когда первый компьютер выключается, то программа разраывает VPN соеденение и автоматически устанавливает прямое соеденение с Инетрнетом.

Знаю, что похожее можно сделать через роутер, но у меня пока не позволяют финансы купить даже самый дешвый роутер.

Возможно ли такое?

Edd.Dragon

#448
Цитата: resiver від 19 Грудень 2008, 17:32:19
Я же не просил вас решить мне задачу!понимаете?
Эти две строчки, которые я написал и есть решение поставленной задачи. Осталное - заголовки, ввод, вывод - это сопутствующий мусор. А вся суть вопроса задачи именно в том, чтобы ты написал именно эти и именно элементарные две строчки (обрамленные циклом).

Проникнись всем трагизмом ситуации ))

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

______________________________________________________

ЦитатаНо когда компилирую вместо приглашения ввести название курса просто белый фон.
А подробнее?
Какой проект - консольный или GUI?
Белый фон - это как выглядит? И что должно быть (кусочек кода покажи).

ЦитатаИ как сохранить екзешник?
Запуск твоей программы = запуск ее экзешника. Т.е. он есть. Там куда настроен вывод бинарников. По умолчаю где-то в папке проекта.


firefire

<?
$uploaddir="files/";
if (move_uploaded_file($_FILES['client_side_file']
['tmp_name'], $uploaddir .
$_FILES['client_side_file']['name'])){
echo"File is uploaded!<br>";
} else{
echo "File isn't uploaded!";
}
?>

На старом хостинге этот код нормально работало. А когда записал тоже самое на новом (000webhost.com) выдает ошибка.
ЦитатаWarning: move_uploaded_file(files/digits.in) [function.move-uploaded-file]: failed to open stream: Permission denied in /home/a4127155/public_html/upload.php on line 5

Free Web Hosting

PHP Error Message

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/php6Urd7A' to 'files/digits.in' in /home/a4127155/public_html/upload.php on line 5
Папку files создал.
Помогите пожалуйста  :(