Другие языки программирования и технологии
Массивы на Си! задача!
В одномерном массиве, состоящем из п вещественных элементов, вычислить сумму элементов массива, расположенных до последнего положительного элемента.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <locale.h>
void main()
{
setlocale(LC_CTYPE, "Russian_Russia.1251");
srand((unsigned)time(NULL));
int N;
printf("\n Введите размер массива: ");
scanf("%d", &N);
printf("\n---------------------------------\n");
float *a = (float*) malloc(N * sizeof(float));
float summa = 0;
int flag = 0;
for (int n = 0; n < N; n++)
{
a[n] = (float)(rand() % 11 - 5) / 1.33333;
printf(" %.2f ", a[n]);
}
printf("\n---------------------------------\n");
for (int n = N - 1; n >= 0; n--)
{
if (n == 0 && flag == 0)
{
printf("\n\n Массив не удовлетворяет условию задания! \a");
getch();
return;
}
if (a[n] < 0 && flag == 0) continue;
else if (a[n] >= 0 && flag < 1)
{
flag++;
n--;
}
summa += a[n];
}
printf("\n Сумма = %.2f", summa);
getch();
}
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <locale.h>
void main()
{
setlocale(LC_CTYPE, "Russian_Russia.1251");
srand((unsigned)time(NULL));
int N;
printf("\n Введите размер массива: ");
scanf("%d", &N);
printf("\n---------------------------------\n");
float *a = (float*) malloc(N * sizeof(float));
float summa = 0;
int flag = 0;
for (int n = 0; n < N; n++)
{
a[n] = (float)(rand() % 11 - 5) / 1.33333;
printf(" %.2f ", a[n]);
}
printf("\n---------------------------------\n");
for (int n = N - 1; n >= 0; n--)
{
if (n == 0 && flag == 0)
{
printf("\n\n Массив не удовлетворяет условию задания! \a");
getch();
return;
}
if (a[n] < 0 && flag == 0) continue;
else if (a[n] >= 0 && flag < 1)
{
flag++;
n--;
}
summa += a[n];
}
printf("\n Сумма = %.2f", summa);
getch();
}
#include<iostream>
#include<time.h>
using namespace std;
int main()
{
int s=0,j,N,k=-1;
srand(time(0));
cout << "Размер массива: "; cin >> N;
int* t=new int [N];
cout << "Случайная последовательность: \n";
for(j=0;j < N;t[j]=100-rand() % 201,cout << "m[" << j << "]=" << t[j] << ' ',t[j]>0?k=j++:j++) ;
if(k<0) { cerr << "В массиве нет положительных элементов! \n"; return 1; }
for(j=0;j < k;s+=t[j++]);
cout << "Сумма до элемента m[" << k << "]=" << t[k] << " равна: " << s << endl;
delete [] t;
return 0;
}
#include<time.h>
using namespace std;
int main()
{
int s=0,j,N,k=-1;
srand(time(0));
cout << "Размер массива: "; cin >> N;
int* t=new int [N];
cout << "Случайная последовательность: \n";
for(j=0;j < N;t[j]=100-rand() % 201,cout << "m[" << j << "]=" << t[j] << ' ',t[j]>0?k=j++:j++) ;
if(k<0) { cerr << "В массиве нет положительных элементов! \n"; return 1; }
for(j=0;j < k;s+=t[j++]);
cout << "Сумма до элемента m[" << k << "]=" << t[k] << " равна: " << s << endl;
delete [] t;
return 0;
}
1) Двигаясь с конца массива к началу ищешь первое вхождение положительного элемента, как найдешь положительный - запоминаешь его индекс в какую-нибудь переменную (Допустим в переменную N)
Num - количество элементов массива.
for (int i = Num-1 ; i >= 0 ; i-- )
{
if ( A [ i ] > 0 ) { N = i; break; }
}
Таким образом найдем последний положит. элемент
2) Объявляем переменную sum, запоминаем в нее значение [0]-го элемента массива: sum=A[0];
3) выполняем цикл for (int i = 1 ; i < N ; i++) { sum = sum + A [ i ] ; }
Можно так же добавить условие после 1-го шага: if (N<=0) return 0; Т. е. если в массиве только один положительный элемент, и он находится в самом начале, либо положительных вообще нет - складывать нечего - завершить программу (что бы это условие работало, в самом начале надо присвоить переменной N какое-нибудь отрицательное число, например int N=-1; )
Num - количество элементов массива.
for (int i = Num-1 ; i >= 0 ; i-- )
{
if ( A [ i ] > 0 ) { N = i; break; }
}
Таким образом найдем последний положит. элемент
2) Объявляем переменную sum, запоминаем в нее значение [0]-го элемента массива: sum=A[0];
3) выполняем цикл for (int i = 1 ; i < N ; i++) { sum = sum + A [ i ] ; }
Можно так же добавить условие после 1-го шага: if (N<=0) return 0; Т. е. если в массиве только один положительный элемент, и он находится в самом начале, либо положительных вообще нет - складывать нечего - завершить программу (что бы это условие работало, в самом начале надо присвоить переменной N какое-нибудь отрицательное число, например int N=-1; )
Похожие вопросы
- Задача по массиву в Си++
- Помогите.Массивы.Язык Си.
- Программа с массивами на Си
- Помогите,пожалуйста,решить задачу на двумерные массивы,в паскале.(задача вн.)Спасибо.
- Двумерный массив. Язык Си.
- Программирование. Одномерные массивы в си.
- Помогите с массивами в си++
- язык си. задача по языку Си. Задаются коэффициенты системы из трёх линейных уравнений. Найти корни.
- Функция для сравнения элементов 2 одномерных массивов на си?
- двумерный массив в СИ