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;
}
|
задача, написать программу, считывающую размер стороны квадрата и затем выводящую этот квадрат в виде звездочек.
Для первого квадрата все получается но на следующих отображате некорректно где то я намудрил с while но понять не могу где
подскажите ?
Отредактировано 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
|
неа, тоже приглючиватет
вобщем вот этот код работает но один раз, тоесть по завершению программа вырубается, а я хотел сделать чтоб она работала с несколькоми значениями а то каждый раз запускать файлик утомляет.
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ой главе, тоесть самом начале, задание, и я еще не дошел до всего что ты написал, поетому и спрашиваю, прогу учесть что я в программировании пока что ноль
вобще задание стоит просто написать программу для рисования квадратов, что я и сделал, а чтоб она не вырубалась ето уже инициатива, чтоб удобнее было
И еще такой вопрос, как сделать чтоб программа так же считивала размер от 1 до 20 и выводил соответствующий квадрат звездочками но полый, напирмер, если введено 5, т опрограмма должна вывести:
CODE |
*****
* *
* *
* *
*****
|
?
а за код спасибо все отлично работает
Отредактировано 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' );
};
| ну как ? страшно?
а тут ведь даже нет функциональных тестов
|
|
NEOBIR |
Отправлено: 13.08.2004, 23:23 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 31
|
да внушает, тока пока непонятно к сожалению.
Яж написал, что только начал изучать и прошел 3 главы, в которых рассматривались только: printf/scanf, if/else,while и простейшие арифметические действия как *, /, +, -, %б т.е. для написания нужно пользоватся ими. |
|
NEOBIR |
Отправлено: 15.08.2004, 09:39 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 31
|
Спасибо всем откликнувшемся, но ка всегда все оказалось гораздо проще чем казалось на первый взгляд
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 |
|
|