Вопрос № 175200: у меня плоховато с программированием по языку С ну очень надо решить эту задачку. Имеются два одномерные массива значений произвольной размерности. Найти для каждого из массивов сумму всех элементов и сравнить полученные знач...
Вопрос № 175266: Здравствуйте, уважаемые эксперты. Помогите с задачей, пожалуйста. Дана программа: (Приложение) Задание. Изменить программу так, чтобы: 1 - Определить сумму положительных элементов, кол-во элементов в интервале от -2 до 2 2 - Оп...
Вопрос № 175273: здавствуйте уважаемые эксперты.помогите разобраться с прогой. нужно чтоб по введённому статусу и дате выдачи книги считалась дата возврата Для рабочих 10 дней Для студентов 20 дней Для пенсионеров 15 дней Для учащихся – 15 дней Для бе...
Вопрос № 175290: Здравствуйте уважаемые эксперты! Пожалуйста помогите решить задачу, заранее огромное спасибо! Задача: Дана текстовая строка, содержащая двоичное число. Перевести его в восьмеричную систему счисления и записать во вторую строку....
Вопрос № 175296: Доброго времени суток! Необходимо написать программку на C++ (желательно, чтобы работала на VS 2008). Задача: Дано трёхзначное число. Необходимо найти все трёхзначные числа равные среднему арифметическому цифр данного числа. Заранее благодарен....
Вопрос № 175200:
у меня плоховато с программированием по языку С ну очень надо решить эту задачку. Имеются два одномерные массива значений произвольной размерности. Найти для каждого из массивов сумму всех элементов и сравнить полученные значения. Результат сравнения отобразить на экран. оч нуждаюсь в этих задачках. надеюсь на вашу отзывчивость...
Отвечает Dr_Andrew, Старший модератор :
Здравствуйте, GrafMine! Решение задачи на "чистом" Си см. в приложении. Код комментирован. Удачи!
Приложение:
Ответ отправил: Dr_Andrew, Старший модератор
Ответ отправлен: 18.12.2009, 11:15 Казахстан, Алма-Ата Организация: Казахский научный центр карантинных и зоонозных инфекций Адрес сайта:Медицинские программы для Linux ICQ # 256452186
Оценка ответа: 5 Комментарий к оценке: спасибо =)
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 257892
на номер 1151 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Отвечает Ashotn, 7-й класс :
Здравствуйте, GrafMine.
Тут чуть подправленная программа. Память под массивы выделяется динамически. Ошибка была в том, что нельзя описывать массивы размером, который заранее не известен.
Ошибки не было. Действительно, нельзя описывать массивы размером, который заранее не известен, однако в случае предыдущего ответа этот размер как раз-таки известен: вводится пользователем. В данной ситуации в динамическом выделении памяти преимуществ нет, хотя такой вариант тоже имеет право на жизнь.
-----
∙ Отредактировал: Dr_Andrew, Старший модератор
∙ Дата редактирования: 20.12.2009, 04:53 (время московское)
Приложение:
----- Я ни от чего, ни от кого не завишу.
Ответ отправил: Ashotn, 7-й класс
Ответ отправлен: 20.12.2009, 02:31
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 257947
на номер 1151 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Вопрос № 175266:
Здравствуйте, уважаемые эксперты. Помогите с задачей, пожалуйста.
Дана программа: (Приложение)
Задание. Изменить программу так, чтобы: 1 - Определить сумму положительных элементов, кол-во элементов в интервале от -2 до 2 2 - Определить количество нулевых элементов, количество элементов в интервале от 5 до 10.
В ответе прошу оба варианта программы отдельно. Среда программирования - BorlandC 3.1
Отвечает amnick, 7-й класс :
Здравствуйте, Penkov213.
Как Вы и просили, 2 варианта программы на основе представленной Вами. Оба варианта протестированы в Borland C++ 3.1.
Код:
// Определить сумму положительных элементов, // кол-во элементов в интервале от -2 до 2
#include <iostream.h> #define
I 3 #define J 4
float sum_positiv( float m[I][J] ) { float sum = 0.0; for( int i = 0; i < I; ++i ) for( int j = 0; j < J; ++j ) if( m[i][j] > 0.0 ) sum += m[i][j]; return sum; }
int count_interval( float m[I][J], float aMin, float aMax ) { int n = 0; for( int i = 0; i < I; ++i ) for( int j = 0; j < J; ++j ) { float a = m[i][j]; if( aMin <= a && a <= aMax ) ++n; } return n; }
void inputmas (float m[I][J], char im) { int i, j; cout<< "\nВводим массив " << im << "\n"; for (i=0; i<I; i++) for (j=0; j<J; j++) { cout << im << " [" << i << " ][ " << j << " ] = "; cin >> m[i][j]; } }
void main() { float c[I][J]; inputmas( c,'c' );
float sum = sum_positiv(
c ); cout << "\nСумма положительных элементов = " << sum << "\n"; int n = count_interval( c, -2.0, 2.0 ); cout << "\nКол-во элементов в интервале от -2 до 2 = " << n << "\n"; }
Тестовый прогон программы:
Код:
Вводим массив c c [0 ][ 0 ] = 1 c [0 ][ 1 ] = 1.4 c [0 ][ 2 ] = 0.4 c [0 ][ 3 ] = -0.13 c [1 ][ 0 ] = 1.5 c [1 ][ 1 ] = 2.5 c [1 ][ 2 ] = -4 c [1 ][ 3 ] = 0.7 c [2 ][ 0 ] = -1.5 c [2 ][ 1 ] = 0.78 c [2 ][ 2 ] = -3.1 c [2 ][ 3 ] = -1.6
Сумма положительных элементов = 8.28
Кол-во элементов в интервале от -2 до 2 = 9
Код:
// Определить количество нулевых элементов, // количество элементов в интервале от 5 до 10.
#include <iostream.h> #define I 3 #define J 4
int count_nulls( float m[I][J] ) { int n = 0; for( int i = 0; i < I; ++i ) for( int j = 0; j
< J; ++j ) if( m[i][j] == 0.0 ) ++n; return n; }
int count_interval( float m[I][J], float aMin, float aMax ) { int n = 0; for( int i = 0; i < I; ++i ) for( int j = 0; j < J; ++j ) { float a = m[i][j]; if( aMin <= a && a <= aMax ) ++n; } return n; }
void inputmas (float m[I][J], char im) { int i, j; cout<< "\nВводим массив " << im << "\n"; for (i=0; i<I; i++) for
(j=0; j<J; j++) { cout << im << " [" << i << " ][ " << j << " ] = "; cin >> m[i][j]; } }
void main() { float c[I][J]; inputmas( c,'c' );
float sum = count_nulls( c ); cout << "\nКол-во нулевых элементов = " << sum << "\n"; int n = count_interval( c, 5.0, 10.0 ); cout <
< "\nКол-во элементов в интервале от 5 до 10 = " << n << "\n"; }
Тестовый про
гон программы:
Код:
Вводим массив c c [0 ][ 0 ] = 0 c [0 ][ 1 ] = 6 c [0 ][ 2 ] = 1 c [0 ][ 3 ] = 0 c [1 ][ 0 ] = -3 c [1 ][ 1 ] = 8 c [1 ][ 2 ] = 10.0 c [1 ][ 3 ] = 4.9 c [2 ][ 0 ] = 2.6 c [2 ][ 1 ] = -0.1 c [2 ][ 2 ] = 0 c [2 ][ 3 ] = 6.8
Кол-во
нулевых элементов = 3
Кол-во элементов в интервале от 5 до 10 = 4
Успехов!
Ответ отправил: amnick, 7-й класс
Ответ отправлен: 14.12.2009, 22:37
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 257734
на номер 1151 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Вопрос № 175273:
здавствуйте уважаемые эксперты.помогите разобраться с прогой. нужно чтоб по введённому статусу и дате выдачи книги считалась дата возврата Для рабочих 10 дней Для студентов 20 дней Для пенсионеров 15 дней Для учащихся – 15 дней Для безработных – 5 дней
Отвечает Ashotn, 7-й класс :
Здравствуйте, aleshinIvan. Текст программы в приложении.
Приложение:
----- Я ни от чего, ни от кого не завишу.
Ответ отправил: Ashotn, 7-й класс
Ответ отправлен: 15.12.2009, 02:26
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 257741
на номер 1151 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Вопрос № 175290:
Здравствуйте уважаемые эксперты! Пожалуйста помогите решить задачу, заранее огромное спасибо! Задача: Дана текстовая строка, содержащая двоичное число. Перевести его в восьмеричную систему счисления и записать во вторую строку.
Отправлен: 15.12.2009, 15:06
Вопрос задал: Ased7, Посетитель
Всего ответов: 1 Страница вопроса »
Полагаю, что простое преобразование двоичной строки в число, а затем использование sprintf( s, "%o", num ) или _itoa( num, s, 8 ) для преобразования в восьмиричное представление не годится. В предлагаемом варианте двоичное число (строка) преобразуется в восьмиричное число напрямую. Комментарии — в коде. На Ваш выбор предлагается 2 варианта: с классом string и без него. Оба варианта проверены в MSVC++ 6.0.
Вариант с классом string:
Код:
#include <string> #include <iostream> using namespace std;
// Функция преобразует строку, представляющую двоичное число (pszBinary), // в строку, представляющую восьмиричное число (pszOctal) // Алгоритм: // 3 двоичных
цифры преобразуются в одну восьмиричную. // Исходная строка разбивается на группы по 3 цифры, начиная справа; крайняя // левая группа может содержать от 1 до 3-х двоичных цифр. // Затем каждая группа переводится в восьмиричную цифру (параллельно проверяется // корректность исходной строки) и преобразуется в символ прибавлением '0'. int bin2oct( string &sOctal, string &sBinary ) { int len = sBinary.length(); int nRes = (len+2)/3; // число 8-ричных цифр в результате // сколько
первых цифр двоичного числа "пойдет" на первую цифру результата? // 10,111,010,101
int n = len % 3; if( n == 0 ) n = 3; int p = 0; while( len ) { // преобразуем очередную группу int d = 0; for( int i = 0; i < n; ++i, ++p ) { char ch = sBinary[p]; if( ch > '1' || ch < '0' ) return -1; // ошибка во входной строке - недвоичное число
d = (d << 1) + (ch == '1&
#39;); } sOctal += d + '0'; len -= n; n = 3; } return 0; }
void main( int argc, char* argv[] ) { string sOct, sBin; if( argc > 1 ) sBin = argv[1]; else { cout << "Enter a number in binary notation: "; cin >> sBin; } if( bin2oct( sOct, sBin ) < 0 ) cout << "The provided string does not represent a number in binary notation!" << endl; else cout << "The
number in octal notation = " << sOct << endl; }
Вариант без использования класса string (это тоже C++):
Код:
#include <string.h> #include <iostream> using namespace std;
//
Функция преобразует строку, представляющую двоичное число (pszBinary), // в строку, представляющую восьмиричное число (pszOctal) // Алгоритм: // 3 двоичных цифры преобразуются в одну восьмиричную. // Исходная строка разбивается на группы по 3 цифры, начиная справа; крайняя // левая группа может содержать от 1 до 3-х двоичных цифр. // Затем каждая группа переводится в восьмиричную цифру (параллельно проверяется // корректность исходной строки) и преобразуется в символ прибавлением '0'. int
bin2oct( char* pszOctal, const char* pszBinary ) { int len = strlen( pszBinary ); int nRes = (len+2)/3; // число 8-ричных цифр в результате // сколько первых цифр двоичного числа "пойдет" на первую цифру результата? // 10,111,010,101
int n = len % 3; if( n == 0 ) n = 3; const char* p = pszBinary; while( len ) { int d = 0; for( int i = 0; i < n; ++i, ++p ) { if( *p > '1' || *p <
; '0' ) return -1; // ошибка во входной строке - недвоичное число
d = (d << 1) + (*p == '1');
} *pszOctal++ = d + '0'; len -= n; n = 3; } *pszOctal = 0; return 0; }
void main( int argc, char* argv[] ) { char sOct[128]; int iRes; if( argc > 1 ) iRes = bin2oct( sOct, argv[1] ); else { cout << "Enter a number in binary notation: "; char sBin[256]; cin >> sBin; iRes = bin2oct( sOct, sBin ); } if( iRes < 0 ) cout << "The provided string does not represent a number
in binary notation!" << endl; else cout << "The number in octal notation = " << sOct << endl; }
Успехов!
Ответ отправил: amnick, 7-й класс
Ответ отправлен: 15.12.2009, 19:37
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 257775
на номер 1151 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Вопрос № 175296:
Доброго времени суток! Необходимо написать программку на C++ (желательно, чтобы работала на VS 2008). Задача: Дано трёхзначное число. Необходимо найти все трёхзначные числа равные среднему арифметическому цифр данного числа. Заранее благодарен.
Отвечает LfiN, 10-й класс :
Здравствуйте, starcode. Программа написана и проверена на Microsoft Visual C++ 6.0. Комментарии в программе.
Код:
#include <iostream> using namespace std;
int main(){ int const k=3; int a,b,i; double sr,s,sr1; locale::global(locale("russian_russia.866"));
// Чтобы печатать русскими буквами wcout<<L"Введите трехзначное число: "; cin>>a; if((a>99)&&(a<1000)){//Проверка числа на трехзначность s=0; while(a>=1){ b=a%10; //последняя цифра числа s+=b; //сумма цифр числа a/=10; //убираем последнюю цифру числа } sr=s/k; //среднее арифметическое цифр числа wcout<<L"Среднее арифметическое цифр заданного числа: "
;<<sr<<endl<<endl;
wcout<<L"Все трехзначные числа, в которых среднее арифметическое их цифр равно "<<sr<<L":"<<endl; for(i=100;i<1000;i++){ //Находим остальные числа, среднее арифметическое цифр которых соответствует найденному числу a=i; s=0; while(a>=1){ b=a%10; s+=b; a/=10; } sr1=s/k; if(sr==sr1)wcout<<i<<L" "; }} else wcout<<L"\nВы ввели
не трехзначное число\n"; wcout<<L"\nДля выхода нажмите любую клавишу...\n"; return 0; }
Ответ отправил: LfiN, 10-й класс
Ответ отправлен: 15.12.2009, 19:34
Оценка ответа: 5
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 257774
на номер 1151 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.