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

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

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

 Версия для печати • ПодписатьсяДобавить в закладки

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

g2fg1

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
помогите написать программу на с++ пожалуйста
Написать программу с рекурсивной функцией, которая расставляет между заданными шестью цифрами знаки операций: сложения, вычитания, умножения и деления без остатка так, чтобы после проведения операции получилось заданное число.
 
Добавлено:
исправить ошибку
 
Дана монотонная последовательность, в которой каждое натуральное число k встречается ровно k раз: 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, ...
По данному натуральному n выведите первые n членов этой последовательности. Попробуйте обойтись только одним циклом for.
 
решение
#include "stdafx.h"
#include <iostream>
#include <algorithm>
#include <iterator>
#include <math.h>
 
int number () {static int i = 1;  
return (sqrt(double(8*i++-7))+1)/2;};
int _tmain(int argc, _TCHAR* argv[])
{
std::cout«"n = ";
int n;
std::cin»n;
std::generate_n(std::ostream_iterator<int>(std::cout, " "), n, number);
std::cout«std::endl;
std::cin»n;
system("pause")
}

Всего записей: 2 | Зарегистр. 04-12-2012 | Отправлено: 22:00 04-12-2012
SevereK20

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
g2fg1
лучше напишите в уже существующую тему по с++ - http://forum.ru-board.com/topic.cgi?forum=33&topic=3174&start=4460#lt

Всего записей: 7699 | Зарегистр. 07-05-2010 | Отправлено: 00:25 05-12-2012
cp58

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

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

Вставить костыль, там где он не нужен. Использовать размещение с повторением для четырех операций, требуется 5 элементов, то есть количество размещений будет равно 4^5 или 1024 элемента. Затем преобразовать к обратной польской записи и произвести вычисление, рекурсия тут как костыль.

Цитата:
Дана монотонная последовательность, в которой каждое натуральное число k встречается ровно k раз: 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, ...
По данному натуральному n выведите первые n членов этой последовательности. Попробуйте обойтись только одним циклом for.  


Код:
int n;
std::cin >> n;
for (int i=0;i<n*(n+1)/2;i++)
      std::cout << ((int)(sqrt(i*8+1) - 1)/2) + 1 << " ";
std::cout << std::endl;

Всего записей: 295 | Зарегистр. 06-12-2011 | Отправлено: 15:44 05-12-2012
sergiokapone



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В книге Д. Стефана "С++ для чайников", мне встретилась конструкция:

Код:
 
char*  pszMonths [ ] = {  
"Январь",
"Февраль"
};
 

 
Я не могу понять вот что: pszMonths [ ]  - это массив указателей и по идее он должен содержать адреса, почему массив наполняется строками?

Всего записей: 556 | Зарегистр. 07-06-2011 | Отправлено: 11:35 30-06-2013
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Потому, что это короче и наглядней чем:
 
char jan[] = "Январь";
char feb[] = "Февраль";
//...
    char* pszMonths[] = {jan, feb};

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 11:49 30-06-2013 | Исправлено: ne_viens, 11:51 30-06-2013
sergiokapone



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос был в том, почему pszMonths [ ] содержит строки, а не адреса.

Всего записей: 556 | Зарегистр. 07-06-2011 | Отправлено: 12:05 30-06-2013
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
pszMonths [ ] содержит адреса к строкам а не строки.

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 12:24 30-06-2013
sergiokapone



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
т.е. pszMonths[1]  содержит ссылку,  а не "январь"? А как получить саму строку?
 
Добавлено:
Я не пойму, почему код:
Подробнее...
 
Выдает Feb
 а код
Подробнее...
 
выдает F

Всего записей: 556 | Зарегистр. 07-06-2011 | Отправлено: 14:07 30-06-2013 | Исправлено: sergiokapone, 15:14 30-06-2013
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Так и получить- по адресу первого елемента строки. Дальше этот адрес уже можно отдавать в ф-ю, например printf() или cout.
 
Второй вариант неправильный- в cout выдаёт нулевой char второй строки массива. Очевидно, cout настолько умна, что умеет отличить "Feb" от 'F' и выводить их правильно.
 
 

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 17:42 30-06-2013 | Исправлено: ne_viens, 17:50 30-06-2013
sergiokapone



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как я понял, в C++ записи

Код:
char sString[]="ABC";
char *sString="ABC";

суть, одно и то же.
 
Только почему так, для меня пока загадка. Ведь в sString по идее должен быть адрес первого элемента строки. Если написать  

Код:
cout<<sString  

то выводится не адрес, а вся строка.
 
Вот, поковырявшись немного, вопрос созрел следующий:

Код:
 
 
 
int nNumbers[]={1,2,3};
std::cout<<nNumbers<<"\n";
std::cout<<*nNumbers<<"\n";
 
//---------------------------------------
char pszNumbers[] ="123";
std::cout<<pszNumbers<<"\n";
std::cout<<*pszNumbers<<"\n";
 
 

 
Два кусочка кода, отличающиеся типами выводимых величин.  
 
В первом кусочке std::cout<<nNumbers<<"\n"; как и следовало ожидать, выводит адрес первого элемента массива nNumbers[], а std::cout<<*nNumbers<<"\n"; выводит первый элемент массива, тоже как и ожидалось.
 
 
Во втором кусочке std::cout<<pszNumbers<<"\n"; выводит строку "123", хотя я ожидал адрес первого элемента, а std::cout<<*pszNumbers<<"\n"; как и ожидалось, выводит первый элемент массива.  
Это такая особеннось C++ выводить всю строку, а не адрес, если используется тип char* ?  
Как все же получить адрес первого элемента массива  pszNumbers[] ?
 
 
 
 

Всего записей: 556 | Зарегистр. 07-06-2011 | Отправлено: 18:23 30-06-2013 | Исправлено: sergiokapone, 19:13 30-06-2013
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
std::cout<<&pszNumbers<<"\n";

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 19:31 30-06-2013
sergiokapone



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

Код:
 
std::cout<<nNumbers<<"\n"
std::cout<<&nNumbers<<"\n";
 

Дают одно и тоже. А
 

Код:
std::cout<<pszNumbers<<"\n";
std::cout<<&pszNumbers<<"\n";

 
нет? Чем этот тип char особенный?

Всего записей: 556 | Зарегистр. 07-06-2011 | Отправлено: 19:38 30-06-2013
juvaforza

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sergiokapone
Си-строка - это массив (=последовательность) символов в памяти, в котором первый нулевой символ считается конечным. Эта абстракция и называется строкой.

Цитата:
суть, одно и то же.

Нет. Первое означает: "я инициализирую массив данных типа char указанным символьным литералом". Второе означает: "я при объявлении присваиваю указателю на переменную типа char адрес анонимной переменной внутреннего представления указанного символьного литерала". Более того, в С++ вторая строка не корректна, и необходимо, а в Си очень желательно, использовать спецификатор const: const char *sString="ABC"

Цитата:
Два кусочка кода, отличающиеся типами выводимых величин.

Пример перезагрузки функции. Функции вывода для типа const char* предполагают вывод содержимого строк (т. е. до первого нулевого символа).

Цитата:
Как все же получить адрес первого элемента массива  pszNumbers[] ?

(void *) pszNumbers, (void *) &*pszNumbers, (void *) &pszNumbers[0].

Всего записей: 2895 | Зарегистр. 26-11-2005 | Отправлено: 11:57 01-07-2013
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум 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