17 / 17 / 5
Регистрация: 27.11.2011
Сообщений: 141
1

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

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

Author24 — интернет-сервис помощи студентам
Есть две программы. 1-ая это прямое преобразование Хаара. 2-ая это собственно обратное. Что нужно бы сделать. Нужно считать файл input.dat проделать преобразования 1-ой программой, и получить файл output.dat в которое выводиться это преобразование. Затем взять файл ounput.dat и проделать обратное преобразование 2-ой программой и вывести в файл output2.dat, чтобы потом можно было сравнить с файлом input.dat. вывод должен происходить в столбик. Число элементов массива в каждом файле можно записать в начале. И самый главный вопрос, можно ли сделать так, чтобы при вводе появлялась консоль, в которой бы запрашивалась имя входного и выходного файла. Искал в интернете ничего про это не нашел, кроме того что в UNIX можно перенаправлять потоки и таким образом это реализовывать. А как это сделать для WINDOWS не очень понятно. может кто подскажет где про это можно почитать, или даст какой нибудь пример кода...или просто подсказку. Если нужно код 1ой и 2ой программы выложу.
Заранее спасибо за помощь!!!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.11.2011, 15:18
Ответы с готовыми решениями:

Вейвлет Хаара
День добрый. Написал (точнее, перевёл с с++ на шарп) класс для вейвлет-преобразования по...

Двумерное прямое и обратное вейвлет-преобразование Хаара, матлаб
Подскажите пожалуйста, как сделать двумерное прямое и обратное вейвлет-преобразование Хаара в...

Вейвлет-анализ. Как работает вейвлет-преобразование?
Помогите разобратся как работает вейвлет-преобразование Как программно реализовать я знаю. но не...

Заменить в программе, переводящую строку в двоичный код, консольный ввод/вывод на файловый ввод/вывод
Добрый день! Помогите, пожалуйста, с программой. Программа считывает строку с клавиатуры и...

32
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
30.11.2011, 20:45 2
Сложно как-то сформулировали. Я так понял вам нужна консольная программа которая бы "кормила" двум другим программам файлы на вычисление?
0
17 / 17 / 5
Регистрация: 27.11.2011
Сообщений: 141
01.12.2011, 00:42  [ТС] 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ой программы, следственно это всё проделывается, лишь для определения правильности или неправвильности преобразования, т.к для большого числа точек это трудоёмко.
0
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
01.12.2011, 14:37 4
Так и не понял в чем вопрос...
0
17 / 17 / 5
Регистрация: 27.11.2011
Сообщений: 141
01.12.2011, 18:18  [ТС] 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???
0
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
01.12.2011, 19:10 6
Так... То есть вам нужно определить лежат ли одни и те же значения (коэффициенты) в input.txt и output.txt?
0
17 / 17 / 5
Регистрация: 27.11.2011
Сообщений: 141
01.12.2011, 19:21  [ТС] 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).
вот, что нужно попытаться реализовать.
0
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
01.12.2011, 20:02 8
Ага, а те две программы о которых вы говорите, способны принимать и выдавать на выходе файлы? Может их код есть?
0
17 / 17 / 5
Регистрация: 27.11.2011
Сообщений: 141
01.12.2011, 20:10  [ТС] 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
0
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
01.12.2011, 20:46 10
Логику работы расскажите.

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

Добавлено через 9 минут
Цитата Сообщение от maniac0192 Посмотреть сообщение
почему не работает преобразование?
Что именно не работает? Не те значения на выходе?
0
17 / 17 / 5
Регистрация: 27.11.2011
Сообщений: 141
01.12.2011, 20:55  [ТС] 11
по коду всё правильно? так? раньше,где я вводил массив с клавиатуры. всё работало нормально. теперь я переправил программу (назовём её А) чтобы были входные и выходные данные из файлов, при беру файл ввода, пишу там значения, а файл вывода остаётся пустым
может я как то не правильно функции сделал. или еще что-то.
в последствии нужно взять программу Б, она делает обратное преобразование, и переделать её таким же образом, если написать третью программу С которая будет сравнивать Входной файл программы А и ВЫходной файл программы В, то будет вообще я думаю отлично.
0
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
01.12.2011, 21:04 12
1) После использования файлов закрывайте их. И смотрите можно ли создать/открыть. Советую освежить в памяти файловый ввод-вывод. На всякий случай.
2) Вы уверены, что вообще что-то считается без ошибок?
0
17 / 17 / 5
Регистрация: 27.11.2011
Сообщений: 141
01.12.2011, 21:13  [ТС] 13
вообще ничего не считается, а раньше всё считалось нормально.
0
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
01.12.2011, 21:21 14
Цитата Сообщение от maniac0192 Посмотреть сообщение
вообще ничего не считается
На экран пробовали выводить?
0
17 / 17 / 5
Регистрация: 27.11.2011
Сообщений: 141
01.12.2011, 21:28  [ТС] 15
нет, а как, подскажите пожалуйста, я понимаю как это сделать без файлов, а вот в новой программе с файлами не очень понимаю
0
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
01.12.2011, 21:42 16
Так же через cout. Текст я смотрю вы пытались им в последнем коде выводить. Выведите еще и значения.
0
17 / 17 / 5
Регистрация: 27.11.2011
Сообщений: 141
01.12.2011, 21:50  [ТС] 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;
}
0
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
01.12.2011, 22:24 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. А поскольку это вам неочевидно, то знания имеет смысл подтянуть. Это вам поможет в дальнейшем точнее понимать суть вашей проблемы.

Не по теме:

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

0
17 / 17 / 5
Регистрация: 27.11.2011
Сообщений: 141
02.12.2011, 00:29  [ТС] 19
я понимаю что это потоковый ввод и вывод, я просто не убрал эту чушь при переделывании кода.
0
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
02.12.2011, 10:15 20
Выложите код с которым работаете в данный момент и постарайтесь максимально кратко и четко сформулировать вопрос, избегая большого количества посторонней информации.
0
02.12.2011, 10:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.12.2011, 10:15
Помогаю со студенческими работами здесь

Поменять консольный ввод-вывод на файловый ввод-вывод
вот у меня калькулятор как мне сделать что б числа вводились из файла и результат записывался в...

Запись выражений, ввод–вывод информацииЗапись выражений, ввод–вывод информации
Задача 2.1. Пользуясь только операцией умножения, вычислить (A в 7-ой степени) за четыре операции....

Файловый ввод-вывод, ввод с клавиатуры и обработка массива структур
Добрый вечер)) У меня небольшой вопрос. Почему первые буквы (в названии книг) не выводит на экран?...

Каскады хаара
Всем привет. Кто нибудь пожалуйста дайте ссылку для скачивания cvhaartraining.lib, очень нужна эта...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru