IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   Помогите решить простую задачу на С++ (http://www.imho.ws/showthread.php?t=57090)

Комбинатор 23.04.2004 01:11

Помогите решить простую задачу на С++
 
Народ помогите решить задачу на С++

задача:
принимается число, и печатает пирамиду начиная с нуля и дальше

например если n=5
то прога напечатает такую пирамиду:

1
121
12321
1234321
123454321
как такое зделать?

Dimm 23.04.2004 02:03

N - дано. Например 5.

int i;
for (int Line = 1; Line <= N; Line++)
{
int spaces = N - Line;
for (i = 0; i < spaces; i++)
printf(" ");
for( i = 1; i <= Line; i++ )
printf("%d", i);
for(i -= 2; i > 0; i-- )
printf("%d", i);
for (i = 0; i < spaces; i++)
printf(" ");

printf("\n");
}

Код можно конечно оптимизировать и написать красивее, но я сделал как проще. Тебе ведь именно это нужно?

P.S.
Не забудь сделать #include <stdlib.h>

albo 23.04.2004 02:29

Вообще-то stdio.h

Комбинатор 23.04.2004 16:26

Цитата:

Код можно конечно оптимизировать и написать красивее, но я сделал как проще. Тебе ведь именно это нужно?
да, пасибо, только ты написал в С а не в С++:) но не страшно алгоритм я понял, пасибо!!

V@nya 24.04.2004 12:53

Цитата:

только ты написал в С а не в С++
А как по твоему он будет выглядеть на С++, разве не также? Или ты собрался делать класс для этой задачки?

Комбинатор 24.04.2004 14:46

Цитата:

А как по твоему он будет выглядеть на С++, разве не также? Или ты собрался делать класс для этой задачки?
printf("%d", i);
printf("%d", i);
printf(" ");
printf("\n");

эти функции в С++ выглядят как
cout<<" ";

V@nya 24.04.2004 15:52

inkognito, ты не прав. В С++ printf так же работает, да и cout в Си вроде тоже долмна быть. Основное отличие С++ от Си это классы (ООП).

Комбинатор 26.04.2004 14:52

V@nya, ок, незнал что это тоже работает в С++.
Цитата:

Основное отличие С++ от Си это классы (ООП).
точно, и есчо там обьявление переменых в С++ удобней. так как можно в любом месте обьявлять

V@nya 26.04.2004 15:38

inkognito, а в Си чё, переменные не везде можно объявлять, только в начале? Это плохо. Да и кто на чистом Си пишет, как правило учат сразу С++ на компиляторе Borland C++ 3.0, я на чистом си не разу не писал, да и копилятор сейчас не найти.

Комбинатор 26.04.2004 16:27

Цитата:

а в Си чё, переменные не везде можно объявлять, только в начале? Это плохо.
Да не очень удобно, например если делаешь цикл например фор то внутри обьявить переменую нельзя
Цитата:

Да и кто на чистом Си пишет, как правило учат сразу С++ на компиляторе Borland C++ 3.0, я на чистом си не разу не писал, да и копилятор сейчас не найти.
V@nya, полностью согласен, тоже сомневаюсь что еть такие кто пишут на Си, хотя может только из за старой привычки.
я впринцепи Си незнаю я сразу с С++ начинал

V@nya 27.04.2004 15:25

inkognito
Цитата:

я впринцепи Си незнаю я сразу с С++ начинал
Вот и я тоже сразу учил С++

ppiitt 27.04.2004 23:28

Всем читать
Бьерн Страуструп "Язык программирования С++"
Чтобы понять разницу между С++ и С.

Стандарт С99 позволяет в языке Си объявлять переменные в любом месте.

:)

PrayeR 28.04.2004 04:51

если я не ошибаюсь то cin и cout в С нету... (тока не бейте ногами если не прав :) )

ppiitt 28.04.2004 13:38

не ошибаешься :)
Нету. cin, cout - работа с потоками (это классы) :)

Dimm 28.04.2004 14:06

Кхм, друзья. По моему начался Offtop.
Если хотите, создайте соотвествующий топик и развлекайтесь там.

Модерам
ИМХО тема может быть закрыта.

Zaber 13.05.2004 17:11

Красивее это написать конечно рекурсией

Tano 14.05.2004 23:19

Треугольник Паскаля? V@nya, неплохо=)

Рем 22.11.2008 19:07

Плиз кто нибудь помогите написать прогу(( Я вообще в отчаянии ниче вообще не получается... Разработать программу, которая подводит итоги Олимпийских игр. Программа должна получить от пользователя количество золотых, серебряных и бронзовых медалей, завоеванное каждой командой-участницей (принять количество команд равное 5). Далее по количеству медалей каждого достоинства необходимо вычислить соответствующее число очков команды. Количество очков вычисляется по следующему правилу: за золотую медаль команда получит семь очков, за серебряную — шесть, за бронзовую — пять очков. После таких расчетов список команд нужно упорядочить в соответствии с набранным количеством очков с помощью алгоритма сортировки обменом и вывести в диалоге. Построить также столбчатую диаграмму набранных очков с подписью названия каждой команды.

Заранее спасибо...

Voland25 22.11.2008 23:43

Рем, похоже, это уже Visual C++, раз мы о диалогах заговорили? Поточнее требования, пожалуйста.

В плане руководства к действию, вот примерно так это должно реализовываться на С++ без примесей Visual и иже с ним:

- Определяем класс Team со свойствами m_Gold, m_Silver, m_Bronze типа integer, и свойством m_Name типа string. Само собой, определяем геттеры, сеттеры и конструктор(ы).

Один из методов - getTeamScore() - возвращает следующее выражение:
(7*m_Gold + 6*m_Silver + 5*m_Bronze)
- Определяем класс ScoreSummarizer - главный класс программы. В нем определяем массив указателей на объекты типа Team размером в 5 штук (по кол-ву комманд).
При инициализации запускаем метод этого класса getUserInput(), который заполнит массив коммандами. Алгоритм заполнения:

* В цикле запрашиваем название комманды и кол-во всех медалей
* Определяем новый объект, инициализируем полученными данными, если конструктор default (если же нет - вызываем соответствующий конструктор)
* Назначаем соответствующий указатель из массива чтобы показывал на этот объект
* Переходим к следующей команде
- В классе ScoreSummarizer определяем метод displayData. Его задача - вывести на экран отсортированный список команд с очками, и нарисовать диаграмму столбцов. Для этого определяем три вспомогательных метода:
* sortTeamScores - сортирующий имеющийся у нас массив методом обмена (для выяснения конкретного значения очков команды пользуемся методом getTeamScore из класса Team). Алгоритм приводить не буду, ибо Google - великий знаток алгоритмов сортинга. :contract:
* printTeams - выводит на экран форматированные строки, содержащие название команды и кол-во очков
* displayDiagram - тут немного посложнее :). Просто распечатываем количество строк, равное максимальному кол-ву очков, когда в каждой строке печатается символ (ну например "*") только если команда набрала (max score - line index) очков... Т.е. в первой строке будут только символы тех команд, у которых максимум, во второй - у которых максимум и максимум - 1, и так далее до тех пор пока кол-во строк не станет равным максимальному кол-ву очков.
Затем, последней строкой, под каждым столбцом высвечиваем название каждой команды.
- Ну, и финал - в main() объявляем объект типа ScoreSummarizer. Если мы вызывали getUserInput в конструкторе этого класса, то можно смело вызывать displayData(). Если же конструктор этого класса default - то последовательно вызываем getUserInput(), а затем уже displayData().

Удачи!

Рем 23.11.2008 01:59

Спасибо Voland25, постараюсь сделать...


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

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.