• Welcome to Българска Аквариумна Енциклопедия. Please login or sign up.
 
20.07.2025 18:45

Промяна новините на форума:

Ако имате проблем в аквариума, преди да пуснете нова тема, попълнете въпросника тук.


  • Професионална поддръжка на аквариуми

Ако ви трябва помощ за компютрите - казвайте, част 2

Започната от Longanlon, 08.01.2007 20:12

« назад - напред »

0 Потребители и 2 Гости преглежда(т) тази тема.

dido

Цитат на: Barbus - 10.12.2007 23:02
... Edit:.Гоялм съм малоумник.Един от кабелите са модема ми се беше размърдал.Оправих го и вече си е наред всичко.Извинявам се за глупустите дето ги написах.

no carrier те сполетя, викаш  :-D

Trobata

Имам курсова задача по програмиране. Но не мога да се справя с една част от задачата. Дали ще може някой да помогне.

Условието й е:
Дадена е правоъгълна матрица с реални числа C[MxN] елементите на която да се прочетат от файл, а размерът M и N да се прочете от клавиатурата. Да се определят най-малките елементи от всеки ред на матрицата C и се запишат във вектор V.
Да се определят най-големите елементи от всеки стълб на матрицата C и се запишат във вектор W. Получените резултати да се изведат на екрана.

Задачата е за C++. Ако може само да ми копирате source code-a. И броя на елементите в редовете и стълбовете трябва да е еднакъв, например C[5x5].

Lan

По принцип бих могъл да ти помогна, но не е ли по-добре да направиш нещичко (ако има нещо неясно - задавай конкретни въпроси и тогава пиши), да постнеш кода, ако не иска да върви или не си сигурен, че е верен, и тогава да помагаме...
Освен това в условието има логически противоречия, които бих искал да съм сигурен, че не се дължат на невярно преписано условие:

Цитат на: Trobata - 12.12.2007 18:18
...
Условието й е:
Дадена е правоъгълна матрица с реални числа C[MxN] елементите на която да се прочетат от файл, а размерът M и N да се прочете от клавиатурата...
И броя на елементите в редовете и стълбовете трябва да е еднакъв, например C[5x5].

1) В крайна сметка матрицата правоъгълна ли е или квадратна? Или са две подусловия?
2) След като матрицата се чете от файл, а размерите й се въвеждат от клавиатурата, има сериозни предпоставки за конфликт (за несъответствие на едните данни с другите). Какво правим в такъв случай?

И едно уточнение: за кога ти трябва? За известно време (което не ми е известно колко ще продължи) ще мога да се появявам във форума само вечер, така че има опасност да не мога да съм ти от полза.
Първият, който е изпсувал вместо да хвърли камък, е баща на цивилизацията.
Зигмунд Фройд

Trobata

Казаха ми, че трябва да е квадратна и да си въведа толкова елемента в файл, колкото съм решил да има (реших да има 5 реда и 5 стълба). Ще се помъча в събота като се прибера в Пловдив да направя нещо по нея и ще постна кода за редакция ако е нужда.

blagoy

На мен също ми се струва объркано условието или поне аз не го зацепвам. Както и да е, пробвай се сам нещо да направиш и пусни сорса ако има нещо неясно ще се опитам да помогна.
https://aquariumbg.com/forum/proxy.php?request=http%3A%2F%2Fs118.photobucket.com%2Falbums%2Fo91%2Ffisherman__2007%2FAkva%2Fth_r006a-1.jpg&hash=15041450eb78136ccea645b645f2993ca57c3ba3
70l, 2x18W

Trobata

Това е кода:

#include <iostream.h>
#include <fstream.h>
#include <math.h>
int main ()
{
float C[5][5], min_red [5], max_stalb [5], V, W;
int i, j, M, N;
ifstream fin ("Elementi.txt",ios::in);
do
{
cout<<"M=";
cin>>M;
}
while (M<2||M>5);
do
{
cout<<"N=";
cin>>N;
}
while (N<2||N>5);
for (i=0;i<M;i++)
for (j=0;j<N;j++)
fin>>C[i][j];
for (i=0;i<M;i++)
{
min_red[i]=C[i][0];
for (j=0;j<M;j++)
{
if (min_red[i]>C[i][j])
{min_red[i]=C[i][j];}
}
}
fin.close ();
for (i=0;i<M;i++)
cout<<"min_red["<<i<<"]="<<min_red[i]<<"\n";



return 0;
}



Проблема е, че не мога да направя елементите на матрицата да приемат стойности от числата в файла и незнам после как да ги изведа във вектор.

А числата съм ги записал така:
1 2 3 4 5
3 4 5 6 7
8 9 5 3 2
1 2 3 7 8
9 4 8 2 4

Lan

При четенето от файла изнеси извикването на функцията ifstream::close() извън тялото на двата цикъла for - така, както е сега, затваряш файла още след първото четене от него.
PS: Колкото до вектора, вече си го направил. Това е друг начин да се каже едномерен масив (е, само в програмирането - в математиката и физиката си има друго значение).
PPS: При мен кодът излиза малко сбъгясан, но все пак мисля, че го разгадах и вече мога да добавя още нещо: във фрагмента, където се търсят най-малките стойности на редовете, променливата на вложения цикъл for (т. е. - j) можеш да я инициализираш с 1, вместо с 0, тъй като първия елемент в реда с индекси i и 0 вече си го присвоил на съответния елемент на вектора и няма смисъл да го караш да се сравнява сам със себе си.
Първият, който е изпсувал вместо да хвърли камък, е баща на цивилизацията.
Зигмунд Фройд

Trobata

Извинявам се много за глупостите с които Ви занимавам. Промених горе кода и се получава някакъв бъг. Намира ми съответния минимален елемент само когато въведа M=5 и N=5. В другите случей не ги взима от реда.
Например давам M=3, N=3 и ми дава за min_red[0] ред=1, за min_red[1]=4 и за min_red[2]=7, а би трябвало min_red[0]=1, min_red[1]=3, min_red[2]=2.
Ако е възможно да ми дадете готовия код.

А относно векторите да разбирам ли че V=min_red?

barabata

Ами то всичко си го пише в условието:
При пускане на програмата първо трябва да те пита за M и за N колко са и след това да следва дифиниране на матрицата със съответния брой редове и колони като там следват вариантите или въвеждане от клавиатура или от файл и след това имаш елементарните цикли присвояваш първата стойност от всеки ред и за реда я сравняваш със всяка следваща - ако е по-малка първата стойност от проверявана в момента то да се запамети тази нова стойност в променливата и като се изредят всички стойности от реда стойността която се пази в променливат я записваш в максималната за реда.
Същото повтаряш за колоните - присвояваш първата и сравняваш със всяка следваща - резултата накрая във вектора за колоните и накрая само пъскаш изписването на векторите на екрана или във файл (както ти го искат).

Но първо ти трябва да въведеш броя на колоните и редовете на матрицата ( по условие ) и така ако има грешка/разминаване във данните от файла и размера на матрицата - грешката е в тебе понеже му задавш грешни стойности.
Горчивината от лошото качество остава дълго след като сладостта от ниската цена е свършила.

Lan

Според мен не е бъг, а резултат от начина на инициализирането на матрицата.
Първо да видим дали правилно съм разбрал: искаш програмата винаги да чете от един и същ текстов файл, който съдържа 25 числа, записани в пет реда и пет колони. И когато имаш например матрица mtx[4][3] да се зареждат първите три числа от първите четири реда, а числата до края на редовете (и целият пети ред) да се изпускат, а когато имаш матрица mtx[2][4], да се зареждат първите четири числа от първите дваа реда и т. н. все в тоя дух. Дотук така ли е или това са само мои вариации на тема?
Ако това е целта, най-лесният (но не и най-елегантен) начин да го постигнеш е да декларираш една допълнителна променлива тип float и след запълване на ред от матрицата, прочиташ останалите числа от реда във файла като ги присвояваш на тази променлива. Когато програмата след това започне да запълва следващия ред на матрицата, get-казателят на потока ще е позициониран в началото на следващия ред във файла.
Други, по-слжни, начини ти предлагат публичните член-функции на потока istream::seekg и istream::ignore, а може и с помощта на istream::getline - въпрос на избор...

Цитат на: Trobata - 15.12.2007 21:43
...
А относно векторите да разбирам ли че V=min_red[n]?
Не. Целият едномерен масив (или едномерна матрица) min_red[] е един вектор.
(Пояснение: смених i в средните скоби с n, тъй като иначе не излиза защото  е форматиращ таг за italic.)

Цитат на: Trobata - 15.12.2007 21:43
...
Ако е възможно да ми дадете готовия код.
...
Колкото до готовия сорс-код - не е невъзможно, но не е и толкова просто. По ред причини: не знам каво сте взели, докъде сте стигнали, имате ли понятие от неща като динамични променлиеи, класове, работа с указатели и т. н. Не знам защо не разбиваш кода на функции, а всичко е в main - може така да ви е препоръчал преподавателят. Което ме подсеща за още нещо, което не знам - какви указания и препоръки ви е дал той за написването на програмата. и дори разликите в стила на писане не са за пренебрегване, защото могат да ти скроят подъл номер.
А накрая и най-важното - така ще научиш повече.
Успех!

PS: Не знам за кога ти трябва, но работи спокойно - ако все пак не успееш да завършиш, обади се и ще ти пратя кода - тестван е и работи.
Първият, който е изпсувал вместо да хвърли камък, е баща на цивилизацията.
Зигмунд Фройд

Trobata

Да разьбрал си много добре какво искам да направя. Ще се помъча да направя нещо сам и тогава може да ти пиша да ми пратиш кода. А иначе е хубаво да я предам до първата седмица на Януари. Мерси много все пак.

barabata

По принцип аз съм много против решаването на задачите вместо другите понеже така нищо не се научава. За да научиш нещо ти трябва задача с краен срок за решаването и инак нищо не става.
Ето ти да гледаш пример на задача която съм решавал със знанията които дават в школото:


Да се напише програма на C++ която да въвежда двумерен числов масив C от 5 реда и 4 стълба . Програмата да намира и отпечатва минималният елемент ,,min" на масива. Ако  min<=10, то да се увеличат всички елементи на масива с 1. Да се отпечатат min и новополученият масив на екрана.





# include <iostream.h>
int C[5][4];
int min,i,j;
main ()
{
for (i=0; i<5; i++)
for (j=0; j<4; j++)
{
cout <<"Type C [" <<i <<"," <<j <<"] = ";
cin >> C [i][j];
}
min=C[1][1];
for (i=0; i<5; i++)
for (j=0; j<4; j++)
{
if (min > C[i][j])
min = C[i][j];
}
if (min <=10)
{
for (i=0; i<5; i++)
for (j=0; j<4; j++)
{
C[i][j] = 1 + C[i][j];
}
}
cout <<"\n\n"  <<"Min element is " <<min <<"\n\n";
for (i=0; i<5; i++)
for (j=0; j<4; j++)
{
cout << "\n " <<"C [" <<i <<"," <<j <<"] = " <<C[i][j] ;
}
cout <<"\n\n";
return 0 ;
}


Насоки за при тебе :



# include <iostream.h>

int M,N;                                              (М избирам да са колоните, а N редовете)
cout <<"Type N =";                              (Тука ще те пита за броя на редовете)
cin >> N;                               (Тука ще те присвои стойността на N)
cout <<"Type M =";                              (Тука ще те пита за броя на колоните)
cin >> M;                               (Тука ще те присвои стойността на M)
int C[N][M];                          (След като имаш N и M вече инициализираш матрицата)
int min,i,j;                             ( този ред може да се прибави към горния  int min,i,j,M,N;)
int V[M],W[N];                 (инициализираш векторите за резултатите - За редицата от редовете ти трябва вектор със размер броя на колоните и обратно)

main ()
...                 

После в циклите въртиш спрямо N и M ...

for (i=0; i<N; i++)
for (j=0; j<M; j++)
...
Горчивината от лошото качество остава дълго след като сладостта от ниската цена е свършила.

миа

имам лап топ и голям компютър.е,да обаче интернета е един.как да включа лап-топа към интернета и после интернета да може да се включва пак на големия компютър?
: 19.12.2007г 13:01ч
накратко-Как да си включа лап-топа към интернета?

намерих един форум за компитри несто бесе но нисто не разбрах :-)
аааа помост писа на латинизааааа!!!

оох върна се българския...............

NO CARRIER

Обади се и питай интернет доставчика си.
https://aquariumbg.com/forum/proxy.php?request=http%3A%2F%2Ftsvetkov.be%2Fupld%2Ffiles%2F1%2Fsign.jpg&hash=1bbdd94fc32cecdafae4a45f7c2393708fb9e9a5
Дневникът на Николай Цветков
Не ме е яд, че ме лъжат. Яд ме е когато мислят, че им вярвам.

миа

добре.те са малко заспали ама няма значение.............  :-Dаз знам че има там някакъв код и като мушнеш интернета в лап-топа ти изскача едно прозорче и иска да му го напишеш .

Similar topics (5)

20521

Публикации: 12
Прегледи: 4636

19336

Публикации: 48
Прегледи: 13645

30802

Публикации: 16
Прегледи: 9809

36853

Публикации: 27
Прегледи: 14463

59626

Публикации: 0
Прегледи: 7843