「値をゼロサプレスして、配列に格納しなさい。」と指示された場合、代入したい値以外の各配列要素は、'0'で埋め尽くせば良いのでしょうか。それともスペースにすれば良いのでしょうか。
教えてください。

A 回答 (4件)

inoue64> 「ゼロサプレス」だから、ゼロで埋めると思います。



逆です。サプレス "suppress" … 抑制する ですから、ゼロの出力を
抑制する、です。

スペースで埋めてください。

因みに「配列」って、文字の配列なんですよね?
    • good
    • 0

ゼロサプレスは、先行するゼロをなくす。


ゼロフィルは、ゼロ埋めするものです。

例えば、5桁のエリアに数字を右詰で配置する場合

ゼロフィルなら
00100

ゼロサプレスなら
△△100
(△はスペースです。)

のようにします。
    • good
    • 0

No.1回答者より


そういえばそういうこと(No.2)だったかと思うので、
No.1の回答は間違いだと思います。
    • good
    • 0

「ゼロサプレス」だから、ゼロで埋めると思います。

    • good
    • 0

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

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

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

Q配列Xの最大値、最小値を求めるサブルーチンmaxminの作り方

配列Xに入っているデータの最大値、最小値を求めるサブルーチンmaxminの作り方を教えてください。(n:データ数)

subroutine maxof(x,n,xmax,xmin)
implicit real*8(a-h,o-z)
real*8
C 最大値は変数xmaxに、最小値は変数xminに代入する
 !!この部分が分かりません!!
return
end

教えてください。
よろしくお願いします。

Aベストアンサー

!検証の都合上求められているサブルーチン以外の部分のプログラムも全て書いてます。
!個人的な信条の関係で質問文のソースコード自体を意図的に無視しているところもあります。
!(問題がmaxminを定義することなのにmaxofサブルーチンを定義するようなソースになっている地点で矛盾している)

!ヒストグラムはやらない

program test

!暗黙の型宣言など邪道だ(笑)
!こうして書いてみると
!構文が非常にVBA/VB6に似ていて,派生元派生先であることを強く実感する。

implicit none
integer::n
real*8::x
real*8::y

real*8,allocatable,dimension(:)::arr

allocate(arr(5))

arr(1) = 57d0
arr(2) = 24d0
arr(3) = 38d0
arr(4) = 92d0
arr(5) = 37d0

n = ubound(arr,1)

call maxmin(arr,n,x,y)
print *,x,y

contains
!fortranは参照渡しらしい。
!個人的には二つのことを同時にやるんじゃなくて,
!max関数とmin関数だけを定義したい。
subroutine maxmin(x,n,xmax,xmin) !
real*8,dimension(:)::x
real*8::xmax
real*8::xmin

integer::n
integer::i

xmin = x(1)
xmax = x(1)

do i = 2,n
if (xmax < x(i)) then
xmax = x(i)
end if
if (xmin > x(i)) then
xmin = x(i)
end if
end do
end subroutine

end program

!検証の都合上求められているサブルーチン以外の部分のプログラムも全て書いてます。
!個人的な信条の関係で質問文のソースコード自体を意図的に無視しているところもあります。
!(問題がmaxminを定義することなのにmaxofサブルーチンを定義するようなソースになっている地点で矛盾している)

!ヒストグラムはやらない

program test

!暗黙の型宣言など邪道だ(笑)
!こうして書いてみると
!構文が非常にVBA/VB6に似ていて,派生元派生先であることを強く実感する。

implicit none
integer::n
real*...続きを読む

Q値を返り値に返すのと参照渡しした引数に格納することの違い

プログラミングをしていて、次のような2種類の形式の関数をみることがあります。

void sum(int a, int b, int& c); //aとbの和をcに格納する
int sum(int a, int b); //aとbの和を返す

上の例のint &cは参照渡しされる引数という意味で、CやC++、PHPなどで同様です。

この、計算結果を参照渡しした引数に格納するのと、返り値に返すことの違いがよく分かりません。計算結果が複数ある場合は、前者の方が便利でしょう。しかし計算結果が1つだけなのに前者の方法を採っている関数も多く見かけます。個人的には、計算結果を返り値として返す後者の方法の方が感覚的に自然だと思うのですが、なぜ前者のような関数が存在するのか、教えていただきたく存じます。

Aベストアンサー

・複数の値を返したい

・↑の応用) 値とエラー等の情報を返したい
if ( MySqrt(a,b) ) { printf( "ERROR" ); } // a>0ならb=√a,戻り値0, a<=0ならbは無効で戻り値1

・戻り値として返すとパフォーマンスが悪い(C/C++の構造体等)
あるいは、関数内で変数に代入→戻ってきて呼出し側の変数に代入、というわずかな処理でも速くしたい。

・↑と関係して、同様の関数と引数の形を揃えた
構造体用が MyFunc1(a,b) / 数値用が b = MyFunc2(a) と見た目が変わらないように。

・戻り値の型を厳密に指定したい
double c = sum(a,b) ;等と暗黙の型変換をしないようにしたい。

・戻り値を返すサブルーチンが書けなかった言語からのなごり

以上、思いついたものを書いてみました。

QMATLABで行列を配列に格納する方法

MATLAB初心者で大変申し訳ありませんが、行列の格納の仕方がわからないので、投稿させていただきました。

for k = 1:1:10
k=k;
t(:,:)=load(sprintf('test%5.5i.txt',k));
end
具体的に言いますと、上記のプログラムで、test00001~test00010.txtというファイルを任意の行列t(:,:)で読み込んでいるのですが、このt(:,:)をkと対応させて、例えばk=1の場合のtをt[1]、k=2の場合のtをt[2]などの配列に格納し、それを自由に呼び出し、計算を行いたいと考えております。
基礎がわかっていないためにどうしていいかわかりません。
宜しく御願いします。

Aベストアンサー

構造体を使うのが一番スマートでしょうか。

for k = 1:10
 FILE_DATA(k).t(:, :) = load(sprintf('test%5.5i.txt', k));
end

これで、FILE_DATA(1)~FILE_DATA(10)それぞれに行列tが格納されます。

QMATLAB 256列以上の配列格納について

こんにちわ。
現在、matlabで行971、列971程度の配列を用いて画像化したいと考えています。

しかし、列が256を超えるとエラーが出てしまい、処理できません。
ソースは下記の通りです。

971×971の正方形の画面にするので、1列(971×971)行などのように分割に全部入れて処理もするわけには行かないと思います。
よってなんとか256以上の列を使っていかなければならないです。

どうか、わかる方がいればお願いいたします。
////////////////////////////////////////////////////////////////
clear all;
j=971;
jj=5;
test=[1:j,1:j];
for k=0:jj
test=load(sprintf('APW%04d.csv',k)');%kの値を%04dに上書き
end
for i=1:j
test(:,i) = abs(test(:,i)/j);%データを0~1に補正
end
///////////////////////////////////////////////////////////////
エラー内容は下記の通りです。

////////////////////////////////////////////////////////////////
??? Attempted to access test(:,257); index out of bounds because size(test)=[971,256].

エラー ==> Copy_of_Gzousyori at 14
test(:,i) = abs(test(:,i)/j);データを0~1に補正
////////////////////////////////////////////////////////////////

こんにちわ。
現在、matlabで行971、列971程度の配列を用いて画像化したいと考えています。

しかし、列が256を超えるとエラーが出てしまい、処理できません。
ソースは下記の通りです。

971×971の正方形の画面にするので、1列(971×971)行などのように分割に全部入れて処理もするわけには行かないと思います。
よってなんとか256以上の列を使っていかなければならないです。

どうか、わかる方がいればお願いいたします。
////////////////////////////////////////////////////////////////
clear ...続きを読む

Aベストアンサー

読み込んでいる csv ファイル
APW%04d.csv
が 256 列しかない(excel ならこのくらいが限度?)ので,

test=load(sprintf('APW%04d.csv',k)');%kの値を%04dに上書き

した配列 test のサイズが ???*256 で,
257 列目を読みに行っているからエラーだと思います.

もっと,列数のある csv を作るか,
配列の要素に 一個一個代入するかです.

Q効率の良い配列格納方法

excelvbaで配列を勉強しています。
配列を使うと効率よく簡単に書けると聞きましたので、
過去に書いたプログラムを配列を使い直そうと思っています。
そこで質問ですが、

先着20名様、というプログラムですが、
この20名を作るのに、配列を作ろうと思います。
(実プログラムは20人なので、あっという間に終わってしまいますが勉強のためです。)

シートに応募者のデータが、1行を使って入ってきます。
その中からある条件に合致する行(応募者)を取り出してゆくというモノです。
応募者の順は当然にして、到着順です。
応募者データの中身は、応募者氏名、住所、生年月日、、、、と項目が多いです。

やりたいことは、
この応募者データの全ての項目ではなく、在る特定の項目のみを配列に20人分取り込むということです。
一つずつ取り込めばよいのですが、(今は1個ずつ取り込んでいます。)
取り込む項目も10個と多いので、
何とか効率の良い取り込み方を教えて欲しいのです。

具体的には、
データはaから始まり、以下の通りです。
a応募者氏名
b応募者現住所
c応募者生年月日
d現住所の在住期間
e出身大学
f一番長く居住した都道府県
g引っ越し回数
h質問への応え1
i質問への応え2
j質問への応え3
k質問への応え4
l質問への応え5
m質問への応え6
nXXX氏名
oxxx住所
pXXX生年月日
q応募者とXXXの続柄
rアピールしたい内容

上記項目の中から、配列に格納する項目は、
a~c,h~m,r
です。

説明が分からない部分は聞いていただけると助かります。
宜しくお願いします。

excelvbaで配列を勉強しています。
配列を使うと効率よく簡単に書けると聞きましたので、
過去に書いたプログラムを配列を使い直そうと思っています。
そこで質問ですが、

先着20名様、というプログラムですが、
この20名を作るのに、配列を作ろうと思います。
(実プログラムは20人なので、あっという間に終わってしまいますが勉強のためです。)

シートに応募者のデータが、1行を使って入ってきます。
その中からある条件に合致する行(応募者)を取り出してゆくというモノです。
応募者の順は当然にし...続きを読む

Aベストアンサー

>配列bbbのように1個に格納したいのです。

 残念ながら、私は「連続していない」複数のセル範囲のデータを、For~Nextも使わずに、1個の配列変数に"直接的に"格納する術を存じ上げません。(方法が無いと断言している訳では御座いません)
 そこで、一時的に新しいワークシートを作成して、そこに「セル範囲が連続する様に」データのコピーを取り、そのコピーしたデータを配列変数に取り込むという方法では如何でしょうか?


Sub Macro ()

Dim シート枚数 As Integer
Dim 最終行 As Long
最終行 = Application.WorksheetFunction.Match(9E+99, Sheets("Sheet1").Columns("C:C"))
Dim 配列A() As Variant
ReDim 配列A(1 To 最終行 - 1, 1 To 10)

Sheets.Add After:=Sheets(Sheets.Count)

Sheets(Sheets.Count).Range("A2:C" & 最終行).Value = Sheets("Sheet1").Range("A2:C" & 最終行).Value
Sheets(Sheets.Count).Range("D2:I" & 最終行).Value = Sheets("Sheet1").Range("H2:M" & 最終行).Value
Sheets(Sheets.Count).Range("J2:J" & 最終行).Value = Sheets("Sheet1").Range("R2:R" & 最終行).Value
配列A() = Sheets(Sheets.Count).Range("A2:J" & 最終行).Value

Application.DisplayAlerts = False
Sheets(Sheets.Count).Delete
Application.DisplayAlerts = True

End Sub


 因みに、上記のマクロは元データがSheet1に存在していて、Sheet1の1行目に「応募者氏名」~「アピールしたい内容」といった項目名が入力されている場合を想定したものです。
 Sheet1の1行目の項目名は、配列変数に格納する必要がないものとしているため、配列変数に格納する事できる行数の限界の設定を

1 To 最終行 - 1

としております。
 もし、Sheet1の項目名が、例えば3行目に入力されている場合には、配列変数に格納する事できる行数の限界の設定は

1 To 最終行 - 3

となります。

>配列bbbのように1個に格納したいのです。

 残念ながら、私は「連続していない」複数のセル範囲のデータを、For~Nextも使わずに、1個の配列変数に"直接的に"格納する術を存じ上げません。(方法が無いと断言している訳では御座いません)
 そこで、一時的に新しいワークシートを作成して、そこに「セル範囲が連続する様に」データのコピーを取り、そのコピーしたデータを配列変数に取り込むという方法では如何でしょうか?


Sub Macro ()

Dim シート枚数 As Integer
Dim 最終行 As Long
最終行...続きを読む


人気Q&Aランキング

おすすめ情報