Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > C/C++/С#


Ответ
 
Опции темы Опции просмотра
Старый 08.04.2009, 20:22   #1 (permalink)
Bleak
Новичок
 
Регистрация: 15.02.2009
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Помогите решить задачи на C++

Помогите, пожалуйста.
1. Дан прямоугольник с размерами a*b.От него отрезают квадраты максимального размера,пока это возможно.Затем от оставшегося прямоугольника вновь отрезают квадраты максимально возможного размера и т.д.На какие квадраты и в каком их количестве будет разрезан исходный прямоугольник?
2.Дано к грибов. Вводя определенное число,нам экран выдает "Мы собрали к [гриб,грибов или гриба]"пример: Мы собрали 1 гриб или 22 гриба.

заранее спасибо!!!
Bleak вне форума   Ответить с цитированием

Старый 08.04.2009, 20:22
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Я уверен, что решение данной темы уже встречалось

Помогите решить задачи
Помогите решить задачи
Помогите решить задачи

Старый 12.04.2009, 15:11   #2 (permalink)
abv-lam
Новичок
 
Регистрация: 12.04.2009
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Про грибы типа так...
/* грыбы*/

#include <windows.h>
#include <winuser.h>
#include <iostream>
using namespace std;

void main()
{
int size = 0;
int octatok = 0;
char buf[255]; // включение русского языка в консоли
char res [9];

CharToOem("Введите количество грибов: ",buf);
CharToOem("Mы нашли ",res);
cout << buf;
cin >> size;
octatok=size;

if (size == 1) CharToOem(" гриб",buf);
else
{
while (true)
{
octatok=octatok%10;
if (octatok<9)break;
}
if (octatok == 2 && octatok == 3 && octatok == 4 ) CharToOem(" грибa",buf);
else CharToOem(" грибов",buf);
}

// Вывод результата

cout << res << size << buf<< endl;

cin.get();
}

PS: я не спец в Сях, возможно есть более красивое решение...
abv-lam вне форума   Ответить с цитированием
Старый 12.04.2009, 15:21   #3 (permalink)
abv-lam
Новичок
 
Регистрация: 12.04.2009
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

во второй задаче в условие не въехал, это задача на нахождение машинного нуля?
abv-lam вне форума   Ответить с цитированием
Старый 12.04.2009, 18:54   #4 (permalink)
Bleak
Новичок
 
Регистрация: 15.02.2009
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

вот пример в цифрах.
дан прямоугольник с размерами 425*131.От него отрезают квадраты со стороной 131.,пока это возможно.Затем от оставшегося прямоугольника вновь отрезают квадраты со стороной,равно 425-131*3=32 ,и т.д.На какие квадраты и в каком количестве будет разрезан исходный прямоугольник.
Bleak вне форума   Ответить с цитированием
Старый 12.04.2009, 21:43   #5 (permalink)
abv-lam
Новичок
 
Регистрация: 12.04.2009
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

/*квадраты*/

#include <windows.h>
#include <winuser.h>
#include <iostream>
using namespace std;

void main()
{
int a, b, temp, step=0;
int kvadr[100];
char buf[255]; // включение русского языка в консоли


CharToOem("Введите стороны прямоугольника a = ",buf);
cout << buf;
cin >> a;
CharToOem("Введите стороны прямоугольника b = ",buf);
cout << buf;
cin >> b;

while(a!=0 && b!=0)
{
if (a<b)
{
temp=a;
a=b;
b=temp;
}
kvadr[step]=b;
step++;
a=a-b;
}


// Вывод результата

CharToOem("Шаг --- Сторона квадрата",buf);
cout << buf<< endl;
for (int i=0; i< step; i++)
{
cout << i+1 << " --- " << kvadr[i]<< endl;
}

cin.get();
}

Прога работает, хотя я написал ее скорее в стиле паскаля, (ну не сишник я...) И еще массив kvadr[] я объявил на 100 элементов.

Последний раз редактировалось abv-lam; 12.04.2009 в 22:02
abv-lam вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 12.04.2009, 22:14   #6 (permalink)
abv-lam
Новичок
 
Регистрация: 12.04.2009
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Про грибы. Только сообразил, что 101 это тоже гриб, поэтому должно быть так

/* грыбы*/

#include <windows.h>
#include <winuser.h>
#include <iostream>
using namespace std;


/************************************************** *************
Главный модуль
************************************************** ***************/

void main()
{
int size = 0;
int octatok = 0;
char buf[255]; // включение русского языка в консоли
char res [9];

CharToOem("Введите количество грибов: ",buf);
CharToOem("Mы нашли ",res);
cout << buf;
cin >> size;
octatok=size;

if (size == 1) CharToOem(" гриб",buf);
else
{
while (true)
{
octatok=octatok%10;
if (octatok<9)break;
}
if (octatok == 1 && size!=11) CharToOem(" гриб",buf);
else
{
if (octatok == 2 || octatok == 3 || octatok == 4 ) CharToOem(" грибa",buf);
else CharToOem(" грибов",buf);

}
}

// Вывод результата

cout << res << size << buf<< endl;

cin.get();
}
abv-lam вне форума   Ответить с цитированием
Старый 14.04.2009, 11:12   #7 (permalink)
csbwalker
Member
 
Аватар для csbwalker
 
Регистрация: 03.03.2009
Сообщений: 87
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 187
По умолчанию

По поводу грибов.
Если я правильно понимаю код, то:
Цитата:
while (true)
{
octatok=octatok%10;
if (octatok<9)break;
}
1. при числе оканчивающимся на "9" войдёт в бесконечный цикл
2. octatok%10 всегда будет < 10
поэтому логичнее будет написать вместо этого куска кода строчку:
Цитата:
octatok %= 10;
Потом - если число равно "12", "13", "14" нужно выводить "грибов", а будет "гриба".

Предлагаю свой вариант:
Код:
#include <iostream>

using namespace std;

int main(int argc, char **argv)
{
int k;

	cout << "Введите количество грибов: ";
	cin >> k;

	cout << "Мы собрали: " << tmp << k << " ";

	if ((k > 10) && (k < 20))
		cout << "грибов";
	else
	{
		k %= 10;
		if (k == 1)
			cout << "гриб";
		else if ((k == 2) || (k == 3) || (k == 4))
			cout << "гриба";
		else
			cout << "грибов";
	}
}
Или, в случае если кодировка редактора и кодировка консоли различны и это Windows, то с перекодировкой:
Код:
#include <windows.h>
#include <iostream>

using namespace std;

int main(int argc, char **argv)
{
int k;
char tmp[256];

	CharToOem("Введите количество грибов: ", tmp);
	cout << tmp;
	cin >> k;

	CharToOem("Мы собрали: ", tmp);
	cout << tmp << k << " ";

	if ((k > 10) && (k < 20))
		CharToOem("грибов", tmp);
	else
	{
		k %= 10;
		if (k == 1)
			CharToOem("гриб", tmp);
		else if ((k == 2) || (k == 3) || (k == 4))
			CharToOem("гриба", tmp);
		else
			CharToOem("грибов", tmp);
	}
	cout << tmp << "\n";
}

Последний раз редактировалось csbwalker; 14.04.2009 в 12:26 Причина: добавление своего варианта
csbwalker вне форума   Ответить с цитированием
Старый 14.04.2009, 12:09   #8 (permalink)
csbwalker
Member
 
Аватар для csbwalker
 
Регистрация: 03.03.2009
Сообщений: 87
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 187
По умолчанию

С прогой по квадратам полностью согласен, но сделал бы чуть попроще вывод результата, и м.б. убрал бы жёсткую завязку на винды, но тут на вкус и цвет...
На всякий случай постю свой вариант
Код:
#include <iostream>

using namespace std;

bool pri(int &a, int &b)
// Приводит стороны так, что бы "a" было < "b"
// Если прямоугольник вырожденный - возвращает false
{
	if ((a == 0) || (b == 0))
		return false;
	if (a > b)
	{
	int t = a;
		a = b;
		b = t;
	}
	return true;
}

int main(int argc, char **argv)
{
int a, b;
	// Вводим параметры
	cout << "Enter a: ";
	cin >> a;

	cout << "Enter b: ";
	cin >> b;

	while( pri(a, b) ) // Выполняем пока прямоугольник не вырожденный
	{
		// Выводим размерность и количество для текущего квадрата
 		cout << "\n" << a << "x" << a << " : " << b / a;
		// Уменьшаем размер прямоугольника
		b %= a;
	};
}

Последний раз редактировалось csbwalker; 14.04.2009 в 12:27
csbwalker вне форума   Ответить с цитированием
Старый 16.04.2009, 22:10   #9 (permalink)
Bleak
Новичок
 
Регистрация: 15.02.2009
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Большое,как говорится,человеческое спасибо.
Bleak вне форума   Ответить с цитированием
Старый 26.04.2009, 15:50   #10 (permalink)
Fonochka
Новичок
 
Регистрация: 26.04.2009
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Здравствуйте! Мне жутко нужна помощь....Допуск к экзамену.... Нужно написать программу стекового калькулятора на Си(((( У меня никак не получается.... Вот условие самой задачи: "На входе - строка, содержащая выражение в постфиксной записи. На выходе - строка, результат вычислений.
пример:
ввод:
1 23 + 4 -
5 1 - *.
вывод:
80
Числа: целые неотрицательные.
Должны поддерживаться следующие двуместные арифметические операции: + - * /
Каждая из них берет аргумент со стека, сначала первый, потом - второй, выполняет над ним действие и результат помещает на вершину стека.
Кроме того должна поддерживаться операция '.' - она берет один аргумент со стека и печатает его на вывод."
Вот такая задача.... Заранее очень благодарна хоть в какой-то помощи))
Fonochka вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 15:11.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.