C言語で数列の0だけの部分の個数を数えるプログラムを作成する方法【サンプルコード付き】

このQ&Aのポイント
  • C言語で、数列の中に現れる0だけの部分の個数を数えるプログラムを作成する方法を解説します。
  • 特定の数(この場合は100)が2個連続して現れるまでの間に現れる0だけで構成される数列の0の個数をそれぞれ数えて、結果をファイルに出力します。
  • サンプルコードを使ってプログラムの作成手順を詳しく説明します。
回答を見る
  • ベストアンサー

C言語のプログラムが作れません

最初に0がいくつかあり, そのあとに0以外の数字がいくつか出てきて, また0がいくつか出てきて, さらに0以外の数字が出てきて, また0がいくつか出てきて, 最後に100が2個が出てくる それの繰り返しの 数列のa.csvファイルがあります.(下記にサンプル記載) これの100が2個出てくるまでを一区切りとして, それまでに出てくる“0だけの数列”の“0”の個数をそれぞれ数えて, その結果をファイル出力するプログラムを作成したいのですが, 手も足も出ません.どなたか,作成していただきませんか(T_T) よろしくお願いします. 0 0 0 3 4 5 0 0 -2 -4 -5 0 0 0 0 0 100 100 0 0 0 0 0 -4 -5 -6 0 2 3.5 4 5.6 0 0 0 0 0 100 100 0 0 . . . . <出力ファイル> b.csv 1-1,3 1-2,2 1-3,5 2-1,5 2-2,1 2-3,5 . . .

質問者が選んだベストアンサー

  • ベストアンサー
  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.1

ここは、質問サイトであり、 プログラム作成サイトではありません。 プログラムを作る際、何かわからないことを質問するなら ここで良いですが、丸投げは受け付けられません。 それに、これは「宿題」でしょ? 学校の先生に聞いてください。

tx9992
質問者

お礼

なんとか出来ました.これからは丸投げしないようにします

tx9992
質問者

補足

すいません

その他の回答 (1)

  • f272
  • ベストアンサー率46% (8023/17148)
回答No.2

a.csv に書いてある数値を読むことは出来るのか?

tx9992
質問者

お礼

#include<stdio.h> #include<stdlib.h> #include <string.h> #include<limits.h> #define M 1000000 #define N 40 // int main(void){ int i=0; int zero=0; int a=0; int b=0; int let; float data[M]; //データの値 FILE *fp1; //読み込みファイル FILE *fp2; //出力ファイル //読み込みファイルをオープン fp1 = fopen("a.csv","r"); if(fp1 == NULL){ printf("ファイルをオープンできませんでした.\n"); return 0; } /*ファイル読み込み************************************************/ while(( let = fscanf( fp1 , "%f" , &data[i] )) != EOF ) { i++; } fclose(fp1); /**************************************************************/ //出力ファイルをオープン fp2 = fopen("b.txt","w"); if(fp2 == NULL){ printf("ファイルをオープンできませんでした.\n"); return 0; } for(i=0;i<M;i++){ if(data[i]==100 && data[i+1]==100){//100が2個連続で出てきた場合 a = 1; b = 0; zero = 0; i = i + 2; } else if(data[i]==0 && data[i+1]==0){ zero++; } else if(data[i]==0 && data[i]!=100){ zero++; b++; fprintf(fp2,"%d-%d,%d",a,b,zero); fprintf(fp2,"\n"); } } } のプログラムで, a.csv 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.14 0.27 0.41 0.53 0.67 0.81 0.94 1.08 1.2 1.34 1.47 1.61 1.73 1.88 2 2.14 2.27 2.41 2.53 2.67 2.81 2.94 3.08 3.2 3.34 3.47 3.61 3.73 3.88 4 4.14 4.27 4.41 4.53 4.67 0 0 0.14 0.27 0.41 0.53 0.67 0.8 0.94 1.06 1.2 1.33 1.47 1.59 1.74 1.88 2 2.14 2.27 2.41 2.53 2.67 2.8 2.94 3.06 3.2 3.33 3.47 3.59 3.73 3.88 4 4.14 4.27 4.41 4.53 4.67 4.8 0 0 0 0 0 100 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.14 0.27 0.41 0.53 0.67 0.81 0.94 1.08 1.2 1.34 1.47 1.61 1.73 1.88 2 2.14 2.27 2.41 2.53 2.67 2.81 2.94 3.08 3.2 3.34 3.47 3.61 3.73 3.88 4 4.14 4.27 4.41 4.53 4.67 0 0 0.14 0.27 0.41 0.53 0.67 0.8 0.94 1.06 1.2 1.33 1.47 1.59 1.74 1.88 2 2.14 2.27 2.41 2.53 2.67 2.8 2.94 3.06 3.2 3.33 3.47 3.59 3.73 3.88 4 4.14 4.27 4.41 4.53 4.67 4.8 0 0 0 0 0 100 100 実行結果 0-1,24 0-2,26 0-3,31 1-1,996263 1-2,996266 1-3,996316 1-4,996318 1-5,996324 1-6,996326 1-7,996328 1-8,996332 になっちゃいました....

tx9992
質問者

補足

今,自分なりに作っています. もう無理となったら,助けてください. 作ったところまでのソースを貼りますので

関連するQ&A

  • C言語のファイル出力について

    C言語のfprintfによるファイル出力について教えてください。 fprintfで、下記の例のように、上書きする行を指定することはできますでしょうか? 出力ファイルは.csv形式で、モードは問いません。 例:既に、sample.csvというファイルがあり、中身が、 0 0 0 1 1 1 2 2 2 とします。プログラムのfprintfで、3 3 3という出力を2行目に上書きし、 0 0 0 3 3 3 2 2 2 と変更する。 もし上記の方法をご存知でしたら、ご教授いただけましたら幸いです。 よろしくお願いいたします。

  • C言語でプログラムを書いています。

    C言語でプログラムを書いています。 その中で、サンプルデータの入ったファイルを読み込み、 その中身を配列を用いて行列として整理したいのですが、どのような命令が必要でしょうか。 ファイルの中身は、以下のようになっています。 1:0.111 2:0.222.....600:0.999 ・ ・ ・ 1:0.122 2:0.233.....600:0.998 「数字:」の部分は使用しないため、実際はコロン以下の数値で組みたいと考えています 詳しいサイトの紹介でもかまいませんので、よろしくお願いします

  • C言語 CSVファイルの読み込み

    C言語でCSVファイルから数字を読み込み、それを計算するというプログラムを作りたいのですが、CSVファイルについて全く知識が無く、加えてCSVファイルを利用したプログラムを作るのが初めての為、勝手がわかりません。 まずCSVファイルというのは、 1.2,2.3,3.4 4.5,5.6,6.7 7.8,8.9,9.0 といった数字(文字列)をカンマで区切ったテキストファイルですよね? それをどのようなプログラムで読み込むのでしょうか? 例えば、上記の数字を読み込み、 a. 1.2+4.5+7.8=x b. 8.9-5.6-2.3=y c. 3.4*6.7*9.0=z と計算する場合のプログラムを教えていただきたいです。 よろしくお願いします。

  • C言語プログラム

    こんな課題が出たのですが、さっぱりわかりません。 誰か解る人がいたら教えてほしいです。 1 3+5+7+…+nと奇数の和を求め、和が100を越えたときのnの値を求めて表示するプログラムをdo~whileを使って作成しなさい。 2  キーボードから3つの数を読み込み、最大値を求める処理を繰り返し行うプログラムを、do~whileを使って作成しなさい。繰り返しの終了は、計算のあとで、'S'(1文字)が入力されるまでとし、それ以外の文字では、処理を続行すること。 3  整数型1次元配列kに整数123,456,789をそれぞれ代入し、その内容を表示するプログラムを作成しなさい。 4  文字型1次元配列strに'u'を、'n'、'i'、'x'それぞれ代入し、その内容を文字列として出力するプログラムを作成しなさい。 5  要素数50の整数型1次元配列mの要素すべてに、その添字に対応した0~49の数値を代入し、その内容を表示するプログラムを作成しなさい。 3は #include <stdio.h> main() { int k[3]; k[0] = 123; k[1] = 456; k[2] = 789; printf("%d\n%d\n%d", k[0], k[1], k[2]); return 0; } と解いてみたんですが、やっぱ間違えてますよね?

  • c言語がわかりません。

    (1)入力された文字列(10文字以下)の`a`の文字を除き、結果を表示するプログラムを作成する。 (2)入力された文字列について、数文字(0から9)の各々の出現個数と、それ以外の文字の出現個数をカウントし表示するプログラムを作成する。

  • C言語に関する質問です

    入力ファイルindata.datからデータを読み込み配列に格納し同時にデータの個数を求めるプログラムを作成したいです データの個数は最大で100個扱えるようにしたいです indate.datの作成の仕方も教えて欲しいです 宜しくお願いします

  • C言語について

    初項a,公比r,項数nの等比数列で、第n項までの和SnがSmaxを超えない範囲での最大の項数nを求める。 キーボードからa,r,Smaxを入力し等比数列の和SnがSn≦Smaxを満たす最大の項数nとその時のSnを表示するプログラムを作成せよ。 という問題でプログラムを作っているんですが、Snはなんとか求められるのですが項数nが思ったように出力されません。 どのようにすれば求められるのでしょうか? どうかよろしくお願いします。

  • C言語でアナグラムを求めるプログラム

    C言語初心者で、勉強中です。 今アナグラムを求めるプログラムをC言語で作成しています。 内容はあらかじめある英単語が書いてあるテキストファイルから互いにアナグラムとなっている英単語をすべて求めてそれを出力するというプログラムです。 どこから手をつけていいかわからず悩んでいます。 そこでヒントをいただこうと思って質問しました。 どなたか回答よろしくお願いします。

  • C言語のファイル入出力について教えて下さい

    C言語初めて1ヶ月の超初心者です。 本を読んでもネットで調べても、ファイル入出力の意味がいまいちよく分かりません。 プログラムはCPadで書いています。 書き終わったプログラムを.cのファイル名で保存し、それをコンパイル。 読み込みたいファイルを.csvで作る。書いたプログラムの実行ボタンを押し、 .exe .csv .c の3つのファイルを打ち込んだ後、また.cを打ち込む。 これで一応実行はできるのですが、csvファイルで作ったもの (例をだして言うと ------------------------------------------------------------------ 名前     番号      給与   残業代    所得税 ○○  0001     200000   20000     10000 ------------------------------------------------------------------ というものをcsvで作るとします)  は、プログラムでも、名前 番号 給与 残業代 所得税 と書いてある部分はまったく同じように作らないと csvファイルから読むことはできないのでしょうか? csvファイルとプログラムを実行した結果の役割が、理解出来なくて困っています。ずっとプログラムの文法(?)ばかり勉強してきて、いざファイル入出力をしたら、どういう意味があるのかどう役立つのか分かりません。 後、上のような表で20人分をまとめて出力したいのですが、ファイル入出力するにあたって、条件式はfprintfなどを書く前に書くのでしょうか? お勧めの分かりやすい本などの情報も、教えて頂けると嬉しいです。   長々申し訳ありませんが、宿題の納期が近いので困っています。 よろしくお願いします。

  • C言語でこんなことは可能ですか?

    現在あるプログラムを作りたいと思いC言語の勉強をしています。 それに伴い、下記のプログラムはC言語で作成可能でしょうか。 例) Aのフォルダ内にbというファイル(txt)があるとして、 bのファイル内の「ありがとう」という文字を検索し表示させるプログラム は作成可能でしょうか。表記としては --------------------------------- ファイル名 | 検索文字 ---------------------------------  A    | ありがとう  -------------------------------- としたいと思っているのですが・・・ よろしくお願いします。