-
Моля ви ако някой може да ми помогне!!! :-( :s: Имам да правя курсова задача на C++,ако някой може да ми даде идея,моля да ми пише.Благодаря предварително.
Задачата е:
Да се състави програма,която въвежда елементи на двумерен масив М с размерност а x b от реални числа.Формирайте нов едномерен масив,включващ само елементите под главния диагонал.Намерете и отпечатайте произведението на тези елементи.
Това е задачата:) Разчитам на някой от вас :blush:
-
Идея ли искаш или цялата задача?
-
ами ако може цялата задача ще съм още по щастлива, ако не те затруднявам :blush:,ако не само идея :)
-
Абе за неквадратна матрица в задачите може ли да се говори за главен диагонал изобщо?
-
Някой измисли ли нещо по темата?
-
И на това му викат курсова задача ? :-D :-D
примерна матрица
ij
00 01 02 03 ...
10 11 12 13 ...
20 21 22 23 ...
30 31 32 33 ...
... ... ... ... ...
въртиш 1 цикъл по и вътре 1 по j
във втория проверяваш дали i = j+1 и ако е изпълнено записваш в едномерния масив M[ i ][j+1]
пък после произведението:
една променлива p = 1
и след тва цикъл за всеки елемент от едномерния p *= едномерен[ i ];
-
ами такива са ни задачките,аз не сам казала че са на високо ниво,те ако бяха аз сама стях да успея да си я направя,но не мога за сажаление :(
-
В Учебниците на доц. Крушков май ги имаше тия задачи направени.
-
да ,може,трябва да проверя.Мерси :)
-
Ама наистина главен диагонал има само при квадратни матрици. За правоъгълна това би могло да бъде диагонала на квадратната и част, ама ми се види некоректно.
-
ами не знам,така ми е зададено условието...и аз не знам,не разбирам много :( за сажаление :cry:
-
Тогава в началото на програмата, като въведеш размерността a и b, направи проверка дали a == b и ако не е, извади грешка и спри изпълнението.
-
ахам, ами ще пробвам да я направя така както казваш, пак ще видим какво ще стане....дано да успейх :s:
-
#include <iostream.h>
int main(int argc, char *argv[]) {
int a=3,b=3;
float m[3][3];
int i,j;
float res=0;
for (i=0;i<a;i++)
for (j=0;j<b;j++)
cin >> *(*(m+i)+j);
for(i=0;i<a;i++)
for(j=i+1;j<b;j++) {
//add to 1D array
res+=*(*(m+i)+j);
};
cout << '\n' << res;
return EXIT_SUCCESS;
};
Това събира елементите над главния диагонал :-)
Остава ти
- да го направиш да умножава
- да го направиш за елементите под главния диагонал
- на мястото на коментара да добавиш добавяне към едномерния масив (декларирай променливата, задели подходящо място в паметта по време на изпълнение)
- да го направиш за произволни стойности на a и b
-
Жоре, ти изби рибата! Пак добре не й я даде на Паскал или по-добре на Фортран или PL/1!
-
мале колко се радвам че пиша на език където * е само умножение.
-
тази програма,която ми е написал Жоро,вярна ли е? :?
-
тази програма,която ми е написал Жоро,вярна ли е? :?
Просто изразът *(*(m+i)+j)
всъщност значи m[i][j]
Може би колегата Фурнаджиев е искал да те позплаши. ;) Съветвам те да седнеш да почетеш по-сериозно основите на C и после С++.
-
Да знам ,че трябва да седна да чета по сериозно,но просто нямам никво време за това в момента,дарпам си изпити и просто всичко става много барзо...пак и аз сам задочно и сега за парви път учим С++ и просто ...никва идея... :(
Много ти благодаря за пояснението:) :bravo: :bow:
-
ехооо .... :roll: има ли някой с някоя идея още? :)
-
ти си влезнала в ФМИ/ПУ за да завършиш или да научиш нещо ?
ако си влезнала за да завършиш само по добре записвай няква тъпа икономика щото няма да стане така в ФМИ .. кел файда че го завършиш
ако си влезнала да учиш стига пита ами прочети нещо и си я направи сам ДОРИ да ти я ПОКАЖАТ дори да я РАЗБЕРЕШ ще научиш много по малко отколкото ако си я направиш сама ?
нямаш време да учиш ? пак казах недей да учиш тогава или съответно икономика...
не искам да те убидя или нещо такова просто от 120 човека курс който завършихме максиум 30тина работят по специалноста си вече са към 30 тъй като 10тина след като завършиха решиха да учат. Ако държиш да си от онези 90 окей даваи и успех бъди от тях.
-
само искам да ти кажа едно нещо..парво ти си нямаш и на идея какво уча,второ ..аз за парви пат хващам С++,и супер малко сме учили и супер малко примери сме взели и щом сам писала в тоя профил...значи има за какво.Предметите които си ги учим си ги изкарвам и сама..Имала сам само 2 дена лекции за С++ от които само един беше за масиви..как мислиш да ги науча..то нали знаеш винаги гледаш чуждата работа,вижда ти се много лесна.И все пак си направих програмката сама,за малкото свободно време,което имам.И мисля,че този форум е за помощ и са съвети и дискусии а не само да се критикуваме!И все пак благодаря за мнението ти.
-
#include<iostream>
using namespace std;
int main()
{
cout<<"Molq vavedete stoinosti za razmera na masiva M";
cout<<"a=";
cin>>a;
cout<<"b=";
cin>>b;
if(a!=b)
{
cout<<"Error\n";//a=b, za6toto samo kvadratnata matrica ima glaven diagonal
return 1;
}
//deklaracii na nujnite promenlivi: vhoden dvumeren masiv M; broia4i i j; ednomeren masiv M1, v koito 6te pazim samo elementite
//pod glavnia diagonal; broqt m na elementite pod/nad glavnia diagonal; promenliva product za proizvedenieto na tezi elementi
double M[a];
int i, j;
int n = a;
int m = (((a*a)-n)/2);
double M1[m];
double sum;
product=1;
//Vavejdane stoinostite na elementite na masiva
for(i=0; i<n; i++)
for(j=0; j<n; j++)
{
cout<<"M["<<i<<"]["<<j<<"]=";
cin>>M[j];
}
//Formirane na masiva M1, vkliu4va6t samo elementite pod glavnia diagonal.
//Namirane i otpe4atvane na proizvedenieto ot elementite na masiva M1
for(int k=0; k<m;)
{
for(i=1; i<n; i++)
for(j=0; j<i; j++)
{
M1[k]=M[j];
product= product*M1[k];
k++;
}
}
//
cout<<"Proizvedenieto ot elementite na masiva M1 e:"<<product<<"\n";
return 0;
}
това направих с програмката си:)Някой ако има желание може да я прегледа:)
-
Не използваш матрица. Би следвало M да ти е двумерен масив.
M[a][a]
-
да пропуснала сам го,мерси :)
-
Жоре, ти изби рибата! Пак добре не й я даде на Паскал или по-добре на Фортран или PL/1!
Бе замислих се ... и да не ми обиждаш Паскала ей!!! :-)
тази програма,която ми е написал Жоро,вярна ли е? :?
Просто изразът *(*(m+i)+j)
всъщност значи m[i][j]
Може би колегата Фурнаджиев е искал да те позплаши. ;)
В никакъв случай :-) Първо - с учебна цел ... и се получи :wink: Второ - на времето доц. Сандалски на лекция по ООП каза нещо в смисъл, че възпитаник на Пловдивския университет като използва масиви, трябва да го прави с указатели. Уплаших се да не ме порази гръм :-)
-
Споко, Жоре, работя предимно на Делфи и си обичкам Паскала!
Доц. Сандалски rulezzz! И на мен ми е водел С, че тогава нямаше много С++ все още (1988г.) в ПУ.
-
...
това направих с програмката си:)Някой ако има желание може да я прегледа:)
Компилаторът ти какво мисли по въпроса? gcc 4.2.3 (gcc -x c++ -O2 zadacha.cpp) ми изплюва:
zadacha.cpp: In function ‘int main()’:
zadacha.cpp:7: error: ‘a’ was not declared in this scope
zadacha.cpp:9: error: ‘b’ was not declared in this scope
zadacha.cpp:24: error: ‘product’ was not declared in this scope
zadacha.cpp:31: error: ‘M’ was not declared in this scope
zadacha.cpp:41: error: ‘M’ was not declared in this scope
А, сега се сетих да питам - a и b потребителят ли ги задава?
-
само искам да ти кажа едно нещо..парво ти си нямаш и на идея какво уча,второ ..аз за парви пат хващам С++,и супер малко сме учили и супер малко примери сме взели и щом сам писала в тоя профил...значи има за какво.Предметите които си ги учим си ги изкарвам и сама..Имала сам само 2 дена лекции за С++ от които само един беше за масиви..как мислиш да ги науча..то нали знаеш винаги гледаш чуждата работа,вижда ти се много лесна.И все пак си направих програмката сама,за малкото свободно време,което имам.И мисля,че този форум е за помощ и са съвети и дискусии а не само да се критикуваме!И все пак благодаря за мнението ти.
Чудестно и щом не си ти виновна значи не са те научили на нищо, щом ти изискват да направиш нещо за което не са ти дали знания и ти смяташ че не би се справила е нормално да питаш Така ли да стане или как да стане еди какво си, а не как да стане цялата задача... Колкото до какво учиш няма значение какво учиш нали учиш Ц++? Това има значенеи струва ми се и предполагам искаш да го научиш ? Смятам че съм казал достатачно точно в тази насока.
-
#include <iostream>
using namespace std;
int main()
{
int a;
cout << "Molq vavedete razmer na masiva M" << endl;
cout << "a = ";
cin >> a;
// deklaracii na nujnite promenlivi:
double M[a][a]; // vhoden dwumeren masiv
int i, j; // broia4i
int m = (a * (a - 1)) / 2; // razmer na ednomeren masiv
double M1[m]; // ednomeren masiv
double product = 1; // proizvedenie na elementite pod glavnia diagonal
// Vavejdane stoinostite na elementite na masiva
for (i = 0; i < a; i++)
{
for (j = 0; j < a; j++)
{
cout << "M[" << i << "][" << j << "] = ";
cin >> M[j];
}
}
// Formirane na masiva M1, vkliu4va6t samo elementite pod glavnia diagonal.
// Namirane i otpe4atvane na proizvedenieto ot elementite na masiva M1
int k = 0;
for (i = 0; i < a; i++)
{
for (j = 0; j < i; j++)
{
M1[k] = M[j];
product = product*M1[k];
k++;
}
}
cout << "Proizvedenieto ot elementite na masiva M1 e " << product << endl;
return 0;
}
или може би така е по-добре ? :)
-
Става и само с един двоен цикъл. Като въвеждаш елементите на матрицата проверявай къде са и ако са под диагонала - действай.
ПП: Аз все пак питам две неща. Първо - компилираш ли изобщо? Второ - размера на матрицата предварително зададен ли е или потребителят го въвежда?
-
Простете некомпетенцията ми ... но
double M[a][a] ... при декларация на масиви в C++ по този начин размерността не трябва ли да е задължително константа. Т.е.
int a = 10;
double M[a][a];
би трябвало да даде грешка, че "а" не е константа!
Не ме наливайте много, защото го карам на спомен, а и не съм си сложил C++ компилатор, че да тест-на ;)
Поздрави
Ники
-
том 2ри мисля на книгите за C++ на Биоурн Строуструп съжелявам ако не се пише така там е обяснено как се използва стандартния тип матрица който си го има в C++. Та ако щете после ги и умножавайте матриците ;)
-
Дава ми грешки да ...ама нямах време да ги оправа:)ето на тази програма:
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
int a;int b;
cout << "Molq vavedete razmer na masiva M" << endl;
cout << "a = ";
cin >> a;
double M[a];
int i, j;
int m = (a * (a - 1)) / 2;
double M1[m];
double product = 1 ;
for (i = 0; i < a; i++)
{
for (j = 0; j < a; j++)
{
cout << "M[" << i << "][" << j << "] = ";
cin >> M[j];
}
}
int k = 0;
for (i = 0; i < a; i++)
{
for (j = 0; j < i; j++)
{
M1[k] = M[j];
product = product*M1[k];
k++;
}
}
cout << "Proizvedenieto ot elementite na masiva M1 e " << product << endl;
return 0;
}
.\maria.cpp(17) : error C2057: expected constant expression
.\maria.cpp(17) : error C2466: cannot allocate an array of constant size 0
.\maria.cpp(17) : error C2057: expected constant expression
.\maria.cpp(17) : error C2466: cannot allocate an array of constant size 0
.\maria.cpp(17) : error C2087: 'M' : missing subscript
.\maria.cpp(17) : error C2133: 'M' : unknown size
.\maria.cpp(20) : error C2057: expected constant expression
.\maria.cpp(20) : error C2466: cannot allocate an array of constant size 0
.\maria.cpp(20) : error C2133: 'M1' : unknown size
ми дава тези грешки ???
-
Аз за двете грешки да кажа пак ...
с риск да се повторя:
Простете некомпетенцията ми ... но
double M[a][a] ... при декларация на масиви в C++ по този начин размерността не трябва ли да е задължително константа. Т.е.
int a = 10;
double M[a][a];
би трябвало да даде грешка, че "а" не е константа!
Не ме наливайте много, защото го карам на спомен, а и не съм си сложил C++ компилатор, че да тест-на ;)
Поздрави
Ники
Или използвай фиксирани размери за матриците
Пр:
double M1[1024]
след което си пълни колкото си искаш елементи в нея (в конкретния пример по-малко от 1024 :) )
Или ги създавай така:
int a;
cin>>a;
double *M1 = new double[a];
мисля че в този случай беше позволено да използваш променлива, за да посочиш размерността на масива (отново не съм сигурен защото нямам C++ компилатор тук)
Поздрави
Ники
-
(http://antoniy.net/upload/source.JPG)
-
(http://antoniy.net/upload/source.JPG)
Чонков ... че си голям - голям си ;)
Че си прав - прав си ;)
Но в крайна сметка проблема на мацката е подробно описан в предния ми пост (ползвате различни компилатори)
-
Поука: Не използвайте нищо на микромеките.
(http://antoniy.net/upload/shot.png)
-
Аз за двете грешки да кажа пак ...
с риск да се повторя:
Простете некомпетенцията ми ... но
double M[a][a] ... при декларация на масиви в C++ по този начин размерността не трябва ли да е задължително константа. Т.е.
int a = 10;
double M[a][a];
би трябвало да даде грешка, че "а" не е константа!
Не ме наливайте много, защото го карам на спомен, а и не съм си сложил C++ компилатор, че да тест-на ;)
Поздрави
Ники
Или използвай фиксирани размери за матриците
Пр:
double M1[1024]
след което си пълни колкото си искаш елементи в нея (в конкретния пример по-малко от 1024 :) )
Или ги създавай така:
int a;
cin>>a;
double *M1 = new double[a];
мисля че в този случай беше позволено да използваш променлива, за да посочиш размерността на масива (отново не съм сигурен защото нямам C++ компилатор тук)
Поздрави
Ники
мда баш така се прави :
int a;
cin>>a;
double *M1 = new double[a];
други начини НЯМА !!! ааа онова с 1024 е ЩО ЗА БОЗА тва са някви измишлиотини.
и после да не забравяме delete[] а; щото повечето не че знаят какво прави ама се заяждат що го няма..
бреи тва C++ верно грозно :) като махнещ * и става Java красота.. ;)
-
... ааа онова с 1024 е ЩО ЗА БОЗА тва са някви измишлиотини.
xaexaeexaeae
заделянето на памет е скъпа операция и не можеш да си го позволяваш за всеки тест (обикновено във състезателните задачи 1вото нещо, което ти се подава на входа е броя тестове. Ако за всеки тест ти наново заделяш памет никога няма да се вместиш във времето, което ти се полага за изпълнение :) )
За т'ва в условието на задачата ти се казват ограниченията и ти в началото си заделяш памет за най-лошия случай (най-големите тестове) и после си бачкаш с толкова колкото ти трябва от масива.
Така че онова с 1024 си е супер.
P.S.
... ся е времето да кажеш : "Баси shit-овете, т'ва никога няя го ползвам :)" !
-
ам в Java се заделя паметта за нови обекти по бързо отколкото в C++
и добре че няма друг начин така че да не мисля за подобни говна :)
колкото до Скъпата операция е па толкова ли е скъпа ?
antoniy :
@offtopic = с тоя screenshot все едно се изфукваш че ползваш Грешната операционна система :) хахах сега по въпроса за линукс преди да си казал нещо бих разказал нещо което се случи преди 1мин :
Найден търси "Нe -блога на Stilgar" ( sietch.net ) (това като не шоуто на Нед ама как да е). и попадам на sietch.com разбира се и гледам горе пингвин У викам аз на стилгар кви са тия пингвини и неговия коментар беше :
[11:34:57 AM] Stilgar says: da to na lunix
[11:35:01 AM] Stilgar says: tolkova moje da napravish
[11:35:04 AM] Stilgar says: 2 reda text
ХАХАХ така че разбирам защо си снимал на линукс замислих се и си направих следния извод : за снимки на конзолни програмки и линукс:)
@offtopic end.
-
Поука: Не използвайте нищо на микромеките.
(http://antoniy.net/upload/shot.png)
начи на теб така ти трагва?щото при мен нещо не иска...
-
тва му е от линукса той е фалшиф
-
ахам...офф писна ми с тая задачкааа :-(
-
начи на теб така ти трагва?щото при мен нещо не иска...
ХАЕЕХАЕХАЕХАЕАЕХАЕЕХАЕХ
чети по-внимателно кой какво ти пише :)
иначе в source-а на Чонков заместваш:
double M[a];
с:
double *M = new double[a];
а,
double M1[m]
с
double *M1 = new double[m];
и всичко ще ти върви
Ако искаш да ползваш друмерен масив така правиш следното:
double M[a][c];
се замества с:
double **M = new double[a];
for(int j=0;j<a;j++)
{
M[j] = new double[c];
}
//И после си работиш с масива по нромалния начин
M[1][1] = 0;
-
Ники много ти благодаря:)Както и на всички останали за помощта:)Програмката най-накрая трагна:)Надявам се и аз да мога да ви помогна с нещо момчета:) :bow: :#1:
-
xaxa аз се сещам с какво може да ИМ помогнеш ( на мен не щото аз не помагах ) ама ме е срам да кажа :)
-
хахахаха...мажеее... :-D
-
който от квото има нужда някой от C++ други от друго :) хаха
-
А колко по красиво е
int a=3,b=3; //razmernostta
float *matr; //matricata
float *masiv; //masiva
int i,j; //indeksi za cikli
float suma=0; //suma na elementite
do {
cout << "a="; cin >>a;
cout << "b="; cin >>b;
} while (a!=b);
matr = new float[a*b];
masiv = new float[a*(a-1)/2];
for (i=0;i<a;i++)
for (j=0;j<b;j++) {
cin >> *(matr +a*i+j);
if (j<i) {
//dobaviane v masiva ;)
//smiatane na proisvedenieto
};
};
-
ами да ама вече го пратих да ми го проверяват...иначе да :y: