Помощь - Поиск - Пользователи - Календарь
Полная версия: сделал програму но в конце неправильно
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
maksimla
Тут в програме с файла берем все 15 чисел потом записываем в масив потом выписываем в отдельный масив однозначные числа и должны сравнить масивы с однозначными со всем масивом тут чегото немогу сравнить в с++ а надо в с++ вот


#include <iostream>
#include <fstream>
using namespace std;

#define max 14
int m[max];
int m1[max];
int a,i,j;
void skait(ifstream fff);
void atranka();
void perasimas();

int main()
{


ifstream fff("e4.txt", ios::out | ios::binary);
skait(fff);
fff.close();
atranka();
perasimas();
return 0;

}

void skait(ifstream fff)
{
for(int i=1; i<=15; i++)
{
fff>>a;
m[i]=a;

};
}
void atranka()
{
j=0;
for(int i=1; i<15; i++)
if (m[i]<=9)
{
j++;
m1[j]=m[i];
};

}


//========================tut osibka
void perasimas()
{
// ofstream ff("rez.txt", ios::in | ios::binary);
int b;
for(int z=1; z<=15; z++)

{
// b=0;
// for(int i=1; i<=j; i++)
//if (m1[i]=m[z]) b=1;
// if (b=0)
if (m[z]>9) // tak pravilno no nado s drugim masyvom sravnivat
cout << m[z] << endl;

};
// ff.close();
}




и потом записать в файл другой
а вот на паскале так все правильно идет
program Bevarde0;
var d,r:text;
i,j,a,b:integer;
mas,mas1:array [1..15] of integer;
begin
assign(d,'e4.txt');
Assign (r,'rez.txt');
reset (d);
rewrite ®;
for i:=1 to 15 do
readln(d,mas[i]);
j:=0;
for i:=1 to 15 do
if mas[i]<10 then
begin
inc(j);
mas1[j]:=mas[i];
end;

writeln ('odnoznacnije');
for i:=1 to j do
writeln(mas1[i]);
writeln('vsbrannue');

for a:=1 to 15 do
begin
b:=0 ;
for i:=1 to j do
if (mas1[i]=mas[a]) then b:=1;
if b=0 then
writeln(mas[a]);
end;

Readln;
close(d);
close®;
end.


Добавлено через 1 мин.
запутался я как в с++ сделать и чего неполучается ведь также само сравнивается
maksimla
а я понял но незнаю как исправить
// for(int i=1; i<=j; i++)
//if (m1[i]=m[z]) b=1;
// if (b=0)


тут смотрится сразу 2 if после цикла а надо чтобы один
Client
В С++ сравнение не "=", а "==" smile.gif
volvo
maksimla, у тебя ошибка - выход за пределы массива:
Цитата
#define   max   14
int m[max];
int m1[max];

и
Цитата
	for(int i=1; i<=15; i++)
{
fff>>a;
m[i]=a;
};

это показывает... В массиве m всего 14 элементов - от 0 до 13, а ты обращаешься и к 14-му и к 15-му. Потом не удивляйся, что программа вылетит с ошибкой либо будет работать неправильно.
maksimla
не програма еще неразу невылетила
maksimla
Чего то запутался в файл не могу записать точнее не какой ошибки не выдает а в файл не пишет а так все исправил и с массивами
#include <iostream>
#include <fstream>
using namespace std;

#define max 15
int m[max];
int m1[max];
int a,i,j;
void skait(ifstream fff);
void atranka();
void perasimas();

int main()
{


ifstream fff("e4.txt", ios::out | ios::binary);
skait(fff);
fff.close();
atranka();
perasimas();
return 0;

}

void skait(ifstream fff)
{
for(int i=0; i<15; i++)
{
fff>>a;
m[i]=a;

};
}
void atranka()
{
j=0;
for(int i=0; i<14; i++)
if (m[i]<=9)
{
j++;
m1[j]=m[i];

};

}


//========================
void perasimas()
{
ofstream fail("rez.txt", ios::in | ios::binary);
int b;
for(int z=0; z<15; z++)

{
b=0;
for(int i=0; i<=j; i++)
if (m1[i]==m[z]) b=1;
if (b==0)
fail << m[z] << endl;

};
fail.close();
}


п.с Я болел и не мог написать
volvo
Цитата
точнее не какой ошибки не выдает а в файл не пишет
Значит, плохой компилятор. Мой выдает. Смотри, что выдает:
D:\Program Files\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\bits\ios_base.h|781|
error: `std::ios_base::ios_base(const std::ios_base&)' is private|
F:\Programs\CPP\forum_quick_test\console_cpp\main.cpp|591|error: within this context|
D:\Program Files\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\streambuf|769|
error: `std::basic_streambuf<_CharT, _Traits>::basic_streambuf(const std::basic_streambuf<_CharT, _Traits>&)
[with _CharT = char, _Traits = std::char_traits<char>]' is private|
F:\Programs\CPP\forum_quick_test\console_cpp\main.cpp|591|error: within this context|
F:\Programs\CPP\forum_quick_test\console_cpp\main.cpp||In function `int main()':|
F:\Programs\CPP\forum_quick_test\console_cpp\main.cpp|591|error: initializing argument 1 of `void skait(std::ifstream)'|
||=== Build finished: 5 errors, 0 warnings ===|


Теперь - расшифровка: во-первых, в чем смысл - описывать файл типа istream (input stream все-таки, поток для ввода), и открывать его с флагом ios::out, и наоборот - ostream (он же output stream, поток для вывода) открывать с флагом ios::in? Все наоборот, istream открывается с ios::in, а ostream - с ios::out... Зачем файлы, которые имеют расширение TXT, открываются как бинарные (с флагом ios::binary)?

Но и это не главное. Главное- что передавать в функцию skait надо не сам поток, а ссылку на него:
void skait(ifstream& fff)


Также неплохо было бы проверять, а открылся ли файл. То, что ты его хотел открыть - это прекрасно, но он же мог и не открыться? Вот тогда ошибок не будет. Теперь можешь тестировать. Хотя я не понимаю, зачем открывать файл в основной программе, а работать с ним в функции. Ведь файл для вывода описывается и создается прямо внутри функции perasimas.
maksimla
да уж какие у меня глупые ошибки
вот последнее осталась
надо записать не в строчку а в столбик а у меня чего то в строчку
void perasimas()
{
ofstream fail("rez.txt", ios::out | ios::binary);
int b;
for(int z=0; z<15; z++)

{
b=0;
for(int i=0; i<=j; i++)
if (m1[i]==m[z]) b=1;
if (b==0)
fail << m[z]; fail<< endl;

};
fail.close();
}

volvo
Цитата
надо записать не в строчку а в столбик а у меня чего то в строчку
А я тебя что, просто так спрашивал:
Цитата
Зачем файлы, которые имеют расширение TXT, открываются как бинарные (с флагом ios::binary)?
? Ты ж продолжаешь делать по-своему. Вот и получай не то, что хотел. Убрал бы флажок ios::binary - было бы в столбик...
maksimla
нам так сказали что надо так
 ofstream fail("rez.txt", ios::out | ios::binary);


защита какаето будит лутшей

Добавлено через 3 мин.
void perasimas()
{
ofstream fail("rez.txt", ios::out);
int b;
for(int z=0; z<15; z++)

{
b=0;
for(int i=0; i<=j; i++)
if (m1[i]==m[z]) b=1;
if (b==0)
{
fail << m[z]; fail<< endl;
};

};
fail.close();
}



ага все так нормально делает а могбы объяснить про защиту ?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.