Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2011, 17:01   #1
b320782
Новичок
Джуниор
 
Регистрация: 08.12.2011
Сообщений: 2
По умолчанию Массивы, файлы, минимальный элемент (С++)

Помогите мне быстрее плиз. Ни как не пойму как сделать. Вот задача:

Дана матрица A(n,m), которая вводится из файла, и число к, вводимое с клавы. В к-ом столбце найти минимальный элемент. В той строке где этот элемент находится, найти сумму отриц элементов

.... можно даже не писать программу полностью. мне не понятно как в к-ком столбце найти мин. значение и сложить все отриц элементы.
b320782 вне форума Ответить с цитированием
Старый 08.12.2011, 17:08   #2
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Быстро только кошки рожают (с)

Объявляешь минимальным нулевой элемент столбца k, индекс минимального элемента равен, соответственно 0.
Цикл по столбцу
Если очередной элемент меньше минимума, запоминаешь его индекс как индекс минимального элемента.

Потом цикл по этой строке (индекс которой ты нашел), в котором и считаешь сумму отрицательных элементов.
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 09.12.2011, 01:23   #3
TheKostarico
Пользователь
 
Регистрация: 22.05.2010
Сообщений: 15
По умолчанию

Лови фрагмент

Код:
for(i=0;i<n;i++)
{
	if(a[i][k]<a[0][k])
	{
		f=i;
		a[0][k]=a[i][k];
	}
}
s=0;
for(j=0;j<m;j++)
	s+=a[f][j];
printf("s=%d\n",s);

Последний раз редактировалось TheKostarico; 09.12.2011 в 01:28.
TheKostarico вне форума Ответить с цитированием
Старый 09.12.2011, 02:11   #4
b320782
Новичок
Джуниор
 
Регистрация: 08.12.2011
Сообщений: 2
По умолчанию

Спасибо, но я уже сделал; часа через два после того как мне помог Mandrivnyk. Понял свою ошибку - хотя долго нервничал по этому поводу - я изначально делал правильно, но сравнивал не с тем. Видать, опыта не хватает. :P
Написал так:
Код:
int xsum(int i_min,int **a, int n)
{
  int j,s;
        for(s=0,j=0;j<n;j++)
            if(a[i_min][j]<0){
            s+=a[i_min][j];
            }
        return s;
}
i_min=0;
   for(i=0;i<n;i++)
        if (a[i][k] < a[i_min][k])
                i_min=i;

int summa=xsum(i_min,a,n);

Последний раз редактировалось b320782; 09.12.2011 в 02:14.
b320782 вне форума Ответить с цитированием
Старый 09.12.2011, 10:47   #5
TheKostarico
Пользователь
 
Регистрация: 22.05.2010
Сообщений: 15
По умолчанию

твоя по корректней будет - в своей пару ошибок обнаружил, писал на скору руку
TheKostarico вне форума Ответить с цитированием
Старый 14.12.2011, 17:18   #6
mdqsuper
 
Регистрация: 14.12.2011
Сообщений: 7
По умолчанию

народ. это опять я.
Препод задолбал.
Говорит теперь полученные результаты перевести в одномерный массив
Код:
     
i_min=0;
   for(i=0;i<n;i++)
        if (a[i][k] < a[i_min][k])
                i_min=i;
                //тоесть где то на это стадии я должен перелить в одномерный массив.
Но у меня не получается. тоесть числа с не тех столбоцов и строчек либо просто абракадабра! как реализовать?
(лучше объяснить на словах что бы сам понял - кодом только если не пойму)
mdqsuper вне форума Ответить с цитированием
Старый 14.12.2011, 17:38   #7
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

То есть, теперь минимальный элемент надо искать для каждого столбца, а потом сумму отрицательных элементов соответствующей строки закидывать в массив с индексом столбца, так?
Объявляешь вначале массив соответствующего размера (равного количеству столбцов).
А потом оборачиваешь свой цикл еще одним циклом по столбцам. И кидаешь сумму поэлементно в массив.
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 14.12.2011, 17:47   #8
mdqsuper
 
Регистрация: 14.12.2011
Сообщений: 7
По умолчанию

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

чет бред какой то говорю ;|

Последний раз редактировалось mdqsuper; 14.12.2011 в 17:55.
mdqsuper вне форума Ответить с цитированием
Старый 14.12.2011, 18:17   #9
mdqsuper
 
Регистрация: 14.12.2011
Сообщений: 7
По умолчанию

это турбо си, но я думаю и так понятно.
Код:
#include <alloc.h>
#include <stdio.h>
#include <conio.h>
int n;
int xsum(int i_min,int **a) // сюда я должен буду передовать уже одноменый массив, а не двумерный
{
  int j,s;
        for(s=0,j=0;j<n;j++)
            if(a[i_min][j]<0){
            s+=a[i_min][j];
            }
        return s;
}
main()
{

    int i,j,**a,sum,m,k,*x,min,i_min=0,p=0;
    FILE *in;
    if((in=fopen("file.dat","r"))==NULL)
    {
        printf("\nfile.dat not found.");
        getch();exit(1);
    }
    printf("~Number of points:");
    scanf("%d%d",&n,&m);
    printf("~K:");
    scanf("%d",&k);
    k-=1;
    a=(int**)malloc(n*sizeof(int*));
    x=(int*)malloc(n*sizeof(int*));
    for(i=0;i<n;i++){
        a[i]=(int*)malloc(m*sizeof(int));
        for(j=0;j<m;j++)
                fscanf(in,"%d", &a[i][j]);
}

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

    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
            if (a[i][k] < a[i_min][k])
                 i_min=i;
                 // тоесть где то сдесь я должен переписать из старого двумерного массива в новый одномерный. 
    

    printf("min:%d\n",a[i_min][k]);
    int summa=xsum(i_min,a);
    printf("summa:%d",summa);
    getch();
}
PS: на ошибки не обращайте внимания мне главное понять как это сделать)

Последний раз редактировалось mdqsuper; 14.12.2011 в 18:21.
mdqsuper вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Минимальный элемент в массиве (Visual C++) Афанасий[vedma] Помощь студентам 1 29.11.2011 17:13
Минимальный элемент массива hoolywood Паскаль, Turbo Pascal, PascalABC.NET 3 30.05.2011 12:21
Delphi-минимальный элемент матрицы. STIFLER32 Помощь студентам 3 25.03.2010 19:48