Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» c++

Автор: g2fg1
Дата сообщения: 04.12.2012 20:00
помогите написать программу на с++ пожалуйста
Написать программу с рекурсивной функцией, которая расставляет между заданными шестью цифрами знаки операций: сложения, вычитания, умножения и деления без остатка так, чтобы после проведения операции получилось заданное число.

Добавлено:
исправить ошибку

Дана монотонная последовательность, в которой каждое натуральное число 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")
}
Автор: SevereK20
Дата сообщения: 04.12.2012 22:25
g2fg1
лучше напишите в уже существующую тему по с++ - http://forum.ru-board.com/topic.cgi?forum=33&topic=3174&start=4460#lt
Автор: cp58
Дата сообщения: 05.12.2012 13:44
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;
Автор: sergiokapone
Дата сообщения: 30.06.2013 10:35
В книге Д. Стефана "С++ для чайников", мне встретилась конструкция:

Код:
char* pszMonths [ ] = {
"Январь",
"Февраль"
};
Автор: ne_viens
Дата сообщения: 30.06.2013 10:49
Потому, что это короче и наглядней чем:

char jan[] = "Январь";
char feb[] = "Февраль";
//...
    char* pszMonths[] = {jan, feb};
Автор: sergiokapone
Дата сообщения: 30.06.2013 11:05
Вопрос был в том, почему pszMonths [ ] содержит строки, а не адреса.
Автор: ne_viens
Дата сообщения: 30.06.2013 11:24
pszMonths [ ] содержит адреса к строкам а не строки.
Автор: sergiokapone
Дата сообщения: 30.06.2013 13:07
т.е. pszMonths[1] содержит ссылку, а не "январь"? А как получить саму строку?

Добавлено:
Я не пойму, почему код:
[more]
#include <iostream>
#include <stdlib.h>



int main(int argc, char* argv[])
{
char *pszMonths [ ] = { "Err" ,
"Jan",
"Feb",
"March",
"April",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec"};

std::cout<<pszMonths [2];

}
[/more]

Выдает Feb
а код
[more]
#include <iostream>
#include <stdlib.h>



int main(int argc, char* argv[])
{
char *pszMonths [ ] = { "Err" ,
"Jan",
"Feb",
"March",
"April",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec"};

std::cout<<*pszMonths [2];

}
[/more]

выдает F
Автор: ne_viens
Дата сообщения: 30.06.2013 16:42
Так и получить- по адресу первого елемента строки. Дальше этот адрес уже можно отдавать в ф-ю, например printf() или cout.

Второй вариант неправильный- в cout выдаёт нулевой char второй строки массива. Очевидно, cout настолько умна, что умеет отличить "Feb" от 'F' и выводить их правильно.

Автор: sergiokapone
Дата сообщения: 30.06.2013 17:23
Как я понял, в C++ записи

Код: char sString[]="ABC";
char *sString="ABC";
Автор: ne_viens
Дата сообщения: 30.06.2013 18:31
std::cout<<&pszNumbers<<"\n";
Автор: sergiokapone
Дата сообщения: 30.06.2013 18:38
ne_viens, спасибо.
Так а почему все таки

Код:
std::cout<<nNumbers<<"\n"
std::cout<<&nNumbers<<"\n";
Автор: juvaforza
Дата сообщения: 01.07.2013 10:57
sergiokapone
Си-строка - это массив (=последовательность) символов в памяти, в котором первый нулевой символ считается конечным. Эта абстракция и называется строкой.

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

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

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

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

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

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

Страницы: 1

Предыдущая тема: Microsoft Visual Studio 2012 (неверный адрес управл


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.