はじめまして。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ふわりん

はじめまして。

#1

投稿記事 by ふわりん » 17年前

はじめまして。Cを勉強して間もない者です。
今日学校から宿題が出て困っています。どうか救いの手をお願いします。期限は明日の19:00までなのですが・・・

今日,このような宿題が出されました。

『2つの配列を作り,周波数の異なる2つの正弦波形を描くプログラムを作れ』

#include<stdio.h>
#include<math.h>
int main(void){
int i;
float x[3600],y[3600];
for(i=0; i<=3599; i++){

ここまでは先生のヒントを参考にしながらやってみたのですが,この先どのようにすれば良いのかわかりません。どうかよろしくお願いします。また上のプログラムで間違いがあったらご指摘お願いします。

ちなみに僕の学校の授業では実際にグラフを描くのにはgnuplotというソフトを用います。

管理人

Re:はじめまして。

#2

投稿記事 by 管理人 » 17年前

こんにちは、ふわりんさん。

gnuplotですか、よく聞きますね。私は使ったこと無いんで、使い方知りませんけど。

http://lagendra.s.kanazawa-u.ac.jp/ogur ... lot-intro/

この辺見たら作れるんじゃないですか?

ちょっと私もやってみますけど。

また、3600回ループというのは1波長を3600回描画するという事ですか?

管理人

Re:はじめまして。

#3

投稿記事 by 管理人 » 17年前

あれ、gnuplotってライブラリじゃなくて、ただのソフトなんですか?

じゃ数値だけ準備してコピペでデータ作ったらいいだけなんですか?

ごめんなさいgnuplot使ったこと無いんで。

数値作るだけならsin関数で数値作ってprintfで表示したらいいだけなんじゃないですか?

コマンドプロンプトに文字列を表示してそれをコピペするんでしょうか?
それともファイルを作成するんでしょうか?

ふわりん

Re:はじめまして。

#4

投稿記事 by ふわりん » 17年前

グラフの出し方は分かるんです。
ただ,プログラムが・・・・


3600回ループは・・・どうなんでしょう・・・

周波数の異なる2つのsin関数の波形を一つのグラフ上に表せるようなプログラムであれば良いと思います。
よろしくお願いします。

管理人

Re:はじめまして。

#5

投稿記事 by 管理人 » 17年前

printf出力でいいんでしょうか?

ふわりん

Re:はじめまして。

#6

投稿記事 by ふわりん » 17年前

はい。お願いします。

管理人

Re:はじめまして。

#7

投稿記事 by 管理人 » 17年前

はい、出来ました。

#include<stdio.h>
#include<stdio.h>
#include<math.h>

#define PI 3.1416

void main(void){
  int i;
  double x[3600],y1[3600],y2[3600];

  for(i=0; i<=3599; i++){
    x=2.0000*PI*((double)(i+1)/3600.0000);
    y1=sin(x);
    y2=sin(2*x);
    printf("x[%d]=%.4f - y1[%d]=%.4f - y2[%d]=%.4f\n",i,x,i,y1,i,y2);
  }
}

説明は後書きます。とりあえず実行してみてください。

こちらにサンプルプログラムを置いておきます。

http://dixq.net/board/program/graph4.cpp

ふわりん

Re:はじめまして。

#8

投稿記事 by ふわりん » 17年前

どうもありがとうございました。
助かりました。

管理人

Re:はじめまして。

#9

投稿記事 by 管理人 » 17年前

あ、プログラムの意味はわかりました?
説明する必要ありません?

#include<stdio.h>はいりませんね。
消して置いてください。

一応ではプログラムの説明です。

これは
y1に周波数1の正弦波の値を
y2に周波数2の正弦波の値を
格納し、表示するプログラムです。
y = sin f*x;
ですから、fが周波数ですね。xの値は0~360度の値が入っています。
3600回計算していますから0.1度に1回計算しています。
xの値はラジアンで計算しています。
360度は2πですから6.2832...ですよね。
2πの値を3600で割って、次第に増やしていく方法を取っています。
sinのxにこの値をいれて計算し、yにいれただけです。
y1とy2はxに2をかけるかかけないかだけです。
周波数は上式のfの値なんで、ここにいれたらいいわけですね。
これを出力しています。

意味わかりました?
出力されている数値の意味わかります?

ふわりん

Re:はじめまして。

#10

投稿記事 by ふわりん » 17年前

ご丁寧に説明してくださりありがとうございます。
一応流れは掴めました。
疑問に思った点はまた質問させていただきます。
夜遅くにすみませんでした。

管理人

Re:はじめまして。

#11

投稿記事 by 管理人 » 17年前

解決してよかったです^^
宿題間に合いそうですか?

またいつでもお越しくださいね~^^

閉鎖

“C言語何でも質問掲示板” へ戻る