Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389

Открыть новую тему     Написать ответ в эту тему

de_lirium

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Тема создана для накопления реализаций типовых задач на С/С++.
Прежде чем публиковать своё условие задачи, убедитесь, что её решение (или решение очень похожей задачи) в теме и полезных ссылках отсутствует (например воспользуйтесь ссылкой Версия для печати вверху справа страницы и поищите в ней).
Постарайтесь как можно полнее сформулировать постановку задачи (чтобы тому, кто решит вам помочь, не приходилось тратить своё время ещё и на выпытывание у вас деталей условия; если вам не понятно, как это сделать - постарайтесь представить, что эта программа у вас уже есть, и "поработать" с ней - вот все детали, которые при этом придут в голову, с большой вероятностью должны быть в условии задачи).
Если вы уже пытались сделать эту задачу, но у вас не получилось и вы хотите довести дело до конца - обязательно выложите результат своей попытки, предварительно убедившись, что ваш код компилируется.

Вопросы по технологиям лучше задавать тут.

Прежде чем просить помощи в задании...
Если позарез надо и вы даже готовы заплатить

Если вам вдруг не отвечают или ответ вас не устраивает, и вообще полезно прочитать всем спрашивающим.

Полезные ссылки:
 
C++: в том числе и решения задач (eng)
задачи на C
 
Проверить свою задачку можно:
Онлайн-компилятором Visual C++
godbolt
Wandbox
Одним из онлайн-компиляторов на ideone.com

Всего записей: 28 | Зарегистр. 23-07-2004 | Отправлено: 02:14 20-12-2004 | Исправлено: Daniyar91, 19:25 27-09-2017
ElKairo

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abs62
Если я Вас правильно понял,Вы хотите сказать, что такой код при компилировании не выдаст "multiple declaration"?

Код:
#include <stdio.h>
void main()
{int a;
for (int i=0;i<2;i++) a+=i;
for (int i=0;i<2;i++) a+=i;
}
 

/--------------------------
Добавил вот такую проверку после цикла:

Код:
 if (!Max) for(i=PrevMax+1;i<n_st;i++) if(A[i].mark>A[PrevMax].mark)PrevMax=i;

Все равно 2 цикла, но второй меньше и исполняется только когда Max=0.

Всего записей: 4 | Зарегистр. 15-01-2011 | Отправлено: 19:55 15-01-2011
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ElKairo

Цитата:
Если я Вас правильно понял,Вы хотите сказать, что такой код при компилировании не выдаст "multiple declaration"?  

Именно так. Если, конечно, компилятор следует Стандарту.

Цитата:
Все равно 2 цикла

Как вариант:

Код:
int Max1,Max2;
if (A[0].mark>A[1].mark) {
  Max1=0; Max2=1;
} else {
  Max1=1; Max2=0;
}
for(int i=2;i<n_st;i++) {
  if(A[i].mark>A[Max1].mark) {
    Max2 = Max1;  
    Max1 = i;  
  } else {
    if(A[i].mark>A[Max2].mark) Max2 = i;
  }
}


----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6077 | Зарегистр. 22-10-2005 | Отправлено: 20:21 15-01-2011
Alexand



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abs62
Точно, не досмотрел, стыдно
 
Подправил:

Код:
 
for ( int i=1,Max=0,PrevMax=0;i<n_st;i++ )
  if ( A[i].mark>A[Max].mark )
  {
    PrevMax = Max;
    Max=i;
  }
  else if ( A[i].mark > A[PrevMax].mark  )
    PrevMax = i;
 

 
Добавлено:
Abs62
Не совсем пойму смысла этой проверки:

Код:
 
if (A[0].mark>A[1].mark) {
  Max1=0; Max2=1;
} else {
  Max1=1; Max2=0;
}  
 

Судя по начальному коду автора, элемент A[0] у него пустой, и надо полагать что mark==0, значит  

Код:
A[0].mark>A[1].mark

всегда false, если только A[1].mark не отрицательное значение.

Всего записей: 105 | Зарегистр. 12-03-2003 | Отправлено: 20:21 15-01-2011
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alexand
Нет, почему пустой? Классический поиск максимума массива и начинается со второго элемента, первый используется как инициализатор.

Код:
max = mass[0];
for(i=1;i<size;i++) if(mass[i]>max) max=mass[i];

А здесь по сути используется тот же алгоритм.

----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6077 | Зарегистр. 22-10-2005 | Отправлено: 20:42 15-01-2011
ElKairo

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abs62
Перелистал Шилдта:
"С99 расширяет возможности цикла for... переменная, обьявленная внутри цикла for, локализируется внутри этого цикла."  
Я в среде Borland C++ 3.1 пишу просто. Потому у меня это и "multiple declaration". Прошу прощения, что спорил)
 
Добавлено:
Alexand
Все равно, если первый (нулевой) елемент максимальный, то та же проблема.

Цитата:
for ( int i=1,Max=0,PrevMax=0;i<n_st;i++ )  
  if ( A[i].mark>A[Max].mark )  
  {  
    PrevMax = Max;  
    Max=i;  
  }  
  else if ( A[i].mark > A[PrevMax].mark  )  
    PrevMax = i;  

PrevMax=1
 
Спасибо еще раз.

Всего записей: 4 | Зарегистр. 15-01-2011 | Отправлено: 21:26 15-01-2011 | Исправлено: ElKairo, 22:35 15-01-2011
Qraizer



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Abs62
Цитата:
Стандарт C++, п. 6.7.  
Не тот пункт привёл. Формально переменные цикла определяются до блока for, ибо располагаются в его заголовке, а не в его {} (которые к тому же могут и отсутствовать, если там всего один оператор). Конкретно для for правила указаны в 6.5.3

----------
Одни с годами умнеют, другие становятся старше.

Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 08:14 16-01-2011
konica05

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
1. Разработать класс "троичный вектор" в соответствии со следующим заданием:
Состояние класса -
Троичная функция может принимать значения 0, 1 и Х (неопределенное значение). Аргументами этой функции являются троичные вектора, состоящие из элементов, принимающих значения 0, 1 и Х. Троичный вектор определяется размером (рабочее количество элементов вектора) и массивом значений типа char. Память под вектор выделяется статически, во время компиляции, и задается массивом фиксированного размера.
Протокол класса -
Определяет возможности создания и инициализации экземпляров класса и правила использования их (методы класса).
Предусмотреть следующие возможности:
•    пустой конструктор для инициализации экземпляров и массивов экземпляров класса по умолчанию;
•    создание экземпляров класса с инициализацией заданным числом неопределенных значений;
•    создание экземпляров класса с инициализацией значениями элементов вектора как строки символов;
•    ввод экземпляров класса из входного потока и вывод их значений в выходной поток (с помощью перегруженных операторов >> и << );
•    выполнение поразрядной логической операции ИЛИ двух векторов (с помощью перегруженного оператора | );
•    выполнение поразрядной логической операции И двух векторов (с помощью перегруженного оператора &= );
•    выполнение сравнения двух векторов (с помощью перегруженного оператора ==);
•    выполнение поразрядной логической операции НЕ (инвертирование кода; с помощью перегруженного оператора ~ );
•    анализ определенности вектора – отсутствие неопределенных значений (истина или ложь).
2. Проектирование класса рекомендуется начать с представления состояния класса, учитывающего заданные операции, а затем реализации конструкторов и перегруженного оператора вывода. Для отладки и исчерпывающего тестирования других методов разработанного класса реализовать диалоговую программу, которая позволяет вводить параметры, отлаживаемых методов.  
3. Повторить разработку класса при условии, что память под вектор необходимой длины выделяется динамически, во время выполнения программы (с помощью оператора new; память задается указателем на char в состоянии класса).
Дополнить интерфейс класса следующими возможностями:
•    создание экземпляра класса с его инициализацией другим экземпляром класса (копирующий конструктор);
•    переопределение экземпляра класса (с помощью перегруженного оператора присваивания).
 4. Написать прикладную программу, использующую разработанный класс.
Примечание: пункты задания, отмеченные (*), являются дополнительными;
    при выполнении операций с векторами разной длины дополнять их значением Х;
    при выполнении операции И: 0 & Х = 0, 1 & Х = Х;
    при выполнении операции ИЛИ: 0 | Х = Х, 1 | Х = 1.
   
 
Это все одна программа))

Всего записей: 1 | Зарегистр. 17-01-2011 | Отправлено: 17:55 17-01-2011
KChernov



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
konica05
Это вы с подобной задачей или ошиблись темой (и вам надо сюда), или уже начинайте сами делать и задавайте конкретные вопросы по моментам, которые не получаются.

Всего записей: 2471 | Зарегистр. 20-04-2004 | Отправлено: 13:47 18-01-2011 | Исправлено: KChernov, 14:09 18-01-2011
Zlaya_Rediska



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте, уважаемые форумчане! Помогите пожалуйста составить программу на языке C++. Единственное условие, программа должна работать на компиляторе Borland C++ версии 3.1. Очень надеюсь на Вашу помощь...
 
Условие задачи:  
"Написать программу, для обработки информации о животных,  
 представленных на выставку кошек. Информация включает в себя:

 Кличка.
 Порода.
 Возраст.
 Программа должна позволять пользователю:
 Считывать данные с клавиатуры и заносить их в файл.
 Считывать данные из файла и выводить на экран список животных,  
 указанной породы и возраста.
"
 
Заранее благодарю Вас за проделанную помощь!!!

Всего записей: 16 | Зарегистр. 16-01-2011 | Отправлено: 01:25 19-01-2011 | Исправлено: Zlaya_Rediska, 01:29 19-01-2011
asi81



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть кусок кода
 
#include "stdafx.h"
#include <windows.h>
 
class A {
public:
    int a;
};
 
A m () {
    A n;
    n.a = 6;
    return n;
};
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    A b;
    b.a = 5;
    m() = b;
    return 0;
}
 
Задача  - объяснить мне, почему он компилируется без ошибок. Ведь, как я понимаю, функция m возвращает r-value!! Если переделать m() на работу с int, то все пудет верно, компилятор выдаст ошибку, но такую работу с классом, как написано у меня, он спокойно проглатывает.

Всего записей: 86 | Зарегистр. 08-06-2009 | Отправлено: 14:01 21-01-2011
Qraizer



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Это не тот assignment operator, который описывается в 5.17 Стандарта. Раздел 12.8 Copying class objects, 10-й пункт.
Цитата:
If the class definition does not explicitly declare a copy assignment operator, one is declared implicitly. The implicitly-declared copy assignment operator for a class X will have the form
Код:
X& X::operator=(const X&)
...
Т.о. к возвращённому объекту может быть применён неявно сгенерированный компилятором оператор присваивания. Неважно, что аргумент слева r-value, для него всё равно есть некий this, который может быть передан в этот оператор.

----------
Одни с годами умнеют, другие становятся старше.

Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 09:31 22-01-2011 | Исправлено: Qraizer, 09:38 22-01-2011
Aleksandr N

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Del

Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 18:27 24-01-2011 | Исправлено: Aleksandr N, 18:06 26-01-2011
asi81



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Qraizer
 
Похоже Вы дали верное направление для размышления. Ведь для классов нет чистого понятия присваивания, все операторы могут быть описаны какой угодно функцией и выполняться как угодно. Поэтому для них не работают те ограничения, что работают при использовании операторов с простыми типами.

Всего записей: 86 | Зарегистр. 08-06-2009 | Отправлено: 18:57 24-01-2011
Qraizer



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
asi81, именно.
Спрашивай ещё. Очень редко бывают стоящие вопросы.

Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 00:56 25-01-2011 | Исправлено: Qraizer, 00:56 25-01-2011
c0ep

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Кто может написать процедуру вывода стека задом наперёд (со дна до вершины) используя только один указатель на вершину стека? Вспомогательные указатели не допускаются. Стек реализован в виде односвязного списка.
P.S. Целую ночь голову ломал над этой задачей. В конце концов получилось. Просто хочу посмотреть как с этой задачей другие справятся.
 
Добавлено:
И ещё. Никаких дополнительных структур данных и даже переменных не должно быть. У меня и без них получилось.

Всего записей: 6 | Зарегистр. 29-01-2011 | Отправлено: 16:48 07-02-2011
KChernov



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
c0ep

Цитата:
Кто может написать процедуру вывода стека задом наперёд (со дна до вершины) используя только один указатель на вершину стека? Вспомогательные указатели не допускаются. Стек реализован в виде односвязного списка.  

Если надо обходить односвязный список - уже на это нужен указатель - указатель на текущий рассматриваемые элемент.
Но, поскольку список односвязный, вернуться в начало нельзя, а значит нужен ещё 1 указатель, который всегда указывает на начало списка.
Ну и ещё 2 целых переменных: для обхода списка и запоминания последнего номера уровня.
С меньшими ресурсами обход сделать нереально.
 

Цитата:
И ещё. Никаких дополнительных структур данных и даже переменных не должно быть. У меня и без них получилось.

Если вы про рекурсию - да, так можно.
Но насчёт неиспользования допструктур - это иллюзия - стэк то тут как раз по полной используется (нужно места как минимум на n-1 указатель (где n - длина списка) + расходы на сами n-1 вызовов, а может ведь истэк кончиться).
С академической точки зрения такой вариант может представлять интерес, но всё равно надо отдавать себе отчёт, какие ресурсы за этим стоят.

Всего записей: 2471 | Зарегистр. 20-04-2004 | Отправлено: 20:45 07-02-2011
c0ep

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
KChernov
Нет, данную задачу можно решить используя один глобальный (так сказать не хранимый в сегменте стека) указатель. Указатель же на текущий элемент создается в сегменте стека благодаря рекурсии, как вы верно догадались. Глубина рекурсии будет эквивалентна количеству узлов в списке, и в каждом новом вызове функции в сегменте стека будет содержаться указатель на следующий элемент благодаря его указанию в качестве параметра ф-ии. Что-же касается переменных, то для операции простого вывода на экран дисплея содержимого узлов в обратном порядке, они не нужны. Да рекурсия плохая вещь но если хочется написать ф-ию наиболее кратко, несмотря на память и скорость, то рекурсия это круто. Код чуть попозже выложу.

Всего записей: 6 | Зарегистр. 29-01-2011 | Отправлено: 23:12 07-02-2011
Di_Pro

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
помогите пожалуйста
 
Написать программу вычисления стоимости покупки, из нескольких тетрадей и такого же количества обложек к ним. Ниже представлен рекомендуемый вид экрана во время работы программы(данные, введённые пользователем,выделены полужирным шрифтом).  
Вчисление стоимости покупки.  
Введите исходные данные:  
Цена тетради(руб) -> 220  
Цена обложки (руб) -> 120  
Количество комплектов (шт) ->7  
Стоимость покупки : 2380.00 руб!

Всего записей: 1 | Зарегистр. 15-02-2011 | Отправлено: 02:26 15-02-2011
KChernov



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Di_Pro
Ну и какие проблемы сделать форму, на которой 3 вводимых числовых поля (2 цены и число комплектов) и 1 выводимое (стоимость) и где на вводимых полях стоит вычисление выводимого поля по изменению?
При изучении сред визуальной разработки ГУИ обычно первым примером и идёт подобное.
Ну и в общем-то это уже офтопик, так как это в первую очередь програмирование в этой самой среде, а уже во вторую очередь С++ (формула вычисления стоимости, которая практически идентична во всех языках).

Всего записей: 2471 | Зарегистр. 20-04-2004 | Отправлено: 10:58 15-02-2011 | Исправлено: KChernov, 10:59 15-02-2011
student2009

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
подскажите пожалуйста, как вводить разреженную матрицу, чтобы она сразу упаковывалась?

Всего записей: 1 | Зарегистр. 27-02-2011 | Отправлено: 13:40 27-02-2011
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru