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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод графика функции в файл, График в текстовый файл. 
V
    Опции темы
Dikey
Дата 31.1.2010, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 6.3.2008
Где: Украина г.Изюм

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



Подскажите как можно реализовать рисование графика функции в текстовом файле с помощью символа "*".
Вот моя программка, но почему то рисует только 1 строку с 1 звездочкой и не делает переброс на следующую строку хотя и стоит endl
какие в ней могут быть проблемы??
Код

#include "stdio.h"
#include "iostream"
#include "math.h"
#include "fstream"
using namespace std;
int main(int argc, const char *argv[])
{
    int y=0;
    ofstream fil("look.txt");
    fil<<"Starting 31/01/2010"<<endl;
    while (y<50){
    for (int i=1;i<40;i++){
        fil.seekp (i);
    }
    fil<<"*"<<endl;
    y++;
    }
    fil.close();
}
    

PM MAIL WWW ICQ Skype   Вверх
Dikey
Дата 31.1.2010, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 6.3.2008
Где: Украина г.Изюм

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



Возможно нужно использовать 2х мерный массив, сначала график вложить в него а потом вывести массив???
PM MAIL WWW ICQ Skype   Вверх
cristaloleg
Дата 31.1.2010, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Dikey, а вы не заполняете пустое место пробелами...естественно у вас точки графика будут прилегать одна к одной, но ведь это не правильно.
PM   Вверх
Dikey
Дата 31.1.2010, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 6.3.2008
Где: Украина г.Изюм

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



Даже заполняя пустое место выходит одна строка,почемуто неправильно работает переход на новую строку.
PM MAIL WWW ICQ Skype   Вверх
нуп
Дата 31.1.2010, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


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

Репутация: нет
Всего: 33



попробуй "\r\n" вместо endl
PM MAIL   Вверх
bsa
Дата 1.2.2010, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Dikey, попробуй вместо ужаса внутри цикла while() использовать fil << std::setw(x+1) << std::setfill(' ') << '*' << std::endl;

Ошибка твоя в том, что ты перемещаешь указатель вывода в файл в позицию за его концом. По идее, должен включаться флаг ошибки и остальные операции должны игнорироваться до вызова fil.clear().
PM   Вверх
Dikey
Дата 2.2.2010, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 6.3.2008
Где: Украина г.Изюм

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



Подскажите по поводу функций std::setw(x+1) и std::setfill(' ')??
компилятор говорит undeclared
подключены следующие файлы 
Код

#include "stdio.h"
#include "iostream"
#include "math.h"
#include "fstream"


Какой подключить файл, чтоб работали вышеописанные функции?
PM MAIL WWW ICQ Skype   Вверх
bsa
Дата 2.2.2010, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



А google на что?
PM   Вверх
Dikey
Дата 2.2.2010, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 6.3.2008
Где: Украина г.Изюм

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



Цитата

А google на что? 

Сразу не подумал про гугл.
Подскажите что делаю неправильно?

Код

#include "stdafx.h"
#include "stdio.h"
#include "iostream"
#include "math.h"
#include "fstream"
#include "iomanip"
using namespace std;
char arr[70][70];
int main(int argc, const char *argv[])
{
    int y=0;
    int x=0;
    for (x=0;x<70;x++)
        
    ofstream fil("f:\\look.txt");
    fil<<"Starting 31/01/2010"<<endl;
    while (y<50){
    fil<<setw(x+1)<<setfill(' ')<<'*'<<endl;
    fil.close();
}
}

PM MAIL WWW ICQ Skype   Вверх
bsa
Дата 2.2.2010, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



1. стандартные хидеры нужно заключать в угловые скобки, а не в двойные кавычки. Двойные кавычки только для файлов твоего проекта.
2. зачем тебе stdio.h?
3. при каждом изменении x у тебя файл удаляется и создается новый. Думаю, ты не этого хотел.
4. есть цикл работающий по условию "пока y меньше пятидесяти", а где этот y увеличивается?
5. Зачем закрываешь файл сразу после записи в него данных? Ты понимаешь, что на следующей итерации цикла в файл больше ничего не запишется?

PM   Вверх
Dikey
Дата 2.2.2010, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 6.3.2008
Где: Украина г.Изюм

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



Спасибо за подсказки, я поспешил и не заметил этих очень грубых ошибок.
Теперь все работает, мой вопрос решен.Жаль я до этого сам не дошел, хоть мне и незнакомы объекты setw setfil.
С++ сложная штука, не могу никак понять логику, основные принципы ясны, но С++ это громадные библиотеки с которыми
еще нужно научится работать.
Код

#include "iostream"
#include "math.h"
#include "fstream"
#include "iomanip"
using namespace std;
char arr[70][70];
int main(int argc, const char *argv[])
{
    int y=0;
    int x=0;
    ofstream fil("f:\\look.txt");
    fil<<"Starting 31/01/2010"<<endl;
    for (x=0;x<100;x++)
    for (y=0;y<100;y++)
    fil<<setw(x+1)<<setfill(' ')<<'*'<<endl;
fil.close();
}


PM MAIL WWW ICQ Skype   Вверх
bsa
Дата 3.2.2010, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Про угловые скобки ты видимо не понял, писать надо так:
Код
#include <iostream>
#include <cmath> //это в С math.h, а в С++ cmath
#include <fstream>
#include <iomanip>
Зачем тебе глобальный массив arr? Сунь его в main().
Объекты типа fstream закрывать не обязательно - при уничтожении они закрываются автоматически. Это тебе не С.
Где форматирование кода?
Префиксная форма операторов приращения (++ и --) предпочтительней постфиксной, читать тут.
Вывод в поток std::endl довольно долгая операция, так как она связана с выгрузкой буферов на диск. Лучше выводить просто '\n'.
Короче, твоя программа должна выглядеть так:
Код
#include <iostream>
#include <cmath>
#include <fstream>
#include <iomanip>

using namespace std;

int main(int argc, const char *argv[])
{
    ofstream fil("f:\\look.txt");
    if ( !fil.is_open() ) {
        std::cerr << "Unable to open file" << endl;
        return 1;
    }
    fil << "Starting 31/01/2010\n";
    for (int x = 0; x < 100; ++x)
       for (int y = 0; y < 100; ++y)
          fil << setw(x+1) << setfill(' ') << "*\n";
   return 0;
}


Это сообщение отредактировал(а) bsa - 3.2.2010, 00:19
PM   Вверх
Dikey
Дата 3.2.2010, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 6.3.2008
Где: Украина г.Изюм

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



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

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

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

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

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


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

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


 




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


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

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