Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

RE: Вопросы по C/C++ (Для новичков)

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> RE: Вопросы по C/C++ (Для новичков)
Имя
Сообщение << Старые топики   Новые топики >>
RE: Вопросы по C/C++ (Для новичков) - 2010-02-20 22:28:39.560000   
Zmaster

Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
quote:

адрес переводчика

http://translate.ru :)
Post #: 1121
RE: Вопросы по C/C++ (Для новичков) - 2010-02-20 22:38:25.053333   
lexa107

Сообщений: 5
Оценки: 0
Присоединился: 2010-02-20 22:14:03.803333
Не, ну почему нельзя просто объяснить человеку, если он не понимает? Все мы когда-то начинали…
Post #: 1122
RE: Вопросы по C/C++ (Для новичков) - 2010-02-20 23:04:36.170000   
Zmaster

Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
quote:

c getch() я никогда не работал

А чего там работать то. У него просто не прописан хедер conio.h.

quote:

Не, ну почему нельзя просто объяснить человеку

Объяснить то можно… Было бы только что объяснять.

Кстати, Parti$an1966, зачем ты в цикле используешь printf, а после цикла cout? Убери iostream и используй только printf.
Post #: 1123
RE: Вопросы по C/C++ (Для новичков) - 2010-02-21 21:21:42.730000   
ZloY.Finn

Сообщений: 1500
Оценки: 0
Присоединился: 2009-06-29 19:53:19.333333
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; int main() { float a,b,s; printf("\na="); scanf("%f",&a); printf("\nb="); scanf("%f",&b); if(b=0) printf("\nb ne ravno 0"); else s=a/b; printf("\ns=%f",s); getch(); } a=12
b=2
s=0
oO
Post #: 1124
RE: Вопросы по C/C++ (Для новичков) - 2010-02-21 21:57:25.270000   
Lost_boy

Сообщений: 327
Оценки: 0
Присоединился: 2009-03-25 11:07:27.910000
Что это за код? О_о
Сравнение так делается:
if (b == 0) А в твоем случае ты просто делаешь b равным нулю, поэтому у тебя и ничего не выходит.
Это какой-то хитрый маркетинговый ход? В чем смысл?
if(b=0) printf("\nb ne ravno 0"); Включи свои экстрасенские способности и рискну изменить этот код, видимо вы хотели получить что-то типа этого:
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; int main() { &nbsp;&nbsp; float a, b, s; &nbsp;&nbsp; printf ("\n a= "); &nbsp;&nbsp; scanf ("%f", &amp;a); &nbsp;&nbsp; printf ("\n b= "); &nbsp;&nbsp; scanf ("%f", &amp;b); &nbsp;&nbsp; &nbsp;&nbsp; if ( b == 0) &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf("\n b ravno 0 "); &nbsp;&nbsp; else &nbsp;&nbsp; { &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; s = a / b; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf("\n s=%f", s); &nbsp;&nbsp; } &nbsp;&nbsp; getch(); }
Post #: 1125
RE: Вопросы по C/C++ (Для новичков) - 2010-02-22 12:09:44.883333   
ZloY.Finn

Сообщений: 1500
Оценки: 0
Присоединился: 2009-06-29 19:53:19.333333
quote:

if (b == 0)

Спасибо) все дело было в этом, осталосьное то верно) именно не равно)
Post #: 1126
RE: Вопросы по C/C++ (Для новичков) - 2010-02-22 12:38:39.153333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333

quote:

ORIGINAL: ZloY.Finn

quote:

if (b == 0)

Спасибо) все дело было в этом, осталосьное то верно) именно не равно)


Если часто возникают такие ошибки, то советуют писать if ( 0 == b ) - тогда, если забыть одно равно, компилятор сам ругнётся. Хотя все нормальные компиляторы кидают ворнинг, если написать if ( b = 0 ).
Post #: 1127
RE: Вопросы по C/C++ (Для новичков) - 2010-02-22 13:41:11.470000   
ZloY.Finn

Сообщений: 1500
Оценки: 0
Присоединился: 2009-06-29 19:53:19.333333
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; int main() { int day; printf("\nday="); scanf("%d",&day); switch(day){ case'1': printf("\nPN"); break; case'2': printf("\nVT"); break; case'3': printf("\nSR"); break; case'4': printf("\nCH"); break; case'5': printf("\nPT"); break; case'6': printf("\nSB"); break; case'7': printf("\nVS"); break; } getch(); } Компилится хорошо. Ввожу день, далее никаких действий не происходит, в чем проблема? Ошибку найти не могу
Post #: 1128
RE: Вопросы по C/C++ (Для новичков) - 2010-02-22 14:24:29.390000   
sbk

Сообщений: 144
Оценки: 0
Присоединился: 2008-12-20 19:01:57.273333
В switch-е нужно не char а int
Post #: 1129
RE: Вопросы по C/C++ (Для новичков) - 2010-02-22 14:41:12.756666   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: ZloY.Finn

в чем проблема?


в том, что ты не используешь default case и не пользуешься отладчиком. ну и в том, что в C++ слабая система типов, допускающая неявные преобразования
Post #: 1130
RE: Вопросы по C/C++ (Для новичков) - 2010-02-22 15:58:05.213333   
Lost_boy

Сообщений: 327
Оценки: 0
Присоединился: 2009-03-25 11:07:27.910000
ZloY.Finn, вот так должно выглядеть, чтоб работало.
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; int main() { int day; printf("\nday="); scanf("%d",&amp;day); switch (day) &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 1: &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; printf("\nPN"); &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 2: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("\nVT"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 3: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("\nSR"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 4: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("\nCH"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 5: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("\nPT"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 6: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("\nSB"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 7: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("\nVS"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } getch(); } З.Ы. конечно еще наверно надо добавить проверку неверно введенного числа, типа 0 или 78, но это другой разговор =)
Post #: 1131
RE: Вопросы по C/C++ (Для новичков) - 2010-02-22 17:56:10.783333   
sanday

Сообщений: 41
Оценки: 0
Присоединился: 2010-02-06 12:52:26.896666
Рассчитать число пи на основании бесконечного ряда
пи = 4 - 4 / 3 + 4 / 5 - 4 / 7 + 4 / 9 - 4 / 11 + …
Напечатайте  таблицу, которая покажет, как значение пи  аппроксимируется одним членом этого ряда, двумя членами, тремя и т.д.
в чем ошибка?
//Рассчитать значение пи #include &lt;iostream&gt; #include &lt;iomanip&gt; using namespace std; main() { &nbsp;&nbsp;&nbsp; float a, b, pi, number; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for (int i = 3; i &lt;= 100; i+= 4) { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a = (float) 1/i; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int j = 5; j &lt;= 100; j+= 4) { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b = (float) 1/j; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; number = (float)(1 + b - a); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pi = (float)(4 * number); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; setw (10) &lt;&lt; pi &lt;&lt; endl; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; system("pause"); return 0; }
Post #: 1132
RE: Вопросы по C/C++ (Для новичков) - 2010-02-22 18:25:15.226666   
lexa107

Сообщений: 5
Оценки: 0
Присоединился: 2010-02-20 22:14:03.803333
Если о том,что не комилируется, то перед main() поставь int
Post #: 1133
RE: Вопросы по C/C++ (Для новичков) - 2010-02-22 19:42:21.326666   
sanday

Сообщений: 41
Оценки: 0
Присоединился: 2010-02-06 12:52:26.896666
компилируется, только результат сильно отличается от пи = 3.14))

Вопрос 2: как расширить возможности досовского окна, который в моем случае выдает результат после написания программы (Dev-C++), в плане - в случае вывод в столбик чисел, максимальное количество чисел соответствует 300. А если необходимо больше?
Post #: 1134
RE: Вопросы по C/C++ (Для новичков) - 2010-02-22 20:11:59.823333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
В свойствах консоли (правой кнопкой мыши по заголовку, свойства)
Post #: 1135
RE: Вопросы по C/C++ (Для новичков) - 2010-02-22 21:13:51.430000   
Lost_boy

Сообщений: 327
Оценки: 0
Присоединился: 2009-03-25 11:07:27.910000
sanday, что-то ты намудрил с кодом сильно, я его поправил, сильно поправил=)
Необходимое число (пи) получается, поиграйся с числом итераций, увидишь как изменяется точность вычислений.
&nbsp;#include &lt;iostream&gt; &nbsp;using namespace std; &nbsp; &nbsp;int main() &nbsp;{ &nbsp;&nbsp;&nbsp; &nbsp;float pi = 4, koef = -1; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; for (float i = 3; i &lt;= 400; i+= 2) &nbsp;&nbsp;&nbsp; &nbsp;{ &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;pi = pi + (4/i) * koef; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;koef *= -1; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;cout &lt;&lt; "\n PI = " &lt;&lt; pi; &nbsp;&nbsp;&nbsp; &nbsp;} &nbsp;&nbsp;&nbsp; &nbsp;system("pause"); &nbsp;}
Post #: 1136
RE: Вопросы по C/C++ (Для новичков) - 2010-02-22 23:59:34.146666   
sanday

Сообщений: 41
Оценки: 0
Присоединился: 2010-02-06 12:52:26.896666
_SaZ_
связано с количеством буфера?

Lost_boy

спасибо, нда… намного попроще, хотя надо посидеть подумать над своим кодом))
Post #: 1137
RE: Вопросы по C/C++ (Для новичков) - 2010-02-23 00:04:57.146666   
Lost_boy

Сообщений: 327
Оценки: 0
Присоединился: 2009-03-25 11:07:27.910000
sanday, для "спасибо" есть кнопочка оценить пост.
На счет твоего кода: просто представь что у тебя есть цикл и на каждой итерации ты должен получить новый эл-т ряда, ряд у тебя записан, и каждый новый член ряда необходимо суммировать с предыдущими. Не забываем учитывать меняющийся знак, для этого я использовал переменную - koef.
Post #: 1138
RE: Вопросы по C/C++ (Для новичков) - 2010-02-23 00:07:14.163333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333

quote:

ORIGINAL: sanday
_SaZ_
связано с количеством буфера?


Да, но проще через каждые 20-25 строк делать getch(). Буфер то ведь не резиновый.
Post #: 1139
RE: Вопросы по C/C++ (Для новичков) - 2010-02-23 12:02:47.853333   
sanday

Сообщений: 41
Оценки: 0
Присоединился: 2010-02-06 12:52:26.896666
Написать программу, которая печатает ромб:
     *
   ***
  *****
*******   Должна быть сдвинута на один пробел вправо
*********
*******   должна быть сдвинута на один пробел вправо
  *****
    ***
      *
Можно использовать оператор вывода, который печатает или одну звездочку или один пробел. Максимально можно использовать повторение (с вложенными структурами for) и минимизировать число оператор вывода.
Мой код:
//Напечатать ромб #include &lt;iostream&gt; using namespace std; main() { for (int i = 1; i &lt;= 4; i++) &nbsp;&nbsp;&nbsp; cout &lt;&lt; " "; for (int j = 1; j &lt;= 1; j++) &nbsp;&nbsp;&nbsp; cout &lt;&lt; "*" &lt;&lt; endl; for (int a = 1; a &lt;= 3; a++) &nbsp;&nbsp;&nbsp; cout &lt;&lt; " "; for (int s = 1; s &lt;= 3; s++) &nbsp;&nbsp;&nbsp; cout &lt;&lt; "*"; cout &lt;&lt; endl; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int d = 1; d &lt;= 2; d++) &nbsp;&nbsp;&nbsp; cout &lt;&lt; " "; for (int f =1; f &lt;= 5; f++) &nbsp;&nbsp;&nbsp; cout &lt;&lt; "*"; cout &lt;&lt; endl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int g = 1; g &lt;= 1; g++) &nbsp;&nbsp;&nbsp; cout &lt;&lt; " "; for (int h = 1; h &lt;= 7; h++) &nbsp;&nbsp;&nbsp; cout &lt;&lt; "*"; cout &lt;&lt; endl; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int k = 1; k &lt;= 9; k++) &nbsp;&nbsp;&nbsp; cout &lt;&lt; "*"; cout &lt;&lt; endl; for (int l = 1; l &lt;= 1; l++)&nbsp; &nbsp;&nbsp;&nbsp; cout &lt;&lt; " "; for (int q = 1; q &lt;= 7; q++) &nbsp;&nbsp;&nbsp; cout &lt;&lt; "*"; cout &lt;&lt; endl; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int w = 1; w &lt;= 2; w++) &nbsp;&nbsp;&nbsp; cout &lt;&lt; " "; for (int e = 1; e &lt;= 5; e++) &nbsp;&nbsp;&nbsp; cout &lt;&lt; "*"; cout&nbsp; &lt;&lt; endl; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int r = 1; r &lt;= 3; r++) &nbsp;&nbsp;&nbsp; cout &lt;&lt; " "; for (int t = 1; t &lt;= 3; t++) &nbsp;&nbsp;&nbsp; cout &lt;&lt; "*" ; cout &lt;&lt; endl; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int y = 1; y &lt;= 4; y++) &nbsp;&nbsp;&nbsp; cout &lt;&lt; " "; for (int u = 1; u &lt;= 1; u++) &nbsp;&nbsp;&nbsp; cout &lt;&lt; "*" &lt;&lt; endl; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; system("pause"); return 0; }&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Чувствую, что допустил одну грубую ошибку - НЕ минимизировал число операторов вывода.
Посоветуйте, идею или мысль, которая натолкнула бы меня на выполнения этого задания.
Post #: 1140
RE: Вопросы по C/C++ (Для новичков) - 2010-02-23 12:19:25.850000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Если работает - не трогай ;)

quote:

ORIGINAL: sanday
Чувствую, что допустил одну грубую ошибку - НЕ минимизировал число операторов вывода.
Посоветуйте, идею или мысль, которая натолкнула бы меня на выполнения этого задания.


Что ты понимаешь под "число операторов вывода"? Их частоту упоминания в коде? Так она ни на что не влияет. Ведь за раз можно вывести только один символ - и как ни крутись, для одинаковых ромбов количество вызовов будет одинаковым.
Post #: 1141
RE: Вопросы по C/C++ (Для новичков) - 2010-02-23 12:33:30.416666   
sanday

Сообщений: 41
Оценки: 0
Присоединился: 2010-02-06 12:52:26.896666
_SaZ_
то есть тот код, который я написал - Оптимален?
просто у меня возникает ощущение, что его можно написать проще.
Следующая моя задача - просят ввести число нечетное ( от 1 до 19) - и на основании этого числа, построить ромб, где введенное число - является числом строк в ромбе, так вот, если использовать выше написанный код, для данной задачи, уж очень большим и на вид не удобным получается код.
Post #: 1142
RE: Вопросы по C/C++ (Для новичков) - 2010-02-23 12:44:19.260000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333

quote:

ORIGINAL: sanday

_SaZ_
то есть тот код, который я написал - Оптимален?
просто у меня возникает ощущение, что его можно написать проще.
Следующая моя задача - просят ввести число нечетное ( от 1 до 19) - и на основании этого числа, построить ромб, где введенное число - является числом строк в ромбе, так вот, если использовать выше написанный код, для данной задачи, уж очень большим и на вид не удобным получается код.


Пройди профайлером каким-нить?

P.S. если работает и ты не можешь конкретно сказать, что тебе не нравится - оставляй так ;)
Post #: 1143
RE: Вопросы по C/C++ (Для новичков) - 2010-02-23 12:59:27.660000   
tеstеr

Сообщений: 377
Оценки: -46
Присоединился: 2008-02-08 17:56:40.563333
quote:

ORIGINAL: sanday
Написать программу, которая печатает ромб: *   *** ***** ******* ********* ******* *****   ***     *

Самый верный способ минимизировать число операторов вывода - это использовать в цикле только 1 оператор.
Это возможно
при распечатке строки/матрицы/массива с заранее подготовленным ромбом - простой способ
Или можно использовать 3 оператора (пробел, звёздочка и перевод строки, которые сжимаются до 1-го)
или при использовании условий, что боковые треугольники заполням пробелами, а все прочее - заполняем *
Второй способ посложнее.

Предположим ты выбрал второй способ.
Рассмотрим верхний левый треугольник. В чём его отличие:
для всех координат точек x, y справедливо x + y <= 5.
для точек верхнего правого треугольника справедливо (10-x) + y <= 5
для точек левого нижнего треугольника справедливо x + (10-y) <=5
для точек правого нижнего треугольника справедливо (10-x)+(10-y) <=5

Отсюда
char ch; for (y=1; y&lt;=9; y++) { for (x=1; x&lt;=10; x++) { if(x==10) ch='\n'; else if( (x + y &lt;= 5)||((10-x) + y &lt;= 5)||(x + (10-y) &lt;=5)||((10-x)+(10-y) &lt;=5) ch=' '; else ch='*'; cout &lt;&lt; ch; //Вот он один оператор вывода } }
Post #: 1144
RE: Вопросы по C/C++ (Для новичков) - 2010-02-23 13:03:43.213333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
А если убрать "волшебные числа" из кода? Или поленился нормализовывать?

Вариант "в лоб", без минимизаций:
#include &lt;iostream&gt; int main( void ) { int n; std::cout &lt;&lt; "Enter number of rows: "; std::cout.flush(); std::cin &gt;&gt; n; if ( (n &lt; 1) || (n &gt; 19) || !(n % 2) ) return 1; int spaces = (n - 1) / 2; int stars = 1; int inc = 1; for ( int row = 0 ; row &lt; n; stars += inc * 2, spaces -= inc, ++row ) { for ( int i = 0; i &lt; spaces; ++i ) std::cout &lt;&lt; ' ' ; for ( int i = 0; i &lt; stars; ++i ) std::cout &lt;&lt; '*' ; for ( int i = 0; i &lt; spaces; ++i ) std::cout &lt;&lt; ' ' ; if ( row &gt; n / 2 - 1 ) inc = -1; std::cout &lt;&lt; '\n'; } std::cout &lt;&lt; std::endl; system( "pause" ); return 0; }
Post #: 1145
RE: Вопросы по C/C++ (Для новичков) - 2010-02-23 14:08:09.346666   
tеstеr

Сообщений: 377
Оценки: -46
Присоединился: 2008-02-08 17:56:40.563333
Верно, _SAZ_, пост 1142 (http://forum.xakep.ru/fb.aspx?m=1721208) я и не прочёл.
Про ввод числа от 1 до 19 не подумал даже.
Если же подумать про них оставить реалиацию с магическими числами то будет примерно так:
#include &lt;iostream.h&gt; int main(int argc, char* argv[]) { int size; int x,y; char ch; int Center, Max; cin &gt;&gt; size; Max = size + 1; Center = Max/2; for (y=1; y&lt;=size; y++) { for (x=1; x&lt;=Max; x++) { if(x==Max) ch='\n'; else if( (x + y &lt;= Center)||((Max-x) + y &lt;= Center)||(x + (Max-y) &lt;=Center)||((Max-x)+(Max-y) &lt;=Center) ) ch=' '; else ch='*'; cout &lt;&lt; ch; //Вот он один оператор вывода } } return 0; }
Post #: 1146
RE: Вопросы по C/C++ (Для новичков) - 2010-02-23 14:49:04.083333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Лень думать, если честно. Но там можно всё в один if запихнуть. char заранее проинициализировать char c = ' '; и менять уже только в случае необходимости. Но перевод строки я бы вынес за цикл, красивее будет.
Post #: 1147
RE: Вопросы по C/C++ (Для новичков) - 2010-02-24 17:03:38.263333   
iidsp

Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
Подскажите, как можно получать в консольном приложении (C++) текущее время винды. Нужно сделать "примитивный органайзер" для себя(для организации расписания), в котором издавался бы звук по мере наступления нужного времени. Далее все переходило бы опять в режим ожидания до наступления новой точки во времени…?
Post #: 1148
RE: Вопросы по C/C++ (Для новичков) - 2010-02-24 17:12:01.070000   
Lost_boy

Сообщений: 327
Оценки: 0
Присоединился: 2009-03-25 11:07:27.910000
iidsp, вопрос бородатый до ужаса, гугл тебе столько вариантов выкинет.. Вот первый пример на эту тему. На вывод идет время.
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;time.h&gt; using namespace std; void main() { &nbsp;&nbsp;&nbsp; time_t t; &nbsp;&nbsp;&nbsp; struct tm *t_m; &nbsp;&nbsp;&nbsp; t = time(NULL); &nbsp;&nbsp;&nbsp; t_m = localtime(&amp;t); &nbsp;&nbsp;&nbsp; cout &lt;&lt; "Local time is: " &lt;&lt; t_m-&gt;tm_hour &lt;&lt; ":" &lt;&lt; t_m-&gt;tm_min &lt;&lt; ":" &lt;&lt; t_m-&gt;tm_sec; &nbsp;&nbsp;&nbsp; getch(); }
Post #: 1149
RE: Вопросы по C/C++ (Для новичков) - 2010-02-24 17:51:36.286666   
iidsp

Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
в книге "с++. Сборник рецептов " нашел описание получения времени…
Post #: 1150
RE: Вопросы по C/C++ (Для новичков) - 2010-02-24 17:53:18.366666   
Zmaster

Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
Ну хоть не поленился в книгу влезть… уже что-то.
Post #: 1151
RE: Вопросы по C/C++ (Для новичков) - 2010-02-24 18:23:15.730000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
quote:

ORIGINAL: iidsp

Подскажите, как можно получать в консольном приложении (C++) текущее время винды. Нужно сделать "примитивный органайзер" для себя(для организации расписания), в котором издавался бы звук по мере наступления нужного времени. Далее все переходило бы опять в режим ожидания до наступления новой точки во времени…?


GetLocalTime, SetTimer / CreateEvent + WaitForSingleObject
Post #: 1152
RE: Вопросы по C/C++ (Для новичков) - 2010-02-25 18:28:57.136666   
iidsp

Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
Есть такой кусок класса:
quote:

char Screen::get(index r, index c) const { &nbsp;&nbsp; index row = r * width; &nbsp;&nbsp; return contents[row + c]; }

при этом contents и width определены в private.

Есть такое правило:
quote:

Если объявить метод класса как const, то он не сможет изменить значения ни одного из членов класса.

Вопрос:
почему тут стоит const, хотя идет изменение членов-класса contents и width внутри функции-члена.
Post #: 1153
RE: Вопросы по C/C++ (Для новичков) - 2010-02-25 18:41:41.370000   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: iidsp
Есть такой кусок класса:
quote:

char Screen::get(index r, index c) const {   index row = r * width;   return contents[row + c]; }

при этом contents и width определены в private.

Есть такое правило:
quote:

Если объявить метод класса как const, то он не сможет изменить значения ни одного из членов класса.

Вопрос:
почему тут стоит const, хотя идет изменение членов-класса contents и width внутри функции-члена.

Втыкай внимательнее. Никакого изменения там не происходит. Весь доступ read-only.
Post #: 1154
RE: Вопросы по C/C++ (Для новичков) - 2010-02-25 18:42:10.846666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
quote:

ORIGINAL: iidsp

почему тут стоит const, хотя идет изменение членов-класса contents и width внутри функции-члена.


Подожди, где идёт изменение? Тут изменение лишь возможно, если перегружен оператор [] у класса contents или есть друге извращения с перегрузкой операторов.

P.S. ты перепутал смысл слов "изменение" и "использование" ;)
Post #: 1155
RE: Вопросы по C/C++ (Для новичков) - 2010-02-25 18:47:34.133333   
iidsp

Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
quote:

Если объявить метод класса как const, то он не сможет изменить значения ни одного из членов класса.


выходит, что я не понимаю эту фразу…
что тогда понимается под изменением?

Мне казалось, что если мы можем получить доступ к данным-членам и переприсвоить им что-либо, то это и есть изменение….
Post #: 1156
RE: Вопросы по C/C++ (Для новичков) - 2010-02-25 18:51:19.630000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333

quote:

ORIGINAL: iidsp
выходит, что я не понимаю эту фразу…
что тогда понимается под изменением?

Мне казалось, что если мы можем получить доступ к данным-членам и переприсвоить им что-либо, то это и есть изменение….

Получить доступ - прочитать. Переприсвоить - изменить. Получать доступ можно в константных методах, изменять - нельзя. Иначе, зачем вообще были бы нужны константные методы, если в них даже к полям класса не обратиться? :)

З.Ы. ещё есть такая классная весч, как const_cast.
Post #: 1157
RE: Вопросы по C/C++ (Для новичков) - 2010-02-25 18:52:01.930000   
iidsp

Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
quote:

return contents[row + c];

мне казалось, что это изменение contents
Post #: 1158
RE: Вопросы по C/C++ (Для новичков) - 2010-02-25 18:57:26.923333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333

quote:

ORIGINAL: iidsp

quote:

return contents[row + c];

мне казалось, что это изменение contents


Я ничего не знаю, про тип переменной contents. Если это не хитрый класс с перегруженным оператором [] - то это всего-лишь обращение (читай: чтение) элемента массива и возврат копии значения этого элемента.
Post #: 1159
RE: Вопросы по C/C++ (Для новичков) - 2010-02-25 19:02:01.090000   
iidsp

Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
quote:

Я ничего не знаю, про тип переменной contents. Если это не хитрый класс с перегруженным оператором [] - то это всего-лишь обращение (читай: чтение) элемента массива и возврат копии значения этого элемента.

std::string contents;
значит - это всего лишь работа с копией!?
Post #: 1160
Страниц:  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 [29] 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
Все форумы >> [Компилируемые языки] >> RE: Вопросы по C/C++ (Для новичков)







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.