行列内の行の交換,列の交換を行うプログラムを作成しています.
http://www.math.meiji.ac.jp/~mk/lecture/ouyousuu …
のページにある方法で行交換はすることができたのですが,列交換をする方法がわかりません.
上のサイトのやり方を改造して,どうにか列交換をすることはできないのでしょうか?
分かる方おられましたら回答ください.
よろしくお願いします.

A 回答 (1件)

要素を1つ1つ交換するしかないと思います。


行の方は参照時に行管理用のポインタを通してアクセスしているので、ポインタを入れ替えるだけですみますが、
列の方はそのような構成になっていないので要素ごとに処理する必要があります。
行列の実装方法を変えれば列の交換もスムーズにできるようにはなりますが、
そのようにしてしまうと、現在のような2次元配列ライクな記法はできなくなりますし、
要素にアクセスする際の無駄が増えますので、用途を限定しない場合にはやめた方が良いでしょう。

それから、エラー処理が少し甘いですね。
new_matrix()内のabody=malloc()の部分で失敗した場合、行の管理用に確保したメモリ(a=malloc())が解放されませんので。
この可能性を無視する、というのなら、せめて要求メモリサイズの大きいabodyの方を先に確保する方が良いでしょう。
    • good
    • 0
この回答へのお礼

要素を一つ一つ交換する方法で,列交換をすることにしました.
かなり大きな行列を用いるため,少し不安が残りますが…。
回答ありがとうございました.

お礼日時:2002/04/04 15:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qテーブルリンク エクセルの4行目を先頭行にしたい

エクセルのデータをアクセスにテーブルリンクしたいのですが
エクセルの先頭行が4行目から始まります。
なおかつA1に文字が入ります。
(画像参照)

このエクセルデータをアクセスの
「テーブルのリンク」→ファイルを選ぶ
→ワークシートリンクウィザードが表示され、次のページに進み、
「先頭行をフィールド名として使う」にチェックを入れたいのですが、先頭行は4行目です。

この場合、どうすればエクセルの4行目を
アクセスのテーブルリンクの先頭行にできるのでしょうか?

エクセルのA1の文字を消去すれば自動的に4行目がアクセスで先頭行になりますが
エクセルの方は決まったフォーマットなのでA1の文字を消去することはできません。

ご回答よろしくお願いします。

Aベストアンサー

#1です

Excel ファイル側に手を入れられるのなら、#2さんの方がお勧めです。

なお、範囲名部分が行方向に増えるのなら、(Excel側で範囲を再設定)
何もせずに Access 側から変更を含めて値を得ることが出来るようですが、
列方向に範囲が広がった場合、 リンクの更新(RefreshLink)が必要みたいです。

嘘を言ってるかも知れないので、裏取りはしっかりとしてください。

Qzlib.libとlibpng.libについて

zlib.libとlibpng.libの作成ができなくて困っております。
libpng.libでpngAPIを使うには、zlib.libが必要だということで
zlib.libのビルドにも挑戦していますがうまくいきません。
これらのファイルを作るのが目的ではないので
どなたか配布できるならば配布していただけないでしょうか?。
もし配布できないなら作り方の詳細をご教授願います。

環境
Windows VISTA SP1
Visual Studio 2008

googleで検索して出てきたHPについては
ほとんど見ましたが
それをみてやっても上記環境ではうまくビルドができません。
*例えば以下 他にもたくさんみてその通りにやりましたが
エラーが大量にでてしまいうまくいきません。
http://dencha.ojaru.jp/programs_07/pg_graphic_10a1.html

大変 レベルの低い質問ですがよろしくおねがいいたします。
m(___)m

Aベストアンサー

有名なGNUプログラムなら、GnuWin32を探せばバイナリが見つかるでしょう。
http://gnuwin32.sourceforge.net/

http://gnuwin32.sourceforge.net/packages/zlib.htm
http://gnuwin32.sourceforge.net/packages/libpng.htm

Qエクセルで、条件を指定した行数のカウントについて

エクセルにて、条件に合致する行数のカウントを行うことは出来ますでしょうか。

添付画像のようなエクセルファイルにて、各日毎に「AAA」を含む行は何行あり、「BBB」を含む行は何行あるかをカウントしたいです。

添付のエクセルであれば、A列が「10月1日」でB列に「AAA」を含む行は○行という条件でカントが出来れば実現可能とは思いますが、
こういったカウントの仕方がそもそもエクセルで出来るのかどうか知りたいです。

もし、エクセル以外の方法で可能なのであれば、その方法も教えていただけるとありがたいです。

Aベストアンサー

SUMPRODUCT関数などを使った場合にはデータ数が多くなった場合には計算が重くなります。
作業列を使った方法がよいでしょう。
お示しのデータがシート1に有るとしてC列を作業列としてC2セルには次の式を入力して下方にオートフィルドラッグします。

=IF(A1="","",IF(COUNTIF(B1,"AAA*"),A1&"AAA",IF(COUNTIF(B1,"BBB*"),A1&"BBB","")))

次にお望みの表を別のシートに表示させるとしたら別のpシートのB1セルにはAAAと入力しC1セルにはBBBと入力します。
A2セルから下方には例えば10月1日からの日付を入力します。
B2セルには次の式を入力してC2セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。

=IF($A2="","",COUNTIF(Sheet1!$C:$C,$A2&B$1))

QBorlandbcc55とMYSQLのコンパイル時にlibmysql.libやmysqlclient.libのリンクについて

Windows上で、borlandbcc55、mysqlを利用しいてます。
Windows上のborlandbcc55、mysqlで
C/C++のソースでMYSQLの接続・切断・管理・MYSQLのレコードの値の取得・値の表示の仕方の基礎を教えてください。
これなら動きますよというソースを教えて頂けたら有難いです。

Borlandbcc55とmysqlの設定

my_global.hとmysql.hをincludeして、

コンパイル時にlibmysql.libやmysqlclient.libをリンクしてやればできそうなのですが

includeは
Cのソースで
#include "c:\mysql\include\mysql.h"
#include "c:\mysql\include\my_global.h"
と記述するだけでOKなのでしょうか?

MYSQLのLibmysql.libの設定の仕方及びコンパイル時にlibmysql.libやmysqlclient.libを
リンクする方法がわかりません。

bcc55コンパイラ設定のcfgファイルにlibMysql.libやmysqlclient.libを
追加設定必要ですか?
必要ならどう記述すればいいのでしょうか?
また違う仕方なのでしょうか?
全く理解できていません。
そのリファレンスをみてもわかりません。

1 coff2omf c:\mysql\lib\opt\libmysql.lib c:\borland\bcc55\lib\libmysql.lib
2 ilink32 obj-Dateien, exe-Dateiname, map-Datei, Libraries
3 -> ilink32 c0x32.obj testmysql.obj , testmysql.exe , , import32.lib cw32.lib libmysql.lib

これらの設定の仕方もわかりません。
設定に必要なのかどうかも理解できていません。
よろしくお願いします。

Windows上で、borlandbcc55、mysqlを利用しいてます。
Windows上のborlandbcc55、mysqlで
C/C++のソースでMYSQLの接続・切断・管理・MYSQLのレコードの値の取得・値の表示の仕方の基礎を教えてください。
これなら動きますよというソースを教えて頂けたら有難いです。

Borlandbcc55とmysqlの設定

my_global.hとmysql.hをincludeして、

コンパイル時にlibmysql.libやmysqlclient.libをリンクしてやればできそうなのですが

includeは
Cのソースで
#include "c:\mysql\include\mysql.h"
#inclu...続きを読む

Aベストアンサー

>includeは
>Cのソースで
>#include "c:\mysql\include\mysql.h"
>#include "c:\mysql\include\my_global.h"
>と記述するだけでOKなのでしょうか?

ダメでしたか?

cfgファイルにはよくつかうオプションを記述する。
普通は -I オプション、-L オプション。
どこにインクルードファイル、ライブラリファイルを置いてるかをコンパイラやリンカに教えるため。
よく使うのであれば追加すればいい。


>1 coff2omf c:\mysql\lib\opt\libmysql.lib c:\borland\bcc55\lib\libmysql.lib
c:\mysql\lib\opt\libmysql.lib はVisual C++用のライブラリファイルなので、coff2omfで変換しないと使えない。

>2 ilink32 obj-Dateien, exe-Dateiname, map-Datei, Libraries


>3 -> ilink32 c0x32.obj testmysql.obj , testmysql.exe , , import32.lib cw32.lib libmysql.lib
リンカを使ったことはありませんか?

>includeは
>Cのソースで
>#include "c:\mysql\include\mysql.h"
>#include "c:\mysql\include\my_global.h"
>と記述するだけでOKなのでしょうか?

ダメでしたか?

cfgファイルにはよくつかうオプションを記述する。
普通は -I オプション、-L オプション。
どこにインクルードファイル、ライブラリファイルを置いてるかをコンパイラやリンカに教えるため。
よく使うのであれば追加すればいい。


>1 coff2omf c:\mysql\lib\opt\libmysql.lib c:\borland\bcc55\lib\libmysql.lib
c:\mysql\...続きを読む

Qテキストファイルから必要な項目(行)をエクセルの行に移行させるには

テキストファイルから必要な項目(行)をエクセルの行に移行させる簡単な方法を教えて下さい。
1テキスト=エクセルの1行

Aベストアンサー

コピーアンドペーストでうまくいく気がします。
テキストファイルを、ノートパッドなどで開いて、全文をコピーし、エクセルに貼り付けるだけです。エクセルは、左上端のセル一つだけが選択された状態にしておきます。複数のセルを選択しているとサイズが合わないと文句を言われるかもしれません。

Qc++ , template , ファイル分割 , 助けてください...

//-----------------coord.h-------------
template <class type>
class coord
{
type v[3];
public:
coord(void);
void Show(void);
};
//-----------------main.cpp------------
#include<iostream>
#include"coord.h"
using namespace std;

int main(void)
{
coord<double> ob;

ob.Show();

return 0;
}
//----------------------coord.cpp-----------
#include<iostream>
#include"coord.h"
using namespace std;

template <class type>
coord<type>::coord(void)
{
v[0]=v[1]=v[2]=0;
}

template <class type>
void coord<type>::Show(void)
{
cout << "hello" << endl;
}

同一フォルダ内に上記のファイルが 3 つあります.
つまり上の 3 つのファイルを分割してコンパイルさせたいです.
この状態で...MS-DOSプロンプトからコンパイルします.

C:\test>bcc32 -c coord.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
coord.cpp:

C:\test>bcc32 -c main.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
main.cpp:

C:\test>bcc32 -emain main.obj coord.obj
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: 外部シンボル 'coord<double>::coord<double>()' が未解決(C:\USERS\TAITO\PR
OG\CPP\TEST\MAIN.OBJ が参照)
Error: 外部シンボル 'coord<double>::Show()' が未解決(C:\USERS\TAITO\PROG\CPP\TE
ST\MAIN.OBJ が参照)


すると, このようなエラー文が出てしまい
実行可能ファイルができません.

コンパイラはbccです.

原因が全く分かりません.

助けてください...





ちなみに,
分割せずにコンパイルすると通ります.

自分は c 言語での分割コンパイル経験はあるので
それをそのまま c++ 言語でも用いているのですが,
何か変えなければならないのでしょうか?

//-----------------coord.h-------------
template <class type>
class coord
{
type v[3];
public:
coord(void);
void Show(void);
};
//-----------------main.cpp------------
#include<iostream>
#include"coord.h"
using namespace std;

int main(void)
{
coord<double> ob;

ob.Show();

return 0;
}
//----------------------coord.cpp-----------
#include<iostream>
#include"coord.h"
using namespace std;

template <class type>
coord<type>::coord(void)
{
v[0]=v[...続きを読む

Aベストアンサー

> クラスの宣言はヘッダファイル上で全て行なわないといけないのですか?

違います。テンプレートだからです。
本来であれば、exportを使って移出を行えば、ほぼ最初のようにソース分割できるのですが、Borland C++ Compilerでは(Visual C++でもGCCでも)exportをサポートしていないので使えません。

Qエクセルの行の幅について

 エクセルの行幅を立ち上げ時点から太くしたいと思います。
 エクセルの行の幅は、立ち上げると12.75という高さになっているようです。しかし、これでは少々見づらいので15くらいにしたいと思います。
 もちろん、「行の高さ」で変更できるのは分かるのですが、毎回、修正するのが煩雑です。従って、立ち上げた初期段階から行の高さを変更することはできないでしょうか。

Aベストアンサー

う~ん。

確か、エクセルの初期設定で変更できるのは、
「シート数」「フォントの書体」「フォントの大きさ」
くらいだったと思います。
行の幅を、立ち上げ時から指定の幅にする事は出来なかったような…。

私自身、エクセルを結構利用するのですが、行の幅を変更するときは、
「全選択(画面左上の行(1)の上、と列(A)の左、の長方形の部分をクリック)」して、
行(1)と、行(2)の間にある線をドラッグして一気に全ての行の幅を変えています。

もし、それすらも煩雑と感じるほどにエクセルを新規で立ち上げているのであれば、
以下の方法はどうでしょうか?

1.行の幅を15に設定した「白紙のエクセル」をデスクトップに保存する。
2.新規で利用したい場合は、1で保存したエクセルをデスクトップ上でコピー(Ctrl + C)&ペースト(Ctrl + V)
3.ペーストしたエクセル(白紙で行幅15)を立ち上げる。

こうすれば、毎回行幅を変更する事なく、立ち上げ時から行幅15のエクセルが使用できますよ♪

ただ、全選択して一気に行幅を変える前者のやり方の方が簡単な気もしますが…。(汗

う~ん。

確か、エクセルの初期設定で変更できるのは、
「シート数」「フォントの書体」「フォントの大きさ」
くらいだったと思います。
行の幅を、立ち上げ時から指定の幅にする事は出来なかったような…。

私自身、エクセルを結構利用するのですが、行の幅を変更するときは、
「全選択(画面左上の行(1)の上、と列(A)の左、の長方形の部分をクリック)」して、
行(1)と、行(2)の間にある線をドラッグして一気に全ての行の幅を変えています。

もし、それすらも煩雑と感じるほどにエクセルを新規で立...続きを読む

Q【C++ TR1】tr1::tupleのコンストラクタについて

 こんばんは。今回初めて此方のカテゴリに質問させて頂きます。
 今暇つぶしにtr1::tuple<T1, T2, ..., TN>の中を書いています。

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf

--------------------------------------------------------------
pdfの[6.1.3]より(少し省略しています)
--------------------------------------------------------------
template<T1, T2, ..., TN>
class tuple
{
public:

↓このコンストラクタのP1~PNが、どの様な型に成るのかが不明瞭です。
explicit tuple(P1, P2, ..., PN);

--------------------------------------------------------------

pdfの[6.1.3.1]辺りにP1~PNの事について、書いてはあるのですが・・・今一掴めません。

例えば、

tr1::tuple<char, int, const char(&)[3]>

と書いた場合、コンストラクタのP1, P2, P3はどう言う型になるのでしょうか。
テンプレートメタプログラムが解る方、ご教示お願いします。

 こんばんは。今回初めて此方のカテゴリに質問させて頂きます。
 今暇つぶしにtr1::tuple<T1, T2, ..., TN>の中を書いています。

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf

--------------------------------------------------------------
pdfの[6.1.3]より(少し省略しています)
--------------------------------------------------------------
template<T1, T2, ..., TN>
class tuple
{
public:

↓このコンストラクタのP1~PNが、どの様な型に成るのかが不明瞭...続きを読む

Aベストアンサー

> where Pi is Ti if Ti is a reference type, or const Ti& otherwise.

なので、

tr1::tuple<char, int, const char(&)[3]>

の仮引数の型は、

const char&, const int&, const char(&)[3]

ではないでしょうか?

Qエクセルの行の幅がずれる

エクセルで表を作っているのですが
行の高さを25にして確かめてみると
どうしても24.5というように25の幅になっていません。
どうすればきっちり自分の設定した行の高さになるのでしょうか教えてください。
エクセルは2000を使っています。

Aベストアンサー

セルの高さの単位はなんでしょう?
ポイントという単位なのですが、1ポイントは約0.35mmでポイントは文字の大きさの単位と同じです。エクセルでは11ポイントの場合標準の高さが13.5、14ポイントでは17.5と変化します。
エクセルの標準フォントの高さを基準にしています。(これはオプションで変更できます。)

ピクセルと言う基準があって、これをポイントと言う単位に直しているので、25と言う端数のない数値にならない事がある。

例えば、幅はどうでしょう、これは標準フォントの文字数を表しています。(規定があるのですが省略)

と言う事で、出来ません。
25の右にあるピクセルと言う単位を基本に使うようにしたらいかがでしょう。
例えば列幅とも100ピクセルを選択するとセルは正方形になります。(ピクセルは列幅とも同じ物です。)
この併記はエクセル2000から始まったようですが。(単位が違うので、合わせるためみたいです。)

QC/C++の.libについて教えてください。

こんにちは。

C/C++のライブラリファイルについて教えてください。

現在VisualStudio2008 AcademicEditionでライブラリを制作しているのですが質問させてください。
ライブラリを制作するプロジェクトをLibA、そのライブラリを利用して実行ファイルを制作するプロジェクトをProjとします。

LibAでother()関数を利用するのに
#pragma comment ( lib, "other.lib" )とソースコード上に記述しました。
(other.libは他のプロジェクトで自作したスタティックライブラリでLibAと同じフォルダに入っていると仮定します)

ProjでLibAで制作したライブラリを使用するために#pragma comment ( lib, "LibA.lib" )とソースコード上に記述しました。
しかし、other.libが開けませんと怒られてしまいます。

other.libを利用しているのはLibAなのでProj側でother.libを読み込むように強制されるのは面倒臭いのですが、LibA側にother()関数を埋め込むようなことはできないのでしょうか?
LibAを利用するProjでもother.libを要求されないようにするにはどうすればいいでしょうか?

/*
スタティックライブラリを作成するためにLibAをコンパイルする時に#pragma comment ( lib, "other.lib" )の記述が不要というのは知っています。
LibAにその記述を行わなかった場合Projで自分で記述する必要があることも知っています。
*/

現在、私が思いついているのはother.libを作成するプロジェクトのソースコードを引っ張ってきてLibAに入れて一緒にコンパイルするくらいです。


日本語がへたくそでわかりづらいところがあるかとは思いますがよろしくお願いします。

こんにちは。

C/C++のライブラリファイルについて教えてください。

現在VisualStudio2008 AcademicEditionでライブラリを制作しているのですが質問させてください。
ライブラリを制作するプロジェクトをLibA、そのライブラリを利用して実行ファイルを制作するプロジェクトをProjとします。

LibAでother()関数を利用するのに
#pragma comment ( lib, "other.lib" )とソースコード上に記述しました。
(other.libは他のプロジェクトで自作したスタティックライブラリでLibAと同じフォルダに入っていると仮定しま...続きを読む

Aベストアンサー

ダウンロードして

D:\Test\lib\lib_a
D:\Test\lib\lib_b
D:\Test\lib\proj

の構成で試してみました。

(1) lib_b の「追加の依存関係」に $(InputDir)\lib_a.lib と設定されていましたが、

lib_a.lib は

D:\Test\lib\lib_a\Debug
D:\Test\lib\lib_a\Release

に作成されたので、lib_a.lib を

D:\Test\lib\lib_b

にコピーしました。

(2) また、「$(InputDir)\lib_a.lib」だと、

1>------ ビルド開始: プロジェクト: lib_b, 構成: Debug Win32 ------
1>ライブラリを作成しています...
1>LINK : fatal error LNK1181: 入力ファイル 'd:\Test\lib\lib_b\\lib_a.lib' を開けません。
1>ビルドログは "file://d:\Test\lib\lib_b\Debug\BuildLog.htm" に保存されました。
1>lib_b - エラー 1、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

となるので、

$(InputDir)\lib_a.lib

$(InputDir)lib_a.lib

に修正しました。

(3) lib_a も lib_b もソースファイルが main.cpp なので、重複しないように

lib_b の main.cpp を mainb.cpp に変更しました。

(4) Proj はそのまま ビルドしようとすると、

1>------ ビルド開始: プロジェクト: proj, 構成: Debug Win32 ------
1>コンパイルしています...
1>main.cpp
1>マニフェストをリソースにコンパイルしています...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1
1>Copyright (C) Microsoft Corporation. All rights reserved.
1>リンクしています...
1>LINK : fatal error LNK1104: ファイル 'lib_b.lib' を開くことができません。
1>ビルドログは "file://d:\Test\lib\proj\Debug\BuildLog.htm" に保存されました。
1>proj - エラー 1、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

となったので、

Proj のプロパティの「リンカ」-「全般」の「追加のライブラリディレクトリ」に

D:\Test\lib\lib_b\Debug

を設定しました。

以上、Proj で lib_a を指定することなくビルドが可能となりました。

ダウンロードして

D:\Test\lib\lib_a
D:\Test\lib\lib_b
D:\Test\lib\proj

の構成で試してみました。

(1) lib_b の「追加の依存関係」に $(InputDir)\lib_a.lib と設定されていましたが、

lib_a.lib は

D:\Test\lib\lib_a\Debug
D:\Test\lib\lib_a\Release

に作成されたので、lib_a.lib を

D:\Test\lib\lib_b

にコピーしました。

(2) また、「$(InputDir)\lib_a.lib」だと、

1>------ ビルド開始: プロジェクト: lib_b, 構成: Debug Win32 ------
1>ライブラリを作成しています...
1>LINK : fatal error...続きを読む


人気Q&Aランキング

おすすめ情報