Продам - однокомнатную квартиру, пер. Ягодный, 6-1 (Жилой дом, 6 эт) - 2 900 000 р. |
Продам - гостинку, Тимофея Кривова, 8 (Общежитие, 9 эт) - 1 220 000 р. |
Продам - квартиру комнат: 6, Тимофея Кривова, 14А (Жилой дом, 6 эт) - 7 300 000 р. |
Продам - однокомнатную квартиру, Галкина, 2 (Жилой дом, 9 эт) - 4 920 000 р. |
|
|
Одномерный массив С++ , Помощь с преобразованием.
•
Полина Петова
|
|
Пользователь
Сообщений: 50
|
Добрый вечер, нужна помощь по C/C++. Вот, собственно, задача: В одномернном массиве, состоящем из N целых элементов, вычислить: 1) количество положительных элементов массива; 2) сумму элементов массива, расположенных после последнего отрицательного элемента, равного нулю. Преобразовать массив таким образом, чтобы сначала раполагались все элементы, целая часть которых не превышает 1, а потом - все остальные. Исходный код #include <iostream.h> #include <stdio.h> #include <math.h> int main() { const int n = 20; int a[n]; int i, kolvo; cout<<"Enter quantity of elements: \n"; cin >> kolvo;//размерность if (kolvo>n) { return 1; } //элементы for (i = 0; i < kolvo; i++) cin >> a[i]; cout << "\n" << endl;
for (i = 0; i < kolvo; i++) cout << a[i] <<" "; cout << "\n" << endl; //нахождение количества положительных элементов массива int p = 0; for (i = 0; i < kolvo; i++) if (a[i]>0) p++; cout << "'+'elements=" << p << endl; cout << "\n"; //сумма int nomer; int sum; for ( i = 0; i < kolvo; i++) if (a[i] == 0) nomer = i; for ( sum = 0, i = nomer+1; i < kolvo; i++) sum+=a[i]; cout << "Summma=" << sum; cout << "\n\n"; //что то вроде сортировки int temp; int j; for ( j = 0; j < kolvo; j++) { if (a[j]<1) { temp=a[j]; a[j]=a[j-1]; a[j-1]=temp; } for (i = 0; i < kolvo; i++) cout << a[i] <<" ";} cout << "\n" << endl; return 0; } Не могу преобразовать массив. Последний элемент принимает неестественное значение. Если кто знает, помогите пожалуйста, буду очень признательна. Сообщение отредактировал Полина Петова - May 31 2008, 20:19
|
|
|
|
•
SiMM
|
|
Banned
Сообщений: 37 461
Из: «либеральных»«ценностей»
|
Цитата(Полина Петова) сумму элементов массива, расположенных после последнего отрицательного элемента, равного нулю Мощно завернули Цитата(Полина Петова) Последний элемент принимает неестественное значение. Наверняка с индексами чего-то напутали. Цитата(Полина Петова) {if (a[j]<1){ temp=a[j];a[j]=a[j-1];a[j-1]=temp;} А теперь представьте себе, что j=0. Кстати, код не мешало бы научиться оформлять (благо это совсем несложно), чтобы не приходилось читать кашу-малашу.
--------------------
|
|
|
|
•
Полина Петова
|
|
Пользователь
Сообщений: 50
|
Кроме расстановки фигурных скобок про оформление кода мне мало что известно, только некоторые заметки, которые различаются от выбранной литературы. Образование, "благо", у нас такое.
Мощно завернула Т.А. Павловская - автор практикума.
Про j=0 представила, но не поняла, хотя кое что прояснилось. То есть при вычитании получится j-1=-1. Как обойти, правда не знаю.
Сообщение отредактировал Полина Петова - May 31 2008, 18:10
|
|
|
|
•
soup
|
|
Активный
Сообщений: 1 380
|
Можно цикл "for" начать не с нуля, а с единицы, например
--------------------
|
|
|
|
•
Полина Петова
|
|
Пользователь
Сообщений: 50
|
Цитата(soup @ May 31 2008, 20:56) Можно цикл "for" начать не с нуля, а с единицы, например Тогда первый элемент вектора не будет просматриваться.
|
|
|
|
•
Snowm@n
|
|
O_o
Сообщений: 1 037
|
Ну во-первых, если Цитата целая часть которых не превышает 1 то a[j]<2 а не Исходный код a[j]<1 И во-вторых, Цитата что то вроде сортировки пишется так Исходный код #include <iostream.h> int main(){ const n=10; float a[n]={1.6,6.4,5.8,0.5,1.99,2.0,23,1.7,1.8,4.9}; for (int i=0;i<n-1;++i) for (int j=i+1;j<n;++j) if (a[i]>=2&&a[j]<2){ int t=a[i]; a[i]=a[j]; a[j]=t; } for (i=0;i<n;++i) cout<<a[i]<<" "; cout<<endl; return 0; }
а это Исходный код for ( j = 0; j < kolvo; j++) { if (a[j]<1) { temp=a[j]; a[j]=a[j-1]; a[j-1]=temp; } только одна итерация и работает неправильно.
--------------------
Developer -> Lead Developer -> Lead Architect -> ... ?
|
|
|
|
•
Полина Петова
|
|
Пользователь
Сообщений: 50
|
Спасибо за рабочий код, но компилятор Microsoft Visual C++ 6.0 при объединении всех нарезок кодов хоть и компилирует, но выдает ошибку. "Приложение будет закрыто. Отправить отчет Майкрософт и тд." Исправьте пожалуйста, с меня 100 рублей на мобильник.
|
|
|
|
•
Snowm@n
|
|
O_o
Сообщений: 1 037
|
Весь код в студию.
--------------------
Developer -> Lead Developer -> Lead Architect -> ... ?
|
|
|
|
•
Полина Петова
|
|
Пользователь
Сообщений: 50
|
Исходный код #include <iostream.h> int main() { const int n = 20; int a[n]; int i,kolvo; cout << "Enter quantity of elements: \n"; cin >> kolvo;//размерность if (kolvo>n) { return 1; } //элементы for ( i = 0;i < kolvo; i++) cin >> a[i]; cout <<"\n"<<endl;
for ( i = 0;i < kolvo; i++) cout << a[i] <<" ";
cout <<"\n"<< endl;
//нахождение количества положительных элементов массива int p = 0; for (i = 0; i < kolvo; i++) if (a[i]>0) p++; cout <<"'+'elements="<<p<<endl;
cout <<"\n";
//сумма int nomer; int sum; for ( i = 0; i < kolvo; i++) if (a[i]==0) nomer=i; for (sum = 0,i = nomer+1; i < kolvo; i++) sum+=a[i];
cout <<"Summa="<<sum;
cout <<"\n\n";
//что то вроде сортировки for (i = 0;i < n-1; ++i) for (int j = i+1;j<n;++j) if (a[i]>=2&&a[j]<2) { int t=a[i]; a[i]=a[j]; a[j]=t; }
for (i=0;i<kolvo;i++) cout<<a[i]<<" ";
return 0; }
|
|
|
|
•
itROOT
|
|
Постоялец
Сообщений: 295
|
Вроде работает. Исходный код
#include <iostream.h>
int main() { const int n = 20; int a[n]; int i,kolvo; cout << "Enter quantity of elements: \n"; cin >> kolvo;//размерность if (kolvo>n) { return 1; } //элементы for ( i = 0;i < kolvo; i++) cin >> a[i]; cout <<"\n"<<endl;
for ( i = 0;i < kolvo; i++) cout << a[i] <<" ";
cout <<"\n"<< endl;
//нахождение количества положительных элементов массива int p = 0; for (i = 0; i < kolvo; i++) if (a[i]>0) p++; cout <<"'+'elements="<<p<<endl;
cout <<"\n";
//сумма int nomer; int sum; for ( i = 0; i < kolvo; i++) if (a[i]==0) nomer=i; for (sum = 0,i = nomer+1; i < kolvo; i++) sum+=a[i];
cout <<"Summa="<<sum;
cout <<"\n\n";
//что то вроде сортировки for (i = 0;i < kolvo-1; ++i) for (int j = i+1;j<kolvo;++j) if (a[i]>=2&&a[j]<2) { int t=a[i]; a[i]=a[j]; a[j]=t; }
for (i=0;i<kolvo;i++) cout<<a[i]<<" "<<endl;
return 0; }
В циклах сортировки вместо n нужно kolvo. Иначе будет выход за пределы массива. Маленькие замечания. Программу лучше разбить на функции, каждая из которых делает, то что нужно в подзадачах. Задавать длину массива константой - плохой тон. Можно задавать и не константой или использовать оператор new[]. (ну а лучше вообще использовать std::vector<int>) И потом, мне кажется что с упорядочиванием по целой части справиться обычная сортировка. Сообщение отредактировал itROOT - Jun 2 2008, 08:45
|
|
|
|
•
Полина Петова
|
|
Пользователь
Сообщений: 50
|
При запуске приложения компьютер выдает ошибку. Сообщение №8.
|
|
|
|
•
itROOT
|
|
Постоялец
Сообщений: 295
|
Исходный код #include <iostream>
using namespace std;
int main() { int numOfElems=0; cout << "Enter quantity of elements: \n"; cin >> numOfElems; int* a = new int[numOfElems];
for (int i = 0;i < numOfElems;++i) cin >> a[i]; cout <<endl<<endl;
for (int i = 0;i < numOfElems;++i) cout << a[i] <<" "; cout<<endl<<endl;
int numOfPositive=0; for (int i = 0; i < numOfElems;++i) if (a[i]>0) ++numOfPositive; cout <<"'+'elements="<<numOfPositive<<endl<<endl;
int lastZeroPos=numOfElems; int sumAfterLastZero=0;
for (int i = 0; i < numOfElems;++i) { if (a[i]==0) lastZeroPos=i; }
for (int i=lastZeroPos+1; i<numOfElems;++i) sumAfterLastZero+=a[i];
cout <<"Summa="<<sumAfterLastZero<<endl<<endl;
for (int i = 0;i<numOfElems-1;++i) for (int j = i+1;j<numOfElems;++j) if (a[i]>=2&&a[j]<2) { int tmp=a[i]; a[i]=a[j]; a[j]=tmp; }
for (int i=0;i<numOfElems;++i) cout<<a[i]<<" "; cout << endl;
delete[] a; return 0; }
|
|
|
|
•
Полина Петова
|
|
Пользователь
Сообщений: 50
|
Спасибо за код. Тему можно закрывать.
|
|
|
|
•
Dest
|
|
Постоялец
Сообщений: 258
|
а что один я заметил еще один ляп у автора практикума? Цитата все элементы, целая часть которых не превышает 1 какие еще целые части? Цитата В одномернном массиве, состоящем из N целых элементов ... меня начинает поражать как у нас дают образование..
|
|
|
|
|
|
1 чел. читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
|