Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 1730 • Страница 65 из 87<  1 ... 62  63  64  65  66  67  68 ... 87  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 15.08.2007
kidoz

Код:
         
if( придумай условие сам! )
    printf( "*" );
else
    printf( " " );



Партнер
 

Member
Статус: Не в сети
Регистрация: 15.02.2009
Откуда: Лангепас
kidoz А в чём пишем? можно ли использовать коня (conio.h)? - там удобней будет, зато и либу выучишь ;)

Если, нельзя - то слушаемся progn.


 

Junior
Статус: Не в сети
Регистрация: 06.01.2008
oxy писал(а):
kidoz А в чём пишем? можно ли использовать коня (conio.h)? - там удобней будет, зато и либу выучишь ;)

Если, нельзя - то слушаемся progn.

В geany, gcc 4.4.3. Задача из самоучителя, использовать можно if, if...else, while, scanf, printf.
Код, который я запостил, это решение предыдущей, где надо нарисовать квадрат из звездочек с произвольными размерами стороны вводимых с клавиатуры.

Добавлено спустя 28 минут 19 секунд:
Может и не очень красиво, но работает.
Код:
#include <stdio.h>

int main()
{
   int x, y, i;
   
   printf( "Введите размерность квадрата: " );
   scanf( "%d", &x );
   
   y = 0;
   
   while ( y != x ) {
      i = 0;      
      
      if ( y == 0 ) {
         while ( i != x ) {
               printf( "*" );
               i++;
            }
      }
      
      else if ( y == ( x -1 ) ) {
         while ( i != x ) {
               printf( "*" );
               i++;
            }
         }
      else {
         while ( i != x ) {
            if ( i == 0 )
               printf( "*" );
            else if ( i == ( x - 1 ) )
               printf( "*" );
            else
               printf( " " );
               i++;
            }
      }

      printf( "\n" );
      y++;
   }
   
   return 0;
   
}


 

Member
Статус: Не в сети
Регистрация: 15.08.2007
kidoz
подумай какое из этих условий подойдет чтобы нарисовать 2 две стороны квадрата
1) y == 1 && y == x
2) y == 0 && y == x-1
3) y == 0 || y == x-1
4) y == 0 || y == x

как его дополнить чтобы рисовалось еще две надеюсь все же догадаешься сам :D

ps
это условие из куска кода что я приводил ранее

Добавлено спустя 2 минуты 37 секунд:
Код:
int main()
{
   int x, y, i;
   
   printf( "Введите размерность квадрата: " );
   scanf( "%d", &x );
   
   y = 0;
   
   while ( y != x ) {
      i = 0;     
      while ( i != x ) {
            // сам кусок вставить сюда
            i++;
         }

      printf( "\n" );
      y++;

   }
   
   return 0;
}


 

Junior
Статус: Не в сети
Регистрация: 06.01.2008
progn писал(а):
kidoz
подумай какое из этих условий подойдет чтобы нарисовать 2 две стороны квадрата
1) y == 1 && y == x
2) y == 0 && y == x-1
3) y == 0 || y == x-1
4) y == 0 || y == x

как его дополнить чтобы рисовалось еще две надеюсь все же догадаешься сам :D

ps
это условие из куска кода что я приводил ранее

Добавлено спустя 2 минуты 37 секунд:
Код:
int main()
{
   int x, y, i;
   
   printf( "Введите размерность квадрата: " );
   scanf( "%d", &x );
   
   y = 0;
   
   while ( y != x ) {
      i = 0;     
      while ( i != x ) {
            // сам кусок вставить сюда
            i++;
         }

      printf( "\n" );
      y++;

   }
   
   return 0;
}

Логическое И и ИЛИ в следующей главе, так что упражнение надо выполнить без их использования. Вариант под номером 3.


 

Member
Статус: Не в сети
Регистрация: 15.08.2007
kidoz

ну можно так извратиться

Код:
bool write_asterix = false;

if(y == 0)
    write_asterix = true;
if(y == x-1)
    write_asterix = true;
//условие для остальных двух сторон

if(write_asterix)
     printf( "*" );
else
     printf( " " );


 

Member
Статус: Не в сети
Регистрация: 10.12.2007
Откуда: Санкт-Петербург
доброго времени суток.
у меня вопрос
ведь объект абстрактного класса создать нельзя, а указатель можно? Класс CVehicle базовый, а CCar производный.
Код:
CVehicle *object;
object=new CCar;

_________________
Семь бед, один Reset. 95, 98 - это количество багов. В пpоцентах...
DCN - наше все


 

Member
Статус: Не в сети
Регистрация: 15.08.2007
manya
да


 

Member
Статус: Не в сети
Регистрация: 10.12.2007
Откуда: Санкт-Петербург
просто ругается на то, что "невозможно создать экземпляр абстрактного класса из-за следующих членов:" а далее указывает на виртуальные методы, вот например на virtual void Set_Number(int i)=0;

_________________
Семь бед, один Reset. 95, 98 - это количество багов. В пpоцентах...
DCN - наше все


 

Member
Статус: Не в сети
Регистрация: 15.08.2007
значит в CCar ты его не переопределила и CCar стал тоже абстрактным

т.е. нужно сделать так:

class CVehicle
{
virtual void Set_Number(int i)=0;
}

class CCar
{
void Set_Number(int i);
}

и сделать реализацию void CCar::Set_Number(int i)


 

Member
Статус: Не в сети
Регистрация: 10.12.2007
Откуда: Санкт-Петербург
спасибо)

_________________
Семь бед, один Reset. 95, 98 - это количество багов. В пpоцентах...
DCN - наше все


 

Advanced member
Статус: Не в сети
Регистрация: 30.08.2003
Откуда: Санкт-Петербург
kidoz
Во-первых, использовать цикл for. Это логичнее.
Во-вторых, нужно два вложенных цикла по переменной-счетчику от 0 до X. Во внутреннем цикле печаете * в случае индекс=0 или индекс=размерность квадрата. Также обратите внимание, что внутренний цикл должен полностью пропечатать две строки *. В случае когда внешний индекс = 0 или когда индекс внешнего цикла = размерности квадрата. Во внешнем цикле - по окончанию каждой строчки - перевод на новую строку.

_________________
{:€ дед в законе :-) нородный окодемег
почетный пользователь OpenSuSE 11.3
Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad


 

Junior
Статус: Не в сети
Регистрация: 06.01.2008
Root писал(а):
kidoz
Во-первых, использовать цикл for. Это логичнее.
Во-вторых, нужно два вложенных цикла по переменной-счетчику от 0 до X. Во внутреннем цикле печаете * в случае индекс=0 или индекс=размерность квадрата. Также обратите внимание, что внутренний цикл должен полностью пропечатать две строки *. В случае когда внешний индекс = 0 или когда индекс внешнего цикла = размерности квадрата. Во внешнем цикле - по окончанию каждой строчки - перевод на новую строку.

Это упражнение для тренировки и закрепления уже изученного материала. for в следующей главе. Мой вариант вполне рабочий.


 

Member
Статус: Не в сети
Регистрация: 10.12.2007
Откуда: Санкт-Петербург
еще раз всем добрый вечер)
Есть некоторый абстрактный класс и 3 классa, который наследует от него
т.е class CCar : public CVehicle, class CPlane:public CVehicle, class CShip:public CVehicle
Необходимо создать список объектов этих классов. Если бы был один объект, то было бы все так
Код:
CVehicle *object;
object=new CCar;
...

а тут нужен список....Дело не в том, что я не могу создать список :-), а в том, что я не очень представляю как все это записать...
Если бы не было никаких классов, то можно было бы так:
Код:
struct List{
int elements;
struct List *next;
}

и тд
а тут затык :insane:

_________________
Семь бед, один Reset. 95, 98 - это количество багов. В пpоцентах...
DCN - наше все


 

Member
Статус: Не в сети
Регистрация: 15.02.2009
Откуда: Лангепас
manya писал(а):
еще раз всем добрый вечер)
Есть некоторый абстрактный класс и 3 классa, который наследует от него
т.е class CCar : public CVehicle, class CPlane:public CVehicle, class CShip:public CVehicle
Необходимо создать список объектов этих классов
}


Ох... Для этого и созданы наследование и полиморфизм - основы объектного программирования.

Необходимо создавать список базового (который часто бывает абстрактным классом), и просто указателям на объекты присваивать реальные экземпляры дочерних классов.

Например:

Код:

#include <stdio.h>
class Base
{
  public:
     void fun(void)=0;
}

class A : public Base
{
  public:
     void fun(void){printf("A");};
}
class B : public Base
{
  public:
     void fun(void){printf("B);};
}

void main(....)
{int i;
 Base  *List[5];

 for(i=0;i<5;i++)
 {if(i&1)
     List[i] = new A;
  else
     List[i] = new B;  }

 for(i=0;i<5;i++)     List[i]->fun();

 for(i=0;i<5;i++)  delete List[i];

}


Ну примерно так - писал вместе с ответом на текст - наобум...


 

Member
Статус: Не в сети
Регистрация: 15.08.2007
manya
если хочешь сделать однонаправленный список, то должно быть два класса, узел (который хранит элемент списка) и сам список.

т.е.
struct Node
{
CVehicle *element;
CVehicle *next;
};

class List
{
public:
void insert_to_start(CVehicle *);
void remove_first();
Node* first() const;
Node* next(const Node*) const;

private:
int count;
Node *first;
Node *current;
};


ps
но в промышленном коде обычно используют STL

#include <list>

std::list<CVehicle> list_of_vehicle;


std::list - двунаправленный список


 

Member
Статус: Не в сети
Регистрация: 10.12.2007
Откуда: Санкт-Петербург
спасибо всем большое

_________________
Семь бед, один Reset. 95, 98 - это количество багов. В пpоцентах...
DCN - наше все


 

Member
Статус: Не в сети
Регистрация: 08.05.2006
Откуда: СПБ
есть у меня файл, в котором много записей
и надо заменить строку в файле на новую
вот как сделать?
пока что получается что я всю старую строку заполняю пробелами, но тогда в конце получаются пробелы если новая строка меньше старой,не есть хорошо.
вот хотел еще заполнить строку символами '\0', но строка старая в файле остается
Язык Си, компилятор gcc

_________________
Мы все знаем, что Linux — это круто… он выполняет бесконечные циклы за 5 секунд.
* Линус Торвальдс


 

Member
Статус: Не в сети
Регистрация: 15.08.2007
Russian
найти начало строки которую нужно заменить, найти ее конец, прочитать файл от этого конца в буфер, записать новую строку в файл от начала, записать хвост.

ps
если файл очень большой, то придеться читать и записывать "хвост" порциями, в несколько этапов


 

Member
Статус: Не в сети
Регистрация: 08.05.2006
Откуда: СПБ
progn писал(а):
записать новую строку в файл от начала, записать хвост.

не совсем понял этот момент

_________________
Мы все знаем, что Linux — это круто… он выполняет бесконечные циклы за 5 секунд.
* Линус Торвальдс


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 1730 • Страница 65 из 87<  1 ... 62  63  64  65  66  67  68 ... 87  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan