• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте, чтобы узнать больше. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Помогите, пожалуйста, написать программу на С++

  • Автор темы Автор темы pave
  • Дата начала Дата начала

pave

Ученик
Регистрация
11 Окт 2012
Сообщения
11
Реакции
0
Баллы
0
Помогите, пожалуйста, написать программу на С++

Помогите пожалуйста написать программу на С++ для нахождения в матрице 3х3 трех наибольших элементов и вывод их на экран в окошки Edit. Вот начал, а как дальше не знаю

float M[4][4];
int Max,i,j;
Max=M[1][1];
M[1][1]=StrToFloat(Edit1->Text);
M[1][2]=StrToFloat(Edit2->Text);
M[1][3]=StrToFloat(Edit3->Text);
M[2][1]=StrToFloat(Edit4->Text);
M[2][2]=StrToFloat(Edit5->Text);
M[2][3]=StrToFloat(Edit6->Text);
M[3][1]=StrToFloat(Edit7->Text);
M[3][2]=StrToFloat(Edit8->Text);
M[3][3]=StrToFloat(Edit9->Text);
for(i=1;i<=3;i++)
{for(j=1;j<=3;j++)
 
http://www.tehnari.ru/f41/t79245/ - посмотрите мой код. Там есть нахождение максимальных в двумерном массиве, думаю переделать не составит труда.
Если не получится, выложите свой вариант. Вечерком гляну.
 
Я прошу написать продолжение того что я начал. Я только начал изучать язык и поэтому мне многое не понятно, как можно проще допишите ее
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
float M[4][4];
int Max,i,j;
Max=M[1][1];
M[1][1]=StrToFloat(Edit1->Text);
M[1][2]=StrToFloat(Edit2->Text);
M[1][3]=StrToFloat(Edit3->Text);
M[2][1]=StrToFloat(Edit4->Text);
M[2][2]=StrToFloat(Edit5->Text);
M[2][3]=StrToFloat(Edit6->Text);
M[3][1]=StrToFloat(Edit7->Text);
M[3][2]=StrToFloat(Edit8->Text);
M[3][3]=StrToFloat(Edit9->Text);
for(int i=1;i<4;i++)
{for(int j=1;j<4;j++)
{ if(Max<M[4][4]) Max=M[4][4];
}
}
Edit10->Text=FloatToStr(Max);
}



Вот так написал не работает((((
 
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
float M[4][4];
int Max,i,j;
Max=M[1][1];
M[1][1]=StrToFloat(Edit1->Text);
M[1][2]=StrToFloat(Edit2->Text);
M[1][3]=StrToFloat(Edit3->Text);
M[2][1]=StrToFloat(Edit4->Text);
M[2][2]=StrToFloat(Edit5->Text);
M[2][3]=StrToFloat(Edit6->Text);
M[3][1]=StrToFloat(Edit7->Text);
M[3][2]=StrToFloat(Edit8->Text);
M[3][3]=StrToFloat(Edit9->Text);
for(int i=1;i<4;i++)
{for(int j=1;j<4;j++)
{ if(Max<M[i][j]) Max=M[i][j];
}
}
Edit10->Text=FloatToStr(Max);
}
И почему Вы начинаете счетчики с 1? В Си принято от нуля. Следовательно, M[4][4] - создается матрица 4*4 и у Вас 7 ячеек типа int не используются. Вам надо было объявлять M[3][3] и счетчики делать от нуля до 3х.
И да, этот код выведет только максимальный элемент.
 
да я зная,я упростил себе задачу)))


void __fastcall TForm1::Button1Click(TObject *Sender)
{
float M[3][3];
int Max,i,j;
Max=M[1][1];
M[1][1]=StrToFloat(Edit1->Text);
M[1][2]=StrToFloat(Edit2->Text);
M[1][3]=StrToFloat(Edit3->Text);
M[2][1]=StrToFloat(Edit4->Text);
M[2][2]=StrToFloat(Edit5->Text);
M[2][3]=StrToFloat(Edit6->Text);
M[3][1]=StrToFloat(Edit7->Text);
M[3][2]=StrToFloat(Edit8->Text);
M[3][3]=StrToFloat(Edit9->Text);
for(int i=1;i<=3;i++)
{for(int j=1;j<=3;j++)
{ if(Max<M[3][3]) Max=M[3][3];
}
}
Edit10->Text=FloatToStr(Max);
}


Но все равно не то((( выдает число два, подскажите как сделать
 
а так более понятно
 

Вложения

  • Новый рисунок (3).webp
    Новый рисунок (3).webp
    109.7 KB · Просмотры: 215
Забыли изначально Max присвоить 0.
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
float M[3][3];
int Max,i,j;
Max=0;
Max=M[0][0];
M[1][1]=StrToFloat(Edit1->Text);
M[1][2]=StrToFloat(Edit2->Text);
M[1][3]=StrToFloat(Edit3->Text);
M[2][1]=StrToFloat(Edit4->Text);
M[2][2]=StrToFloat(Edit5->Text);
M[2][3]=StrToFloat(Edit6->Text);
M[3][1]=StrToFloat(Edit7->Text);
M[3][2]=StrToFloat(Edit8->Text);
M[3][3]=StrToFloat(Edit9->Text);
for(int i=1;i<=3;i++)
{for(int j=1;j<=3;j++)
{ if(Max<M[3][3]) Max=M[3][3];
}
}
Edit10->Text=FloatToStr(Max);
}



Все равно не работает
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
float M[3][3];
int Max,i,j;
Max=0;
Max=M[0][0];
M[1][1]=StrToFloat(Edit1->Text);
M[1][2]=StrToFloat(Edit2->Text);
M[1][3]=StrToFloat(Edit3->Text);
M[2][1]=StrToFloat(Edit4->Text);
M[2][2]=StrToFloat(Edit5->Text);
M[2][3]=StrToFloat(Edit6->Text);
M[3][1]=StrToFloat(Edit7->Text);
M[3][2]=StrToFloat(Edit8->Text);
M[3][3]=StrToFloat(Edit9->Text);
for(int i=1;i<=3;i++)
{for(int j=1;j<=3;j++)
{ if(Max<M[3][3]) Max=M[3][3];
}
}
Edit10->Text=FloatToStr(Max);
}



Все равно не работает

Max=M[0][0]; - лишнее действие. К тому же, вы не заполняете этот элемент массива. Следовательно там может лежать абсолютно рандомное число. Которое может быть больше любого из элементов матрицы.

if(Max<M[3][3]) Max=M[3][3]; - ЧТО? Что Вы тут делаете? Я же уже исправлял это. Должно быть так:
Код:
 if(Max<M[[COLOR="Red"]i[/COLOR]][[COLOR="Red"]j[/COLOR]]) Max=M[[COLOR="Red"]i[/COLOR]][[COLOR="Red"]j[/COLOR]];

У Вас не работало потому, что Вы постоянно сравниваете с правым нижним элементом матрицы и его же присваиваете если условие выполняется.
 
А насколько сложно сделать чтобы еще два наибольших элемента выводила???
 
Еще 2? Добавить 1 цикл. И лучше максимальные числа держать в отдельном массиве на 3 элемента.
 
Как добавить один цикл??? Куда??? И как он будет выглядеть
 
Вы совсем не желаете понимать то, что Вам нужно.
Завтра выложу рабочий код. Под Visual сами переделаете.

P.S: рановато с такими познаниями визуалку писать.
 
Да да) Я Вас даже не понимаю
 
Прошу прощения за то, что не ответил вчера, учеба...
Собственно, о чем это я? А! Вот (компилятор Dev-Cpp):
Код:
#include <stdlib.h>
#include <stdio.h>

int main()
{
  int matrix[3][3]; //матрица
  int max[3];        //массив максимальных
  //обнуление массива максимальных
  for(int i=0;i<3;i++) 
   max[i]=0;

  //работа с матрицей
  for(int i=0;i<3;i++)
  {
   printf("\n-------------\n|");
   for(int j=0;j<3;j++)
   {
    matrix[i][j]=rand()%100; //заполняем матрицу псевдослучайными числами от 0 до 100
    printf("%2d |",matrix[i][j]); //вывод матрицы
    
    //находим максималные
    if(matrix[i][j]>max[0]) 
    {
     max[2]=max[1];
     max[1]=max[0];
     max[0]=matrix[i][j];  
    }
    else
    {
     if(matrix[i][j]>max[1])
     {
      max[2]=max[1];
      max[1]=matrix[i][j];  
     }
     else
      if(matrix[i][j]>max[2])
       max[2]=matrix[i][j];
    }
   }
  }
 printf("\n-------------\n");
  
 //вывод массива максимальных чисел 
 for(int z=0;z<3;z++)
  printf("\n Max: %4d",max[z]);


 system("pause");
 return 0;
}

В результате работы алгоритма, массив максимальных будет упорядочен по убыванию.
Под Visual C++ сами подгоните.
 
Спасибо! tehno036
 
Назад
Сверху