C言語初心者の大学1年生です。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 8年前
住所: 東海地方
連絡を取る:

Re: C言語初心者の大学1年生です。

#31

投稿記事 by softya(ソフト屋) » 7年前

unittk501st さんが書きました:利用登録をさせていただいたのですが、添付する方法がわかりません。どうしたら良いでしょうか。
投稿時に下の方にファイル添付と書かれたタグがあるので、そこで「ファイル追加」で添付できます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
Dixq (管理人)
管理人
記事: 1659
登録日時: 8年前
住所: 北海道札幌市
連絡を取る:

Re: C言語初心者の大学1年生です。

#32

投稿記事 by Dixq (管理人) » 7年前

添付画像を参照下さい。
「返信」
そして
「ファイル添付」タブから「参照」で添付するファイルを選ぶことが出来ます。

ちなみに添付ファイルはデフォルトで小さいですが、画像上部をクリックすると拡大します。
添付ファイル
temp.png
temp.png (30.1 KiB) 閲覧数: 331 回

unittk501st
記事: 11
登録日時: 7年前

Re: C言語初心者の大学1年生です。

#33

投稿記事 by unittk501st » 7年前

ありがとうございます。見つかりました。
それでは課題1の添付ファイルをZIP形式で添付しておきます。
添付ファイル
abbey_road.zip
(572.24 KiB) ダウンロード数: 27 回

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 8年前
住所: 東海地方
連絡を取る:

Re: C言語初心者の大学1年生です。

#34

投稿記事 by softya(ソフト屋) » 7年前

赤鬼 さんが書きました:あー、1はちょっと大変ですね。
txtの中身が分からない以上完璧にとは言いようがありませんが。
2が出来たら参考にしてみてください。

ppmファイルの構造は
一番上にヘッダと呼ばれるものが来ます。
ヘッダとは画像ファイルの情報が入っているものと思ってください。
で、ファイルの中身はどうなっているかというと

[ヘッダ]
P6
改行コード
画像の幅(テキスト値を16進数に直した値)
セパレータ(まあ、改行でおkだと思います)
画像の高さ
改行コード
最大輝度
改行コード
[画像情報]
(R,G,B)の順番で縦*横のピクセル数が詰まっています。

つまり、画像情報のみを受け取って書き込むということは
先頭にP6を書く(16進数だと50、36)、改行コード(16進数で0A)、幅、改行コード、縦、改行コード、255(1バイトですので)、改行コード,
反転した画像情報 (R,G,B)*幅*高さを書き込む必要があります。

また、受け取るファイルは画像ファイルですので、くれぐれもテキストファイルで開かずバイナリファイルで開いてください。
書き込む場合は全部バイナリで書くと良いと思います。
unittk501st さんが書きました: ヒント
画像を読み込む/書き込む用の関数が作るといいかも
画像を取り扱うための構造体を使うといいかも
画像を読み込む/書き込む用の関数を作ると良いかもじゃなくてほぼ必須です。
見辛いしmainに書かれたら発狂ものだと思います。

構造体に関してですが。

コード:

struct IMAGE{
int width;
int height;
unsigned char *pix;//画像情報はunsigned char型の配列[384][512][3](幅)(高さ)(R,G,B)の3次元配列にする(まあ、自分なら1次元の動的配列にしますけどね)。普通なら動的確保でしょうが分からないでしょうし。多分先生もおまけしてくれるはず。
};
こんな感じの構造体をお勧めします。

後ろからは2をやれば多分わかると思うので、がんばってください。
今気づきましてが、赤鬼さんのPPMヘッダはP6(バイナリ形式)なのでマズイです。
「PNM (画像フォーマット) - Wikipedia」
http://ja.wikipedia.org/wiki/PNM_(%E7%9 ... %E3%83%88)
処理すべきはP3のテキスト形式だと私は思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
Hiragi(GKUTH)
記事: 167
登録日時: 8年前
住所: 大阪府
連絡を取る:

Re: C言語初心者の大学1年生です。

#35

投稿記事 by Hiragi(GKUTH) » 7年前

Dixq (管理人) さんが書きました:とりあえず「何も分からない」と言われてしまっては、どのように回答すればよいか分かりません。

課題1と2だと2の方が楽そうなので、まず2をやってみましょう。

課題2はポインタの理解が必要ですね。
課題のままでは少し難しいので、少し簡単な問題に置き換えてみます。

問題1_1.
const static int LEN = 8*2+1;
char str[LEN]="お疲れ様でした!";
で格納されたstrの文字列をchar型のポインタ*pを用いて1文字ずつ表示させましょう。

これなら出来ますか?
一応下に回答の一例を載せるので、まずはこれをみずにやってみてください。
その後、int型配列に入れたデータを*pに格納して表示、最終的に逆に表示すれば課題クリアになります。

その過程で分からないことがあれば、どこが分からないか都度聞いて下さい。

コード:

#include <stdio.h>
const static int LEN = 8*2+1;
int main(){
	char str[LEN]="お疲れ様でした!";
	char *p = (char *)&str[0];
	for(int i=0; i<LEN; i++){
		printf("%c",*p);
		p++;
	}
	return 0;
}

ちょっときになったので、レスしますが
使う言語はCなのか?それともC++なのか?
使う言語が明確に表記されていませんが、タイトルが「C言語初心者」となっていますので、100%C言語にするならば、

コード:

const static int LEN = 8*2+1;
ではなくて、

コード:

#define LEN = 8*2+1;
のほうがいいのでは?
だいがくせい!

アバター
Dixq (管理人)
管理人
記事: 1659
登録日時: 8年前
住所: 北海道札幌市
連絡を取る:

Re: C言語初心者の大学1年生です。

#36

投稿記事 by Dixq (管理人) » 7年前

> グクス君

#define LEN = 8*2+1;

はコンパイルが通らないでしょう。仮に

#define LEN 8*2+1

だとしても

LEN*2

と書いたときに期待した動作にならないのでやめた方がいいと思います。

printf("%d",LEN*2);

を表示してみれば意味が分かると思います。
const int LEN = 1;
と書いているのは型を明確にするためです。
また、constもstaticもC言語で使用可能です。

> unittk501stさん

課題の期限は今日中でしたよね?
もう残り時間が少ないと思いますが、まだ一つも回答を投稿してもらっていないと思います。
進捗はいかがですか?

アバター
Dixq (管理人)
管理人
記事: 1659
登録日時: 8年前
住所: 北海道札幌市
連絡を取る:

Re: C言語初心者の大学1年生です。

#37

投稿記事 by Dixq (管理人) » 7年前

取り掛かりやすいように少し書き出しを書いておきますので参考にして下さい。
ぐちゃぐちゃなプログラムでもいいのでとにかく書いてみましょう。

下は、提示されたファイルからrgbの値を100ピクセル分読み込んでは表示するプログラムです。

コード:

#include<stdio.h>
int main(){
	FILE *fp = fopen("abbey_road.txt","r");
	int red, green, blue;
	for(int i=0; i<100; i++){
		fscanf(fp, "%d %d %d ", &red, &green, &blue);
		printf("%d, %d, %d\n", red, green, blue);
	}
	fclose(fp);
	return 0;
}
ちなみに、明日大事な用事があるので、今日は早く寝ます。。

unittk501st
記事: 11
登録日時: 7年前

Re: C言語初心者の大学1年生です。

#38

投稿記事 by unittk501st » 7年前

配列の課題は何とかできました。皆様のご指導のお陰です。

もう片方は現在取り掛かっております。

unittk501st
記事: 11
登録日時: 7年前

Re: C言語初心者の大学1年生です。

#39

投稿記事 by unittk501st » 7年前

たった今課題1、2共に完成し、無事に提出できました。
これも何もすべて皆様のお陰です。
いままで皆様がアドバイスをくださったこと、勇気づけて下さったことに心より感謝致します。
本当にありがとうございました。

beatle
記事: 1280
登録日時: 7年前
住所: 埼玉
連絡を取る:

Re: C言語初心者の大学1年生です。

#40

投稿記事 by beatle » 7年前

このフォーラムのルールですが、解決した場合は用いた方法やソースコードをお示しいただくことになっております。
後からこの掲示板に来た人の参考にするためですのでご協力お願いします。

閉鎖

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