Ерундовина

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Задрот
Сообщения: 9
Зарегистрирован: 14 дек 2007, 21:01

14 дек 2007, 21:06

Щомоп! Мне нужна ЩОМОП!Курсач горит!!!Последня задачка(1ый семестр)
Задачка такова:

Для заданной целочисленной квадратной матрицы найти минимум среди сумм модулей элементов диагоналей, параллельных побочной

Сие есть самый черновой листинг, он не решает задачу, но даже со своей функцией не справляется.Работаю в TC 2.0

#include <stdio.h>
#include <math.h>
#include <conio.h>

void main(void)
{
int a[10][10],n,i,j,M,sum[5],tmp,tmp1,k,l;
clrscr();
printf("‚ўҐ¤ЁвҐ а*§¬Ґа*®бвм Єў*¤а*в*®© ¬*ваЁжл");

scanf("%d",&n);

printf("‚ўҐ¤ЁвҐ §**зҐ*Ёп н«Ґ¬Ґ*в®ў");
for (i=0;i<n;i++)
for (j=0;j<n;j++)
{
scanf("%d",&tmp1);
a[j] = tmp1;
}

for (i=0;i<n;i++)
for (j=0;j<n;j++)
{
printf(" %d ",a[j]);
}



for (M=0;M<n;M++)
{
tmp=0;

for (i=0;i<j;i++)
for(j=M;j>0;j--)
tmp+=a[j];

sum[M]=tmp;

}
for (M=0;M<n;M++)
{
tmp2=sum[M];
if
printf("\n %d ",sum[M]);
}
getch();

}
ssDev
Сообщения: 50
Зарегистрирован: 20 янв 2005, 14:41

15 дек 2007, 10:25

матрица a[n][n]
r=pow(10,8);
for(i=0;i<n-1;i++) идем по строкам под над побочной диагональю (a[n-1][0]-a[0][n-1])
{
s=0;
for(j=0;j<=i;j++) по столбцам
{
s+=a[i-j][j]; диагональ
}
r=min(abs(s),r);
}
Задрот
Сообщения: 9
Зарегистрирован: 14 дек 2007, 21:01

15 дек 2007, 11:30

Спасибо большое! щас проверю
Задрот
Сообщения: 9
Зарегистрирован: 14 дек 2007, 21:01

15 дек 2007, 12:01

r=pow(10,8);
r=min(abs(s),r);
Что делают эти строчки??? У меня Си их не компилит
ssDev
Сообщения: 50
Зарегистрирован: 20 янв 2005, 14:41

15 дек 2007, 12:30

чтобы определять минимум тебе надо инициализировать переменную результата
правильнее конечно это r=a[0][0] но чтобы не парится я написал r=10**8 т.к. int может взять примерно <10**10
можеш просто поставить r=1000000000
pow и abs определены в math.h если я не ошибаюсь
r=(int)pow(10.0,8.0)
#define min(a,b) (((a)<(b))?(a) :( b))
Задрот
Сообщения: 9
Зарегистрирован: 14 дек 2007, 21:01

15 дек 2007, 12:38

Не знаю... ругается вот на эту строку :( напоминаю, у меня турбо си версия два-ноль)
r=min(abs(s),r);

Вот весь листинг:
#include <stdio.h>
#include <math.h>
#include <conio.h>

void main(void)
{
int min,s,r,a[10][10],n,i,j,M,sum[5],tmp,tmp1,k,l;
clrscr();
printf("Введите размерность матрицы");

scanf("%d",&n);

printf("Введите элементы");
for (i=0;i<n;i++)
for (j=0;j<n;j++)
{
scanf("%d",&tmp1);
a[j] = tmp1;
}

for (i=0;i<n;i++)
for (j=0;j<n;j++)
{
printf(" %d ",a[j]);
}

r=pow(10,8);
for(i=0;i<n-1;i++)
{
s=0;
for(j=0;j<=i;j++)
{
s+=a[i-j][j];
}
r=min(abs(s),r);
}
printf("%d=",r);
getch();

}
ssDev
Сообщения: 50
Зарегистрирован: 20 янв 2005, 14:41

15 дек 2007, 12:41

хм...
не забудь что тебе надо пройти и под диагональю т.е. повторить то же самое но с одним изменением
s+=a[n-1-(i-j)j][(n-1)-j]
ssDev
Сообщения: 50
Зарегистрирован: 20 янв 2005, 14:41

15 дек 2007, 12:43

r=a[0][0];
for(i=0;i<n-1;i++)
{
s=0;
for(j=0;j<=i;j++)
{
s+=a[i-j][j];
}
if(abs(s)<r)r=abs(s);
ssDev
Сообщения: 50
Зарегистрирован: 20 янв 2005, 14:41

15 дек 2007, 12:55

вот твоя программа
#include <stdlib.h>
#include <math.h>

int main(int argc,char** argv){
int r,a[3][3];
int n=3;
int i,j,s,s1;

a[0][0]=10; a[0][1]=5; a[0][2]=3;
a[1][0]=2; a[1][1]=12; a[1][2]=7;
a[2][0]=21; a[2][1]=22; a[2][2]=278;

r=a[0][0];
for(i=0;i<n-1;i++){
s=0;
s1=0;
for(j=0;j<=i;j++){
s+=a[i-j][j];
s1+=a[n-1-(i-j)][n-1-j];
}
r=min(min(abs(s),r),abs(s1));
}
return 0;
}
Задрот
Сообщения: 9
Зарегистрирован: 14 дек 2007, 21:01

15 дек 2007, 13:00

СПасибо! С нижними диагоналями разберусь, но теперь он выводит мне просто по очереди суммы элементов этих диагоналей(((

#include <stdio.h>
#include <math.h>
#include <conio.h>

void main(void)
{
int min,s,r,a[10][10],n,i,j,M,sum[5],tmp,tmp1,k,l;
clrscr();
printf("‚ўҐ¤ЁвҐ а*§¬Ґа*®бвм Єў*¤а*в*®© ¬*ваЁжл");

scanf("%d",&n);

printf("‚ўҐ¤ЁвҐ §**зҐ*Ёп н«Ґ¬Ґ*в®ў");
for (i=0;i<n;i++)
for (j=0;j<n;j++)
{
scanf("%d",&tmp1);
a[j] = tmp1;
}

for (i=0;i<n;i++)
for (j=0;j<n;j++)
{
printf(" %d ",a[j]);
}

r=a[0][0];
for(i=0;i<n-1;i++)
{
s=0;
for(j=0;j<=i;j++)
{
s+=a[i-j][j];
}
if(abs(s)<r)r=abs(s);
printf(" %d ",r);
getch();

}
}
Ответить