Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.83
maniac0192
17 / 17 / 3
Регистрация: 27.11.2011
Сообщений: 141
#1

Вейвлет Хаара 2.Ввод и вывод. - C++

30.11.2011, 15:18. Просмотров 3914. Ответов 32
Метки нет (Все метки)

Есть две программы. 1-ая это прямое преобразование Хаара. 2-ая это собственно обратное. Что нужно бы сделать. Нужно считать файл input.dat проделать преобразования 1-ой программой, и получить файл output.dat в которое выводиться это преобразование. Затем взять файл ounput.dat и проделать обратное преобразование 2-ой программой и вывести в файл output2.dat, чтобы потом можно было сравнить с файлом input.dat. вывод должен происходить в столбик. Число элементов массива в каждом файле можно записать в начале. И самый главный вопрос, можно ли сделать так, чтобы при вводе появлялась консоль, в которой бы запрашивалась имя входного и выходного файла. Искал в интернете ничего про это не нашел, кроме того что в UNIX можно перенаправлять потоки и таким образом это реализовывать. А как это сделать для WINDOWS не очень понятно. может кто подскажет где про это можно почитать, или даст какой нибудь пример кода...или просто подсказку. Если нужно код 1ой и 2ой программы выложу.
Заранее спасибо за помощь!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2011, 15:18     Вейвлет Хаара 2.Ввод и вывод.
Посмотрите здесь:

Запись выражений, ввод–вывод информацииЗапись выражений, ввод–вывод информации C++
ввод n-значного числа, вывод цифр, из которых оно состоит и вывод суммы его цифр. C++
C++ Каскады хаара
Товарищи помогите с вейвлетом Хаара C++
C++ Прямое и обратное преобразование Хаара
Ввод и вывод на C++ C++
C++ Поменять консольный ввод-вывод на файловый ввод-вывод
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HighPredator
5458 / 1824 / 335
Регистрация: 10.12.2010
Сообщений: 5,391
Записей в блоге: 3
30.11.2011, 20:45     Вейвлет Хаара 2.Ввод и вывод. #2
Сложно как-то сформулировали. Я так понял вам нужна консольная программа которая бы "кормила" двум другим программам файлы на вычисление?
maniac0192
17 / 17 / 3
Регистрация: 27.11.2011
Сообщений: 141
01.12.2011, 00:42  [ТС]     Вейвлет Хаара 2.Ввод и вывод. #3
На самом деле, задумавшись я понял вот что. Мне нужно сделать так, чтобы был входной файл, производилось изменение(преобразование) данного файла, затем полученные значения выдаются в выходной файл.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
using namespace std;
 
int main ()
{
    int n;
std::cout << "Enter n:\n>";
std::cin >> n;
float* a = new float[n];
for (int k = 0; k <= n-1; k++)
{
    std::cin >> a[k];
}
int m;
float *b=new float [m];
float *c=new float [m];
m = n/2;
 
for (int j=0; j<m ; j++)
{
        b[j]=(a[2*j]-a[2*j+1])/2;
        c[j]=(a[2*j]+a[2*j+1])/2;
}
 
std::cout<<"raznost: ";
for(int j=0; j<m;j++)
{
      std::  cout<<b[j]<<endl<<" ";
}
 
std::cout<<"\n";
std::cout<<"summa: ";
for(int j=0; j<m;j++)
{
        std::cout<<c[j]<<endl<<" ";
}
std::cout<<"\n";
//system("PAUSE");
return 1;
}
выходной файл, я хочу использовать во второй программе. собственно это обратное преобразование. я делаю выходной файл первой программы входным для второго. делаю преобазование...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
using namespace std;
int main ()
{
        int n; 
        std::cout << "Enter n:\n>";
        std::cin >> n;
        float* a = new float[n];
        std::cout<<"massiv a:\n";
        for (int i = 0; i <= n-1; i++)
        {
           std::cin >> a[i];
        }
        float* b = new float[n];
        std::cout<<"massiv b:\n";
        for (int j = 0; j <= n-1; j++)
        {
            std::cin >> b[j];
        }
         float* c = new float [n*2];
        std::cout<<"ishodnii: \n ";
        for(int k = 0, i = 0; i < n; k+=2, i++)
        {
                  c[k] = a[i] + b[i];
                  c[k+1] = a[i] - b[i];
        }
 
        for(int k=0; k<n*2; k++)
        {
                std:: cout<<c[k]<<endl<<" ";       
        }
        //system("pause");
}
получаю выходной файл, который должен быть абсолютно похож на входной файл 1ой программы, следственно это всё проделывается, лишь для определения правильности или неправвильности преобразования, т.к для большого числа точек это трудоёмко.
HighPredator
5458 / 1824 / 335
Регистрация: 10.12.2010
Сообщений: 5,391
Записей в блоге: 3
01.12.2011, 14:37     Вейвлет Хаара 2.Ввод и вывод. #4
Так и не понял в чем вопрос...
maniac0192
17 / 17 / 3
Регистрация: 27.11.2011
Сообщений: 141
01.12.2011, 18:18  [ТС]     Вейвлет Хаара 2.Ввод и вывод. #5
1 ое. Объясните мне пожалуйста как мне сделать ввод массива коэффицентов не из консоли, а из файла. И вывод полученых значений в файл.

Добавлено через 1 час 21 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include<fstream>
using namespace std;
 
int n;
int m = n/2;
ifstream f1("input.txt");
ofstream f2("output.txt");
void InArray (float []);
void OutArray(float [],float []);
void Change(float [],float [],float []);
 
int main()
{
     float a[n];
     float b[m];
     float c[m];
     InArray(a);
     OutArray(b,c);
     Change(a,b,c);
     }
 
void InArray(float a[])
{
     for (int k = 0; k <= n-1; k++)
     {
         f1>> a[k];
     }
}
 
void Change(float a[],float b[],float c[])
{
     for (int j=0; j<m ; j++)
         {
              b[j]=(a[2*j]-a[2*j+1])/2;
              c[j]=(a[2*j]+a[2*j+1])/2;
         }
}
void OutArray(float b[],float c[])
{
std::cout<<"raznost: ";
for(int j=0; j<m;j++)
{
      f2<<b[j]<<endl<<" ";
}
 
std::cout<<"\n";
std::cout<<"summa: ";
for(int j=0; j<m;j++)
{
        f2<<c[j]<<endl<<" ";
}
std::cout<<"\n";
}

я изменил программу чтобы читала из файла и выводила в файл.... Вопрос:
1. Я теперь сделал функции, компилируется но не работает, в чём проблема?
2. Как задавать размер входного массива?? как понимаю первое число в файле input???
HighPredator
5458 / 1824 / 335
Регистрация: 10.12.2010
Сообщений: 5,391
Записей в блоге: 3
01.12.2011, 19:10     Вейвлет Хаара 2.Ввод и вывод. #6
Так... То есть вам нужно определить лежат ли одни и те же значения (коэффициенты) в input.txt и output.txt?
maniac0192
17 / 17 / 3
Регистрация: 27.11.2011
Сообщений: 141
01.12.2011, 19:21  [ТС]     Вейвлет Хаара 2.Ввод и вывод. #7
нет.
1. сначала выполнить прямое преобразование 1-ой программой. получить ответ в файле.
взять файл в котором получен ответ,посмотреть его. ((220, 211, 212, 218, 217, 214, 210, 202). После применения преобразования Хаара получаются следующие две последовательности a1 и b1: (215.5, 215, 215.5, 206) и (4.5, -3, 1.5, 4). )
2. Берём файл в котором получили ответ.((215.5, 215, 215.5, 206) и (4.5, -3, 1.5, 4).) и подаём на вход второй программе, на выходе получим новый выходной файл с результатами которые должны равняться (220, 211, 212, 218, 217, 214, 210, 202).
вот, что нужно попытаться реализовать.
HighPredator
5458 / 1824 / 335
Регистрация: 10.12.2010
Сообщений: 5,391
Записей в блоге: 3
01.12.2011, 20:02     Вейвлет Хаара 2.Ввод и вывод. #8
Ага, а те две программы о которых вы говорите, способны принимать и выдавать на выходе файлы? Может их код есть?
maniac0192
17 / 17 / 3
Регистрация: 27.11.2011
Сообщений: 141
01.12.2011, 20:10  [ТС]     Вейвлет Хаара 2.Ввод и вывод. #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include<fstream>
using namespace std;
 
int n;
int m = n/2;
ifstream f1("input.txt");
ofstream f2("output.txt");
void InArray (float []);
void OutArray(float [],float []);
void Change(float [],float [],float []);
 
int main()
{
     float a[n];
     float b[m];
     float c[m];
     InArray(a);
     OutArray(b,c);
     Change(a,b,c);
     }
 
void InArray(float a[])
{
     for (int k = 0; k <= n-1; k++)
     {
         f1>> a[k];
     }
}
 
void Change(float a[],float b[],float c[])
{
     for (int j=0; j<m ; j++)
         {
              b[j]=(a[2*j]-a[2*j+1])/2;
              c[j]=(a[2*j]+a[2*j+1])/2;
         }
}
void OutArray(float b[],float c[])
{
std::cout<<"raznost: ";
for(int j=0; j<m;j++)
{
      f2<<b[j]<<endl<<" ";
}
 
std::cout<<"\n";
std::cout<<"summa: ";
for(int j=0; j<m;j++)
{
        f2<<c[j]<<endl<<" ";
}
std::cout<<"\n";
}
это я попробывад организовать ввод и вывод файлов, т.е изменил программу
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
using namespace std;
 
int main ()
{
    int n;
std::cout << "Enter n:\n>";
std::cin >> n;
float* a = new float[n];
for (int k = 0; k <= n-1; k++)
{
    std::cin >> a[k];
}
int m;
float *b=new float [m];
float *c=new float [m];
m = n/2;
 
for (int j=0; j<m ; j++)
{
        b[j]=(a[2*j]-a[2*j+1])/2;
        c[j]=(a[2*j]+a[2*j+1])/2;
}
 
std::cout<<"raznost: ";
for(int j=0; j<m;j++)
{
      std::  cout<<b[j]<<endl<<" ";
}
 
std::cout<<"\n";
std::cout<<"summa: ";
for(int j=0; j<m;j++)
{
        std::cout<<c[j]<<endl<<" ";
}
std::cout<<"\n";
//system("PAUSE");
return 1;
}
Добавлено через 56 секунд
где ошибка????почему не работает преобразование??????????7
HighPredator
5458 / 1824 / 335
Регистрация: 10.12.2010
Сообщений: 5,391
Записей в блоге: 3
01.12.2011, 20:46     Вейвлет Хаара 2.Ввод и вывод. #10
Логику работы расскажите.

Добавлено через 1 минуту
В конце обычно возвращают ноль как критерий успешной работы.

Добавлено через 9 минут
Цитата Сообщение от maniac0192 Посмотреть сообщение
почему не работает преобразование?
Что именно не работает? Не те значения на выходе?
maniac0192
17 / 17 / 3
Регистрация: 27.11.2011
Сообщений: 141
01.12.2011, 20:55  [ТС]     Вейвлет Хаара 2.Ввод и вывод. #11
по коду всё правильно? так? раньше,где я вводил массив с клавиатуры. всё работало нормально. теперь я переправил программу (назовём её А) чтобы были входные и выходные данные из файлов, при беру файл ввода, пишу там значения, а файл вывода остаётся пустым
может я как то не правильно функции сделал. или еще что-то.
в последствии нужно взять программу Б, она делает обратное преобразование, и переделать её таким же образом, если написать третью программу С которая будет сравнивать Входной файл программы А и ВЫходной файл программы В, то будет вообще я думаю отлично.
HighPredator
5458 / 1824 / 335
Регистрация: 10.12.2010
Сообщений: 5,391
Записей в блоге: 3
01.12.2011, 21:04     Вейвлет Хаара 2.Ввод и вывод. #12
1) После использования файлов закрывайте их. И смотрите можно ли создать/открыть. Советую освежить в памяти файловый ввод-вывод. На всякий случай.
2) Вы уверены, что вообще что-то считается без ошибок?
maniac0192
17 / 17 / 3
Регистрация: 27.11.2011
Сообщений: 141
01.12.2011, 21:13  [ТС]     Вейвлет Хаара 2.Ввод и вывод. #13
вообще ничего не считается, а раньше всё считалось нормально.
HighPredator
5458 / 1824 / 335
Регистрация: 10.12.2010
Сообщений: 5,391
Записей в блоге: 3
01.12.2011, 21:21     Вейвлет Хаара 2.Ввод и вывод. #14
Цитата Сообщение от maniac0192 Посмотреть сообщение
вообще ничего не считается
На экран пробовали выводить?
maniac0192
17 / 17 / 3
Регистрация: 27.11.2011
Сообщений: 141
01.12.2011, 21:28  [ТС]     Вейвлет Хаара 2.Ввод и вывод. #15
нет, а как, подскажите пожалуйста, я понимаю как это сделать без файлов, а вот в новой программе с файлами не очень понимаю
HighPredator
5458 / 1824 / 335
Регистрация: 10.12.2010
Сообщений: 5,391
Записей в блоге: 3
01.12.2011, 21:42     Вейвлет Хаара 2.Ввод и вывод. #16
Так же через cout. Текст я смотрю вы пытались им в последнем коде выводить. Выведите еще и значения.
maniac0192
17 / 17 / 3
Регистрация: 27.11.2011
Сообщений: 141
01.12.2011, 21:50  [ТС]     Вейвлет Хаара 2.Ввод и вывод. #17
текст выводится, а вот значения из input нет(((((((что делать не пойму. а может вы посоветуете попроще переписать ввод вывод через файлы программы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
using namespace std;
 
int main ()
{
    int n;
std::cout << "Enter n:\n>";
std::cin >> n;
float* a = new float[n];
for (int k = 0; k <= n-1; k++)
{
    std::cin >> a[k];
}
int m;
float *b=new float [m];
float *c=new float [m];
m = n/2;
 
for (int j=0; j<m ; j++)
{
        b[j]=(a[2*j]-a[2*j+1])/2;
        c[j]=(a[2*j]+a[2*j+1])/2;
}
 
std::cout<<"raznost: ";
for(int j=0; j<m;j++)
{
      std::  cout<<b[j]<<endl<<" ";
}
 
std::cout<<"\n";
std::cout<<"summa: ";
for(int j=0; j<m;j++)
{
        std::cout<<c[j]<<endl<<" ";
}
std::cout<<"\n";
//system("PAUSE");
return 1;
}
HighPredator
5458 / 1824 / 335
Регистрация: 10.12.2010
Сообщений: 5,391
Записей в блоге: 3
01.12.2011, 22:24     Вейвлет Хаара 2.Ввод и вывод. #18
Цитата Сообщение от maniac0192 Посмотреть сообщение
что делать не пойму
Учите матчасть. То есть. Потоковый ввод вывод в консольных приложениях с++ (ключевые слова cin/cout). Только после этого садитесь за файлы. Почему такой ответ? Смотрите ваш код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void OutArray(float b[],float c[])
{
  std::cout<<"raznost: ";
  for(int j=0; j<m;j++)
  {
        f2<<b[j]<<endl<<" ";
  }
 
  std::cout<<"\n";
  std::cout<<"summa: ";
  for(int j=0; j<m;j++)
  {
         f2<<c[j]<<endl<<" ";
  }
  std::cout<<"\n";
}
Цитата Сообщение от maniac0192 Посмотреть сообщение
текст выводится, а вот значения из input нет(((((((что делать не пойму
В данной подпрограмме у вас вообще нет вывода числовых значений на экран через cout. А поскольку это вам неочевидно, то знания имеет смысл подтянуть. Это вам поможет в дальнейшем точнее понимать суть вашей проблемы.

Не по теме:

Заметил, что форум чего-то на зимнем времени Ау! Администрация!

maniac0192
17 / 17 / 3
Регистрация: 27.11.2011
Сообщений: 141
02.12.2011, 00:29  [ТС]     Вейвлет Хаара 2.Ввод и вывод. #19
я понимаю что это потоковый ввод и вывод, я просто не убрал эту чушь при переделывании кода.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2011, 10:15     Вейвлет Хаара 2.Ввод и вывод.
Еще ссылки по теме:

Файловый ввод-вывод, ввод с клавиатуры и обработка массива структур C++
C++ Заменить в программе, переводящую строку в двоичный код, консольный ввод/вывод на файловый ввод/вывод
C++ Вывод суммы в файл (файловый ввод/вывод)
C++ Поиск в массиве структур по заданному полю и вывод в алфавитном порядке (файловый ввод/вывод)
C++ Реализовать вывод массива объектов типа Student на консоль (файловый ввод/вывод)

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
HighPredator
5458 / 1824 / 335
Регистрация: 10.12.2010
Сообщений: 5,391
Записей в блоге: 3
02.12.2011, 10:15     Вейвлет Хаара 2.Ввод и вывод. #20
Выложите код с которым работаете в данный момент и постарайтесь максимально кратко и четко сформулировать вопрос, избегая большого количества посторонней информации.
Yandex
Объявления
02.12.2011, 10:15     Вейвлет Хаара 2.Ввод и вывод.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru