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

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

Войти
Регистрация
Восстановить пароль
 
shev4ik
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 19
#1

Небольшой вопрос от нуба в C++ - C++

01.11.2011, 16:26. Просмотров 468. Ответов 7
Метки нет (Все метки)

Есть задача: в одномерном массиве найти номер максимального элемента, сосчитать произведение между первым и вторым нулями, и перестроить массив так, чтобы в первой его половине стояли элементы стоявшие в нечетных позициях,а во второй с четными)
Я достиг вот такого решения:
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
//--------------------------------------------------------------------------- 
#include <iostream> 
using namespace std; 
//--------------------------------------------------------------------------- 
 
int main() 
{ 
int n=0; 
cout << "BBeduTe Pa3MeP MaccuBa: "; 
cin >> n; 
int* a = new int[n]; 
int Max, maxn, n1, n2, n3; 
int p=1; 
Max = a[0]; 
maxn=0; 
n1 = 0; 
n2 = n; 
n3 = 0; 
for (int i = 0; i < n; i++){ 
cout<<"BBeduTe "<<i+1<<" ELEMEHT MaccuBa: "; 
cin>>a[i]; 
if(a[i] > Max) Max = a[i], maxn=i+1;  
if(a[i]==0 && n1==0) n1=i+1, n3=n1; 
if(a[i]==0 && n2==n3) n2=i+1; 
if(a[i]!=0 && i<n2-1 && i>n1-1)p=p*a[i]; 
} 
 cout << "\nMax element: " << Max <<", Ero HoMeP: "<<maxn<<"\nIIepBblu HoL:" <<n1<<" BToPou Hol: "<<n2<< endl 
 << "proizvedenie: "<<p<<endl; 
delete[] a; 
return 0; 
}
Остановился на том, что нихрена произведение не считает! Пока это не сделаю, дальше не иду, все по порядку хочется) Дак вот! ПОМОГИТЕ с проивзедением, if(a[i]!=0 && i<n2-1 && i>n1-1)p=p*a[i]; строка.
И если не сложно, то был бы очень благодарен тому, кто сможет поменять элемнты массива по заданию...
P.S. не знаю как включить нумерацию строк в визуал с++
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2011, 16:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Небольшой вопрос от нуба в C++ (C++):

Вопрос от нуба) - C++
std::cout &lt;&lt; &quot;Hello World!\n&quot;; return 0; } я поробывал ее написать в Борланде 6 (так как диск с книгой не удолось запустить) чето...

небольшой вопрос..... - C++
подскажите,пожалуйста,что в этой записи обозначает &amp;(амперсант) перед переменными? int dd, mm, yy; fscanf(Query,&quot;%d.%d.%d&quot;, &amp;dd, &amp;mm,...

небольшой вопрос по структурам - C++
Плиз, подскажите как присвоить значение переменной(index) элементу массива структуры(avto.chet). Вроде бы ерунда, а не получается.

Небольшой вопрос по массивам - C++
В общем столкнулся с одной проблемой. Ведь в массивах все элементы начинаются с 0, то когда я пишу какую-нить прогу для решения какой-либо...

Небольшой вопрос по заполнению структуры - C++
В первой строке ошибка, пропущена точка с запятой.. Поправте, как правильно заполнить Zapravki_AZS.AZS = {{ &quot;Lukoil&quot;; ...

Небольшой вопрос про наследование. - C++
Как понять Circle (int x, int y, int r, TColor p, TColor b) : cx (x), cy (y), rad (r), Shape (p, b) {} строчку понял что это...

7
Busterr
-25 / 1 / 0
Регистрация: 25.09.2011
Сообщений: 50
01.11.2011, 16:41 #2
вот так можешь найти произведение между двумя первыми нолями
Код
 int *f=a;
 while (*f!=0)
 {
  f++;
  
 }
 int *l=f+1;
 while (*l!=0)
 {
 l++;
 
 }
 int proiz = 0;
 for (int *p=f+1; p<l; p++)
 {
  proiz *= *p;
 }
Добавлено через 2 минуты
четные и нечетные позиции
Код
void OddAndEven(int arr[maxn],int m ){
  int b[100],c[100]; 
  int *ptr;
  ptr=arr;
  for(int i=0;i<m;i++)
  {
    if(i%2==0)
    {
      b[i]=ptr[i];
      cout<<b[i]<<" ";
    }
    
  }
  for(int i=0;i<m;i++)
  {
    if(i%2!=0)
        {
    c[i]=ptr[i];
    cout<<" "<<c[i];
    }
  }
Добавлено через 1 минуту
Это не само решение твоей задачи, но приблизительное. Тебе нужно просто изменить слегка
1
shev4ik
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 19
01.11.2011, 19:29  [ТС] #3
Спасибо! Работает! Выручил!)
0
shev4ik
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 19
08.11.2011, 11:38  [ТС] #4
Вобщем! Произведение нашел, а вот с сортировкой полный капец!!
Разбирался по учебнику Павловская/Щупак, там какой то бред через стеки!
Код с учебника скатал, чтобы хотя бы просто отсортировать по лекции, а он нихрена не работает.
Пожалуйста помогите разобраться в коде:
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
70
71
72
73
74
75
76
77
78
79
80
//--------------------------------------------------------------------------- 
#include <iostream.h> 
#include <math.h> 
//--------------------------------------------------------------------------- 
 
int main() 
{ 
int n=0; 
cout << "BBeduTe Pa3MeP MaccuBa: "; 
cin >> n; 
int* a = new int[n]; 
int Max, maxn, n1, n2, n3, middle, temp; 
int left, right, sp, j; 
int *stackl=new int[n], *stackr=new int [n]; 
Max = a[0]; 
maxn=0; 
cout<<"BBeduTe "<<n<<" ElELEMHTOB MaccuBa 4ePe3 npobel: "; 
for (int i = 0; i < n; i++){ 
cin>>a[i];  
cout<<a[i]<<" "; 
 
//номер максимального 
if(a[i] > Max) Max = a[i], maxn=i+1;  
} 
// произведение между нулями =) 
int *f=a; 
while (*f!=0) 
{ 
 f++; 
} 
int *l=f+1; 
while (*l!=0) 
{ 
l++; 
} 
int proiz = 1; 
for (int *p=f+1; p<l; p++) 
{ 
proiz *= *p; 
 //Сортировка  
sp=i; stackl[i]=0; stackr[i]=n-1; 
while (sp>0){ 
// 
left=stackl[sp]; 
right=stackr[sp]; 
sp--; 
while (left<right){ 
// 
i=left; j=right; 
middle=a[(left+right)/2]; 
while(i<j);{ 
while(a[i]<middle)j++; 
while(middle<a[j])j--; 
if(i<=j){ 
temp=a[i];a[i]=a[j];a[j]=temp; 
i++;j--; 
} 
} 
if(i<right){ 
// 
sp++; 
stackl[sp]=i; 
stackr[sp]=right; 
} 
right=j; 
// 
} 
} 
// 
for (i=0;i<n;i++) cout <<a[i]<< " "<<endl; 
 
} 
 
// Вывод информации по заданию: 
 cout << "\nMax element: " << Max <<", Ero HoMeP: "<<maxn<<endl 
 << "IInpou3BedeHue oT 0 do 0: "<<proiz<<endl; 
 
delete[] a; 
return 0; 
}
В результате запуска программы, после ввода массива программа встает в ступор, и больше не очухивается!
Что за хрень?
0
mimicria
return (true);
1958 / 1095 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
08.11.2011, 13:21 #5
Цитата Сообщение от shev4ik Посмотреть сообщение
Max = a[0];
a[0] еще не присвоено значение, там будет мусор. В данном случае Max=0; лучше
Цитата Сообщение от shev4ik Посмотреть сообщение
if(a[i] > Max) Max = a[i], maxn=i+1;
C++
1
2
3
4
5
if(a[i] > Max)
{
  Max = a[i];
  maxn=i+1;
}
1
shev4ik
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 19
08.11.2011, 14:08  [ТС] #6
Спасибо, не заметил, но с этим проблем не было. Вопрос с сортировкой! Максимум находит, произведение считает! Как делаю сортировку по учебнику программа намертво встает. И нифига не понятно куда в ней столько циклов и какие то стэки) С сортировкой от Busterr не получается(((
0
mimicria
return (true);
1958 / 1095 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
08.11.2011, 14:34 #7
Цитата Сообщение от shev4ik Посмотреть сообщение
while (*f!=0) { f++; }
Кстати, поиск нулей тоже оригинален. Вопрос на засыпку, чему будет равно f и когда закончится цикл, если в случайном массиве нет нулей?
Цитата Сообщение от shev4ik Посмотреть сообщение
int proiz = 1; for (int *p=f+1; p<l; p++) { proiz *= *p;
Вот здесь то как бы и должна стоять завершающая скобка цикла вычисления произведения, а её как бы нет.
Дальше сортировка
Цитата Сообщение от shev4ik Посмотреть сообщение
sp=i; stackl[i]=0; stackr[i]=n-1;
Чему равно i , откуда оно взялось и как вообще это скомпилировалось?

Добавлено через 16 минут
Там вся сортировка то раз плюнуть, понаписали бреда
C++
1
2
3
4
5
6
int* Sorted = new int[n];
int pos=0;
for (int i=1;i<n;i+=2)
 { Sorted[pos]=a[i]; pos++;}
for (int i=0;i<n;i+=2)
 { Sorted[pos]=a[i]; pos++;}
1
shev4ik
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 19
09.11.2011, 10:39  [ТС] #8
Аааааааааа!! Все работает!! Огромнейшее спасибо дорогой mimicria!! Чтобы я без тебя делал! Супер!

Добавлено через 18 часов 47 минут
Новый вопрос!!)))
Дан массив размером 8х8.
1. Найти сумму элементов в строках, где есть хотя бы один отрицательный элемент.
2. Найти такие k, что k-я строка массива совпадает с k-м столбцом.
До второго пункта пока не добрался, прошу помощи с первым!!!
Код
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
//CeMuHaP 3. DByMepHbIE MaccuBbI.
#include <iostream.h>   
#include <math.h>   
//---------------------------------------------------------------------------   
int main() 
{ 
    int n, m, x, y, s, p, a[8][8]; 
    s=0; 
    p=-1; 
    cout << "ckolko cTolboB = "; cin >> n; 
    cout << "ckolko cTpok = "; cin >> m; 
 
    // BBod MaccuBa 
    for (x = 0; x < m; x++)  
        for (y = 0; y < n; y++) 
        {
            cout << "a[" << x << "][" << y << "] = "; 
            cin >> a[x][y]; 
                                } 
    //BbIBod MaccuBa 
        for (x = 0; x < m; x++) 
        { 
            for (y = 0; y < n; y++) cout<<a[x][y]<<" "; 
            cout<<endl;
        } 
    //CyMMa B cTpoKax c (-) 
    for (x = 0; x < m; x++) 
        { 
        for (y = 0; y < n; y++) 
        if(a[x][y]<0) p=x;
            for (x = 0; x < m; x++) 
            { 
            for (y = 0; y < n; y++)
            if(p==x) s=s+a[x][y];
            } 
        } 
 
    cout<<"CyMMa B cTpoKax c (-) = "<<s<<endl; 
    return 0;
}
Добавлено через 14 минут
Сумму считает почему то не правильно( В чем может быть ошибка?
0
09.11.2011, 10:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.11.2011, 10:39
Привет! Вот еще темы с ответами:

небольшой вопрос про совмещение строк - C++
всем приятного времени суток))сразу извиняюсь если тема не в том разделе:pardon: вот назрела задачка....помогите разобраться.. в общем:...

Работа с указателями(небольшой вопрос насчет преобразований) - C++
*((uint*)space)=SIGNATURE; space+=sizeof(uint); Как записать в одну строчку ? *(((uint*)space)++)=SIGNATURE; так не...

Спасайте нуба - C++
Нужно до 7 утра уже сегодня видимо написать одну из трех программ. Судоку, Покер, Оргонайзер. При помощи классов. кто...

Подскажите мне книгу для полного нуба - C++
Литература... Понимаю есть уже такая тема , НО поданы там книги для новичков которые понимают принцип работы ЭВМ (лично моё мнение) ....


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

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

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