PDA

Просмотр полной версии : Язык программирования С


Tommy
05.10.2008, 12:58
Народ кто нибудь шарит в этом??помогите плииз
"В двумерном N * K массиве целых чисел поменять местами строку, содержащую минимальный элемент массива, со строкой, содержащей максимальный элемент массива"

Insya
05.10.2008, 20:17
могла налажать в синтаксисе, т к на вижуалке на с++ писала

#include "stdafx.h"

int N=4;
int K=3;
int m[4][3]={{5,3,4},{8,1,3},{7,0,4},{9,5,7}};


void FindMinMax(int a[][3], int &imin, int &imax)
{
int jmax=0;
int jmin=0;
int i;
int j;
for (i = 0; i < N; i++)
{
for(j=0; j<K; j++)
{
if (a[imax][jmax] < a[i][j])
{
imax = i;
jmax=j;
}
if (a[imin][jmin] > a[i][j])
{
imin = i;
jmin=j;
}
}
}
}
void main()
{
int imin=0;
int imax=0;
int temp[3];
int i;
int j;
FindMinMax(m, imin, imax);
for(i=0; i<3; i++)
{
temp[i]=m[imin][i];
m[imin][i]=m[imax][i];
m[imax][i]=temp[i];
}

for(i=0;i<4;i++)
{
for(j=0;j<3;j++)
{
printf("%d", m[i][j]);
}
printf("\r\n");
}
}

TNT
05.10.2008, 20:34
а чего в stdafx.h вообще?
P.S. Tommy, ты тоже из техникума? :)

Tommy
05.10.2008, 20:50
а чего в stdafx.h вообще?
P.S. Tommy, ты тоже из техникума? :)
Ну типа того...гуап:)

Kostyan
05.10.2008, 20:52
Народ кто нибудь шарит в этом??помогите плииз
"В двумерном N * K массиве целых чисел поменять местами строку, содержащую минимальный элемент массива, со строкой, содержащей максимальный элемент массива"

потести, а то я не успел, может баги где есть...

#include <iostream>

using namespace std;

const int n=4;//кол-во строк
const int k=2;//кол-во столбцов

void masprint(int** massive)//функция вывода массива
{
for (int i=0; i<n; i++)
{
for (int j=0; j<k; j++)
cout<<massive[i][j]<<" ";
cout<<'\n';
};
};

int** replacemaxmin(int** a)//функция замены строк
{
int max=a[0][0];
int min=a[0][0];
int nmax=0;//номер строки с наибольшим
int nmin=0;//номер строки с наименьшим
for (int i=0; i<n; i++)
for (int j=0; j<k; j++)
{
if (a[i][j]>max)//сравниваем с макс
{
max=a[i][j];//новый максимум
nmax=i;//текущая строка с мин эл-ои
};
if (a[i][j]<min)//сравниваем с мин
{
min=a[i][j];//новый минимум
nmin=i;//текущая строка с мин эл-ом
};
};
int tmp=0;
for (int j=0; j<k; j++)//меняем строки местами
{
tmp=a[nmax][j];
a[nmax][j]=a[nmin][j];
a[nmin][j]=tmp;
};
return a;
};

int main()
{
int** mas=new int*[n];//динамически создаём массив
for (int i=0; i<n; i++)
mas[i]=new int[k];
for(int i=0; i<n; i++)//заполняем массив
for(int j=0; j<k; j++)
{
cout<<"Enter element x"<<'['<<i<<"]["<<j<<"]: \n";
cin>>mas[i][j];
};
masprint(mas);//выводим исходный массив
cout<<'\n';
mas=replacemaxmin(mas);//обрабатываем массив
masprint(mas);//выводим конечный массив
return 0;
}

Insya
05.10.2008, 21:36
а чего в stdafx.h вообще?
P.S. Tommy, ты тоже из техникума? :)

стандартная библиотека, в которую входят основные библиотеки

Insya
05.10.2008, 21:38
потести, а то я не успел, может баги где есть...


он же сказал, что ему на c надо, на с такие конструкции не прокатят, даже "for(int i=0.." он не поймет

Kostyan
05.10.2008, 21:57
он же сказал, что ему на c надо, на с такие конструкции не прокатят, даже "for(int i=0.." он не поймет

тьфу ты! ну если неожиданно понадобиться вариант на c++, то вот пожалуйста:)) насколько я знаю в гуапе вроде у всех изучение начинается с паскаля или с++. может он опечатался?:)

kainen
05.10.2008, 22:02
могла налажать в синтаксисе, т к на вижуалке на с++ писала

#include "stdafx.h"

int N=4;
int K=3;
int m[4][3]={{5,3,4},{8,1,3},{7,0,4},{9,5,7}};


void FindMinMax(int a[][3], int &imin, int &imax)
{
int jmax=0;
int jmin=0;
int i;
int j;
for (i = 0; i < N; i++)
{
for(j=0; j<K; j++)
{
if (a[imax][jmax] < a[i][j])
{
imax = i;
jmax=j;
}
if (a[imin][jmin] > a[i][j])
{
imin = i;
jmin=j;
}
}
}
}
void main()
{
int imin=0;
int imax=0;
int temp[3];
int i;
int j;
FindMinMax(m, imin, imax);
for(i=0; i<3; i++)
{
temp[i]=m[imin][i];
m[imin][i]=m[imax][i];
m[imax][i]=temp[i];
}

for(i=0;i<4;i++)
{
for(j=0;j<3;j++)
{
printf("%d", m[i][j]);
}
printf("\r\n");
}
}

так неверная же программа

kainen
05.10.2008, 22:04
да, я зануда

ΛLIEN
05.10.2008, 22:24
могла налажать в синтаксисе, т к на вижуалке на с++ писала
Надо было изначально выбрать просто си проект, а не спп. А то получилось в перемешку. =)

Insya
05.10.2008, 23:20
да, я зануда

ага, редкостная :) алгоритм верен, может не оптимизирован, но верен :)

тьфу ты! ну если неожиданно понадобиться вариант на c++, то вот пожалуйста:)) насколько я знаю в гуапе вроде у всех изучение начинается с паскаля или с++. может он опечатался?:)

возможно он сам не знает :)

Надо было изначально выбрать просто си проект, а не спп. А то получилось в перемешку. =)

В вижуалке нельзя выбрать си проект, только си++. Можно было просто файл переименовать из срр в с, тогда он бы его компилил как си, но мне, честно говоря, было лень, сам разберется если что :)

kainen
05.10.2008, 23:59
ага, редкостная :) алгоритм верен, может не оптимизирован, но верен :)
для этой задачи алгоритм совпадает с постановкой задачи
а программа неверная

Insya
06.10.2008, 12:28
для этой задачи алгоритм совпадает с постановкой задачи
а программа неверная

Смотря, что ты называешь программой и смотря, что есть для тебя неверная программа. Тебе не понравилось, что она работает только для конкретной матрицы? Я вообще хотела написать просто абстрактный алгоритм без ввода и вывода данных и без проверки, чтобы тот парень сам потом додумал и доработал как ему надо, иначе нафиг вообще все это обучение, когда все делают за тебя? Но потом все же решила проверить, что написала, поэтому в код всунута какая-то матрица и вывод результата на экран (поэтому там перемешаны конкретные цифры и переменные N K)

Вождь
06.10.2008, 12:46
Вообще камраду должно быть стыдно просить помощи в решении такой тревиальной задачи, независимо от требуемого языка программирования. Тем более когда ответ на его вопрос постят такие прекрасные девушки...
Я бы удавился от стыда...
Инсе респект ;) хотя я бы сделал немного не так

пс костяну тоже респект за отформатированный код и комментарии

ΛLIEN
06.10.2008, 17:10
хотя я бы сделал немного не так
я бы вообще передавал в функцию поиска указатель на одномерный массив (массив любой размерности можно представить как одномерный) и искал max/min в нем. а найдя индексы макс/мин значений, элементарно определяем в каких строках. есть одно но... было лень. =)

ps: В вижуалке нельзя выбрать си проект,
На вижеле перестал работать в последнее время. В основном Eclipse JDK(для GUI SWT) / CDK (для доступ к железу через JNI + MinGW).

kainen
07.10.2008, 00:52
Смотря, что ты называешь программой и смотря, что есть для тебя неверная программа. Тебе не понравилось, что она работает только для конкретной матрицы? Я вообще хотела написать просто абстрактный алгоритм без ввода и вывода данных и без проверки, чтобы тот парень сам потом додумал и доработал как ему надо, иначе нафиг вообще все это обучение, когда все делают за тебя? Но потом все же решила проверить, что написала, поэтому в код всунута какая-то матрица и вывод результата на экран (поэтому там перемешаны конкретные цифры и переменные N K)
ну да, задачаа настолько тривиальна, что ее постановка совпадает с решением
я бы вообще передавал в функцию поиска указатель на одномерный массив (массив любой размерности можно представить как одномерный) и искал max/min в нем. а найдя индексы макс/мин значений, элементарно определяем в каких строках. есть одно но... было лень. =)

красивая мысль. единственное, к чему хочется придраться - слова "указатель на массив"

ΛLIEN
07.10.2008, 01:08
к чему хочется придраться - слова "указатель на массив"согласен