C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Нужна помощь, с элементраным заданием на С
NEOBIR
Отправлено: 13.08.2004, 14:16


Дежурный стрелочник

Группа: Участник
Сообщений: 31



Скажите где ошибка?
CODE

#include <stdio.h>

int main()
{
int counter=0, modul=0, a=0, b=0;

printf( "Input square side (21, END!): ");
scanf( "%d", &a );
b = a * a;
printf( "%d\n\n", b);

while (a!=21) {

 while (counter != b) {
  printf( "* " );
  ++counter;
  modul = counter % a;
  if ( modul == 0)
   printf( "\n");
 }
printf( "Input square side (21, END!): ");
scanf( "%d", &a );
b = a * a;
printf( "%d\n\n", b);
}

return 0;
}


задача, написать программу, считывающую размер стороны квадрата и затем выводящую этот квадрат в виде звездочек.
Для первого квадрата все получается но на следующих отображате некорректно wink.gif где то я намудрил с while но понять не могу где sad.gif
подскажите ?

Отредактировано NEOBIR — 13/08/2004, 15:27
Shura
Отправлено: 13.08.2004, 15:22


Дежурный стрелочник

Группа: Участник
Сообщений: 45



Попробуй так:

CODE


#include <stdio.h>

int main()
{
int counter=0, modul=0, a=0, b=0;

while (1) {
printf( "Input square side (21, END!): ");
scanf( "%d", &a );
if(a==21)break;
b = a * a;
printf( "%d\n\n", b);
while (counter != b) {
 printf( "* " );
 ++counter;
 modul = counter % a;
 if ( modul == 0)
  printf( "\n");
}
}

return 0;
}


NEOBIR
Отправлено: 13.08.2004, 15:53


Дежурный стрелочник

Группа: Участник
Сообщений: 31



неа, тоже приглючиватет sad.gif

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

#include <stdio.h>

int main()
{
int counter=0, modul=0, a=0, b=0;

printf( "Input square side (21, END!): ");
scanf( "%d", &a );
b = a * a;
printf( "%d\n\n", b);

 while (counter != b) {
 printf( "* " );
 ++counter;
 modul = counter % a;
 if ( modul == 0)
  printf( "\n");
 }

return 0;
}


Отредактировано NEOBIR — 13/08/2004, 16:56
Guest
Отправлено: 13.08.2004, 15:59


Не зарегистрирован







Убрав один while из кода Shura вы сами его сделали одноразовым. Найдите отличия и поправьте у себя.
NEOBIR
Отправлено: 13.08.2004, 16:39


Дежурный стрелочник

Группа: Участник
Сообщений: 31



код Шура работает также как и мой, тоесть — некорректно.

я специально убрал все лишнее(чтоб не загромождать ошибками) из своего примера,чтоб он стал одноразовым, тогда все работает корректно, вот как теперь его переработать. чтоб после ввода, обработки и вывода, программа не завершалась, а предлагала ввести следующие значение на обработку ?

Отредактировано NEOBIR — 13/08/2004, 17:42
Gedeon
Отправлено: 13.08.2004, 17:45


Ветеран

Группа: Модератор
Сообщений: 1742



Вы че? Элементарно же
CODE

//---------------------------------------------------------------------------

#pragma hdrstop
#include <stdio>

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
int counter=0, modul=0, a=0, b=0;

printf( "Input square side (21, END!): ");
scanf( "%d", &a );
b = a * a;
printf( "%d\n\n", b);

while (a!=21) {

while (counter != b) {
printf( "* " );
++counter;
modul = counter % a;
if ( modul == 0)
printf( "\n");
}
// ******************************************
       counter=0; // добавка одной строки рулит немерянно
       // ******************************************
printf( "Input square side (21, END!): ");
scanf( "%d", &a );
b = a * a;
printf( "%d\n\n", b);

}

return 0;
}
//---------------------------------------------------------------------------


Отредактировано Gedeon — 13/08/2004, 18:52
NEOBIR
Отправлено: 13.08.2004, 21:18


Дежурный стрелочник

Группа: Участник
Сообщений: 31



хех, внушает, это на С или С++ ?

Дело в том что я читаю книгу(Дейтлов "как программировать на С") и там во 2ой главе, тоесть самом начале, задание, и я еще не дошел до всего что ты написал, поетому и спрашиваю, прогу учесть что я в программировании пока что ноль wink.gif

вобще задание стоит просто написать программу для рисования квадратов, что я и сделал, а чтоб она не вырубалась ето уже инициатива, чтоб удобнее было smile.gif

И еще такой вопрос, как сделать чтоб программа так же считивала размер от 1 до 20 и выводил соответствующий квадрат звездочками но полый, напирмер, если введено 5, т опрограмма должна вывести:
CODE

*****
*      *
*      *
*      *
*****


?

а за код спасибо smile.gif все отлично работает

Отредактировано NEOBIR — 13/08/2004, 22:24
Георгий
Отправлено: 13.08.2004, 21:38


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



ужас! чему детей учите??
эту задачу решать надо так:
CODE
int     GetRectLen      (void);
void    DrawRect        (int);
void    DrawRectangles  (void);

int main(int argc, char* argv[])
{
       DrawRectangles();
       return 0;
}
//---------------------------------------------------------------------------

//      классы генерируемых исключений
//ошибка чтения
class readError{};
//ошибка записи
class writeError{};

//Описание:
//      функция выполняющая лабораторную работу №XXL
//      заключающуюся в чтении со стандартного входного потока
//      длины стороны квадрата и изображении квадрата с заданной
//      длиной стороны используя символы псевдоргафики ( * ) на
//      стандартном выходном потоке
//
//Входные данные:
//      текстовое представление целого числа
//
//Выходные данные:
//      n строк на первой и последней из которых находится n звёздочек
//      а на промежуточных по 2 звёздочки и (n-2) пробела,
//      расположенных между звёздочками
//
//обработка ошибок ввода:
//      если введено не число, то работа функции завершается
//      в противном случае функция переходит в режим чтения числа
//
//      если не удалось выполнить запись в выходной поток, то завершение работы
//
//алгоримт работы:
//      1. вызвать функцию чтения стороны квадрата
//      2. если не удалось прочитать число, то выход
//      3. вызов функции отображения квадрата
//      4. если не удалось тотбразить квадрат, то аварийный выход
//      5. перейти на шаг #1

void DrawRectangles(void)
       {
       for(;;) {
               try{
                       const int len = GetRectLen();
                       DrawRect(len);
               }catch( readError& )
                       {
                       fprintf(stderr, "error read args\n");
                       break;
                       }
               catch( writeError& )
                       {
                       fprintf(stderr, "error to screen\n");
                       break;
                       };
               };
       getch();
       };

//Описание:
//      функция выполняющая чтение со стандартного входного потока
//      длины стороны квадрата
//
//Входные данные:
//      текстовое представление целого числа
//
//Выходные данные:
//      длина строны квадрата
//
//обработка ошибок ввода:
//      если введено не число, то генерация исключение типа readError
//      если вывод не удался, то генерация исключения типа writeError
//
//алгоримт работы:
//      1. вызвать функцию чтения числа со стандартного потока
//      2. если не удалось прочитать число или оно не больше 1 или больше 80
//         то генерация исключения типа readError
//      3. возврат прочитанного числа
int GetRectLen(void)
       {
       int len=0;

       const int ret = printf("enter square len:");
       const bool outError = ret == EOF;
       if ( outError )
               throw writeError();

       const int readLen = scanf("%d",&len);

       const bool readFauled = (readLen != 1);
       const bool outOfRange = ((len <= 1) || (len > 80));
       const bool error = readFauled || outOfRange;

       if ( error )
               throw readError();

       return len;
       };

//Описание:
//      функция выполняющая запись в стандартный выходной поток
//      заданного числа заданных символов
//
//Входные данные:
//      n — число экземпляров символа для вывода
//      c — символ для вывода
//
//обработка ошибок ввода:
//      если вывод не удался, то генерация исключения writeError
//
void PrintChars(int n, char c)
       {
       for ( int i = 0; i < n; ++i )
               {
               const int ret = printf("%c",c);
               const bool error = ret == EOF;
               if ( error )
                       throw writeError();
               };
       };

//Описание:
//      функция выполняющая запись в стандартный выходной поток
//      квадрата состовленного из звёздочек
//
//Входные данные:
//      len — размер стороны квадрата
//
//обработка ошибок ввода:
//      если вывод не удался, то генерация исключения writeError
//алгоритм работы
//      1. вывод n звёздочек
//      2. вывод звёздочки
//      3. вывод n-2 пробела
//      4. вывод звёздочки
//      5. повторить пункты 2-4 (n-2) раза
//      6. вывод n звёздочек
void DrawRect(int len)
       {
       const int begin = 1;
       const int end = len — 1;
       const int fillLen = end — begin;

       const char CharToOut = '*';
       const char Filler    = ' ';

       PrintChars( len, CharToOut );
       PrintChars( 1, '\n' );
       for(int y=begin; y < end; ++y)
               {
               PrintChars( 1, CharToOut );
               PrintChars( fillLen, Filler );
               PrintChars( 1, CharToOut );
               PrintChars( 1, '\n' );
               };
       PrintChars( len, CharToOut );
       PrintChars( 1, '\n' );
       };

ну как ? страшно?
а тут ведь даже нет функциональных тестов biggrin.gif
NEOBIR
Отправлено: 13.08.2004, 23:23


Дежурный стрелочник

Группа: Участник
Сообщений: 31



да внушает, тока пока непонятно к сожалению.
Яж написал, что только начал изучать и прошел 3 главы, в которых рассматривались только: printf/scanf, if/else,while и простейшие арифметические действия как *, /, +, -, %б т.е. для написания нужно пользоватся ими.
NEOBIR
Отправлено: 15.08.2004, 09:39


Дежурный стрелочник

Группа: Участник
Сообщений: 31



Спасибо всем откликнувшемся, но ка всегда все оказалось гораздо проще чем казалось на первый взгляд smile.gif
CODE

#include <stdio.h>

int main()
{
int x=0,y=0, a;

printf( "Input square side (-1, END): ");
scanf( "%d", &a );

while (a!=-1) {
y=0;
while (y<a) {
x=0;
while (x<a) {
printf("* ");
++x;
}
printf("\n");
++y;
}
printf( "Input square side (-1, END): ");
scanf( "%d", &a );
}

return 0;
}


все отлично работает и без наваротов

Отредактировано NEOBIR — 15/08/2004, 10:48

Вернуться в Вопросы программирования в C++Builder