Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Буквы алфавита 
:(
    Опции темы
Golovastik
Дата 21.7.2009, 17:55 (ссылка)    | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 19.7.2009

Репутация: -1
Всего: 0



Не скажите! Вроде простая задачка,но чего-то не выходит. Мне нужно вывести в столбик, с отступом, буквы алфавита.

В первом столбике, от "А" до "D",
 во 2-ом - от "А" до "Е",
 в 3-ем, от "b" до "f",
в 4-ём, от "Q" до "Т",
в 5-ём, от "F" до "L".

Попробывал так, но не знаю как доделать. Как-то с выводом не могу понять.
Код


#include <iostream>
#include <conio.h>
#include <iomanip>
using namespace std;

int main()
{

for(char c1 = 'A'; c1<= 'D'; c1++)
for(char c2 = 'A'; c2<='E'; c2++)
for(char c3 = 'b'; c3<='f'; c3++)
for(char c4 = 'Q'; c4<='T'; c4++)
for(char c5 = 'F'; c5<='L'; c5++)

cout<<.......................................

getch();


}

PM MAIL   Вверх
zim22
Дата 21.7.2009, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(Golovastik @  21.7.2009,  17:55 Найти цитируемый пост)
 Как-то с выводом не могу понять.

что вы не можете понять? спрашивайте.
хотите чтобы за вас решили задачу - идите в Центр Помощи



--------------------
PM MAIL   Вверх
Golovastik
Дата 21.7.2009, 18:06 (ссылка)    | (голосов:6) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 19.7.2009

Репутация: -1
Всего: 0



Я проблемму описал выше,что у меня не получается,если вы внимательно читали. Если не хотите отвечать,тогда ничего не пишите.
PM MAIL   Вверх
zim22
Дата 21.7.2009, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



 smile 
Цитата(Golovastik @  21.7.2009,  18:06 Найти цитируемый пост)
Я проблемму описал выше,что у меня не получается,если вы внимательно читали.

жирней выделяйте текст. я обращаю внимание на ваши сообщения. и не только на форуме vingrad. у вас следующая тактика: привести какой угодно неработащий код и подождать пока за вас напишут программу. вы не считаете это хамством и неуважением к участникам форума?


--------------------
PM MAIL   Вверх
Golovastik
Дата 21.7.2009, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 19.7.2009

Репутация: -1
Всего: 0



Вроде так, но что-то не очень правильно...

Код


#include<iostream.h>

int main()
{

int k=0;

for (char j='A',i='a';i<='z';j++,i++){
cout << j << i << " ";
k++;
if (k%5==0) 
          {
          cout << "\n";
          k=0;
          }
}

cin.get();

return 0;
}



Это сообщение отредактировал(а) Golovastik - 21.7.2009, 18:18
PM MAIL   Вверх
zim22
Дата 21.7.2009, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



 smile 
Цитата(Golovastik @  21.7.2009,  18:12 Найти цитируемый пост)
Всё,не нужно, вот так это должно быть.

вы ещё скажите, что вы это сами написали? smile
сравним два варианта ваших же исходников:
Цитата

было:
Код

 #include <iostream>

стало:
Код

#include<iostream.h>



Цитата

было:
Код

#include <conio.h>
...
getch();


стало:
Код

cin.get();



Цитата

было:
Код

for(char c1 = 'A'; c1<= 'D'; c1++)


стало(обратите внимание на пробелы внутри):
Код

for (char j='A',i='a';i<='z';j++,i++){



и это появилось:
Код

return 0;




--------------------
PM MAIL   Вверх
mes
Дата 21.7.2009, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Golovastik, подказка : 'A'  можно расмотреть как 'A'+0, a 'A'+1  это 'B', 'A'+i где i € [0,5] будет 'A'..'Е'  - остальное аналогично. 
 Считаете максимальное кол-во строк и создаете цикл на столько элементов,
а потом проверяя условия каждого столбика выводите соответствующие буквы, используя переменную цикла как смещение.
 smile 

Это сообщение отредактировал(а) mes - 21.7.2009, 19:16


--------------------
PM MAIL WWW   Вверх
Golovastik
Дата 21.7.2009, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 19.7.2009

Репутация: -1
Всего: 0



Можно так, но не компилится.

Код


#include<iostream>
using namespace std;

int main()
{

char a=65,b=98,c=81,d=70,f=65;

for (int i=0;i<7;i++){
if (i<4) 
    cout << f++ << " " << a++ << " " << b++ << " " << c++ << " " << d++ << "\n";
if (i==4) 
   cout << "  " << a++ << " " << b++ << "  " << " " << d++ << "\n";
if (i>4)
  cout << " " << "  " << "  " << "  " << " " << \d++ << "\n";
}


cin.get();

return 0;
}


PM MAIL   Вверх
mes
Дата 21.7.2009, 20:25 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Golovastik @  21.7.2009,  19:18 Найти цитируемый пост)
char a=65,b=98,c=81,d=70,f=65;

вместо цифр намного удобнее использовать символы  : char a='A';


Цитата(Golovastik @  21.7.2009,  19:18 Найти цитируемый пост)
if (i<4) 

вместо того чтоб вручную считать, делайте арифметические операции над символами :
if (i<'E'-'A') cout<< 'A'+i;

Цитата(Golovastik @  21.7.2009,  19:18 Найти цитируемый пост)
Можно так, но не компилится.

ну так может поделитесь с нами той тайной, которую Вам сообщил компилятор найдя ошибку ?



--------------------
PM MAIL WWW   Вверх
zim22
Дата 21.7.2009, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(mes @  21.7.2009,  20:25 Найти цитируемый пост)
ну так может поделитесь с нами той тайной...

http://codepad.org/upN4xDJ3
Цитата(Golovastik @  21.7.2009,  20:18 Найти цитируемый пост)
 << \d++ <<



Это сообщение отредактировал(а) zim22 - 21.7.2009, 20:29


--------------------
PM MAIL   Вверх
Golovastik
Дата 21.7.2009, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 19.7.2009

Репутация: -1
Всего: 0



Всё работает. Нужно убрать в строке 15 \d++.  Напишите пожалуйста ваш вариант,может он будет более коректен.
PM MAIL   Вверх
zim22
Дата 21.7.2009, 21:37 (ссылка)    | (голосов:7) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(Golovastik @  21.7.2009,  20:30 Найти цитируемый пост)
Напишите пожалуйста ваш вариант,может он будет более коректен.

Код

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <stdexcept>

namespace Matrix {
  typedef  std::vector<std::vector<char> > VV;

  struct FillMatrix {
    FillMatrix(VV &rhs) : matrix_(rhs) { }
    void operator()(const std::string &str) {    
      if (str.size() != 2) throw std::logic_error("Format of range is incorrect\nBad string: " + str);
      
      static int iterationNum = 0;
      for (char begin = str[0]; begin != str[1] + 1; ++begin)
        matrix_[iterationNum].push_back(begin);    
      
      ++iterationNum;        
    }
  private:
    VV &matrix_; 
  };

  void NormalizeMatrix(VV &rhs) {
    int max = 0;
    for (VV::iterator it = rhs.begin(); it != rhs.end(); ++it)
      if (it->size() > max) max = it->size();
    
    for (VV::iterator it = rhs.begin(); it != rhs.end(); ++it)
      if (it->size() != max)
        it->resize(max, '\0');
  }

  void PrintMatrixInFlippedView(VV &rhs) {
    if (rhs.empty()) return;

    const int elementsNum = rhs[0].size();
      for (size_t i = 0; i != elementsNum; ++i) {
        for (size_t j = 0; j != rhs.size(); ++j) {      
          std::cout << rhs[j][i] << " ";    
        }    
        std::cout << std::endl;  
      }
  }
}
int main()
{  
  using namespace Matrix;

  const char *table[] = { "AD", "AE", "bf", "QT", "FL" };
  std::vector<std::string> vs(table, table + sizeof(table) / sizeof(*table));
  
  VV matrix(vs.size(), std::vector<char>());

  try {
    std::for_each(vs.begin(), vs.end(), FillMatrix(matrix));
    NormalizeMatrix(matrix);
    PrintMatrixInFlippedView(matrix);
  }
  catch(std::logic_error &ex) {
    std::cerr << ex.what() << std::endl;
    return EXIT_FAILURE;
  }
  return EXIT_SUCCESS;
}


Это сообщение отредактировал(а) zim22 - 21.7.2009, 21:46


--------------------
PM MAIL   Вверх
Golovastik
Дата 21.7.2009, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 19.7.2009

Репутация: -1
Всего: 0



Спасибо,код конечно длинный,но лучше. Даже проверенно на блок исключений. Спасибо zim22
Только не могу понять,а зачем использовать классы и создавать свои типы typedef

Это сообщение отредактировал(а) Golovastik - 21.7.2009, 22:00
PM MAIL   Вверх
mes
Дата 21.7.2009, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



zim22, не слишком ли сложно, особенно учитывая уровень автора ?
или это специально, чтоб раз и навсегда отучить его от Cpp ?
честно признаться, я хоть вроде уже не новичок, но самому жутко стало smile

мне кажется тут и простого варианта будет достаточно :
Код

#include <iostream>

char ranges [][2] = { 'A','D'
                    , 'A','E'
                    , 'b','f'
                    , 'Q','T'
                    , 'F','L'
                    };

const int ranges_row =  sizeof ranges/ sizeof ranges[2];

int main()
{

    for (unsigned i=0; i<ranges_row;)
    {
        i=0;
        for (unsigned j=0; j<ranges_row; ++j)
        {
            if (ranges[j][0]<=ranges[j][1]) std::cout<< ranges[j][0]++;
            else { ++i; std::cout<< ' '; }

            std::cout<< "  ";
        }
        std::cout<<std::endl;
    }

  return 0;
}

P.S.  контроль переполнения или неправильности составления диапазона не ведется.


Это сообщение отредактировал(а) mes - 21.7.2009, 22:29


--------------------
PM MAIL WWW   Вверх
GoldFinch
Дата 21.7.2009, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



zim22, твой код слишком сложен для задачи, при этом его нельзя повторно использовать и как-то модифицировать
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0602 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.