Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.08.2010, 00:16   #1
Cave_IAR
Пользователь
 
Регистрация: 12.08.2010
Сообщений: 24
Вопрос Варианты решения задачи.

Чуваки!

Внизу прикреплена задачка...

Если кому не лень, поделитесь своими мыслями, как ее осуществить... Всё в консольном режиме.

Да, и кстати, я решил просто с одним циклом и 7 вложенными в него:

Код:
int i, j, k;
for (i=1; i<=10; ++i) {
    for (j=1;j<=i;++j)
        printf("*");
    for (j=1;j<=12-i;++j)
        printf(" ");
    for (j=1;j<=11-i;++j)
        printf("*");
    for (j=1;j<=2*i;++j)
        printf(" ");
    for (j=1;j<=11-i;++j)
        printf("*");
    for (j=1;j<=12-i;++j)
        printf(" ");
    for (j=1;j<=i;++j)
        printf("*");
    printf("\n");
}
getch();



        return 0;

Собсна смущают 7 циклов... Сам до другого не додумался, - может, что и есть "покрасивей".

Заранее благодарен!
Изображения
Тип файла: bmp Безымянный.bmp (1.09 Мб, 179 просмотров)
Cave_IAR вне форума Ответить с цитированием
Старый 14.08.2010, 18:38   #2
arcer
Пользователь
 
Регистрация: 26.01.2010
Сообщений: 42
По умолчанию

Цитата:
Сообщение от Cave_IAR Посмотреть сообщение
Чуваки!

Внизу прикреплена задачка...

Если кому не лень, поделитесь своими мыслями, как ее осуществить... Всё в консольном режиме.

Да, и кстати, я решил просто с одним циклом и 7 вложенными в него:

Код:
int i, j, k;
for (i=1; i<=10; ++i) {
    for (j=1;j<=i;++j)
        printf("*");
    for (j=1;j<=12-i;++j)
        printf(" ");
    for (j=1;j<=11-i;++j)
        printf("*");
    for (j=1;j<=2*i;++j)
        printf(" ");
    for (j=1;j<=11-i;++j)
        printf("*");
    for (j=1;j<=12-i;++j)
        printf(" ");
    for (j=1;j<=i;++j)
        printf("*");
    printf("\n");
}
getch();



        return 0;

Собсна смущают 7 циклов... Сам до другого не додумался, - может, что и есть "покрасивей".

Заранее благодарен!
Вот:
for(int i=0;i<10;printf("\n"),i++)for(int j=0;j<=i;printf("*"),j++);
(это для первой, там пробелов не надо, для остальных добавь еще один вложеный цикл для пробелов, типа k=i;k<10;k++)
Вот только не понимаю, как у тебя рисунки будут один под другим выводится

Последний раз редактировалось arcer; 14.08.2010 в 18:46.
arcer вне форума Ответить с цитированием
Старый 14.08.2010, 20:37   #3
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Cave_IAR
тебя видимо смутила подсказка) поэтому ты все циклами начал делать. твой вариант правильный, если ты собираешься выводить фигуры рядом, как у тебя и получилось. если же выводить одну под другой, то такая вложенность не нужна, на ривование каждой фигуры нужен внешний и вложенный цикл, как тебе и сказали. но если присмотреться, то можно заметить следующее. первая фигура инициализирована, далее она инвертируется по y, полученная инвертируется по x, следующая полученная инвертируется опять по y. поэтому можно использовать вот такой универсальный вариант...

Код:
#include <stdio.h>
#include <stdlib.h>

#define WIDTH 10
#define HEIGHT 10

int **create_image();
void init_image_triangle(int **image);
void free_image(int **image);
void print_image(int **image);
int **reflect_x(int **image);
int **reflect_y(int **image);

/* ------------------------------------------------------------------------- */
int **create_image()
{
	int i, j;
	int **image = (int **)malloc(HEIGHT * sizeof(int));

	for (i = 0; i < HEIGHT; i++) {
		image[i] = (int *)malloc(WIDTH * sizeof(int));
	}

	for (i = 0; i < HEIGHT; i++)
		for (j = 0; j < WIDTH; j++)
			image[i][j] = 0;

	return image;
}

/* ------------------------------------------------------------------------- */
void init_image_triangle(int **image)
{
	int i, j;
	for (i = 0; i < HEIGHT; i++) {
		for (j = 0; j < i + 1; j++) {
			image[i][j] = '*';
		}
	}
}

/* ------------------------------------------------------------------------- */
void free_image(int **image)
{
	int i;
	for (i = 0; i < HEIGHT; i++) {
		free(image[i]);
	}
	free(image);
}

/* ------------------------------------------------------------------------- */
void print_image(int **image)
{
	int i, j;
	for (i = 0; i < HEIGHT; i++) {
		for (j = 0; j < WIDTH; j++) {
			printf("%c", image[i][j] ? image[i][j] : ' ');
		}
		printf("\n");
	}
}

/* ------------------------------------------------------------------------- */
int **reflect_x(int **image)
{
	int i, j;
	int **ret = create_image();

	for (i = 0; i < HEIGHT; i++)
		for (j = 0; j < WIDTH; j++)
			ret[i][j] = image[i][WIDTH - j - 1];

	free_image(image);
	return ret;
}

/* ------------------------------------------------------------------------- */
int **reflect_y(int **image)
{
	int i, j;
	int **ret = create_image();

	for (i = 0; i < HEIGHT; i++)
		for (j = 0; j < WIDTH; j++)
			ret[i][j] = image[HEIGHT - i - 1][j];

	free_image(image);
	return ret;
}


/* ------------------------------------------------------------------------- */
int main(int argc, char **argv)
{
	int **image = create_image();
	
	init_image_triangle(image);
	print_image(image);

	printf("\n");
	image = reflect_y(image);
	print_image(image);

	printf("\n");
	image = reflect_x(image);
	print_image(image);

	printf("\n");
	image = reflect_y(image);
	print_image(image);

	free_image(image);
	return 0;
}
плюс в том, что теперь их можно вращать как хочешь, размер фигуры можно задать любой, а форма фигуры задается в одной функции, которую можно изменить. понимаю, что тебе это не надо, но просто захотелось чет написать на сях, плюсы совсем моск выели....


ах да, чуть не забыл. ты будешь гореть в аду за эту бмпшку
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 15.08.2010, 20:13   #4
FelixXXI
Пользователь
 
Регистрация: 29.03.2010
Сообщений: 48
По умолчанию

Могу предложить ещё один вариант решения:
Код:
#include <iostream>
#include <conio.h>
using namespace std;
void draw(char symbol1,char symbol2,bool flag);

int main()
{
	draw('*',' ',true);
	draw('*',' ',false);
	draw(' ','*',true);
        draw(' ','*',false);
	getch();
	return 0;
}

void draw(char c,char d,bool flag)
{
	for(int i=0;i<=10;i++)
	{
		int kolz=(flag==true)? i:10-i;
		for(int j=1;j<=kolz;j++) printf("%c",c);
		for(int jj=kolz+1;jj<=10;jj++) printf("%c",d);
		printf("\n");
	}
	printf("\n");
}
FelixXXI вне форума Ответить с цитированием
Старый 15.08.2010, 22:04   #5
sever-42
Пользователь
 
Регистрация: 22.04.2010
Сообщений: 96
По умолчанию

Код:
#include <cstdio>

int main()
{
	for (int i = 0; i < 10; ++i) {
		for (int j = 0; j <= i; ++j)
			printf("*");
		printf("\n");
	}
	printf("\n");
	for (int i = 10; i; --i) {
		for (int j = 0; j < i; ++j)
			printf("*");
		printf("\n");
	}
	printf("\n");
	for (int i = 10; i; --i) {
		for (int j = 1; j < 11; ++j)
			if (i <= j)
				printf("*");
			else
				printf(" ");
		printf("\n");
	}
	printf("\n");
	for (int i = 0; i < 10; ++i) {
		for (int j = 0; j < 10; ++j)
			if (i <= j)
				printf("*");
			else
				printf(" ");
		printf("\n");
	}
	return 0;
}
include <Qt>
sever-42 вне форума Ответить с цитированием
Старый 16.08.2010, 16:45   #6
Cave_IAR
Пользователь
 
Регистрация: 12.08.2010
Сообщений: 24
По умолчанию

ООо, спасибо всем.

блин, я лажанул вначале, не заметил сначала в условии, что надо друг ПОД другом выводить)

to pproger, FelixXXI: настанет такой момент, когда я это пойму, так что в любом случае спасибо)

а что с картинкой-то не так?)
Cave_IAR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подскажите варианты решения leozay Microsoft Office Excel 10 26.08.2009 21:24
Две задачи на типизированные файлы не решаемы уже давно. Подскажите варианты решения GorNikSar Помощь студентам 4 18.06.2009 18:31
Проверьте пожалуйста решения задачи lena-nonamed Microsoft Office Excel 3 18.02.2009 09:22
Посоветуйте способ решения задачи alexmilko Помощь студентам 3 20.12.2008 20:39