uses
Crt;
const
N = 10;
var
Arr: array [1..N, 1..N] of Double;
A: array [1..N] of Double;
I, J: Byte;
begin
ClrScr;
{Как-то заполняешь матрицу}
for I := 1 to N do
if Arr[I, I] < 0 then
begin
J := 1;
{Суммируем до первого неотрицательного}
A := 0;
while Arr[I, J] >= 0 do
begin
A := A + Arr[I, J];
Inc(J);
end;
end
else
begin
{Ищем первый неотрицательный}
for J := I+1 to N do
if J >= 0 then
Break;
{Суммируем от первого неотрицательного и до конца}
A := 0;
while J <= N do
begin
A := A + Arr[I, J];
Inc(J);
end;
end;
ReadKey;
end.
/С++/ Действительная квадратная матрица
[SIZE="6"][/SIZE]:confused: [FONT="Times New Roman"]Дана действительная квадратная матрица порядка n. Построить последовательность действительных чисел a1, ..., an по правилу: если в i-й строке матрицы элемент, принадлежащий главной диагонали, отрицателен, то ai равно суме элементов i-й строки, предшествующих первому отрицательному элементу; в противном случае ai равно сумме последних элементов i-й строки, начиная с первого по порядку неотрицательного элемента.[/FONT]
И - первый по порядку - откуда считая? Я считаю слева направо.
Ну вот набросок.
Код:
Не забудь сказать спасибо ;)
Ща я напишу :)
Стоит ли отмечать, что сишник не такой милосердный, как я, и ведет отсчет элементов массива с 0? :)
Код:
#include <stdio.h>
#define N 10
int main() {
float arr[N][N];
float a[N];
int i, j;
for (i = 0; i < N; i++) {
if (arr[i, i] < 0) {
j = 0;
a = 0;
// Здесь я маленька ступил в прошлый раз. Надо было делать проверку на достижение границы массива
while ((arr[i, j] >= 0) && (i < N)) {
a = a + arr[j];
j++;
}
}
else {
for(j = i+1; j < N; j++)
if (j >= 0)
break;
a = 0;
while (j <= N) {
a = a + arr[j];
j++;
}
}
}
return 0;
}
#define N 10
int main() {
float arr[N][N];
float a[N];
int i, j;
for (i = 0; i < N; i++) {
if (arr[i, i] < 0) {
j = 0;
a = 0;
// Здесь я маленька ступил в прошлый раз. Надо было делать проверку на достижение границы массива
while ((arr[i, j] >= 0) && (i < N)) {
a = a + arr[j];
j++;
}
}
else {
for(j = i+1; j < N; j++)
if (j >= 0)
break;
a = 0;
while (j <= N) {
a = a + arr[j];
j++;
}
}
}
return 0;
}
Самый очевидный и позорный:
Код:
for(j = i+1; j < N; j++)
[color=red]if (j >= 0)[/color]
break;
[color=red]if (j >= 0)[/color]
break;
Код:
for(j = i+1; j < N; j++)
[color=red]if (a[j] >= 0)[/color]
break;
[color=red]if (a[j] >= 0)[/color]
break;
Поэтому я переписал прогу снуля, откомпилил и проверил. Вот новый RC :)
Сделал ее более C-стайл
Код:
#include <stdio.h>
#define N 5
int main()
{
float arr[N][N];
float a[N];
int i, j;
for (i = 0; i < N; i++)
{
// Заполняем arr случайными числами (-5..5)
for (j = 0; j < N; j++)
{
arr[j] = rand()%10 - 5;
printf("%f ", arr[j]);
}
printf("\n");
// Заодно заполняем a нулями
a = 0;
}
for (i = 0; i < N; i++)
{
if (arr < 0)
{
for (j = 0; j < N; j++)
{
if (arr[j] >= 0)
{
a = a + arr[j];
}
else
break;
}
}
else
{
// Ищем первый неотрицательный
int k = 0;
for (j = 0; j < N; i++)
{
if (arr[j] >= 0)
{
k = j;
break;
}
}
for (j = k; j < N; j++)
{
a = a + arr[j];
}
}
}
printf("\n\n");
for (i = 0; i < N; i++)
{
printf("%f ", a);
}
printf("\n\n");
return 0;
}
#define N 5
int main()
{
float arr[N][N];
float a[N];
int i, j;
for (i = 0; i < N; i++)
{
// Заполняем arr случайными числами (-5..5)
for (j = 0; j < N; j++)
{
arr[j] = rand()%10 - 5;
printf("%f ", arr[j]);
}
printf("\n");
// Заодно заполняем a нулями
a = 0;
}
for (i = 0; i < N; i++)
{
if (arr < 0)
{
for (j = 0; j < N; j++)
{
if (arr[j] >= 0)
{
a = a + arr[j];
}
else
break;
}
}
else
{
// Ищем первый неотрицательный
int k = 0;
for (j = 0; j < N; i++)
{
if (arr[j] >= 0)
{
k = j;
break;
}
}
for (j = k; j < N; j++)
{
a = a + arr[j];
}
}
}
printf("\n\n");
for (i = 0; i < N; i++)
{
printf("%f ", a);
}
printf("\n\n");
return 0;
}
матрица - любого размера, ну и еще там по мелочам.Посмотри,
может еще улучшишь:)
Microsoft Visual Studio2003.
Код:
#include "stdafx.h"
#include <iostream>
#include "windows.h"
#include <ctime>
#include <iomanip>
using namespace std;
inline char *rus(char *s)
{
char *t = new char[strlen(s) + 1];
CharToOem(s,t);
return t;
}
int _tmain(int argc, _TCHAR* argv[])
{
srand(time(0));
int n;
cout<<rus("введите размер матрицы")<<endl;
cin>>n;
int **mas = new int*[n];
int *a = new int[n];
for(int i = 0;i<n;++i)
a = 0;
cout<<rus("исходная последовательность :")<<endl;
cout<<endl;
for(int i = 0;i<n;++i)
cout<<a<<' ';
cout<<endl;
for(int i = 0;i<n;++i){
mas = new int[n];
for(int j = 0;j<n;++j)
mas[j] = rand() % 10 - 5;
}
cout<<endl;
cout<<rus("\tисходная матрица")<<"\n\n";
for(int i = 0;i<n;++i){
for(int j = 0;j<n;++j)
cout<<setw(5)<<mas[j];
cout<<"\n\n";
}
int j,value = 0;
//проверяем диагонали
for(int i = 0;i<n;++i){
if(mas<0){
for(j = 0;mas[j]>=0;++j)
a += mas[j];
}else{
for(j = 0;j<n;++j)
{
if(mas[j]>=0){//ищем 1-й неотриц.элемент
value = j;
break;
}
}
for(j = value;j<n;++j)
a += mas[j];
}
}
cout<<'\n'<<rus("окончательная последовательность")<<"\n\n";
for(int i = 0;i < n;++i)
cout<<a<<' ';
cout<<endl;
delete a;
for(int i=0;i<n;i++)
delete[] mas;
delete[] mas;
return 0;
}
#include <iostream>
#include "windows.h"
#include <ctime>
#include <iomanip>
using namespace std;
inline char *rus(char *s)
{
char *t = new char[strlen(s) + 1];
CharToOem(s,t);
return t;
}
int _tmain(int argc, _TCHAR* argv[])
{
srand(time(0));
int n;
cout<<rus("введите размер матрицы")<<endl;
cin>>n;
int **mas = new int*[n];
int *a = new int[n];
for(int i = 0;i<n;++i)
a = 0;
cout<<rus("исходная последовательность :")<<endl;
cout<<endl;
for(int i = 0;i<n;++i)
cout<<a<<' ';
cout<<endl;
for(int i = 0;i<n;++i){
mas = new int[n];
for(int j = 0;j<n;++j)
mas[j] = rand() % 10 - 5;
}
cout<<endl;
cout<<rus("\tисходная матрица")<<"\n\n";
for(int i = 0;i<n;++i){
for(int j = 0;j<n;++j)
cout<<setw(5)<<mas[j];
cout<<"\n\n";
}
int j,value = 0;
//проверяем диагонали
for(int i = 0;i<n;++i){
if(mas<0){
for(j = 0;mas[j]>=0;++j)
a += mas[j];
}else{
for(j = 0;j<n;++j)
{
if(mas[j]>=0){//ищем 1-й неотриц.элемент
value = j;
break;
}
}
for(j = value;j<n;++j)
a += mas[j];
}
}
cout<<'\n'<<rus("окончательная последовательность")<<"\n\n";
for(int i = 0;i < n;++i)
cout<<a<<' ';
cout<<endl;
delete a;
for(int i=0;i<n;i++)
delete[] mas;
delete[] mas;
return 0;
}
СПАСИБО ОГРОМНОЕ !!!