RE: Вопросы по C/C++ (Для новичков)
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-03-26 09:49:51.613333
|
|
|
Kadead
Сообщений: 108
Оценки: 0
Присоединился: 2007-10-22 23:02:04.916666
|
Обращаюсь, в основном к студентам, но и ко всем присутствующим.Помогите пожалуйста. У меня какой то творческий кризис в ридумывании задач, подкиньте у кого может есть задания с лабораторных работ или курсовых по программированию на C++, желательно что нибудь интересное, а не вывести на экран наибольший элемент каждой диагонали массива. Уровень примерно 1-3 курса, но если выше тоже не откажусь.Формат заданий люьой, хоть отсканированные изображения методичек. Заранее всем спасибо. P.S. Извините за небольшой оффтоп, не хотел тему отдельнуюю создавать для такой мелкой просьбы.
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-03-26 10:26:25.986666
|
|
|
Parano1d
Сообщений: 423
Оценки: 0
Присоединился: 2008-05-21 13:40:17.093333
|
напиши свой ЯП на C++. это 3 курс. сейчас как раз думаю написать цикл статей на эту тему
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-03-26 10:33:05.080000
|
|
|
Kadead
Сообщений: 108
Оценки: 0
Присоединился: 2007-10-22 23:02:04.916666
|
quote:
ORIGINAL: Parano1d напиши свой ЯП на C++. это 3 курс. сейчас как раз думаю написать цикл статей на эту тему Спасибо, но я думаю это пока мне не под силу = ) Если соберешься статьи писать, скинь линк потом на них, обязательно ознакомлюсь. P.S. Видать задания 3 курса, это я сильно замахнулся!
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-03-26 11:27:38.006666
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
Kadead, мне всегда нравились задачи на моделирование. Типа моделирования лифта, которое Д.Кнут делал в своём TAOP. У тебя в городе метро есть? Вот напиши модель метрополитена своего города, которая рандомом будет закидывать на станции пассажиров, и задавать им цель путешествия. Которая будет моделировать всё движение каждого пассажира, причём с учётом времени езды на эскалаторе, времени ожидания электрички, времени езды в электричке, времени потраченного на переход с одной линии на другую. И к модели вывод в консоль типа[08:11]на станцию X зашёл пассажир 34458, цель путешествия станция Y, пересадка на станции Z.
[08:11]Поезд 29 прибыл на станцию W
[08:11]Пассажиры 34401 34156 34157 высадились на станции W
[08:12]Пассажир 24492 закончил переход с линии 1 на линию 2 на станции Z
[08:12]На станцию Y зашёл пассажир 24459, цель путешествия станция W, маршрут без пересадок И так далее. Будет желание, потом можно приделать поездам/экскалаторам/платформам (короче контейнерам пассажиров) ограничение на вместимость, и заставить модель корректно обрабатывать ситуацию, когда поток пассажиров превосходит пропускную способность метрополитена. Ну или пускай не обрабатывать, но хотя бы определить сам факт возникновения такой ситуации.
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-03-26 12:03:58.676666
|
|
|
Kadead
Сообщений: 108
Оценки: 0
Присоединился: 2007-10-22 23:02:04.916666
|
quote:
ORIGINAL: rgo Kadead, мне всегда нравились задачи на моделирование. Типа моделирования лифта, которое Д.Кнут делал в своём TAOP. У тебя в городе метро есть? Вот напиши модель метрополитена своего города, которая рандомом будет закидывать на станции пассажиров, и задавать им цель путешествия. Которая будет моделировать всё движение каждого пассажира, причём с учётом времени езды на эскалаторе, времени ожидания электрички, времени езды в электричке, времени потраченного на переход с одной линии на другую. И к модели вывод в консоль типа[08:11]на станцию X зашёл пассажир 34458, цель путешествия станция Y, пересадка на станции Z.
[08:11]Поезд 29 прибыл на станцию W
[08:11]Пассажиры 34401 34156 34157 высадились на станции W
[08:12]Пассажир 24492 закончил переход с линии 1 на линию 2 на станции Z
[08:12]На станцию Y зашёл пассажир 24459, цель путешествия станция W, маршрут без пересадок И так далее. Будет желание, потом можно приделать поездам/экскалаторам/платформам (короче контейнерам пассажиров) ограничение на вместимость, и заставить модель корректно обрабатывать ситуацию, когда поток пассажиров превосходит пропускную способность метрополитена. Ну или пускай не обрабатывать, но хотя бы определить сам факт возникновения такой ситуации. [sm=be.gif] [sm=ai.gif] rgo, спасибо конечно, но такое я не напишу наверное никогда = ( [sm=bu.gif] Учитывайте пожалуйста, что я изучаю С++ всего месяц.
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-03-26 12:42:26.316666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Без труда не выловишь и рыбку из пруда. Ты не говори, что не сможешь - а бери и делай.
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-03-26 12:44:21.393333
|
|
|
Kadead
Сообщений: 108
Оценки: 0
Присоединился: 2007-10-22 23:02:04.916666
|
Это я отлично понимаю, просто в данном случае я не представляю даже ход решения задачи, даже словестно не могу описать алгоритм. Значит реализовать его точно не смогу.
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-03-26 13:29:10.320000
|
|
|
Parano1d
Сообщений: 423
Оценки: 0
Присоединился: 2008-05-21 13:40:17.093333
|
тогда надо почитать литературу разную, и появятся у самого различные интересные задачи
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-03-26 13:42:26.133333
|
|
|
Kadead
Сообщений: 108
Оценки: 0
Присоединился: 2007-10-22 23:02:04.916666
|
Да завалился уже литературой, Основной использую учебник Павловской, плюс справочник Шилдта и специальный справочник Карпова. Дополнительно есть штук 7 книг в электронном виде. Уроки Д.Скандал, но ими уже не пользуюсь с них начинал.
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-03-26 15:32:45.966666
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: Kadead Спасибо, но я думаю это пока мне не под силу = ) а ты не думай, а делай. чего тебе стоит сейчас избегать - так это использования сколько-нибудь сложных сторонних технологий; если же всё писать с нуля, то решение любой задачи - вопрос времени а сложные задачи дают значительно больше полезного опыта, чем простые
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-03-26 16:43:13.750000
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
quote:
ORIGINAL: Kadead Это я отлично понимаю, просто в данном случае я не представляю даже ход решения задачи, даже словестно не могу описать алгоритм. Значит реализовать его точно не смогу. Открой Кнута, и почитай там как он моделировал лифт. Там есть полное описание задачи. Словесное описание алгоритма. Описание того, как алгоритм был получен. И есть программа для mix, которая всё это реализует. Почитай и напиши то же самое на C++. Глядишь там станет ясно, как решить более сложную задачу с метрополитеном.
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-03-26 17:04:41.013333
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Павловская - зло. Не читай. Она не знает, чем Си от С++ отличается или считает это настолько несущественным, что мешает эти два языка в один.
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-03-26 17:05:47.640000
|
|
|
Kadead
Сообщений: 108
Оценки: 0
Присоединился: 2007-10-22 23:02:04.916666
|
quote:
ORIGINAL: Denaturat а ты не думай, а делай. чего тебе стоит сейчас избегать - так это использования сколько-нибудь сложных сторонних технологий; если же всё писать с нуля, то решение любой задачи - вопрос времени а сложные задачи дают значительно больше полезного опыта, чем простые какие уж мне там сложны технологии! я пока что только олимпиадные задачки в консоли могу решать, да и вот начал с классами разбираться. Даже до оконных приложений еще далеко, а ты про сложные технологии толкуешь:D quote:
ORIGINAL: rgo quote:
ORIGINAL: Kadead Это я отлично понимаю, просто в данном случае я не представляю даже ход решения задачи, даже словестно не могу описать алгоритм. Значит реализовать его точно не смогу. Открой Кнута, и почитай там как он моделировал лифт. Там есть полное описание задачи. Словесное описание алгоритма. Описание того, как алгоритм был получен. И есть программа для mix, которая всё это реализует. Почитай и напиши то же самое на C++. Глядишь там станет ясно, как решить более сложную задачу с метрополитеном. Спасибо, за подсказку.Сейчас скачаю только Кнута и начну = )))
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-03-26 17:10:43.563333
|
|
|
Kadead
Сообщений: 108
Оценки: 0
Присоединился: 2007-10-22 23:02:04.916666
|
quote:
ORIGINAL: _SaZ_ Павловская - зло. Не читай. Она не знает, чем Си от С++ отличается или считает это настолько несущественным, что мешает эти два языка в один. Да блин… не знаю уж кого слушать, одни говорят это дерьмо, другие про это же говорят что хороше. У всех свои предпочтения, но все схожи в том, что Страуструп лучший. У меня есть 3 или 4 издание Страуструпа, да оно дома осталось. Покупал в том году еще, но тогда учил паскаль. Здоровая такая, толстая книжка. Посоветуй ты, мне тогда альтернативу Павловской, буду признателен =))
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-03-27 00:50:45.053333
|
|
|
iidsp
Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
|
2Kaded мне как раз задали курчач на ассемблере - эмуляция работы домофона… попробуй ее на С++ сделать…. это что касается моделирования.
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-03-27 04:03:38.230000
|
|
|
lito777
Сообщений: 51
Оценки: 0
Присоединился: 2009-01-30 04:52:45.883333
|
Подскажите пожалуйста как правильно скачать картинку с сайта? Я создал сокет и записываю в него GET запрос
strcpy(buf,"GET http://www.google.ru/images/nav_logo8.png\n\n");
write(sock, buf, strlen(buf));
В ответе получаю
HTTP/1.0 200 OK
Content-Type: image/png
Last-Modified: Thu, 25 Mar 2010 09:42:43 GMT
Date: Fri, 26 Mar 2010 23:24:16 GMT
Expires: Sat, 26 Mar 2011 23:24:16 GMT
X-Content-Type-Options: nosniff
Server: sffe
Content-Length: 5656
Cache-Control: public, max-age=31536000
Age: 4883
X-XSS-Protection: 0
�PNG
IHDR��Ka��PLTE���¾�f�)2V����J����~~����Am�Nr�(S�T~���䙙���������������������yj�����d��������孭���Ȧ��mw@j?������������J и т.д.
это все записывается в переменную Единственное что приходит в голову это перейти в строке на позицию перед �PNG и начать записывать с нее в файл image.jpg Кто уже имел с этим дело, покажите пример функции, при помощи которой можно получить изображение из этих данных.
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-03-27 10:57:14.183333
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
quote:
ORIGINAL: lito777 Подскажите пожалуйста как правильно скачать картинку с сайта? Я создал сокет и записываю в него GET запрос
strcpy(buf,"GET http://www.google.ru/images/nav_logo8.png\n\n");
write(sock, buf, strlen(buf));
В ответе получаю
HTTP/1.0 200 OK
Content-Type: image/png
...
Content-Length: 5656
...
X-XSS-Protection: 0
�PNG...
Единственное что приходит в голову это перейти в строке на позицию перед �PNG и начать записывать с нее в файл image.jpg Во-первых почему же image.jpg? image.png надо. Там же написано: Content-Type: image/png. Во-вторых, ты конечно прав, но налицо непонимание http протокола. Если читаем ответ 200 OK, значит надо прочитать заголовки, дождаться пустой строки, и после пустой строки пойдут данные. Здесь, поскольку мы видим заголовок Content-Length, мы знаем длину этих данных в байтах, мы знаем сколько байт надо читать. После того как они будут прочитаны, можно либо отправить ещё один запрос в тот же сокет, либо надо закрыть соединенение. Ну и в-третьих, в http протоколе конец строки обозначается символами `\r\n', а не `\n', как ты делаешь. Сервак оказался достаточно либеральным, и он принял твой перевод строки, но это не значит, что так надо делать.
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-03-27 20:38:26.310000
|
|
|
lito777
Сообщений: 51
Оценки: 0
Присоединился: 2009-01-30 04:52:45.883333
|
quote:
Если читаем ответ 200 OK, значит надо прочитать заголовки, дождаться пустой строки, и после пустой строки пойдут данные. Здесь, поскольку мы видим заголовок Content-Length, мы знаем длину этих данных в байтах, мы знаем сколько байт надо читать. После того как они будут прочитаны, можно либо отправить ещё один запрос в тот же сокет, либо надо закрыть соединенение. Я из сокета читаю таким образом #define BUF_LEN 4096 … while((count=read(sock,buf,BUF_LEN))>0) {…} но таким образом считываются все заголовки и часть картинки сразу. Из сокета можно читать по разному: блоками или по одному символу (примеры я видел только такие). А каким образом прочесть сперва заголовок а только потом данные. Я имею ввиду как отделить данные от заголовка. Покажите пожалуйста пример, а то я неочень понимаю.
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-03-27 22:17:13.050000
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
Например можно так, комбинируя побайтовое и блочное чтение:long size = -1;
while (1) {
int state = 0;
for (i = 0; i < BUF_LEN; i ++) {
if (read (sock, buf + i, 1) < 1) {
fprintf (stderr, "ААА! Фигня случилась! Умру но не сдамся!\n");
exit (1);
}
if (buf[i] == '\r' || buf[i] == '\n') {
state ++; /* отмечаем все \r и \n в строке */
if (state == 2) /* если их накопилось 2, то заканчиваем читать */
break;
}
}
if (i == BUF_LEN) {
fprintf (stderr, "Буфер переполнен!\n");
exit (1);
}
buf[i-2] = '\0'; /* завершаем строку, отрезая последние \r\n*/
if (buf[0] == '\0') /* если получилась пустая строка, значит хедеры прочитали, дальше пойдёт контент*/
break;
fprintf (stderr, "INFO: parsed header `%s'\n", buf);
if (size < 0) /* если размер пока не читали, то: */
sscanf (line, "Content-Length:%ld", &size); /* попробуем прочитать Content-Length, может удастся */
}
/* а вот тут уже читаем контент. Блоками.
* Причём если size < 0, то читаем пока не случится EOF, если size > 0, то читаем size байт */ И насчёт `fprintf (stderr, "ААА! Фигня случилась! Умру но не сдамся!\n");': ты в какой ОС пишешь? Если в *nix, то эта фигня может быть не смертельной, может просто операция чтения была прервана сигналом (в таких ситуациях read возвращает -1, и устанавливает errno в значение EINTR), и надо попробовать читать снова. Бывает ли не смертельной ошибка read в windows – я не знаю. Но подход не самый лучший. Для простой программы покатит, но вообще-то вызывать read из-за каждого байта – достаточно медленно выходит. По-крайней мере на *nix, где каждый read – это гарантированный syscall. Лучше было бы, читать данные по мере их появления, и читая разбирать заголовки, а когда они прочитаны, продолжать читать по мере появления, но скидывать всё в файл. Помочь с этим может fdopen на sock, и последующие fscanf для чтения заголовков, и fread для чтения объёмных данных. Если ты пишешь в венде и при использовании fdopen не используешь флаг b (то есть откроешь примерно так: fdopen (sock, "r+");), то наверное у тебя все \r\n будут заменены на \n. А может и нет – не знаю. Но проще (и кроссплатформеннее) открыть так fdopen (sock, "rb+");, тогда никаких замен не будет. Либо, в качестве варианта, можно делать всё на read, читать блоками, но каждый раз прочитав блок разбираться с его содержимым, это самый сложный путь. В нём есть свои прелести, но не думаю, что тебя они волнуют.
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-03-29 02:53:31.866666
|
|
|
lito777
Сообщений: 51
Оценки: 0
Присоединился: 2009-01-30 04:52:45.883333
|
Выкладываю то что получилось. Может кому-нибудь пригодится… !(обращение ко всем)! В примерах много чего не проверяется и много разных косяков. Поэтому не используйте их "как есть". Если заметите как можно ускорить процесс обработки в примерах пишите в ПМ. quote:
комбинируя побайтовое и блочное чтение
int download_file(int sock, char *file_url) /* file_url -- полный путь до файла. */
{
char *buf;
char s1[10], s2[10];
char file_name[20];
int count, i;
buf = (char*)malloc(BUF_LEN);
if(buf==NULL)
{
fprintf(stderr, "malloc() error\n");
return 1;
}
sprintf(buf, "GET %s\r\n\r\n", file_url);
write(sock, buf, strlen(buf));
long size = -1;
while (1)
{
int state = 0;
for (i = 0; i < BUF_LEN; i ++)
{
if (read (sock, buf + i, 1) < 1)
{
if(errno != EINTR)
{
fprintf (stderr, "read() error.\n");
return 1;
}
}
if (buf[i] == '\r' || buf[i] == '\n')
{
state ++; /* отмечаем все \r и \n в строке */
if (state == 2) /* если их накопилось 2, то заканчиваем читать */
break;
}
}
if (i == BUF_LEN)
{
fprintf (stderr, "Буфер переполнен!\n");
return 1;
}
buf[i-1] = '\0'; /* завершаем строку, отрезая последние \r\n*/
if (buf[0] == '\0') /* если получилась пустая строка, значит хедеры прочитали, дальше пойдёт контент*/
break;
fprintf (stderr, "INFO: parsed header `%s'\n", buf);
if (size < 0) /* если размер пока не читали, то: */
sscanf (buf, "Content-Length: %ld", &size); /* попробуем прочитать Content-Length, может удастся */
sscanf (buf, "Content-Type: %[a-z]/%[a-z]", s1, s2);
}
sprintf(file_name, "%s.%s",s1,s2);
int out_file = open(file_name, O_RDWR | O_CREAT | O_APPEND, 0640);
if(out_file<0)
{
fprintf (stderr, "Can't open file\n");
return 1;
}
while((count = read(sock,buf,size))>0) write(out_file,buf,count);
free(buf);
close(out_file);
return 0;
}
quote:
…Лучше было бы, читать данные по мере их появления, и читая разбирать заголовки, а когда они прочитаны, продолжать читать по мере появления, но скидывать всё в файл…
int download_file_2(int sock, char *file_url)
{
char *buf;
char s1[10], s2[10];
char file_name[20];
buf = (char*)malloc(BUF_LEN+1500);
if(buf==NULL)
{
fprintf(stderr, "malloc() error\n");
return 1;
}
sprintf(buf, "GET %s\r\n\r\n", file_url);
write(sock, buf, strlen(buf));
FILE *file = fdopen(sock,"r+b");
long size = -1;
while(1)
{
//fscanf(file, "%s", buf);
fgets(buf, 100, file);
//fprintf(stdout, "INFO: parsed header `%s'\n", buf);
if (buf[0] == '\0' || buf[0] == '\r') break;
if (size < 0) sscanf (buf, "Content-Length: %ld\r", &size);
sscanf (buf, "Content-Type: %[a-z]/%[a-z]", s1, s2);
}
fprintf (stderr, "FILE=%s.%s\nSIZE=%ld\n",s1,s2,size);
sprintf(file_name, "%s.%s",s1,s2);
int out_file = open(file_name, O_RDWR | O_CREAT | O_APPEND, 0640);
if(out_file<0)
{
fprintf (stderr, "Can't open file\n");
return 1;
}
int count = fread (buf, 1, size, file);
write(out_file,buf,count);
fprintf (stderr, "%s\n UU=%i\n",buf, count);
free(buf);
close(out_file);
return 0;
}
quote:
ORIGINAL: rgo Либо, в качестве варианта, можно делать всё на read, читать блоками, но каждый раз прочитав блок разбираться с его содержимым, это самый сложный путь. В нём есть свои прелести, но не думаю, что тебя они волнуют. О каких прелестях вы говорите? Очень интересно. /* пишу в *nix */
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-03-29 20:36:28.606666
|
|
|
sanday
Сообщений: 41
Оценки: 0
Присоединился: 2010-02-06 12:52:26.896666
|
Задача: Используйте одномерный массив для решения следующей задачи. Компаний платит своим продавцам на комиссионной основе. Продавцы получают 200 долларов в неделю плюс 9 процентов от валовой продажи за эту неделю. Например, продавец, валовая продажа которого за неделю составила 5000 долларов, получает 200 долларов плюс 9 процентов от 5000 долларов, или всего 650 долларов. Напишите программу (используя массив счетчиков), которая определяет, сколько продавцов получили заработную плату в каждом из следующих диапазонов (примем допущение, что зарплата каждого продавца округляется до целого значения): 1. $200-$299 2. $300-$399 3. $400-$499 4. $500-$599 5. $600-3699 6. $700-$799 7. $800-3899 8. $900-$999 9. $1000 и более Код: //Сколько продавцов, сколько получают
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int shop_assistant = 50,
procent = 9,
salary = 200,
threeH = 0,
fourH = 0,
fiveH = 0,
sixeH = 0,
sevenH = 0,
eightH = 0,
nineH = 0,
tenH = 0,
elevenH = 0,
pay_assistant[shop_assistant];
for (int x = 0; x < shop_assistant; x++) {
int variable = rand();
int gross_output = rand() % variable;
pay_assistant[x] = salary + (gross_output * procent) / 100;
if (pay_assistant[x] < 300) //Все что ниже не нравится
++threeH;
else if (pay_assistant[x] < 400)
++fourH;
else if (pay_assistant[x] < 500)
++fiveH;
else if (pay_assistant[x] < 600)
++sixeH;
else if (pay_assistant[x] < 700)
++sevenH;
else if(pay_assistant[x] < 800)
++eightH;
else if (pay_assistant[x] < 900)
++nineH;
else if (pay_assistant[x] < 1000)
++tenH;
else
++elevenH;
}
cout << "Диапазон" << setw(35) << "Количество продавцов" << endl
<< "$200 - $299" << setw(20) << threeH << endl
<< "$300 - $399" << setw(20) << fourH << endl
<< "$400 - $499" << setw(20) << fiveH << endl
<< "$500 - $599" << setw(20) << sixeH << endl
<< "$600 - $699" << setw(20) << sevenH << endl
<< "$700 - $799" << setw(20) << eightH << endl
<< "$800 - $899" << setw(20) << nineH << endl
<< "$900 - $999" << setw(20) << tenH << endl
<< "$1000 и боле" << setw(20) << elevenH << endl;
system("pause");
return 0;
}
Просьба подсказать как оптимизировать код, особенно в моменте выбора.
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-03-29 22:59:39.246666
|
|
|
yurket
Сообщений: 69
Оценки: 0
Присоединился: 2009-05-04 23:47:54.993333
|
порпобуй сделать что-то в этом роде… #include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#define MAX_ASTS 20 // кол-во продавцов
int main()
{
setlocale(LC_ALL, "");
int i, k;
int assist[MAX_ASTS];
int salary[10]; // массив счетчиков. salary[0]: 0-100$, salary[1]: 100-200$, ...
// ... salary[8]: 900-1000$, salary[10] > 1000$
for (i = 0; i < 10; i++)
salary[i] = 0;
for (i = 0; i < MAX_ASTS; i++)
{
assist[i] = rand()/28 + 100; // подберешь точные значения
k = assist[i] / 100; // получаешь кол-во сотен
if (k >= 10) /* не хорошо, если будем инкрементировать
к примеру salary[14] =) */
{
salary[9]++;
continue;
}
salary[k-1]++; // инкрементируешь соответствующие элементы массива счетчиков
}
for (i = 1; i < 10; i++)
printf("\nбольше %d00$ получает %d человек%c", i+1, salary[i], (salary[i]<2||salary[i]>4)?' ':'а');
fflush(stdin);
getchar();
return 0;
} думаю, заменить printf на cout не составит труда ;)
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-04-02 07:45:20.356666
|
|
|
KillingKiller
Сообщений: 8
Оценки: 0
Присоединился: 2009-11-25 08:47:08.800000
|
есть задачка. Надо написать программу которая прочитает текстовый файл, потом просортирует прочтённые слова в алфавитном порядке, а потом выдаст на экран все слова которые встречаются в этом файле, но не показывает повторяющиеся слова
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-04-02 11:30:58.946666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Ну пиши )
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-04-03 19:27:26.650000
|
|
|
Stil Free 2
Сообщений: 183
Оценки: 0
Присоединился: 2009-03-26 17:17:38.296666
|
quote:
ORIGINAL: KillingKiller есть задачка. Надо написать программу которая прочитает текстовый файл, потом просортирует прочтённые слова в алфавитном порядке, а потом выдаст на экран все слова которые встречаются в этом файле, но не показывает повторяющиеся слова Дело было вечером делать было нечего…Первый и последний раз[sm=bt.gif] В общем чтобы сильно халявы не было сделал маленько наоборот прочитаешь комменты исправишь лабу там легко.
// Task 5 release 3.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include "string.h"
#include "windows.h"
int _tmain(int argc, _TCHAR* argv[])
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
FILE *stream;
bool not=false;
char line[512]={NULL},*words[255]={NULL},*tmp[255]={NULL},buf[1][255]={NULL};
int n = 0,i = 0,numWords = 0,j=0,min=100,k=0,fl = 0,m = 0,b=0,key = 0,wasModified= 0;
if( stream=fopen("Текст.txt", "r" ) )
{
while (feof(stream)==0)
{
if( fgets( line, 512, stream ) != 0)
{
words[numWords] = strtok( line," .,):;(!?");
while( words[numWords] != NULL )
{
// Пока есть фрагменты в строке
numWords++;
// Получить следующий фрагмент:
words[numWords] = strtok( NULL, " .,):;(!?" );
}
}
}
}
else printf("\nФайл 'Текст.txt' отсутствует!\n");
fclose( stream );
do
{
printf("\n\n Меню \n");
printf("\n1.Вывести текст.");
printf("\n2.Вывести повторяющиеся слова");
printf("\n3.Выход.");
printf("\n Выбираем: ");
scanf("%d",&key);
switch(key)
{
case 1:
for (i=0;i<numWords;i++)
{
printf("%s ",words[i]);
}
break;
case 2:
tmp[0]=words[0];
//слова встречающиеся более одного раза
for (i=0;i<numWords;i++)
{
for (j=0;j<numWords;j++)
{
if (i==j)
continue;
if (strcmp(words[i],words[j])==0)
{
not=false;
for(fl=0;fl<b;fl++)
{
if (strcmp(tmp[fl],words[i])==0)
{
not=true;
break;
}
}
if (!not)
{
tmp[b++]=words[i];
}
}
}
k=0;
}
printf("\nСлова повторяющиюся больше одного раза в тексте выведены по алфавиту: \n");
do
{
wasModified = 0; //Сбросить флаг перестановок
for (i = 0; i < b - 1; i = i + 1)
{
if (tmp[i][0] > tmp[i+1][0])
{
//Перестановка элементов
strcpy(buf[1],tmp[i]);
strcpy(tmp[i],tmp[i+1]);
strcpy(tmp[i+1],buf[1]);
wasModified = 1; //Перестановка была
}
}
} while (wasModified != 0);
for (i=0;i<b;i++)
{
puts(tmp[i]);
}
break;
}
}while(key!=3);
return 0;
}
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-04-03 22:17:20.376666
|
|
|
sanday
Сообщений: 41
Оценки: 0
Присоединился: 2010-02-06 12:52:26.896666
|
Задача (Траектории черепахи) Язык Лого, особенно популярный среди пользователей персональных компьютеров, сделал известной идею траекторий черепахи. редставьте себе механическую черепаху, которая ползает по комнате под управлением программы на C++. Черепаха несет пишущее перо, которое может находиться в одной из двух позиций — нижней или верхней. Если перо в нижней позиции, черепаха вычерчивает траекторию движения, если в верхней, то черепаха передвигается свободно и ничего не вычерчивает. В этой задаче вы будете моделировать действия черепахи и создавать компьютеризованный эскиз пути. Используйте массив floor размером 20 на 20 с нулевыми начальными условиями. Считывайте команды из содержащего их массива. Все время отмечайте текущую позицию, черепахи и положение пера — нижнее или верхнее. Предполагайте, что черепаха всегда стартует из позиции О, О на полу с верхним положением пера. Ваша программа должна подавать команды черепахе в соответствии со следующими обозначениями: Команда 1 - перо вверх 2 - перо вниз 3 - поворот направо 4 - поворот налево 5, 10 - передвижение вперед на 10 шагов 6 - печать массива 20 на 20 9 - конец данных (сигнальная метка) Предположим, что черепаха находится где-то возле центра комнаты. Следующая «программа управления черепахой» начертила бы квадрат 12 на 12 и оставила бы перо в верхней позиции: 2 5,12 ' 3 5,12 3 5,12 3 5,12 1 6 9 Если черепаха передвигается с пером, находящимся в нижней позиции, устанавливайте соответствующие элементы массива floor равными 1. При подаче команды 6 (печать) отображайте звездочкой или каким-либо другим символом все значения 1 в массиве, где бы они ни были. Все нули, где бы они ни были, отобразите пробелами. Напишите программу, реализующую рассмотренные возможности отображения траектории передвижения черепахи. Добавьте другие команды для повышения мощности вашего языка управления траекторией черепахи. Вопрос: как отобразить поворот направо или налево, в коде?
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-04-04 10:05:44.406666
|
|
|
Parano1d
Сообщений: 423
Оценки: 0
Присоединился: 2008-05-21 13:40:17.093333
|
ну запоминай, куда в данный момент смотрит, а потом изменяй это значение в зависимости от нужного поворота… мда…
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-04-07 15:39:44.903333
|
|
|
kazrulit
Сообщений: 79
Оценки: 0
Присоединился: 2009-07-22 14:23:31.770000
|
Создал кнопку на билдере и текст и начинаю писать void __fastcall TForm1::Button1Click(TObject *Sender) { if (Edit1->Name="12345") ShowMessage("correct"); } выходит ошибка quote:
[C++ Error] Unit1.cpp(20): E2492 Properties may only be assigned using a simple statement, e.g. "prop = value;" [C++ Error] Unit1.cpp(20): E2096 Illegal structure operation
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-04-07 15:41:15.253333
|
|
|
kazrulit
Сообщений: 79
Оценки: 0
Присоединился: 2009-07-22 14:23:31.770000
|
P.S меняю Name на Text такая же фигня
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-04-07 16:05:55.886666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Печально, очередной формошлёп. if (Edit1->Name == "12345") // Ты хочешь сделать сравнение, а не присваивание P.S. на будущее, когда что-то будешь сравнивать, пиши так: if ( 42 == a ) , а не if ( a == 42 ) - это поможет избежать глупых ошибок.
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-04-07 20:46:54.720000
|
|
|
iidsp
Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
|
я запутался [sm=14.gif] в одном месте пишут так infile.open ("test.txt", ifstream::in); в другом infile.open ("test.txt", ios_base::in); в третьем ios::in запутался я в этих режимах открытия файла и то, к какому классу они принадлежат
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-04-07 21:43:10.343333
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
cppreference / msdn / google в помощь? ;)
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-04-07 22:57:26.250000
|
|
|
iidsp
Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
|
читаю следующее: "Классы в-в определены в трех отдельных заголовках…"- разве в заголовках определяют классы? их же там объявляют, а реализацию пишут в .cpp файлах, что и называется определением?!
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-04-08 12:00:17.270000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Читай про шаблоны в C++. Потом Страутструпа :). Немного "на пальцах": Шаблоны - это своего рода макроподстановки. Если ты объявишь пару векторов, например std::vector<int> a; std::vector<double> a;, то при компиляции будет сгенерировано 2 набора методов. Один для работы вектора с типом int, а другой - с типом double. Т.е. сгенерировать методы станет возможным лишь при объявлении конкретного типа. Представь, что у тебя есть шаблонный класс и его реализация лежит в .cpp файле. Например: myvector.h, myvector.cpp, main.cpp. Предположим, что main.cpp будет компилироваться после myvector.cpp. Тогда, если ты объявишь в main.cpp какой-нить свой тип, например typedef int** ppint; - то для него потребуется отдельная компиляция вектора myvector<ppint>;, но при компиляции main.cpp компилятору будет виден только .h файл, где нет никакой реализации.
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-04-08 13:49:06.406666
|
|
|
iidsp
Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
|
quote:
Читай про шаблоны в C++. Потом Страутструпа :). Страутструп меня не впечатлил…
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-04-08 20:24:45.390000
|
|
|
sanday
Сообщений: 41
Оценки: 0
Присоединился: 2010-02-06 12:52:26.896666
|
quote:
Задача (Траектории черепахи) Язык Лого, особенно популярный среди пользователей персональных компьютеров, сделал известной идею траекторий черепахи. редставьте себе механическую черепаху, которая ползает по комнате под управлением программы на C++. Черепаха несет пишущее перо, которое может находиться в одной из двух позиций — нижней или верхней. Если перо в нижней позиции, черепаха вычерчивает траекторию движения, если в верхней, то черепаха передвигается свободно и ничего не вычерчивает. В этой задаче вы будете моделировать действия черепахи и создавать компьютеризованный эскиз пути. Используйте массив floor размером 20 на 20 с нулевыми начальными условиями. Считывайте команды из содержащего их массива. Все время отмечайте текущую позицию, черепахи и положение пера — нижнее или верхнее. Предполагайте, что черепаха всегда стартует из позиции О, О на полу с верхним положением пера. Ваша программа должна подавать команды черепахе в соответствии со следующими обозначениями: Команда 1 - перо вверх 2 - перо вниз 3 - поворот направо 4 - поворот налево 5, 10 - передвижение вперед на 10 шагов 6 - печать массива 20 на 20 9 - конец данных (сигнальная метка) Если черепаха передвигается с пером, находящимся в нижней позиции, устанавливайте соответствующие элементы массива floor равными 1. При подаче команды 6 (печать) отображайте звездочкой или каким-либо другим символом все значения 1 в массиве, где бы они ни были. Все нули, где бы они ни были, отобразите пробелами. Напишите программу, реализующую рассмотренные возможности отображения траектории передвижения черепахи. Добавьте другие команды для повышения мощности вашего языка управления траекторией черепахи. Код //Траектория черепахи
#include <iostream>
using namespace std;
int main()
{
int move = 0, order = 0,
previousCol = 0,
currentCol = 0,
previousRow = 0, // предыдущее значение черепахи по стороке
currentRow = 0, // текущее значение черепахи по строке
stylus = 0, wayCol, wayRow, way,
floor[20][20] = {0};
while (order != 9) {
cout << "Введите команду: ";
cin >> order;
cout << endl;
switch(order){
case 1:
stylus = 0;
break;
case 2:
stylus = 1;
break;
case 3:
if (currentRow == previousRow){
wayCol = currentCol;
if(currentCol > previousCol)
way = -1;
else
way = 1;
}
else {
wayRow = currentRow;
if (currentRow > previousRow)
way = 1;
else
way = -1;
}
break;
case 4:
if (currentRow == previousRow){
wayCol = currentCol;
if(currentCol > previousCol)
way = 1;
else
way = -1;
}
else {
wayRow = currentRow;
if (currentRow > previousRow)
way = -1;
else
way = 1;
}
break;
case 5:
cout << " , ";
cin >> move;
if(wayCol == currentCol){
currentRow += way * move;
if (currentRow < 0 || currentRow > 20){
cout << "Движение не возможно. "
<< "Выход за пределы массива. "
<< "Смените направление или шаг движения.\n";
break;
}
previousRow = currentRow - way * move;
}
else
{ currentCol += way * move;
if(currentCol < 0 || currentCol > 20){
cout << "Движение не возможно. "
<< "Выход за пределы массива. "
<< "Смените направление или шаг движения.\n";
break;
}
previousCol = currentCol - way * move;
}
for(int i = previousRow; i <= currentRow; i++)
for(int j = previousCol; j <= currentCol; j++) {
if (stylus == 0)
floor[i][j] = 0;
else
floor[i][j] = 1;
}
break;
case 6:
for (int i = 0; i < 20; i++){
for (int j = 0; j < 20; j++)
if (floor[i][j] == 0)
cout << ' ';
else
cout << '*';
cout << endl;
}
break;
default:
cout << "Вы ввели неверную команду\n"
<< "попробуйте снова" << endl;
break;
case 9:
break;
}
}
cout << '\a' << endl;
system("pause");
return 0;
}
Не понимаю, что не так?
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-04-13 18:56:47.630000
|
|
|
messenage
Сообщений: 21
Оценки: 0
Присоединился: 2010-03-03 21:23:49.290000
|
Как получить hWnd окна в диалоговой процедуре?? на win Api. hWnd - нельзя глобалить =(
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-04-13 21:19:59.870000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
quote:
ORIGINAL: messenage Как получить hWnd окна в диалоговой процедуре?? на win Api. hWnd - нельзя глобалить =( http://msdn.microsoft.com/en-us/library/ms645469(v=VS.85).aspx - первый параметр
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-04-13 23:57:16.113333
|
|
|
iidsp
Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
|
может кто видел где-либо сравнительные тесты производительности контейнеров в С++ на основе какой-то задачи, а то изучаю их сейчас и понимаю, что мне пока сложно выделить какой-то для своих задач… и еще, если есть возможность, напишите кратко для чего каждый контейнер может применяться, только на основе каких-то реальных программ!
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-04-14 01:04:55.683333
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: iidsp может кто видел где-либо сравнительные тесты производительности контейнеров в С++ сравнение чего с чем? quote:
ORIGINAL: iidsp и еще, если есть возможность, напишите кратко для чего каждый контейнер может применяться, только на основе каких-то реальных программ! http://www.williamspublishing.com/Books/sci_DataStructs.html асимптотики для операций можно найти в стандарте (нестрогие) и здесь: http://www.sgi.com/tech/stl/
|
|
|
|
|