Перейти к содержимому

Фото
- - - - -

Programmeerimise põhikursus keeles C


  • Вы не можете создать новую тему
  • Please log in to reply
134 ответов в этой теме

#91 lqpac

lqpac
  • Пользователь
  • 33 сообщений

Отправлено 29 Март 2011 - 23:53

Вот "исправленный" и правильно работающий код. (проверялся сайтом http://www.math-pr.com/matr_mul_3.php при размерах мартиц 2х2)
#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>
#include <cstdio>
#include <conio.h>

using namespace std;

const int M = 2, N = 2, MN = M * N;

void genereeri(int* m)
{
    for(int k = 0; k < MN; k++)
        m[k] = (rand() % 200) -100; // -100 .. 100
}

void mult_classic(int a[M][N], int b[N][M], int c[M][M])
{
    for(int i = 0; i < M; i++) // i = ряд матрицы a
    {
        for(int j = 0; j < N; j++) // j = столбец матрицы b
        {
            int skalaar = 0;
            for(int k = 0; k < N; k++)
            {
                skalaar = skalaar+(*(*(a+j)+k)*(*(*(b+k)+i)));
                if(k==N-1)
                {
                    (*(*(c+j)+i))= skalaar;
                    skalaar=0;
                }
            }
        }
    }
}

void print(int m[], int elemente, int veerge, string nimetus)
{
    cout << "\n*** " << nimetus << " ***";
    for(int i = 0; i < elemente; i++)
    {
        if(i % veerge == 0)
            cout << endl;
        cout << m[i] << '\t';
    }
    cout << endl;
}

int main()
{
    int x[M][N], y[N][M], z[M][M];

    srand(time(NULL)); // Randomize
    genereeri(&x[0][0]);
    genereeri(&y[0][0]);

    float algus = clock();
    mult_classic(x, y, z);

    print(&x[0][0], M * N, N, "Matrica A");
    print(&y[0][0], N * M, M, "Matrica B");
    print(&z[0][0], M * M, M, "Matrica C");
    cout << float(clock() - algus) / CLOCKS_PER_SEC << " sekundit\n";
}




Да ни сколько я не хотел унижать. Просто у меня в голове не складывается, как можно быть на ИТ факультете и не уметь пользоватся гуглом в таких элементарных случаях.


а кто сказал что я гуглом не пользовался и вообще не умею им пользоваться?.. + кому то элементарщина, а кто то с мартицами вообще никогда не работал..

Сообщение изменено: lqpac (30 Март 2011 - 00:32 )

  • 0
xD
IAPB!!

#92 bedman

bedman
  • Пользователь
  • 114 сообщений

Отправлено 30 Март 2011 - 00:00

lqpac в задании сказано представить матрицу в виде линейного массива, не x[n][m],а x[nm].
  • 0

#93 lqpac

lqpac
  • Пользователь
  • 33 сообщений

Отправлено 30 Март 2011 - 00:02

lqpac в задании сказано представить матрицу в виде линейного массива, не x[n][m],а x[nm].

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

x[nm] такого там вроде как не упоминается..

Память для матрицы m[N][N] выделяется «построчно»

насчет многомерных массивов никто ничего вроде не говорил.. следовательно не запрещено..
единственное что смущает, дак это фраза

Использовать в подпрограмме квадратичные скобки [] запрещено


Сообщение изменено: lqpac (30 Март 2011 - 00:07 )

  • 0
xD
IAPB!!

#94 Crabe

Crabe
  • Пользователь
  • 113 сообщений

Отправлено 30 Март 2011 - 00:10

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

x[nm] такого там вроде как не упоминается..


насчет многомерных массивов никто ничего вроде не говорил.. следовательно не запрещено..
единственное что смущает, дак это фраза

ты вроде как и не используешь. Про запрет на многомерные массивы я тоже ничего не нашел.
Вроде как код у тебя правильно работал.
Кто-то может объяснить в чем заключается чистка цикла?
  • 0

#95 lqpac

lqpac
  • Пользователь
  • 33 сообщений

Отправлено 30 Март 2011 - 00:12

ты вроде как и не используешь. Про запрет на многомерные массивы я тоже ничего не нашел.
Вроде как код у тебя правильно работал.
Кто-то может объяснить в чем заключается чистка цикла?


там перемножение както подругому происходит..

по этой теме нашел тока это
http://www.ict.edu.r...05128//ch11.pdf

Вроде как код у тебя правильно работал.

1й раз когда проверял код автора, у меня не сложилось почемуто.. поэтому пощелкал немного.. (хотя собственно там ничего практически и не изменилось..)

Сообщение изменено: lqpac (30 Март 2011 - 00:32 )

  • 0
xD
IAPB!!

#96 KatrionaZ

KatrionaZ
  • Пользователь
  • 29 сообщений

Отправлено 30 Март 2011 - 11:57

for(int k = 0; k < N; k++)
            {
                skalaar = skalaar+(*(*(a+j)+k)*(*(*(b+k)+i)));
                if(k==N-1)
                {
                    (*(*(c+j)+i))= skalaar;
                    skalaar=0;
                }
            }
может лучше:
for(int k = 0; k < N; k++)
            {
                skalaar = skalaar+(*(*(a+j)+k)*(*(*(b+k)+i)));

            }
            (*(*(c+j)+i))= skalaar;

  • 0

#97 shb

shb

    New life, much more options

  • Постоялец
  • 5 253 сообщений
  • Откуда:Таллинн

Отправлено 30 Март 2011 - 12:23

KatrionaZ, ты можешь формально показать, что из-за твоего предложения семантика программы не изменится?
  • 0
Мыслящий человек просто обязан время от времени поднимать себя за волосы © Тот самый Мюнгхаузен

Joga Bonito!

#98 KatrionaZ

KatrionaZ
  • Пользователь
  • 29 сообщений

Отправлено 30 Март 2011 - 13:09

KatrionaZ, ты можешь формально показать, что из-за твоего предложения семантика программы не изменится?

не поняла, что ты спросил :huh: , но прога работает так как надо, и мне кажется описывать ситуацию, когда цикл проходится последний раз, ИМХО лишнее "телодвижение". Потому как прога и без этого знает, что цикл закончился и последнее скаларное значение так и остается последним... Не?
  • 0

#99 KatrionaZ

KatrionaZ
  • Пользователь
  • 29 сообщений

Отправлено 30 Март 2011 - 14:17

что-то в проге не так
если М поставить больше N, то последний ряд матрицы-результата имеет нереальные цифры

for(int j = 0; j < N; j++) // j = столбец матрицы b
правильно
for(int j = 0; j < M; j++) // j = столбец матрицы b

Сообщение изменено: KatrionaZ (30 Март 2011 - 14:09 )

  • 0

#100 lqpac

lqpac
  • Пользователь
  • 33 сообщений

Отправлено 30 Март 2011 - 14:54

что-то в проге не так
если М поставить больше N, то последний ряд матрицы-результата имеет нереальные цифры

for(int j = 0; j < N; j++) // j = столбец матрицы b
правильно
for(int j = 0; j < M; j++) // j = столбец матрицы b



у меня также при проверке было... тупо поменял местами N на M и все правельно заработало...
  • 0
xD
IAPB!!

#101 Crabe

Crabe
  • Пользователь
  • 113 сообщений

Отправлено 30 Март 2011 - 15:07

Там же квадратные матрицы? откуда M и N? только N надо оставить и умножать его на себя.

Сдал у Ашота(iabb) этот код на 4. Он сказал, что можно было почти в каждом цикле сделать чистку, а у меня только одна (int in = i*N;).
#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>

using namespace std;

void genereeri(int* m, int NN)
{
    for(int k = 0; k < NN; k++)
        *(m+k) = (rand() % 201) - 100; // -100 .. 100
}

void mult(int* a, int* b, int* c, int N) {
    for(int i=0;i<N;i++) {
        int in = i*N;
        for(int j=0;j<N;j++)
        {
            *(c+in+j) = 0;
            for (int k=0;k<N;k++) {
                  *(c+in+j) += *(a+in+k) * *(b+k*N+j);
            }
        }
    }
}

void print(int m[], int elemente, int veerge, string nimetus)
{
    cout << "\n*** " << nimetus << " ***";
    for(int i = 0; i < elemente; i++)
    {
        if(i % veerge == 0)
            cout << endl;
        cout << *(m+i) << '\t';
    }
    cout << endl;
}

int main()
{
    //srand(1);
    srand(time(NULL));

    int N = 400;

    cout << N << endl;

    int a[N*N], b[N*N], c[N*N];

    genereeri(a, N*N);
    genereeri(b, N*N);

    float algus = clock();
    mult(a,b,c,N);
    cout << float(clock() - algus) / CLOCKS_PER_SEC << " sekundit\n";

    //print(a, N * N, N, "a");
    //print(b, N * N, N, "b");

    //print(c, N * N, N, "c");

    return 0;

}

  • 0

#102 Gangblang

Gangblang
  • Пользователь
  • 203 сообщений

Отправлено 31 Март 2011 - 01:00

ээ,такой вопрос - с какой целью Алик ставит оценки ? На экзамен же всё равно приходить надо и автомата вроде как нету :unsure: :rolleyes:
  • 0

#103 Веснушка

Веснушка
  • Пользователь
  • 159 сообщений

Отправлено 31 Март 2011 - 19:43

ээ,такой вопрос - с какой целью Алик ставит оценки ? На экзамен же всё равно приходить надо и автомата вроде как нету :unsure: :rolleyes:

Домашки = допуск к экзамену. Оценки дают 20 баллов к нему (4 домашки по 5 пунктов). Т.е. экзамен даёт не 100, а 80 баллов.
  • 0
Think outside the box

#104 mimoletom

mimoletom
  • Пользователь
  • 34 сообщений

Отправлено 07 Апрель 2011 - 17:27

Всем привет! кому нужна помощь по программированию - обращайтесь
Могу сделать в любом стиле, нормально, ужасно или отлично ))
Почта - 7081 собака mail.ru

П.С. - код с матрицами писал я, как раз-таки. только его кто-то "переделал".. и чистка циклов там была везде :) так что зря вы её убрали.
А насчет того, что матрица 400*400 большая - не такая уж и большая.
Оптимизированный вариант алгоритма считал и 1000*1000(это 10^9 ячеек сложить\перемножить) за десяток секунд.
Хотя обидно все-таки, написал одному, скопипастили все, ну да ладно. Обращайтесь ещё :)
  • 0

#105 Diana D

Diana D
  • Новобранец
  • 10 сообщений

Отправлено 06 Май 2011 - 15:58

Кто-нибудь делал уже 4 домашку (Роолайд). У меня почему-то программа не понимает заданные из таблицы символов символы...(http://en.wikipedia....ki/Windows-1257) Не видит и игнорирует... :blink: может кто знает как с этим бороться?
  • 0

#106 anaga

anaga
  • Постоялец
  • 702 сообщений

Отправлено 06 Май 2011 - 18:29

Что ты имеешь в виду под "программа не понимает заданные из таблицы символов символы..."
Как ты эти символы задаешь, что хочешь с ними сделать, как увидеть...
в общем - код выкладывай...
printf("See on eesti tähed");
корректно в работать не будет, без ухищрений.
  • 0

#107 Crabe

Crabe
  • Пользователь
  • 113 сообщений

Отправлено 10 Май 2011 - 21:05

Кто-то разобрался с последней домашкой? Я что-то не догоняю, пишу
cout << (char)128;
- оно выдает русскую "А", хотя по http://en.wikipedia....ki/Windows-1257 должно выдавать знак евро. В кодеблоксе кодировку поставил вин1257, может ещё её как-то поменять надо?
  • 0

#108 -quik-

-quik-
  • Постоялец
  • 651 сообщений

Отправлено 10 Май 2011 - 21:53

Crabe, выпиши циклом все символы с 0 по 256 и найди там номер для знака евро
я бы так сделал
  • 0

#109 Crabe

Crabe
  • Пользователь
  • 113 сообщений

Отправлено 10 Май 2011 - 22:27

Ну мне не только знак евро нужен, нужны все символы, которые на сером фоне в википедии. Я вот не могу понять каким образом в консольном приложении с++ кодировку поменять?
  • 0

#110 anaga

anaga
  • Постоялец
  • 702 сообщений

Отправлено 12 Май 2011 - 18:34

Если под досом вы имеете в виду консоль cmd, то в ней переключение кодировки делается командой chcp:

chcp - посмотреть текущую кодовую страницу
chcp 1251 - сменить на windows кирилицу
chcp 866 - сменить на dos кирилицу

Кодировка по умолчанию - досовская (866)

И вот еще почитай
http://www.forum.cro...?showtopic=2155
  • 0

#111 Jαωί™

Jαωί™
  • Новобранец
  • 6 сообщений

Отправлено 18 Май 2011 - 13:38

Хей, кто может сказать по каким датам и в какое время Аллик принимает экзамен ?!? и для тех кто уже сдал: На что делался основной упор в экзаменационном задании ?!? (файловая система, какие-то определенные алгоритмы, ...)
  • 0

#112 shb

shb

    New life, much more options

  • Постоялец
  • 5 253 сообщений
  • Откуда:Таллинн

Отправлено 18 Май 2011 - 13:40

Jαωί™, что ты имеешь ввиду под файловой системой? Если открытие-чтение-закрытие файла - то да, наверное на это будет "упор". Что ты имеешь ввиду под "определенными алгоритмами"? Если два вложенных цикла - то да, на это тоже может быть "упор" :lol:
  • 0
Мыслящий человек просто обязан время от времени поднимать себя за волосы © Тот самый Мюнгхаузен

Joga Bonito!

#113 Головокраб

Головокраб
  • Пользователь
  • 96 сообщений
  • Откуда:IAPB27, Таллин

Отправлено 18 Май 2011 - 20:52

Хей, кто может сказать по каким датам и в какое время Аллик принимает экзамен ?!?

Прикрепленные файлы

  • Прикрепленный файл  IMAG0049.jpg   506,62К   63 Количество загрузок

  • 0

#114 Bagirka

Bagirka

    Bad Fox

  • Постоялец
  • 1 080 сообщений

Отправлено 18 Май 2011 - 21:01

Головокраб, спасибо)
  • 0

#115 Asacura

Asacura
  • Пользователь
  • 740 сообщений
  • Откуда:IABB37

Отправлено 19 Май 2011 - 08:47

Головокраб,
о боже. ну и ник
  • 0

#116 Головокраб

Головокраб
  • Пользователь
  • 96 сообщений
  • Откуда:IAPB27, Таллин

Отправлено 19 Май 2011 - 14:23

Головокраб,
о боже. ну и ник

это хороший ник :)
  • 1

#117 Gangblang

Gangblang
  • Пользователь
  • 203 сообщений

Отправлено 19 Май 2011 - 21:35

Спасибо крабам : D.
  • 0

#118 Головокраб

Головокраб
  • Пользователь
  • 96 сообщений
  • Откуда:IAPB27, Таллин

Отправлено 20 Май 2011 - 14:15

Вот только я сам не понял. Приходить надо 2-го или 9-го, или можно прийти с теми кто сдаёт экзам по Яве? Или это вообще общие даты и ему все равно кто, когда и как? )
  • 0

#119 Diana D

Diana D
  • Новобранец
  • 10 сообщений

Отправлено 20 Май 2011 - 14:44

Кто-нибудь писал уже экзамен? К чему примерно готовиться?
  • 0

#120 Bagirka

Bagirka

    Bad Fox

  • Постоялец
  • 1 080 сообщений

Отправлено 20 Май 2011 - 16:12

Точные времена для сдачи IDK1031 Programmeerimise põhikursus keeles C, инфа 100%:

N 2. juunil kl. 10 IT-213a
L 4. juunil kl. 10 IT-111 (kaugõpe)
N 9. juunil kl. 10 IT-213a
  • 0