Найти седловую точку матрицы - C (СИ)

  1. Помогите написать программу нахождения седловой точки( то есть нужно в двумерной матрице найти элементы, которые являются наибольшими в свооих столбцах и наименьшими в строках) Вот моя программа, но она не работает. Найдите, пожалуйста, ошибку или предложите новый вариант.C1 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 #include <stdio.h> #include <conio.h> #include <math.h> int main() {     int a[4][4],v[4][4],c[4][4],     k,i,ni,nk,mi,mk,min,max;         /*Обнуляем элементы доп. матриц*/       for(i=0; i<=3; i++)     {              for(k=0; k<=3; k++)              { v[i][k]=0; c[i][k]=0;}                                             }     /*Создаём основной массив*/     printf("Enter massiv:");     for(i=0; i<=3; i++)     {              for(k=0; k<=3; k++)              {scanf("%d", &a[i][k]);}                                      }      /*Выводим основной массив на печать*/            for(i=0; i<=3; i++)     {              for(k=0; k<=3; k++)              {printf("%d\t", a[i][k]);}                printf("\n");                      }                              /*Определяем мин. элементы в каждой строке*/            for(i=0; i<=3; i++)      {               min=a[i][0]; v[i][0]=min;               for(k=0; k<=3; k++)               {                       if (min>a[i][k]) {   ni=i;nk=k; min=a[i][k]; }                                             }   v[ni][nk]=min;                                                                                        }                                              /*Определяем макс. элементы в каждом столбце*/    for(k=0; k<=3; k++)      {               max=a[0][k]; c[0][k]=max;               for(i=0; i<=3; i++)               {                       if (max<a[i][k]) {   mk=k; mi=i; max=a[i][k];}                                             }              c[mi][mk]=max;                                   }                /*Выводим на печать седловые точки*/                                       for(i=0; i<=3; i++)     {              for(k=0; k<=3; k++)              {    if ((c[i][k]==v[i][k])&&(c[i][k]!=0)&&(v[i][k]!=0))                     { printf("Sedlovoy element %d\t", v[i][k]); }                                                                                                    }                                              }    getch();     return 0; }


textual

Код к задаче: «Найти седловую точку матрицы - C (СИ)»

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <locale.h>
#include <time.h>
int main()
{
 long i, j, n, k = 0, k1 = 0, max,min, m, v, b;
 srand((unsigned)time(NULL));
 setlocale(LC_ALL, "rus");
 printf("Ââåäèòå n ГЁ m: ");
 scanf("%d%d",&n,&m);
 printf("\n");
 
 long **a = (long**)calloc(n,sizeof(long*));
 
for(i = 0; i < n; i++)
*(a + i)=(long*)calloc(m,sizeof(long));
 
 
for(i = 0; i < n; i++)
    for(j = 0 ; j < m; j++)
    scanf("%d", &*(*(a + i) + j));
    
for(i = 0; i < m; i++)    
    printf((i == 0)?"%6d":"%5d", i);
    
printf("\n\n");         
            
 for(i = 0; i < n; i++)
 {printf("%2d", i);
    for(j = 0 ; j < m; j++)
    {
        printf("%4d ",*(*(a + i) + j));
    }
    printf("\n");
 }
printf("\nÐåçóëüòГ*ГІ: \n\n");
 
 
 for(i = 0; i < n; i++, k = k1 = 0)
      {max = min = *(*(a + i) + i);
       for(j = 0; j < m; j++)
       
             if(*(*(a + i) + j) >= max)
                 {max = *(*(a + i) + j);
                 v = j;}
                 else
                    if(*(*(a + i) + j) <= min)
                         {min = *(*(a + i) + j);
                         b = j;} 
                                         
for(int l = 0; l < n; l++)
   if(*(*(a + l) + v) >= max)
       k++;
       
for(int l = 0; l < n; l++)
      if(*(*(a + l) + b) <= min)
       k1++;
             
if(k == n)
   printf("(1) Г€Г*äåêñ ñòðîêè - [ ..%d.. ]\n(1) Г€Г*äåêñ ñòîëáöГ* - [ ..%d.. ]\n", i, v);//ГЌГ*èáîëüøèé Гў ñòðîêå ГЁ Г*Г*èìåГ*ГјГёГЁГ© Гў ñòîëáöå. (1)
   
      if(k1 == n)
        printf("(2) Г€Г*äåêñ ñòðîêè - [ ..%d.. ]\n(2) Г€Г*äåêñ ñòîëáöГ* - [ ..%d.. ]\n", i, b); //ГЌГ*èìåГ*ГјГёГЁГ© Гў ñòðîêå ГЁ Г*Г*èáîëüøèé Гў ñòîëáöå. (2)                 
} 
                   
for(i = 0; i < n; i++)
      free(*(a + i));
free(a);        
system("pause");
}

СДЕЛАЙТЕ РЕПОСТ

11   голосов, оценка 3.818 из 5



Похожие ответы
  1. Имеется задача: Определить с точностью до 0.1 точку пересечения с осью X функции y=x-arctg(x-pi), изменяя значение x от 2 до 5 с шагом 0.1. Изменение знака функции является признаком пересечения оси X. При x=2 функция отрицательная. Написал код, но мне непонятно: 1) Где должно прописываться x=2? 2) И нужно ли здесь вводить X с клавиатуры?C1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include #include #include   const double PI = 3.14159265; double x, y;   int main(void) {     for ( x>2; x<=5; x+=0.1)     y=x-atan(x-PI);     printf("Tochka peresechenia = %lf \n", y);     system("pause"); }В этом коде точка пересечения получилась 3.9..... Оффтоп У всех форум полурусский полуанглийский?

  1. Приветствую всех, я студент первого курса, си начал изучать недавно, сразу возникли проблемы. Есть у меня, значит, такая задача: Дана ломаная,изобpаженная на pисунке и пpямая, задаваемая уpавнением вида y=ax+b. Пpи заданном огpаничении на a найти тpебуемую точку пеpесечения пpямой и ломаной. a!=0,найти крайнюю правую. Из условия следует, что a и b задаются с клавы, x мы перебираем счетчиком и находим у. Таким образом нам становится известны кординаты х и у через которые проходит прямая и пересекает/не пересекает ломаную. Пересечение может произойти в одной или нескольких точках, если в нескольких, то находим крайнюю справа. Проблема в том, что я не понимаю как найти координаты точки пересечения прямой и ломаной. (теорию освоил, применить не могу) Готовый код не прошу, достаточно будет если объясните словам что нужно делать. Нашел темку с аналогичной задачей в разделе с++, ща буду изучать. http:// www.cyberforum.ru/cpp-beginners/thread57225.html

  1. Дана строка символов. Преобразовать ее, заменив в ней каждую точку многоточием помогите пожалуйста. тут как я понял идет сдвиг и просто заменой н получиться...

  1. Напечатайте заданную последовательность символов, заменяя каждую точку многоточием.

  1. Определить точку ( x , y ) , в которой функция двух переменных z = cos 3x / ( sin2 y + 1) принимает найбольшие значения. Для этого вычислить значение функции во всех точках координатной сетки x*y размерностью n*n , где x меняется от 0 до Pi/2 / 2, а y - от Pi/ 4 до 2 ; значение n ввести с клавиатуры.Здесь значение нужно виводить в радианах. Вот, што я накидал:C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include   int main(int n,z,i){     printf("Vvedit n=");     scanf_s("%d",&n);     printf("n =%d\n",n);     for (int x=0;x<=Pi/2;x++)     {         for (int y=pi/4;y<=2;y++){               z = cos 3x / (sin2 y + 1);         }     }     }

  1. Условие задачи следующее: Среди N точек, заданных своими координатами на плоскости, определить самую дальнюю точку от начала координат. Координаты точек вводятся с клавиатуры или получаются при помощи генератора случайных чисел. Не знаю, правильно ли я использовала функцию rand(),не совсем поняла как используют ее... А так...я вроде написала, как считала вроде правильным..но есть ошибки... не смогла исправить.C1 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 #include #include #include #include int main() {    int n,x,y, max, m,l;    char k;    system ("chcp 1251> nul");    printf ("Введите количество точек:");    scanf("%d", &n);    printf ("Если будете вводить с клавиатуры , то нажмите N, в противном случае M");    scanf ("%c", &k);    max=0;    switch (k)    case 'N':         {             while (n!=0)             {                 printf("Введите координаты точки (x,y):");                 scanf("%d %d", &x, &y);                 if (sqrt(x*x+y*y)>max)                 {                                       max= sqrt(x*x+y*y);                                       m=x;                                       l=y;                 }                 n--              }              printf("Максимально отдаленная от начала координат точка (%d,%d)", m, l)         }    default 'M':            {                while (n!=0)                {                    printf("Ввод координат точек :");                    x = rand()%d+1;                    y = rand()%d+1;                    printf("%d;%d",x,y);                    if (sqrt(x*x+y*y)>max)                    {                                          max=sqrt(x*x+y*y);                                          m=x;                                          l=y;                    }                   n--                 }                 printf("Максимально отдаленная от начала координат точка (%d,%d)", m, l)             }             getch();     }

  1. Дана строка.Заменить группу стоящих точек на одну точку и вывести строку.Решить задачу с помощью односвязного списка.Если кто сможет напишите алгоритм с пояснениями.Не понимаю как ввести односаязный список с клавиатуры и сам алгоритм поиска и удаления вообще.

  1. Помогите пожалуйста! Дана строка символов.Преобразовать ее заменив каждую из групп рядом стоящих точек на одну точку. Сделать в трех вариантах. 1. Строка - массив символов 2. Строка - символьная строка 3. Строка читается из файла и ответ записывается в файл

  1. Вот задание. После последней буквы каждого слова вставить точку. Лишние символы (с 81-ого) отбросить Мой код ниже, а от меня требуют сделать рабочие указатели, народ помогите плиз.C1 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 #include #include #include #include void main() {  char *s=new char [100];  char *wrd=new char [100];  int i,l,j,iii,m,kol=0;    puts("Введите строку");  gets(s);  puts("Исходная строка:");  puts(s);    i=0;l=0;    while (i0)     {      for(j=strlen(s);j>=i;j--) // Расширяем строку на 1 символ       s[j+1]=s[j];      s[j+1]='.';              // вставляем точку      i++;     }   }  puts("Полученная строка:");  puts(s);  getch(); }