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

Нахождение последнего отрицательного элемента массива - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
Minyta
0 / 0 / 0
Регистрация: 18.02.2010
Сообщений: 37
01.03.2010, 22:40     Нахождение последнего отрицательного элемента массива #1
Программа ищет последний отрицательного элемент массива.
Не могу понять ошибки программы:

3 from F:\...\2_17.C In file included from C:/Dev-Cpp/Bin/../lib/gcc/mingw32/3.4.2/../../../../include
32:2 C:\Dev-Cpp\include\c++\3.4.2\backward\backward_warning.h #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.
6 C`main' must return `int'
C In function `int main(...)':
12 C `clrscr' undeclared (first use this function)
(Each undeclared identifier is reported only once for each function it appears in.)
35 C expected `;' before string constant.

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 <conio.h>
#include <stdio.h>
#include <fstream.h> // dlia 4tenia/zapisi failov
 
void main()
{
const short int n=40; // kol-vo elementov massiva
int mas[n];  // massiv celyx 4isel
int min;  // peremannaya dlia vyvoda min. zna4enia
int i, chislo; // // chislo-peremennaya dlia obmena iformaciey iz faila (v fail)
 
clrscr(); 
 
ifstream file_in("IN2_17.txt");  // ---- otkritie faila "IN2_17.txt"  na s4ityvanie
for (i=0;i<=n-1;i++){ file_in >> chislo;//zapis v massiv zna4eniy, soderzhasixsia v faile
                      mas[i]=chislo;
};
 
file_in.close();
printf("Soderzimoe faila \"IN2_17.txt\":\n"); 
for (i=0;i<=n-1;i++) printf("%d ", mas[i]);
 
for (i=0;i<=n-1;i++) if (mas[i]>0) min=mas[i]; // poisk maximal'nogo zna4enia i
                        //prisvaivanie ego peremennoy "min"
 
printf("\n\n Minimalnoe'noe 4islo: "); // vivod mainimyma na displey
printf("%d ", min);
 
ofstream file_out("OUT2_17.txt"); //---- otkritie faila "OUT2_17.txt"  na zapis'
//-------soderzhimoe faila "OUT2_17.txt"--------
file_out <<"Soderzimoe faila \"IN2_17.txt\":";
for (i=0;i<=n-1;i++) 
file_out << mas[i] << " ";
 
file_out " Minimal'noe 4islo: ";
file_out <<min;
// ---------------------------------------------
file_out.close();
getch();
}
Помогите разобраться пожалуйста!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.03.2010, 22:40     Нахождение последнего отрицательного элемента массива
Посмотрите здесь:

C++ Массивы, нахождение отрицательного элемента!
C++ Найти значение последнего отрицательного элемента
Найти номер последнего отрицательного элемента массива C++
Вычислить сумму целых частей элементов массива, расположенных после последнего отрицательного элемента C++
C++ Нахождение последнего элемента одномерного числового массива, который больше 1
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
01.03.2010, 22:45     Нахождение последнего отрицательного элемента массива #2
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
#include <stdio.h>
#include <fstream> // dlia 4tenia/zapisi failov
 
int main()
{
const short int n=40; // kol-vo elementov massiva
int mas[n];  // massiv celyx 4isel
int min;  // peremannaya dlia vyvoda min. zna4enia
int i, chislo; // // chislo-peremennaya dlia obmena iformaciey iz faila (v fail)
 
std::ifstream file_in("IN2_17.txt");  // ---- otkritie faila "IN2_17.txt"  na s4ityvanie
for (i=0;i<=n-1;i++){ file_in >> chislo;//zapis v massiv zna4eniy, soderzhasixsia v faile
                                          mas[i]=chislo;
};
 
file_in.close();
printf("Soderzimoe faila \"IN2_17.txt\":\n"); 
for (i=0;i<=n-1;i++) printf("%d ", mas[i]);
 
for (i=0;i<=n-1;i++) if (mas[i]>0) min=mas[i]; // poisk maximal'nogo zna4enia i
                                                //prisvaivanie ego peremennoy "min"
 
printf("\n\n Minimalnoe'noe 4islo: "); // vivod mainimyma na displey
printf("%d ", min);
 
std::ofstream file_out("OUT2_17.txt"); //---- otkritie faila "OUT2_17.txt"  na zapis'
//-------soderzhimoe faila "OUT2_17.txt"--------
file_out <<"Soderzimoe faila \"IN2_17.txt\":";
for (i=0;i<=n-1;i++) 
file_out << mas[i] << " ";
 
file_out " Minimal'noe 4islo: ";
file_out <<min;
// ---------------------------------------------
file_out.close();
system("pause");
return 0;
}
Minyta
0 / 0 / 0
Регистрация: 18.02.2010
Сообщений: 37
01.03.2010, 23:04  [ТС]     Нахождение последнего отрицательного элемента массива #3
M128K145, СПАСИБО!
Вы решили убрать библиотеку stdio.h т.к. она не особо нужна в программе или по другой причине?
И почему где то ставиться void main(), а где-то int main()?
А еще в 32 строке ошибка - C expected `;' before string constant.
Мне кажется вот так надо, но все равно выдает ошибку:
C++
1
 file_out <<" Minimal'noe 4islo: ";
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
01.03.2010, 23:25     Нахождение последнего отрицательного элемента массива #4
Minyta, я убрал conio.h и getch() потому что они мне не нравятся и поставил родной для Dev-C++ system("pause");
По стандарту main возвращает int поэтому должен быть не void, а int.

Цитата Сообщение от Minyta Посмотреть сообщение
Мне кажется вот так надо
Вам правильно кажется. Исправьте и все будет нормально
Minyta
0 / 0 / 0
Регистрация: 18.02.2010
Сообщений: 37
01.03.2010, 23:31  [ТС]     Нахождение последнего отрицательного элемента массива #5
M128K145, спасибо за ответы. Теперь понятнее.

Про 32 строку - в том то и дело, что если добавить << все равно не работает!
Выдается ошибки - " C:\Temp\ccsDaaaa.o(.text+0xd) In function `ZSt17__verify_groupingPKcjRKSs':" и тому подобные.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
01.03.2010, 23:55     Нахождение последнего отрицательного элемента массива #6
Minyta, прикрепите к сообщению файл IN2_17.txt в архиве
Minyta
0 / 0 / 0
Регистрация: 18.02.2010
Сообщений: 37
02.03.2010, 00:04  [ТС]     Нахождение последнего отрицательного элемента массива #7
Файл во вложении.
Вложения
Тип файла: rar IN2_17.rar (90 байт, 23 просмотров)
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
02.03.2010, 00:38     Нахождение последнего отрицательного элемента массива #8
Minyta, вот этот код полностью работает
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
#include <stdio.h>
#include <fstream> // dlia 4tenia/zapisi failov
 
int main()
{
const short int n=40; // kol-vo elementov massiva
int mas[n];  // massiv celyx 4isel
int min;  // peremannaya dlia vyvoda min. zna4enia
int i, chislo; // // chislo-peremennaya dlia obmena iformaciey iz faila (v fail)
 
std::ifstream file_in("IN2_17.txt");  // ---- otkritie faila "IN2_17.txt"  na s4ityvanie
for (i=0;i<=n-1;i++){ file_in >> chislo;//zapis v massiv zna4eniy, soderzhasixsia v faile
                                          mas[i]=chislo;
};
 
file_in.close();
printf("Soderzimoe faila \"IN2_17.txt\":\n"); 
for (i=0;i<=n-1;i++) printf("%d ", mas[i]);
 
for (i=0;i<=n-1;i++) if (mas[i]>0) min=mas[i]; // poisk maximal'nogo zna4enia i
                                                //prisvaivanie ego peremennoy "min"
 
printf("\n\n Minimalnoe'noe 4islo: "); // vivod mainimyma na displey
printf("%d ", min);
 
std::ofstream file_out("OUT2_17.txt"); //---- otkritie faila "OUT2_17.txt"  na zapis'
//-------soderzhimoe faila "OUT2_17.txt"--------
file_out <<"Soderzimoe faila \"IN2_17.txt\":";
for (i=0;i<=n-1;i++) 
file_out << mas[i] << " ";
 
file_out <<" Minimal'noe 4islo: ";
file_out <<min;
// ---------------------------------------------
file_out.close();
system("pause");
return 0;
}
Другое дело у меня к вам вопросы по алгоритму
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.03.2010, 00:58     Нахождение последнего отрицательного элемента массива
Еще ссылки по теме:

Нужно немного изменить код (сумма от последнего отрицательного элемента массива до первого положительного) C++
Массив: Как найти номер последнего отрицательного элемента? C++
Вычислить сумму элементов массива, расположенных после последнего отрицательного элемента C++

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

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
02.03.2010, 00:58     Нахождение последнего отрицательного элемента массива #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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <functional>
#include <string>
 
int main(){
    std::vector<int> vec;
    int tmp;
    const char *fin_name = "input.txt", *fout_name = "output.txt";
 
    std::ifstream fin(fin_name);
    if ( !fin.is_open() ){
        std::cerr << "Can't open file <" << fin_name << "> for input!" << std::endl;
        return 1;
    }
    while ( fin >> tmp )
        vec.push_back(tmp);
    if ( fin.bad() ){
        std::cerr << "Can't read from file <" << fin_name << ">!" << std::endl;
        return 1;
    }
    fin.close();
 
    if ( vec.empty() ){
        std::cerr << "Error! Array is empty!" << std::endl;
        return 1;
    }
 
    std::ofstream fout(fout_name);
    if ( !fout.is_open() ){
        std::cerr << "Can't open file <" << fout_name << "> for output!" << std::endl;
        return 1;
    }
    fout << "Array:" << std::endl;
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(fout, "\n"));
    fout << std::endl;
 
    std::binder2nd < std::less<int> > IsNegative (std::less<int>(),0);
    std::binder2nd < std::greater_equal<int> > IsPositive (std::greater_equal<int>(),0);
    std::vector<int>::iterator i, j;
    i = std::find_if(vec.begin(), vec.end(), IsNegative);
    if ( i != vec.end() ){
        j = std::find_if(i, vec.end(), IsPositive);
        fout << "Last negative element: " << *(--j) << std::endl;
    }
    else
        fout << "No negative elements in array." << std::endl;
    fout << std::endl;
 
    i = std::min_element(vec.begin(), vec.end());
    fout << "Minimum value of array elements: " << *i << std::endl;
 
    fout.close();
 
    fin.open(fout_name);
    if ( !fin.is_open() ){
        std::cerr << "Can't read just written file!" << std::endl;
        return 1;
    }
    std::string buf;
    while ( std::getline(fin, buf) )
        std::cout << buf << std::endl;
    fin.close();
 
    return 0;
}
Yandex
Объявления
02.03.2010, 00:58     Нахождение последнего отрицательного элемента массива
Ответ Создать тему
Опции темы

Текущее время: 21:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru