C/C++の宿題を片付けます 65代目

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
 投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】
http://www.linux.or.jp/JM/index.html

【前スレ】
C/C++の宿題を片付けます 64代目
http://pc8.2ch.net/test/read.cgi/tech/1146323457/
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=2&H=&view=table&D=tech&shw=2000
2デフォルトの名無しさん:2006/05/18(木) 08:25:47
もうあったね
C言語/C++言語の宿題を片付けます 65代目
http://pc8.2ch.net/test/read.cgi/tech/1147902222/
3デフォルトの名無しさん:2006/05/19(金) 01:14:15
こっちのすれたいの方がスキ
4デフォルトの名無しさん:2006/05/19(金) 01:16:55
こちらが本スレです。
5デフォルトの名無しさん:2006/05/19(金) 01:32:21
C言語/C++言語の宿題を片付けます 64代目
>>971 です。 お願いします。
6デフォルトの名無しさん:2006/05/19(金) 01:42:18
おちつけ
7デフォルトの名無しさん:2006/05/19(金) 02:02:06
#include <iostream>
int main(){
   string str = "新スレアゲ by オズマ";
   cout<<str<<endl;
}
8デフォルトの名無しさん:2006/05/19(金) 14:30:38
楽しい?
9デフォルトの名無しさん:2006/05/19(金) 14:45:09
[1] 授業単元: C言語演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1919.txt
アップローダーにテキストを張りました。
課題の内容:Xウィンドウシステムで簡単なお絵かきツールを作成する。
具体的な用件:マウスのドラッグにより、フリー曲線を描き、メニューの「end」をマウス
でクリックするか、キーボードから「e」を入力すると終了する。
また、デフォルト(メニューをクリックするまで)は何も描けないようにする。

<1>メニューを複数用意し、マウスのクリックにより、機能を使い分けられるようにする。
<2>各機能は、以下のもの
フリー曲線:画面上にマウスのドラッグで曲線を書く。
文字の描画:画面のマウスでクリックした位置に文字を表示する。
直線の描画:画面上の2点をクリックしたら、その2点を結ぶ直線を表示する。

[3] 環境
 [3.1] OS: Windows (cygwin)
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2006年5月22日00:00

よろしくお願いいたします。
10デフォルトの名無しさん:2006/05/19(金) 16:09:34
【授業単元】C言語 プログラミング
【環境】Visual Stdio.NET2003
【OS】Windows XP
【提出期限】5月20日
【課題内容】次のプログラムを自己参照構造体を使うように変更せよ。
      ヒント:構造体のポインタ
      ※プログラムは長いのでUpしました。
【プログラム】
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1917.txt

よろしくお願いいたします。
11デフォルトの名無しさん:2006/05/19(金) 17:38:10
>>10
11行目:int NextIndex; → struct SportsClub* Next;
33行目:kaiin[i].NextIndex = -1; → kaiin[i].Next = 0;
82行目:kaiin[h].NextIndex = -1; → kaiin[h].Next = 0;
93行目:kaiin[i].NextIndex = -1; → kaiin[i].Next = 0;
99行目:kaiin[h].NextIndex != -1; → kaiin[h].Next != 0;
101行目:h = kaiin[h].NextIndex; → h = kaiin[h].Next - &kaiin[0];
103行目:kaiin[h].NextIndex = i; → kaiin[h].Next = &kaiin[i];
134行目:h = kaiin[h].NextIndex; → h = kaiin[h].Next - &kaiin[0];
154行目:kaiin[i].NextIndex → kaiin[i].Next ? kaiin[i].Next - &kaiin[0] : -1

どうでもいいけど、構造体の名前にセンスなさ過ぎ。
12デフォルトの名無しさん:2006/05/19(金) 17:49:26
>>11
ありがとうございました。
13デフォルトの名無しさん:2006/05/19(金) 17:54:48
>>11
課題なんてそんなもん、と思ったが俺の所はハンガリアン命名規約使ってたな
読みやすくて非常によかった
14デフォルトの名無しさん:2006/05/19(金) 18:27:34
ハンガリアン記法嫌い
15デフォルトの名無しさん:2006/05/19(金) 18:33:00
>>14
好きとか嫌いとか♪
テメーの好みは〜
てめぇのソースに反映しろ

口に出〜すな〜
非、生産的な
DQNおん〜な〜
16デフォルトの名無しさん:2006/05/19(金) 18:45:13
>>14
他にいい記法があるなら紹介してくれ
17デフォルトの名無しさん:2006/05/19(金) 19:15:57
別に口に出したっていいじゃん。
このスレの住人でチーム組んでる分けでもなし。
18デフォルトの名無しさん:2006/05/19(金) 19:46:10
ラクダはどうじゃラクダは?
19デフォルトの名無しさん:2006/05/19(金) 19:54:20
>>18
ちょっと調べてみたがPascal記法の最初が小文字なバージョンか?
それだと型が分かりづらいだろ
20デフォルトの名無しさん:2006/05/19(金) 21:00:37
>>19
そもそも変数名に型を埋め込むのがナンセンス
…という考え方もある。

型のないスクリプト言語ならドキュメンテーション的な利点があるが、
型付けの強い言語では冗長だという解釈もできる。
冗長性が必要となるような長い複雑なコードはその前にそれを直せという意見もある。
21デフォルトの名無しさん:2006/05/19(金) 21:50:47
キャメルスタイルとハンガリアン記法ではまったく役割が違うだろう。
現在 Windows 文化圏で一般に行われているハンガリアン記法と
本来のハンガリアン記法とでも全然違う。
本来のハンガリアン記法ならまだ価値があると思うが、今のハンガリアン記法は
微妙すぎる。オブジェクト思考と相容れない。
詳細はこのへん↓
ttp://www.radiumsoftware.com/hungarian_notation.html

>>20
なんで >>19 に対するレスなのかわかんないけど後半はその通りだと思います
スレ違いごめんよ
22billy:2006/05/19(金) 21:58:01
問題文(含コード&リンク): 第1引数のファイルに含まれる文字列をカンマを区切りとして
単語に分けた上で、第2引数と第3引数のフィールドを入れ替えて出力するプログラムを作成する。
ただし、入れ替えるように指定されたフィールドの一方もしくは両方が存在しなかった場合は
入れ替えを行わないようにする。
実行例:
%cat source
This,is,source.
file,end.
%gcc -o fieldswap kadai.c
%./fieldswap source 2 3
-- Line 1 --
Field 1: This
Field 2: source.
Field 3: is
-- Line 2 --
Field 1: file
Field 2: end.
環境
OS:Linux
コンパイラ名とバージョン:gcc
言語:C
期限: 5/25
23デフォルトの名無しさん:2006/05/19(金) 22:00:01
PS3がこけた今、この業界は今以上の縮小に向かう。
そこで、CreateGame〜陸海空オンライン〜ですよー

ただ今、何名か開発陣募集(PG、絵師、声優、歌手)しています。
ゲーム製作を天職とする集団です。デジタルコンテンツも!
どぞ
24デフォルトの名無しさん:2006/05/19(金) 22:42:52
素人のヒッキーはこういうのに引っかかっちゃうんだろうね〜
25デフォルトの名無しさん:2006/05/19(金) 22:46:01
こっちが本スレみたいなので移動してきました。よろしくお願いします。

[1] プログラミング実習
[2]
長さが32の0と1の列
se7e6e5…e1e0d1d2…d22d23
を入力してこのビット列の表す実数値(実数表現の仕方はIEEE規格754に従うものと仮定する)

(-1)^s*(1+M)*2^E if-127<E<128
(-1)^s*M*2^(E+1) ifE=-127
Inf ifE=128,M=0
NaN ifE=128,M≠0

を出力するCプログラムを作成せよ。またこのプログラムの場合、使用した計算機の実数表現方式がIEEE規格754に従っているのなら、
計算結果として得られた実数値はコンピュータ内部では入力したビット列で表されているはずであるが、これをGDBのxコマンドを用いて調べてみよ。

[3] 環境
 [3.1] unix
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] C
[4] 5/26
[5] その他の制限:数学関数は使わない。
26デフォルトの名無しさん:2006/05/19(金) 22:57:22
前スレで見た気がする
27 ◆2LLfCgVf7Y :2006/05/19(金) 23:06:03
[1] 授業単元: 計算機プログラミング
[2] 問題文(含コード&リンク): 再帰的関数定義とsin(x)のマクローリン展開の初めの10項を用いてsin(x)の近似値を出力するプログラムを作成せよ。
この際、xの値をキーボード入力すると、sin(x)の値の近似値を

sin_10=*******

の形式で表示させるようにせよ。
[3] 環境
 [3.1] OS: (Windows/Linux/等々) winxp
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) LSI-C86試食
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) c
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 2006.5.26
再帰的関数定義でやらないといけないみたいです、、よろしくお願いします(;´д`)
28デフォルトの名無しさん:2006/05/19(金) 23:15:01
2928:2006/05/19(金) 23:16:36
ああ、ごめん再帰じゃなかった
30デフォルトの名無しさん:2006/05/20(土) 00:06:19
[1] 授業単元: C言語初級
[2] 問題文(含コード&リンク): 3より大きく,入力された上限の数未満の全ての自然数かつ非素数につい
て,3で割り切れるものは無視し,3で割った余りが1のものは加算し,余り
が2のものは減算して合計を求めよ
[3] 環境
 Linux 、gcc 3.4
 [3.3] 言語: C
[4] 期限: ([2006年5月24日24:00まで]
[5] 繰り返し(while,for),条件分岐(if,else,switch),四則演算、論理演算、標準入出力(printf,scanf)等
  配列、平方根は使用不可。

以上です。よろしくお願いします(m−m)
31デフォルトの名無しさん:2006/05/20(土) 01:14:47
>>30
#include <stdio.h>
int is_prime( int n )
{
int i;
if ( n == 0 || n == 1 ) return 0;
for ( i = 2; i < n/2+1; ++i )
if ( n%i == 0 )return 0;
return 1;
}
static int solve( int max )
{
int i, sum = 0;
for ( i = 4; i <= max; ++i ) {
if ( is_prime(i) ) continue;
if ( i%3 == 0 )continue;
else if ( i%3 == 1 )sum += i;
else /* i%3 == 2 */sum -= i;
}
return sum;
}
int main( void )
{
int max;
printf( "INPUT MAX > " );
scanf( "%i", &max );
printf( "result: %d\n", solve(max) );
return 0;
}
32デフォルトの名無しさん:2006/05/20(土) 04:55:50
キーボードからいくつもの「文字」を入力した時、 各文字が何回入力されたかを
結果として返すプログラムを、 入力データの記憶にリスト構造を利用して作れ。
なお、入力は1文字ずつ return で区切って入力し、その終了は '.' (ピリオド)
で示すものとする。
このプログラムにおいて、内部的に記憶しておく必要があるデータは、
* 入力された「文字」
* その文字が「入力された回数」
の2つである。
わかりません。お願いします。
33デフォルトの名無しさん:2006/05/20(土) 06:06:16
>>32
わざわざリスト構造を使う意味が理解できないけど書いてみた。
int count[1<<CHAR_BIT];て書いたほうが絶対楽。
あと、>>1

#include<iostream>
#include<list>
#include<utility>
#include<algorithm>
void output(const std::pair<char,int>&p){
    std::cout << "入力文字'"<< p.first << "' 入力回数 "<< p.second << std::endl;
}
int main(){
    typedef std::list<std::pair<char,int> >list_t;
    list_t count;
    for(char c;std::cin.get(c) && c != '.';){
        if(c == '\n')continue;
        list_t::iterator it = count.begin(),end=count.end();
        for(;it != end;++it)
            if(it->first == c)break;
        if(it == end){
            count.push_back(std::make_pair(c,0));
            it = count.end();
            --it;
        }
        ++it->second;
    }
    std::for_each(count.begin(),count.end(),output);
}
34 :2006/05/20(土) 07:54:39
[1] C言語演習(ほとんどC++)
[2] スレッドに関する課題
[3] 環境
 [3.1] OS: Linux  [3.2] gcc 3.4 [3.3] C++
[4] 期限: 2006年5月22日
[5] 特になし
学校の課題なんですがC++ で自作のスレッドクラスを作成し、
このスレッドクラスを継承した機能クラスを作成。
メイン側で機能クラスのインスタンスを作成し、Runすると別スレッドでインスタンス(?)が動作する
プログラムというのは作ることができるのでしょうか?ご指導よろしくおねがいしますm(_ _)m

// 自作スレッドクラス
class Thread {
:public
  run(){
    //スレッド作成
  }
};
// スレッドで動かしたいクラス
class FUNC : public Thread {
:public
  //スレッドで動かしたい処理
  threadFunc(){}       //実際にスレッドで動く処理

};
int main() {
  FUNC instans;
  instans.run();        //スレッド作成、機能実行

}

35デフォルトの名無しさん:2006/05/20(土) 12:17:31
>>34
思うに微妙なスレ違い
C/C++環境依存スレいった方がいいんじゃね?
36デフォルトの名無しさん:2006/05/20(土) 13:16:25
>>35
まあ待て、環境依存な宿題も別に禁止にはなってない。
分かる人が答えればいいだけの話。
37デフォルトの名無しさん:2006/05/20(土) 14:15:56
>>36
いやそういう意味じゃなくて、ここよりも環境依存スレの方がいい回答得られるんじゃないかな?と思っただけ
38デフォルトの名無しさん:2006/05/20(土) 14:28:39
多少のスレ違いは質問者の自由と思われ
39デフォルトの名無しさん:2006/05/20(土) 14:34:49
その環境依存スレとやらで宿題はスレ違いと言われる予感
40デフォルトの名無しさん:2006/05/20(土) 14:41:46
単に自作のスレッドクラスを継承したクラスのインスタンスをRunした際に
それを別スレッドで走らせられるのか?って質問だから
宿題とはちょっと違うと思うが
41デフォルトの名無しさん:2006/05/20(土) 14:55:42
リンク先を変えました、ろだで64代目のところに張りました。
ご迷惑おかけしました。
[1] 授業単元: C言語演習
[2] 問題文(含コード&リンク): お絵かきツールの作成
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1920.txt
アップローダーにテキストを張りました。ここまではなんとかできたのですが。
課題の内容:Xウィンドウシステムで簡単なお絵かきツールを作成する。
具体的な用件:マウスのドラッグにより、フリー曲線を描き、メニューの「end」をマウス
でクリックするか、キーボードから「e」を入力すると終了する。
また、デフォルト(メニューをクリックするまで)は何も描けないようにする。

<1>メニューを複数用意し、マウスのクリックにより、機能を使い分けられるようにする。
<2>各機能は、以下のもの
フリー曲線:画面上にマウスのドラッグで曲線を書く。
文字の描画:画面のマウスでクリックした位置に文字を表示する。
直線の描画:画面上の2点をクリックしたら、その2点を結ぶ直線を表示する。

[3] 環境
 [3.1] OS: Windows (cygwin)
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2006年5月22日00:00

よろしくお願いいたします。
42billy:2006/05/20(土) 15:07:03
問題文(含コード&リンク): 第1引数のファイルに含まれる文字列をカンマを区切りとして
単語に分けた上で、第2引数と第3引数のフィールドを入れ替えて出力するプログラムを作成する。
ただし、入れ替えるように指定されたフィールドの一方もしくは両方が存在しなかった場合は
入れ替えを行わないようにする。
実行例:
%cat source
This,is,source.
file,end.
%gcc -o fieldswap kadai.c
%./fieldswap source 2 3
-- Line 1 --
Field 1: This
Field 2: source.
Field 3: is
-- Line 2 --
Field 1: file
Field 2: end.
環境
OS:Linux
コンパイラ名とバージョン:gcc
言語:C
期限: 5/25
43デフォルトの名無しさん:2006/05/20(土) 15:29:53
>>34
デザインパターンのテンプレートメソッドを見ると幸せになれるかも。
44デフォルトの名無しさん:2006/05/20(土) 17:04:40
>>27
#include <stdio.h>
#include <stdlib.h>
double f(int n, int i, double x)
{
if (n<=1) return 1; else return 1 - x * x / i / (i+1) * f(n-1, i+2, x);
}
double sin_n(int n, double x)
{
return f(n, 2, x) * x;
}
int main()
{
char buf[100];
while (fgets(buf, sizeof(buf), stdin)) {
double x = atof(buf);
printf("sin_10=%f\n", sin_n(10, x));
}
return 0;
}
45デフォルトの名無しさん:2006/05/20(土) 17:16:37
>>34
こんな感じ
class Thread {
public:
static int run(){
//共通の開始前の処理
int ret = threadFunc();
//共通の終了処理
return ret;
}

protected:
virtual int threadFunc() = 0;
};

中断フラグとか、動作中フラグとかはThreadクラスに含めておくと良い。
46デフォルトの名無しさん:2006/05/20(土) 17:17:45
ファイルスコープを超えてstaticな変数を扱う方法を教えてください。
47デフォルトの名無しさん:2006/05/20(土) 17:26:04
>>46
それができないのがstatic。
ついでにスレ違い。
48デフォルトの名無しさん:2006/05/20(土) 17:52:08
>>46
staticの意味が無い。諦めてextern汁。
ついでにスレ違い。
49デフォルトの名無しさん:2006/05/20(土) 18:18:32
内容:
[1] 授業単元:C言語実習
[2] 問題文:X,Y座標上の2点(X1,Y2)と(X2、Y1)を与えると、その2点間の距離を求めるプログラムを作成せよ。
          ただし、距離を求める関数を用い、キーボードから与える座標値は、実数値とすること。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン: bcc
 [3.3] 言語: C
[4] 期限: 2006年5月21日まで。

50デフォルトの名無しさん:2006/05/20(土) 18:46:54
>>49
距離を求める関数を用いってのはどういうことだ?
そういう関数を作れってことなのか、それともC99で
math.hに追加されたhypot()を使えということなのか?
51デフォルトの名無しさん:2006/05/20(土) 19:10:09
>(X1,Y2)と(X2、Y1)
斬新な表現だな。普通は(X1,Y1),(X2,Y2)なんだが。
52>>49:2006/05/20(土) 19:26:57
#include<stdio.h>
#include<math.h>

double getDist( double x1, double y1, double x2, double y2 ){
  return sqrt( (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) );
}

int main(int argc, char* argv[]){
  double x1,x2,y1,y2;
  scanf("%lf",&x1);
  scanf("%lf",&x2);
  scanf("%lf",&y1);
  scanf("%lf",&y2);
  
  printf("%lf",getDist( x1, x2, y1, y2) );
  
  
  return 0;
}
53デフォルトの名無しさん:2006/05/20(土) 19:29:46
[1] 授業単元:
[2] 問題文(含コード&リンク): http://briefcase.yahoo.co.jp/ningenxp/
スプライトが表示されません。
どこを修正すればいいか書いてください
directx05.zip パスワード:cpp
[3] 環境
 [3.1] OS: XP
 [3.2] VC++2005EE
 [3.3] C++
[4] 期限: 5/21 17:00
[5] その他の制限: とくになし
5453:2006/05/20(土) 19:31:06
スプライトの描画時に、D3DERR_INVAINDCALLが・・
ID3DXSprite9::Draw
55デフォルトの名無しさん:2006/05/20(土) 21:30:29
>>53
// Begin the scene
if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
{
//Rendering of scene objects can happen here
if( g_pVB ) { // g_pVB が作成されるのは初回のRender呼び出し後の為
g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );
g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 );
}

g_pSprite->Begin(D3DXSPRITE_ALPHABLEND);
g_pSprite->Draw(g_pTexture, NULL, NULL, NULL,0xFFFFFFFF);
g_pSprite->End();

// End the scene
g_pd3dDevice->EndScene();
}

他にもリソースリーク有りますよ。
・Cleanup に RELEASE( g_pVB ); が抜けてる
・InitD3D で D3DXCreateSprite を2回呼び出してる
56デフォルトの名無しさん:2006/05/21(日) 01:37:42
誤爆防止あげ
57デフォルトの名無しさん:2006/05/21(日) 01:38:09
ここはDirectXの宿題も片付けてくれるんですか。すごいですね。わん
58デフォルトの名無しさん:2006/05/21(日) 02:50:34
[1] 授業単元: プログラム演習
[2] 問題文: 質量m [kg]の物体が,時間t = 0 [s]で初期速度v0 [m/s]の状態から加速度a [m/s2]で直線運動するとき,
t [s]後の物体の速度v [m/s],移動距離x [m]および運動エネルギー[J]を求めるプログラムを作りなさい.
ただし,速度,移動距離および運動エネルギーは,それぞれget_vel(),get_dis(), get_e()なる関数を各自定義し,
それらにより計算させること.また,変数m,v0,aをローカル変数で宣言した場合とグローバル変数で宣言した場合の2通りで作成すること.
[3] 環境
 [3.1] OS: linux
 [3.2] コンパイラ:gcc
 [3.3] 言語: C
[4] 期限: 5月24日
[5] その他の制限:特にございません、職人様よろしくおねがいします
59デフォルトの名無しさん:2006/05/21(日) 03:41:04
C++の講義でこんな課題でました。

private:とpublic:をアクセス指定子に用いたクラスを設
計しプログラムを作成すること。

出来るだけ、自分の身の回りの実世界を反映させたものである
こと。

って漠然とし過ぎで何をすればいいやら。
何かアイディアないっすか?
60デフォルトの名無しさん:2006/05/21(日) 03:48:58
>>59
アドレス帳。
データをプライベート
データをいじくる関数をパブリック
61デフォルトの名無しさん:2006/05/21(日) 04:11:04
>>60
なるほど。
参考にします。
62デフォルトの名無しさん:2006/05/21(日) 04:58:08
宿題では無いのですが、おそらく宿題レベルの質問なのでここに書きます。

[3] 環境
 [3.1] OS: linux
 [3.2] コンパイラ名とバージョン: gcc(version不明です)
 [3.3] 言語: C

1,2,3,4,5 の5つの数字から3つを選び、全ての並びを出力する。というものです。
並び替えのアルゴリズムがさっぱり思いつきません。
1 2 3
1 3 2
2 1 3
・・・
3 1 2
3 2 1
1 2 4
1 4 2
・・・
と、5P3 = 5*4*3 = 60通り出力されるものです。
よろしくお願いします。

出来れば配列は使わず、
int a, b, c;
・・・
printf("%d %d %d\n", a, b, c);
の形式でお願いします。
63デフォルトの名無しさん:2006/05/21(日) 05:10:55
こんな感じ?

#include<stdio.h>

int main(void){
int a,b,c;
for(a=1;a<=3;++a){
for(b=a+1;b<=4;++b){
for(c=b+1;c<=5;++c){
printf("%d %d %d\n", a, b, c);
printf("%d %d %d\n", a, c, b);
printf("%d %d %d\n", b, a, c);
printf("%d %d %d\n", b, c, a);
printf("%d %d %d\n", c, a, b);
printf("%d %d %d\n", c, b, a);
}
}
}
return 0;
}
6463:2006/05/21(日) 07:10:37
>>64
ありがとうございます。
これを元にして、あとは3変数の順列を考えてみます。
6562:2006/05/21(日) 07:11:09
数字がずれていました。orz
66デフォルトの名無しさん:2006/05/21(日) 07:17:20
>>58
//ローカル変数
#include <stdio.h>

//速度
float get_vel(float v0, float a, float t)
{
    return v0+a*t;
}

//移動距離
float get_dis(float v0, float t, float a)
{
    return v0*t+a*t*t/2.0f;
}

//運動エネルギー
float get_e(float m, float v)
{
    return m*v*v/2.0f;
}
67デフォルトの名無しさん:2006/05/21(日) 07:17:51
>>66
int main()
{
    float m=10.0f; //質量
    float v0=3.0f; //初期速度
    float a=7.0f; //加速度
    float t=25.0f; //経過時間

    float v; //物体の速度
    float x; //移動距離
    float j; //運動エネルギー

    v=get_vel(v0, a, t);
    x=get_dis(v0, t, a);
    j=get_e(m, v);
    printf("%f\n%f\n%f\n", v, x, j);
    return 0;
}
68デフォルトの名無しさん:2006/05/21(日) 07:20:57
>>58
//グローバル変数
#include <stdio.h>

float m=10.0f; //質量
float v0=3.0f; //初期速度
float a=7.0f; //加速度
float t=25.0f; //経過時間

float v; //物体の速度
float x; //移動距離
float j; //運動エネルギー

//速度
float get_vel()
{
    return v0+a*t;
}

//移動距離
float get_dis()
{
    return v0*t+a*t*t/2.0f;
}

//運動エネルギー
float get_e()
{
    return m*v*v/2.0f;
}
69デフォルトの名無しさん:2006/05/21(日) 07:21:27
>>68
int main()
{
    v=get_vel();
    x=get_dis();
    j=get_e();
    printf("%f\n%f\n%f\n", v, x, j);
    return 0;
}
70デフォルトの名無しさん:2006/05/21(日) 08:58:51
directxの宿題なんてあるのかなーとオモタ
71billy:2006/05/21(日) 09:55:34
問題文(含コード&リンク): 第1引数のファイルに含まれる文字列をカンマを区切りとして
単語に分けた上で、第2引数と第3引数のフィールドを入れ替えて出力するプログラムを作成する。
ただし、入れ替えるように指定されたフィールドの一方もしくは両方が存在しなかった場合は
入れ替えを行わないようにする。
実行例:
%cat source
This,is,source.
file,end.
%gcc -o fieldswap kadai.c
%./fieldswap source 2 3
-- Line 1 --
Field 1: This
Field 2: source.
Field 3: is
-- Line 2 --
Field 1: file
Field 2: end.
環境
OS:Linux
コンパイラ名とバージョン:gcc
言語:C
期限: 5/25
72デフォルトの名無しさん:2006/05/21(日) 10:16:59
>>71
いい加減うざい。死ね
73>>22:2006/05/21(日) 11:43:09
>>22
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1921.txt
1ラインあたりの最大文字数は BUFFER_SIZE-1 な。
74>>42:2006/05/21(日) 11:46:31
>>71
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1921.txt
1ラインあたりの最大文字数は BUFFER_SIZE-1 な。
75デフォルトの名無しさん:2006/05/21(日) 12:04:29
プログラムではないんですが、教えてもらえないでしょうか?


(1) 次の仕様の磁気ディスクにおいて、必要とされるシリンダ数を求め
よ。ここでブロック間隔(IBG: Inter Block Gap)はブロックとブロッ
クの間に存在し、ブロックの情報を記録する領域である。またブロッ
ク化因数とは一つのブロックを構成するレコードの数である。

1シリンダ当たりのトラック数 19 トラック
1トラック当たりのバイト数 19,000 バイト
1レコードのバイト数 250 バイト
ブロック間隔 150 バイト
レコード件数 50,000 件
ブロック化因数 6

(2) 次の仕様の磁気ディスクの1ブロックアクセス時間を求めよ。ここで
rpm(revolution per second)は一分当たりの回転数である。

平均位置決め時間 20 ミリ秒
1トラック当たりのバイト数 20,000 バイト
ディスク回転速度 6,000 rpm
1レコードのバイト数 250 バイト
ブロック間隔 150 バイト
ブロック化因数 6
76デフォルトの名無しさん:2006/05/21(日) 12:42:09
>>75
スレ違い。いや、鼬害か。
77デフォルトの名無しさん:2006/05/21(日) 12:46:10
>>75
基本情報技術者スレ行けば教えてもらえるかも
78デフォルトの名無しさん:2006/05/21(日) 12:57:58
[1]情報処理
[2]
double型の2数a,bを入力してaをbで割った商の
小数点以下だけを表示させるプログラムを作りなさい。
ただし、while構文を使ってa,bを入力させ続けるものとします。
[3]C [4]5/22 [5]制限はありません。

全く手のつけようがありません。
よろしくお願いいたします。

79デフォルトの名無しさん:2006/05/21(日) 13:19:45
>>78
#include <stdio.h>
#include <math.h>
int main()
{
int a,b;
double c;
while(1) {
printf("a>");
scanf("%d", &a);
printf("b>");
scanf("%d",&b);
printf("%f\n", modf((double)a/b,&c));
}
return 0;
}
80>>78:2006/05/21(日) 13:21:13
#include <stdio.h>
#include <string.h>

int main(int argc, char* argv[])
{
  while(1){
    char buff[256];
    double a;
    double b;
    
    scanf("%lf",&a);
    scanf("%lf",&b);
    sprintf(buff,"%lf",a/b);
    printf("%s\n",strchr(buff,'.'));
  }
  return 0;
}
8178:2006/05/21(日) 13:29:24
本当にありがとうございました。おかげで助かりました。
後は独力で仕組みを理解するようにがんばります。
また分からなくなったらお願いします。
82デフォルトの名無しさん:2006/05/21(日) 13:49:06
>>81
この時期のこの程度の問題に、こんな答えを提出したら教師に目をつけられるだろうな
これからも頑張れよ
83デフォルトの名無しさん:2006/05/21(日) 14:13:13
[1]C言語演習
[2]標準入力から「id, 名前, 年月日, 住所」のようなコンマ区切り形式(CSV形式)の名簿データ
を受け付けて項目を切り出してメモリ中に格納せよ。
また、% で始まる入力行をコマンド入力として解釈し、格納されたデータ表示や整列せよ。
実装すべきコマンドを以下に示す。
 %Q: 終了
 %C: 登録内容のチェック
 %P n: 先頭から n 件表示(n=0: 全件, nが負: 後ろからn件)

入力する名簿データのCSV入力形式は以下の通りである。
 5100001,Bower Primary School,1999-2-5,Canisbay Wick,019073 2397
 5102673,The Bridge,1845-11-2,Bowermadden Bower Caithness,01955 69322
 5126377,Canisbay Primary School,1938-8-3,Castletown Thurso,01847 2812 2821
 5177777,Castletown Primary School,2006-5-10,Seafield Road Longman Inverness,SEN Unit
各行における項目には以下の意味がある。
 ID:32bit整数 学校名:70bytes 設立年月日:struct date 所在地:70bytes 備考データ:任意長
上記を格納するためのデータ構造としては構造体struct profile を定義して、1行を1つの構造体に変換して
格納することが自然である。上記のn bytesはnバイトのchar配列に格納可能であることを意味する。
設立年月日はstruct dateを定義して用いればよい。
また、入力行中の','は、項目切りの意味でしか出現しないものとし、項目値としては考慮せずともよい。
8483:2006/05/21(日) 14:13:56
各コマンドはCSVデータと同様に標準入力から与えられ、行頭は%から始まる。
各コマンドは0個以上の引数を持ちコマンド名と引数の間にはただ1つの空白が存在する。

 %Q: プログラムの終了
 %C: メモリ中に保持しているデータの項目数など、要約した情報を出力に出力する。最低限項目数を出力する。
  出力例: 285 profiles
 %P: メモリ中に保持しているデータを読み易い形式に変換して標準出力する。
   引数nは先頭からn個のデータを出力することを意味している。ただし、nが0の場合は、保持している全項目、
   負の数の場合は登録されている項目の後ろからn個の項目を正順で出力する。
   例えば0〜99番目までの100人分のデータが登録されている場合、
    %P 8: 0番目→7番目の順で表示
    %P -10: 90番目→99番目の順で表示
   のようになる。出力形式の例を以下に示す。
    出力例: Id: 5100001
    Name: Bower Primary School
    Date: 1999/2/5
    Addr: Canisbay Wick
    Misc: 019073 2397

    Id: 5102673
    Name: The Bridge
    Date: 1845/11/2
    Addr: Bowermadden Bower Caithness
    Misc: 01955 69322
85デフォルトの名無しさん:2006/05/21(日) 14:30:27
>>83
CSVをstdinから受け付けてコマンドもstdinからってなんかおかしくないか?
データとコマンドを同一ファイルに入れてバッチ処理もどきってなら分からないでも無いが
普通は、引数としてデータファイル名を受け取って、コマンドはstdinからだろ
8683:2006/05/21(日) 14:40:11
完成したプログラムは以下の性能・機能に関する要件を満たすこと。
 1.CSVデータは、配列などを使って1000件以上登録できるようにすること。
 2.CSVデータの保存には、構造体struct profile及びstruct dateを定義してそれを用いること。
 3.通常、画面出力には、標準出力と標準エラーによって行われる。それらを区別して、
   本来のコマンドの実行結果出力には不必要なエラーや警告は標準エラー出力に出力すること。
上記用件の中には、演習で作成するプログラムであるがゆえの要件も含んでいる。また前節までに述べた
プログラムの仕様には概要であり、要求される最低限の仕様であるので詳細について言及されていない。
例えば、登録するデータが規定の数を超えた場合の動作や、データとして不正な値を入力した時の
動作などについては規定されてない。それらの場合における動作の詳細は、各人で作成して実装せよ。
[3]環境
[3.1]unix
[3.2]gcc 3.4
[3.3]C
[4]2006年5月23日
[5]特になし

以上です。よろしくお願いします。
87デフォルトの名無しさん:2006/05/21(日) 16:10:31
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
テキストファイル(英文)を入力してさまざまな処理を行う。
1、ひとつの英単語が2行に渡らないように出力する。
2、禁則処理…「.」「,」「?」「…」などを行頭に置かない。「(」などを行末に置かない。
[3] 環境
 [3.1] unix
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] c
[4] 期限:5/22

88デフォルトの名無しさん:2006/05/21(日) 16:13:51
すいません、私も教えていただきたいことがあります。

CRCの計算プログラムが以下のようにして与えられているのですが
意味が全く分かりません。
なぜこれでCRC値が求められるのでしょうか、どなたかご説明お願い致します<(_ _)>

===================================================
#define CRCPOLY2 0xEDB88320UL /* 左右逆転 */
typedef unsigned char byte;

unsigned long crc(int n, byte c[])
{
unsigned int i, j;
unsigned long r;

r = 0xFFFFFFFFUL;
for (i = 0; i < n; i++) {
r ^= c[i];
for (j = 0; j < CHAR_BIT; j++)
if (r & 1) r = (r >> 1) ^ CRCPOLY2;
else r >>= 1;
}
return r ^ 0xFFFFFFFFUL;
}
===================================================
89デフォルトの名無しさん:2006/05/21(日) 16:34:54
>87
テキストファイルが「.」「,」「?」で始まる場合、「(」で終わる場合はないと判断。

#include<stdio.h>

int main(void){
int c;
while((c = getchar()) != EOF) if(c != '\n') putchar(c);
return 0;
}
9041:2006/05/21(日) 16:56:44
>>41です。
すみません、どなたかご教授下さい。
あまり面白くないプログラムでしょうか?
91デフォルトの名無しさん:2006/05/21(日) 17:15:59
>>88
そういうものだから。としか言い様がない
お前さんの質問は、なんでMP3ファイルには音が保存できるんですか?ってのと同列
そういう仕様だからとしか答えようがないだろ
9288です:2006/05/21(日) 19:32:19
>>91さん
ご回答ありがとうございます!

仕様なんですか・・・。
ソースはネットで探して見つけたものだったんですが、
中身も理解して無いと提出は出来ないと思って教えていただこうと思ったのですが・・・。
93デフォルトの名無しさん:2006/05/21(日) 19:41:22
>>92
宿題なら、教科書に載っているだろ。
もしWebで探せって宿題なら中身は関係ないだろうし。
そもそも、ここは宿題の解説をするスレじゃないんだからスレ違いだ。
94デフォルトの名無しさん:2006/05/21(日) 19:49:55
>>41
文字の表示ってのはペイントで言うところのテキストみたいなの?
それとも、あらかじめ決めておいた文字列を表示するの?
95デフォルトの名無しさん:2006/05/21(日) 20:01:42
>>92
スレ違いだがついでだから言っておく
お前さんは、木という漢字を書けという問題に
なんで木は木という漢字になったのかまで理解するのか?
96デフォルトの名無しさん:2006/05/21(日) 20:03:15
うは、CygwinでXLib直接叩くのかよ。Cの演習ごときでそんなくその役にもたたねぇ課題出す阿呆の面を見てみたいな。
97デフォルトの名無しさん:2006/05/21(日) 20:04:06
>>95
まるで木を鼻で括ったような回答だな。
98デフォルトの名無しさん:2006/05/21(日) 20:11:19
よくわからんが、すごくシュールな回答だということは分かった。
9987:2006/05/21(日) 21:08:04
>>89
え?
10041:2006/05/21(日) 21:23:39
>>94
レスありがとうございます。
そうです、ペイントと全く同じ機能です。
101デフォルトの名無しさん:2006/05/21(日) 22:16:26
void HitButton(XButtonEvent *event){
if(event->x < Menu_width && event->y < Menu_height){ XCloseDisplay(display); exit(1); }
if(event->x < Menu_width && event->y < Menu_height * 2){ mode = 1; }
else if(event->x < Menu_width && event->y < Menu_height * 3){ mode = 2; }
else if(event->x < Menu_width && event->y < Menu_height * 4){ mode = 3; m3f = 0; }
if(event->window == window){ pX = event->x; pY = event->y; }
if(mode == 3){ if(m3f == 0){ m3f = 1; x0 = event->x; y0 = event->y; }
else{ m3f = 0; XDrawLine(display, window, context, x0, y0, event->x, event->y); } } }

void HitKey(XKeyEvent *event){
char ch;
KeySym keysym;
if(mode == 2){ XLookupString(event, &ch, 1, &keysym, NULL);
XDrawString(display, window, context, event->x, event->y, &ch, 1);
mode = 0; }
else{ XLookupString(event, &ch, 1, &keysym, NULL); if(ch == 'e'){ XCloseDisplay(display); exit(1); } } }

>>41
要求されてるものと多少違うかも試練が…
102デフォルトの名無しさん:2006/05/21(日) 22:22:23
すげー。
Xプログラマカコ(・∀・)イイ!!
103デフォルトの名無しさん:2006/05/21(日) 22:26:46
>>101
よく分からんが乙
X Window SystemでのGUIプログラミングってW32APIと似たような物なのか?
104billy:2006/05/21(日) 22:30:49
>>74
表示するのは
-- Line 1 --
Field 1: This
Field 2: source.
Field 3: is
-- Line 2 --
Field 1: file
Field 2: end.
だけでいいんだけどな
105デフォルトの名無しさん:2006/05/21(日) 22:38:07
>>103
そうそうそんなかんじ
たまたま去年似たような課題やったからサルベージしただけだけどなー
106C初心者:2006/05/21(日) 23:06:44
秒単位で表現された時間を読み込み、時間、分、秒の単位に変換し、結果を出力するプログラムを作りなさ
い。(例: 3661 秒! 1 時間1 分1 秒)

os winxp
コンパイラ gcc
言語 c

期限 5月22日朝まで
107デフォルトの名無しさん:2006/05/21(日) 23:14:12
めんどくさい課題だなぁ
GTK使うならまだしも
108デフォルトの名無しさん:2006/05/21(日) 23:14:19
偉そうな奴だな
109デフォルトの名無しさん:2006/05/21(日) 23:15:59
すみませんでした。反省します。
110デフォルトの名無しさん:2006/05/21(日) 23:18:16
[1] 授業単元: プログラミングV
[2] 問題文(含コード&リンク): 実数がどのように保存されているかを表示する。
[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: C++
[4] 期限: 5/22 17:00
[5] ビットシフト、int のポインタ、論理演算
よろしくお願いします
111デフォルトの名無しさん:2006/05/21(日) 23:23:36
>>106
#include <stdio.h>
int input, hour, min, sec;
scanf("%d", &input);
hour = input / 3600;
min = input % 3600 / 60;
sec = input % 3600 % 60;
printf("%d時間%d分%d秒\n", hour, min, sec);
return 0;
}
112デフォルトの名無しさん:2006/05/21(日) 23:24:39
あ、mainがなかたw
11341:2006/05/21(日) 23:25:01
>>101
ありがとうございます。
ですが、
C:13: warning: built-in-function 'y0' declared as non-function
C:93: error: parse error before "EventLoop"
というエラーが出てしまいます。
ろだに教えていただいた内容を入れて、少し編集したファイルをアップしたので
ちょっと見てみてください
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1922.txt

よろしくお願いいたします。
11483ですが:2006/05/21(日) 23:41:56
http://briefcase.yahoo.co.jp/bc/high_power1000w/lst?&.dir=/&.src=bc&.view=l
自分で未完成な物を作成しましたが、どこをどう訂正すれば良いでしょうか?
どなたかアドバイスをお願いします。
115デフォルトの名無しさん:2006/05/21(日) 23:53:48
>113
そのエラーは>101のせいじゃ無いと思うぞ。
116デフォルトの名無しさん:2006/05/21(日) 23:56:13
>41
ちょっとまて、俺にデバッグやらせるつもりかwww
117デフォルトの名無しさん:2006/05/22(月) 00:02:44
>>110
#include <stdio.h>
main()
{
float f;
int i;
scanf("%f", &f);
for ( i = 31; i >= 0; --i ) printf("%d", *(int *)&f & 1 << i ? 1 : 0);
}
118デフォルトの名無しさん:2006/05/22(月) 00:12:22
>114
ざっと見たけどほとんどできてんじゃん。
後command_checkとcommand_print作ったら終わりだろ。ガンガレ。
しいて言うなら、printfのかわりにfputs使うぐらいか。
11941:2006/05/22(月) 00:14:45
>>115
いや、自分が理解できてないから悪いんですけど
101さんのせいとは思ってないです
ただどうすればよいのかなと思って

>>116
デバッグ、、、確かに今気づいたらそうですねw
申し訳ないです
すみません、もうちょっと自分で考えてみます
120デフォルトの名無しさん:2006/05/22(月) 00:16:27
>>114
>自分で未完成な物を作成しましたが、どこをどう訂正すれば良いでしょうか?
くだらねー嘘つくな
121デフォルトの名無しさん:2006/05/22(月) 00:16:32
>>41
たぶんだけどね、
EventLoopのところをよーく見ると分かると思うよ
122デフォルトの名無しさん:2006/05/22(月) 00:24:15
>>117
ありがとうございました〜。
123デフォルトの名無しさん:2006/05/22(月) 00:27:18
>120
確かにあそこまで出来て残りが出来ないはずは無いな。
124billy:2006/05/22(月) 00:42:48
>>74
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1921.txt
表示するのは
-- Line 1 --
Field 1: This
Field 2: source.
Field 3: is
-- Line 2 --
Field 1: file
Field 2: end.
だけでいいんだけど
どうすればいいのかな
125デフォルトの名無しさん:2006/05/22(月) 00:47:00
[1] 授業単元: C言語による数値解析

[2] 問題文
ガウスの消去法によって次の連立一次方程式を解け。
( 1,0 2,0 3,0 ) ( 1,1 )
( 2,0 4,0 5,0 ) x = ( 2,2 )
( 3,0 5,0 6,0 ) ( 3,3 )

[3] 環境
 [3.1] OS: Linuxです。
 [3.2] コンパイラ名とバージョン: gccです。バージョンまでは分かりません。
 [3.3] 言語:C言語

[4] 期限: 23日までです。

[5] その他の制限:CとC++を習いました。
ヒントが与えられたので下に書きます。
126デフォルトの名無しさん:2006/05/22(月) 00:50:18
礼も言われない>74(´・ω・`)カワイソス
127125:2006/05/22(月) 00:50:28
#include<stdio.h>

main()
{
int N,IERR;
double *a,*b,*x;

/***ステップ1 データの入力***/

printf("ガウスの消去法によるAx=b(A:n*n x,b:n*1)の計算\n""n=");

scan("%d,&N");
a=(double *)calloc(N*N,sizeof(double));
b=(double *)calloc(N,sizeof(double));
x=(double *)calloc(N,sizeof(double));
if(a==NULL||b==NULL||x==NULL)puts("メモリ不足"),exit(1);
S_INMG(a,N,N,"a");
S_INMG(b,N,1,"b");
128125:2006/05/22(月) 00:51:02
/***ステップ2 n元一次連立方程式の計算***/

IERR=S_GAUS(x,a,b,N);

/***ステップ3 計算結果の表示***/

if(IERR)
printf("不足または不能\n");
else
S_OUTM(x,N,1,"解 x");
}

/*<ガウスの消去法の関数>*/
int S_GAUS(double x[],double a[],double b[],intN)

{
int i,j,k;
double p;
129125:2006/05/22(月) 00:51:41
/*** ステップ1前進消去***/
for(k=0;k<N-1;k++){
if(S_PIVO(a,&j,N,k)!=0)return 1;
if(j!=k){
p=b[j];
b[j]=b[k];
b[k]=p;
}
for(i=k+1;i<N;i++){
p=a[i*N+k]/a[k*N+k];
for(j=k+1;j<N;j++) a[i*N+j]=a[i*N+j]-p*a[k*N+j];
}
}

/***ステップ2 後退代入***/

for(k=N-1;k>=0;k--){
if(fabs(a[k*N+k])<=e_eps)return 1;
p=0.0;
for(j=k+1;j<N;j++)p+=a[k*N+j]*x[j];
x[k]=(b[k]-p)/a[k*N+k];
}
return 0;
}
130125:2006/05/22(月) 00:52:13
/*<ピボットの選択(行の交換)の関数>*/

int S_PIVO(double *a,int *M,int N,int k)

{
int i,j;
double d,tmp;

/***ステップ1 初期設定***/

*M = k;
d=fabs(a[k*N+k]);

/***ステップ2 ピボットの検索***/

for(i=k+1;i<N;i++){
if(fabs(a[N*i+k])>d){
*M = i;
d=fabs(a[N*i+k]);
}
}

/***異常処理***/
if(fabs(d)<=e_eps)return 1;
if(*M==k)return 0;
131125:2006/05/22(月) 00:53:49
/*** ステップ4 ピボットの交換 ***/
for(i=k;i<N;i++){
tmp=a[k*N+i];
a[N*k+i]=a[N*(*M)+i];
a[N*(*M)+i]=tmp;
}
return 0;
}

/*<行列のキー入力関数>*/
void S_INMG(double a[],int N,int M,char NAME[])


{
int i,j;
for(i=0;i<N;i++){
for(j=0;j<M;j++){
printf("\x1b[%dC%s%d%d=]",j*12,NAME,i+1,j+1);
scanf("%1f",&a[i*M+j]);
printf("\x1bM");
}
printf("\n");
}
}

132デフォルトの名無しさん:2006/05/22(月) 00:54:52
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
133125:2006/05/22(月) 00:58:53
>>132
125です。わざわざありがとうございます。
そしてスレ汚し申し訳ありませんでした。
やりなおしてきます。
134デフォルトの名無しさん:2006/05/22(月) 01:00:11
[1] 授業単元: C言語による数値解析

[2] 問題文
ガウスの消去法によって次の連立一次方程式を解け。
( 1,0 2,0 3,0 ) ( 1,1 )
( 2,0 4,0 5,0 ) x = ( 2,2 )
( 3,0 5,0 6,0 ) ( 3,3 )

行列式です。分かり難くて申し訳ありません。

[3] 環境
 [3.1] OS: Linuxです。
 [3.2] コンパイラ名とバージョン: gccです。バージョンまでは分かりません。
 [3.3] 言語:C言語

[4] 期限: 23日までです。

[5] その他の制限:CとC++を習いました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1923.txt
がヒントのプログラムです。

宜しくお願いします。
135134:2006/05/22(月) 01:09:34
>>134に補足で
プログラム実行時に行列のデータ入力を行ない、計算できる様にプログラムせよ。
とありました。
136デフォルトの名無しさん:2006/05/22(月) 01:36:11
>>134
ヒントをちょっと書き換えるだけで計算できるんだけど…
137デフォルトの名無しさん:2006/05/22(月) 01:54:56
ホントだ。
scanf("%1f"とかを修正したら動く。どういう事だ?
138デフォルトの名無しさん:2006/05/22(月) 02:03:51
>>136
>>137
当方全然分かりません…
修正したプログラムを教えて頂けないでしょうか。
139デフォルトの名無しさん:2006/05/22(月) 07:55:00
実行面倒だから斜め読みしただけだが、doubleへ読み込むのに%1fっておかしくないか?
型不適合のWarnが出るはずだが


>>105
スレ違いなんでスルーしてもらって構わないが、
もしよければX WindowでのGUIのいいページがあったら紹介してもらえないだろうか?
140灰色の幽霊:2006/05/22(月) 10:42:10
[1]情報処理
[2]
(1)
標準入力から入力された文字が小文字ならば大文字に、大文字ならば小文字に
変換し、それ以外ならばそのまま標準出力に出力するプログラムを作成せよ。
ただし、マクロ置換を用いて一文字ずつ文字の変換を行うプログラムとして
実現せよ。
(2)
標準入力から数行にわたるテキストファイル(1バイト文字のみからなる
もの)を読み込み、同一内容の行(空行を含む)が続いた場合には、それ
を一行にまとめて標準出力に出力するプログラムを作成せよ。
例えば、
main()
{
printf("a\n");
printf("a\n");
printf("b\n");
printf("c\n");
printf("c\n");
printf("c\n");
}
の場合、下記のように出力するプログラムを作成せよ。
main()
{
printf("a\n");
printf("b\n");
printf("c\n");
}
[3]unix,gcc,C  [4]5/24   [5]特に制限はありません
プログラムに精通した皆さん、よろしくお願いします
141灰色の幽霊:2006/05/22(月) 10:43:14
[1]情報処理 
[2](3)
char型配列として定義された任意の文字列に対し、下記の例のように
先頭から1文字ずつ文字数を増やしながら行を変えて表示し、
最終行で文字列全体を表示するような関数

incremental_string_print(char *x)

を作成せよ。関数内部ではchar型ポインタをインクリメントしながら
1文字ずつ putchar() を用いて出力せよ。

(表示例)
O
Os
Osa
Osak
Osaka
Osaka
この関数は、例えば、以下のような利用の仕方を想定している。
(キーボードから入力された文字列(例えば Osaka)を
上記の表示例のように表示する)

main()
{
char s[100];
fgets(s, sizeof(s), stdin);
incremental_string_print(s);
}
[3]unix,gcc ,C [4]5/24 [5]制限はありません
よろしくお願いします。
142デフォルトの名無しさん:2006/05/22(月) 11:57:47
>>140
#include <stdio.h>
#include <ctype.h>
#define CONV(x) ( isupper(x) ? tolower(x) : toupper(x) )

int main(void)
{
int ch;

ch = getchar();
ch = CONV(ch);
printf("%c\n", ch);

return 0;
}

文句は一切受け付けない。コンパイル通るかもシラネ
143デフォルトの名無しさん:2006/05/22(月) 14:00:36
[1] 授業単元:
[2] 成績、合計点の並び替え
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: visual c++
 [3.3] 言語 C
[4] 期限: 今日の5時まで
[5] その他の制限:
成績については自分で並び変える事ができたのですが、合計点が並び替えできません。


144デフォルトの名無しさん:2006/05/22(月) 14:01:27
/*Sortingのプログラミング例*/

#include<stdio.h>
#define N 15 /*データの数*/

int main (void)
{
int i,j,temp;
int d[5][N]={{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}, /*番号*/
{17,38,100,95,23,62,77,45,69,81,83,51,42,36,60}, /*数学*/
{43,39,86,88,52,49,80,25,73,77,64,47,62,50,76}, /*理科*/
{30,55,58,63,72,58,84,62,48,95,55,47,85,64,38}, /*英語*/
{0}}; /*合計点*/
145デフォルトの名無しさん:2006/05/22(月) 14:03:02
/*合計点の計算*/
for(i=0; i<N; i++){
d[4][i]+=d[1][i];
d[4][i]+=d[2][i];
d[4][i]+=d[3][i];
}

/*成績降順sorting*/
for(i=0; i<N-1; i++){
for(j=i+1; j<N; j++)
if(d[4][i]<d[4][j]){
temp=d[4][i];
d[4][i]=d[4][j];
d[4][j]=temp;
}
}
/*番号降順sorting*/
for(i=0; i<N-1; i++){
for(j=i+1; j<N; j++)
if(d[4][i]<d[4][j]){
temp=d[0][i];
d[0][i]=d[0][j];
d[0][j]=temp;
}
}
/*出力*/
for(i=0; i<N; i++)
printf("番号%6d 合計点%6d\n",d[0][i],d[4][i]);

return(0);
}
146デフォルトの名無しさん:2006/05/22(月) 14:34:04
>140 (1)
#include<stdio.h>
#define change(dat) data[dat]<0 ? dat : data[dat]

int main(void){
int data[256];
int c;
for(c=0;c<=255;++c) data[c] = -1;
for(c=0x41;c<=0x5a;++c){
data[c] = c | 32;
data[32 | c] = c;
}
while((c = getchar()) != EOF) putchar(change(c)); //マクロ置換を用いて一文字ずつ文字の変換
return 0;
}
147デフォルトの名無しさん:2006/05/22(月) 14:35:12
(2)

#include<stdio.h>

int main(void){
char *s, *t;
int c = 0;
unsigned char data[2][256];
int h[2] = {-1,-1};
int i = 0;
while (gets(data[i]) != NULL){
h[i] = 0;
for(s = data[i];*s;s++) h[i] = h[i] * 137 + *s;
h[i] %= 1987;
c = (h[i] != h[i^1]);
if(!c) for(s=data[i],t=data[i^1];*s && *t;s++,t++) if(*s != *t){ c = 1; break; }
if(c){
puts(data[i]);
i ^= 1;
}
}
return 0;
}
148デフォルトの名無しさん:2006/05/22(月) 14:36:01
(3)

#include<stdio.h>

void incremental_string_print(char *x){
char *s[100] = {0};
int i,j;
for(i=0;i<100 && *x;++i){
if(*x == '\n') break;
s[i] = x++; //char型ポインタをインクリメント
for(j=0;j<100 && s[j];++j) putchar(*s[j]); //1文字ずつ putchar()で出力
putchar('\n');
}
}

int main(void){
char s[100];
fgets(s, sizeof(s), stdin);
incremental_string_print(s);
return 0;
}
149デフォルトの名無しさん :2006/05/22(月) 14:39:27
>>140
マクロ
#define ISUP(A)((0x40)<(A)&&(0x5b)>(A))?((A + 0x20)):(A)//小文字を大文字
#define ISLOW(A) ((A)<(0x7b))&&((A)>(0x60))?(A - 0x20):(A)//大文字を小文字
150143-145:2006/05/22(月) 15:03:51
すみません、番号の降順ではなく
成績の並び替えを行うと同時に番号も並び変えるということです。

誰か分かる方よろしくお願いします
151デフォルトの名無しさん:2006/05/22(月) 15:05:22 BE:29115735-#
>>141
>を作成せよ。関数内部ではchar型ポインタをインクリメントしながら
>1文字ずつ putchar() を用いて出力せよ。

すげえ無意味な条件のような気もするが。

void incremental_string_print(char* x)
{
int i, j, len = strlen(x);
char* s;
for (i=0; i<len; i++) {
s = x;
for (j=0; j<i; j++) {
putchar(*s);
s++;
}
putchar('\n');
}
puts(x);
}
152デフォルトの名無しさん:2006/05/22(月) 17:30:48
[1] 授業単元:プログラミング演習1
[2] 問題文(含コード&リンク):<通常課題> 変数nameには名前変数amountには貯金額(最初は0円)が入っている。以下のように3回貯金できるプログラムを作成せよ。ただし、変数はname,amount以外には1つしか使えない
名前を入力してください:michinobu
michinobu さん.
現在の貯金額は,0円です.
今回はいくら貯金しますか?(単位:千円):10.5
michinobuさん.
現在の貯金額は,10500円です.
今回はいくら貯金しますか?(単位:千円):0.03
michinobuさん
現在の貯金額は、10530円です.
今回はいくら貯金しますか?(単位:千円):100.0
michinobuさん.
全部で110530円貯まりました.
よくがんばりました.

<応用課題>通常課題を拡張して,金額を表示する際に,1万円の桁と千円の桁の間に「,」を入れる(例:11,0530円)ようにせよ.
[3] 環境
 [3.1] OS: (Windows
 [3.2] コンパイラ名とバージョン: Visual Studio.NET2003
 [3.3] 言語: C++
[4] 期限: 5月26まで
[5] その他の制限: まだ初期。関数printf,scanfの分野 。算術演算子、代入演算子など
応用の方がいまいちわかりません。よろしくお願いします。

153デフォルトの名無しさん:2006/05/22(月) 17:42:58
>>152
前スレにあったやつ
#include <stdio.h>
char name[256] = {0};
int amount = 0;
void input(void){
float f;
printf("%sさん\n現在の貯金額は,%d円です. \n今回はいくら貯金しますか?(単位:千円):",name,amount);
scanf("%f",&f);
amount += (int)(f*1000);
}
int main(){
printf("名前を入力してください:");
scanf("%s",name);
input();
input();
input();
printf("%sさん.\n全部で%d円貯まりました.\nよくがんばりました.\n",name,amount);
return 0;
}

応用のほうは
printf("%d,%04d\n", amount/10000, amount%10000);
な感じでうまくいくんじゃない、試してないけど
154デフォルトの名無しさん:2006/05/22(月) 17:58:25
>>153
ありがとうございます。一度試してみます。
15553:2006/05/22(月) 17:59:05
>>55
Thanks
156デフォルトの名無しさん:2006/05/22(月) 19:17:24
>>139
105じゃないけどGTKとかどうよ
http://www.gnome.gr.jp/docs/gtk+-2.0.x-tut/gtk-tut.html
157デフォルトの名無しさん:2006/05/22(月) 20:21:56
もう遅いか…。
>>143
テンポラリ変数を二つ使って、成績をキーにして、
番号と成績を同時にひっくり返せばいいだよ。単純なことアル。

for(i=0; i<N-1; i++){
for(j=i+1; j<N; j++)
if(d[4][i]<d[4][j]){
temp1=d[4][i];
temp2 = d[0][i];
d[4][i]=d[4][j];
d[0][i] = d[0][j];
d[4][j]=temp1;
d[0][j] = temp2;
}
}
こんな感じでどうよ?

それにしてもいろいろ問題あるソースじゃな。
158デフォルトの名無しさん:2006/05/22(月) 20:36:52
>>153
f*1000のところでエラーがでてしまったんですけど、他に方法あります?
引数を取り込む関数には評価されません。と出ました
159デフォルトの名無しさん:2006/05/22(月) 20:54:57
.net2003と2005で試したけど、エラー出ない…
160billy:2006/05/22(月) 21:18:22
問題文(含コード&リンク): 第1引数のファイルに含まれる文字列をカンマを区切りとして
単語に分けた上で、第2引数と第3引数のフィールドを入れ替えて出力するプログラムを作成する。
ただし、入れ替えるように指定されたフィールドの一方もしくは両方が存在しなかった場合は
入れ替えを行わないようにする。
実行例:
%cat source
This,is,source.
file,end.
%gcc -o fieldswap kadai.c
%./fieldswap source 2 3
-- Line 1 --
Field 1: This
Field 2: source.
Field 3: is
-- Line 2 --
Field 1: file
Field 2: end.
環境
OS:Linux
コンパイラ名とバージョン:gcc
言語:C
期限: 5/25
161デフォルトの名無しさん:2006/05/22(月) 21:36:33
>>160
73 名前:>>22[] 投稿日:2006/05/21(日) 11:43:09
>>22
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1921.txt
1ラインあたりの最大文字数は BUFFER_SIZE-1 な。

74 名前:>>42[sage] 投稿日:2006/05/21(日) 11:46:31
>>71
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1921.txt
1ラインあたりの最大文字数は BUFFER_SIZE-1 な。
162デフォルトの名無しさん:2006/05/22(月) 22:02:40
1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):電気回路に使われる抵抗の抵抗値は、色と数字が表1のように対応付けられたカラーコード3つで表示されている。
表1
黒 black 0
茶 brown 1
赤 red 2
橙 orange 3
黄 yellow 4
緑 green 5
青 blue 6
紫 purple 7
灰 gray 8
白 white 9
1番めと2番目の色で2桁の数字を表し、3番目の色で10の何乗倍かを表している。例えば、赤(1)黒(0)橙(3)の順に並んでいれば、20×10^3=20000オームを表している。抵抗の3つのカラーコードから抵抗値を計算するプログラムを作りなさい。
*キーボードから3つのカラーコードを入れるとそのコードに対応する抵抗値を出力すること
*キーボードの入力は、表1にまとめられたような色を意味する英単語の文字列が入力されると期待してよい
*出力は整数で表示し、最後に単位「ohm」をつけること。表1に上げられる文字列以外の入力があったときは「Error!」を表示する。

ヒント
*べき乗を求める場合、プログラムの1番上に「#include&Itmath.h>」を入れる。そうするとpow(n,m)を使うことができる。返り値はn^mである
*コンパイルをするとき、-lmをつける。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: C
[4] 期限: 明日の午前3時頃まで

手の付けようがなくて困っています。どなたかよろしくお願いします。
163デフォルトの名無しさん:2006/05/22(月) 22:21:26
多分>>152と同じ大学だと思うが、void input(void)なんて習って無いんじゃないかな?
164デフォルトの名無しさん:2006/05/22(月) 22:27:55
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):ファイルを読み込ませ文中の文字の数がそれぞれ何個あるか表示するプログラム。
a:○個、あ:○個のように。
[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C
[4] 期限: 5/23
よろしくお願いします
165デフォルトの名無しさん:2006/05/22(月) 22:38:55
>>162
#include <stdio.h>
#include <string.h>
#include <math.h>
enum clr { BLK, BRN, RED, ORG, YLW, GRN, BLU, PRP, GRY, WHT };
struct _ClrList{
char *s;
enum clr c;
};
struct _ClrList clrlist[]={
{"black", BLK},{"brown", BRN},{"red", RED},{"orange", ORG},{"yellow", YLW},
{"green", GRN},{"blue", BLU},{"purple", PRP},{"gray", GRY},{"white", WHT}
};
int searchC(char *s){
int i;
for(i = 0;i < (sizeof(clrlist) / sizeof(clrlist[0])); i++)
if(strcmp(s, clrlist[i].s) == 0)return ((int)clrlist[i].c);
return -1;
}
int main(){
int a[3], d, i;
char buf[255], c[3][10];
fgets(buf, sizeof(buf) - 1, stdin);
sscanf(buf, "%s %s %s", c[0], c[1], c[2]);
for(i = 0;i < 3; i++)if((a[i] = searchC(c[i])) == -1){puts("Error!");return 1;}
printf("%d ohm\n", (a[0] * 10 + a[1]) * (int)pow(10.0, a[2]));
return 0;
}

こんなのしか思いつかんかった
166デフォルトの名無しさん:2006/05/22(月) 22:42:25
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):シーザー暗号のプログラムで、平文と何文字ずらすかキーボードから入力すると暗号文を表示する。
 変換する文字はアルファベット大文字だけで、ずらす文字数は0〜25字が入力されると仮定する。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: C
[4] 期限: 明日朝7時まで
どなたか教えてください。お願いします。
167デフォルトの名無しさん:2006/05/22(月) 22:57:46
>>166
#include <stdio.h>

int main()
{
int i, n;
char buf[255];
puts("平文");
scanf("%s", buf);
puts("ずらす");
scanf("%d", &n);
for(i = 0; buf[i] != NULL; i++)if((buf[i] += n) > 'Z')buf[i] = buf[i] - 'Z' + 'A' - 1;
puts("暗号文");
puts(buf);
return 0;
}
至極、適当
168デフォルトの名無しさん:2006/05/22(月) 23:01:36
>>165
ありがとうございます。
小文字出力したいときはどのようにプログラムを変えたらいいのですか?
例えば、red blackなどで実行したいのですが。
169デフォルトの名無しさん:2006/05/22(月) 23:11:16
すればいいじゃん
170>>165:2006/05/22(月) 23:13:28
171170:2006/05/22(月) 23:14:34
リンクミスった162の間違い。
172デフォルトの名無しさん:2006/05/22(月) 23:24:37
1] 授業単元: 上級プログラミング
[2] 問題文(含コード&リンク):

長くなってしまったので以下にアップロードさせていただきました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1927.txt

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Cygwin
 [3.3] 言語: C++
[4] 期限: [2006年5月24日10:00まで]
[5] その他の制限: 問題文に従うこと

途中まで書いたのですが、長さに混乱してしまいにっちのさっちも行かない状態になってしまいました。
どなたかご教示お願いいたします。
173166:2006/05/22(月) 23:25:37
>>167
なるほど!やってみます。ありがとうございました。
174デフォルトの名無しさん:2006/05/22(月) 23:27:11
>>170さん
できました!!ありがとうございます。
175134:2006/05/22(月) 23:50:02
>>134です。

どなたか教えて貰えないでしょうか。
宜しくお願いします・・・
176デフォルトの名無しさん:2006/05/22(月) 23:54:54
前進消去のとこ抜けがあるみたいだけどそれ以外はエラー修正でいけるみたいよ。
つーかテストプログラムのコンパイルもしてないってどうよ。
177デフォルトの名無しさん:2006/05/22(月) 23:57:07
個人的にはポインタを配列にしてるのが気持ち悪い。
178134:2006/05/22(月) 23:58:39
>>176
家のPCではコンパイル出来ないので申し訳ありません。
明日の朝一で大学にいってやる予定でしたので。。。
179デフォルトの名無しさん:2006/05/22(月) 23:58:43
どこのこと?
180デフォルトの名無しさん:2006/05/23(火) 00:25:57
>>172
class Setの宣言部分は全部教師が書いたのか?
なんか間違いが散見されるが・・・
しかも明らかにヘッダとして記述するファイルにusing namespace std;書いてるし。
つうかね、学生でこれキッチリ書ける人いたら授業いらんと思う。
181デフォルトの名無しさん:2006/05/23(火) 01:35:24
c++にそろそろ乗り換えようと思って
>>172のをやってみたけど思ったように動かNEEEE
182デフォルトの名無しさん:2006/05/23(火) 02:19:42
内容:
1,授業単元 基礎プログラミング
2,問題文
(1)キーボードで二つの整数を入力し、それらの和と差を求め、表示するプログラムを作成せよ。
和と差を計算する部分をvoid keisan()のように関数にし、計算した結果をmain関数で表示せよ。
ただし、関数keisan()の型名がvoidであることと、引数をもたないことに注意せよ。
ヒント:外部変数を使う。
183デフォルトの名無しさん:2006/05/23(火) 02:20:57
(2)次のプログラムを実行すると、10×10の行列が出力される。
実行結果を参照の上、関数void printTable()を補足せよ。

#include<stdio.h>
int max=10;
void printTable(int m,int n)
{

/*この部分を補足せよ*/

}
int main(void)
{
int i,j;
for(i=0;i<max;i++)
for(j=0;i<max;j++)
printTable(i,j);
return 0;
}
[実行結果]
0 0 0 0 0 0 0 0 0 0
0 1 2 3 4 5 6 7 8 9
0 2 4 6 8 10 12 14 16 18
0 3 6 9 12 15 18 21 24 27
0 4 8 12 16 20 24 28 32 36
0 5 10 15 20 25 30 35 40 45
0 6 12 18 24 30 36 42 48 54
0 7 14 21 28 35 42 49 56 63
0 8 16 24 32 40 48 56 64 72
0 9 18 27 36 45 54 63 72 81

よろしくお願いします
184デフォルトの名無しさん:2006/05/23(火) 02:26:03
>>156
GTKか。名前は聞いたことあるが細かいことは知らなかったな
ちょっと見てみる、わざわざサンクス
185デフォルトの名無しさん:2006/05/23(火) 03:06:29
>183
for(j=0;i<max;j++) //ナイス引っかけ
186デフォルトの名無しさん:2006/05/23(火) 04:17:46
>>172
ろだの使い方がわからなくて向こうにコメントつけてしもた
187デフォルトの名無しさん:2006/05/23(火) 05:11:51
>>182
#include <stdio.h>

int a,b,wa,sa;

void keisan()
{
    wa=a+b;
    sa=a-b;
}

int main()
{
    scanf("%d",&a);
    scanf("%d",&b);
    keisan();
    printf("%d\n%d\n",wa,sa);
    return 0;
}
188デフォルトの名無しさん:2006/05/23(火) 05:17:05
>>183
void printTable(int m,int n)
{
    printf("%2d ",m*n);
    if (n==max-1)
        printf("\n");
}
189172:2006/05/23(火) 12:16:53
>>180
クラス宣言の部分は全部書いてありました。
問い合わせたところ、間違いがあった場合直してもかまわないとのことです。
190172:2006/05/23(火) 12:21:13
>>186
ありがとうございます。
授業3回ごとに教師が変わるんですが、2人目の先生はちょっとアバウトみたいです。
授業以外の予備知識がまったく無いので困ってました。
191186:2006/05/23(火) 15:19:35
>>190
ごめん出力のとこ間違ってた。
coutを全部foutに置換して。ってもう提出しちゃった?
192デフォルトの名無しさん:2006/05/23(火) 16:21:52
[1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク):条件分岐(出力の制御)
西暦(1926年以降)を入力すると年号を表示するプログラミングを作成しなさい(例えば2000と入力すると平成12年と表示する)
西暦と年号の対応は次のとおり
平成:1989- 昭和:1926-1989
なお、1989年は平成1年とする(昭和63年としない)
[3] 環境
 [3.1] OS: WinXPhome
 [3.2] コンパイラ名とバージョン: 分かりません、lcc.batなるものを使ってコンパイルしてます
 [3.3] 言語: 多分C?
[4] 期限: あと90分でできたら…
[5] その他の制限: 授業開始してまだ3〜4回目程度なので高度なことはしないと思いますが…
             intとscanとかいうのを使うとは思うんですが、いまいち分からなくて
193デフォルトの名無しさん:2006/05/23(火) 16:38:46
>>192
# include <stdio.h>

int main(void)
{
  int year;
  scanf("%d", &year);
  if(year >= 1989)
    printf("平成%d年\n", year - 1988);
  else
    printf("昭和%d年\n", year - 1925);
  return 0;
}
194デフォルトの名無しさん:2006/05/23(火) 16:43:51
>>193
素早いレスありがとうございます
あとはprintfでちょこちょこっといじってみます
195デフォルトの名無しさん:2006/05/23(火) 16:49:04
なんでみんな演算子の周りをスペースで区切るかなー、
漏れはどうしても気になってしまう
196デフォルトの名無しさん:2006/05/23(火) 17:17:39
で?
そんな流れでも無しに、更にお前の意見は誰も聞いてないよ。
197デフォルトの名無しさん:2006/05/23(火) 17:22:59
貴様・・俺に喧嘩を売る気か?
逝っておくがな、今まで俺に喧嘩を売ってきた香具師はな・・・
みな自信を付けて帰ってったぜ?
198デフォルトの名無しさん:2006/05/23(火) 17:27:39
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):再帰関数を利用して、フィボナッチ数列を生成するプログラムを作成せよ。
ただし、生成するフィボナッチ数列の要素数をキーボードから入力する。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:どちらでも可
[4] 期限:明日まで
[5] その他の制限:

初心者で 全く分からないので、お願いします!
199billy:2006/05/23(火) 17:49:14
[1] 授業単元: 演習
[2] 問題文(含コード&リンク):
  145614,Koichi Fujita,MUSIC
145615,Hitoshi Mori,READING
145616,Yutaka Mizuta,PROGRAMMING
  というCSVファイルを作っておき
  実行例:
  %gcc -o retrieval retriveal.c
%./retrieval student.csv
Enter your question :
> 145615 name
The name of No. 145615 is "Hitoshi Mori".

Enter your question:
>
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2006年5月24日
[5] その他の制限: 構造体を使う
200デフォルトの名無しさん:2006/05/23(火) 17:59:05
>>195
俺は空白を入れないほうがよっぽど気になる。
201デフォルトの名無しさん:2006/05/23(火) 18:09:12
>>198
#include <stdio.h>
int f(int n){
int x;
if(n == 0) x = 0;
else if(n == 1) x = 1;
else x = f(n - 1) + f(n - 2);
return x;
}

int main(){
int n;
printf("要素数 = ");
scanf("%d", &n);
printf("%d : %d\n", n, f(n));
return 0;
}
202緊急です!:2006/05/23(火) 18:12:27
[1] 授業単元:プログラミング入門

[2] 問題文:実数x、整数nを入力し、項数nの級数展開によりcosxを求めよ

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Visual C++ 6.0
 [3.3] 言語: C言語で
[4] 期限: 2006年5月24日11:30まで(明日の昼前までです・・)
[5] その他の制限: (まだ4回目で基本的なことしかやっていません。for文while文などでお願いします。。
203デフォルトの名無しさん:2006/05/23(火) 18:15:31
[1] 授業単元: 演習
[2] 問題文:
最初に
1:sinwt
2:coswt
という画面を表示させて選んだ番号の三角関数の計算をさせるプログラムを
作りなさい
OS:WindowsXP
期限:明日まで

三角関数の計算はさせることができるので、
1:sinwt
2:coswt
という画面を表示させて、選んだ番号の計算をさせるところまでをお願いします
204デフォルトの名無しさん:2006/05/23(火) 18:20:50
>>203
#include <stdio.h>

int main()
{
char ch;
puts("1:sinwt");
puts("2:coswt");
ch = getchar();
switch(ch){
case '1':
//sinwt
break;
case '2':
//coswt
break;
}
return 0;
}
こんな感じ?
205デフォルトの名無しさん:2006/05/23(火) 18:47:02
>>204
ありがとうございます
なんとか、頑張ってみます
206デフォルトの名無しさん:2006/05/23(火) 18:51:58
getcharでいいのか。
getsでstrcmpでもいいんじゃないのかなとか思ったり
207デフォルトの名無しさん:2006/05/23(火) 18:52:47
>>199
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct _data{int _no;char _name[20];char _hobby[20];};
int main(int argc, char *argv[]){
int i = 0, no, busy = 1;char buf[0xff], com[10];char *p;FILE *fp;struct _data data[10];
if((fp = fopen(argv[1], "r")) == NULL)return 1;
while(fgets(buf, sizeof(buf) - 1, fp) != NULL){
p = strtok( buf, "," );data[i]._no = atoi(p);
p = strtok(NULL,",");strcpy(data[i]._name, p);
p = strtok(NULL,",");strcpy(data[i]._hobby, p);
i++;
}
while(1){
puts("Enter your question :");fgets(buf, sizeof(buf) - 1, stdin);sscanf(buf, "%d %s", &no, com);
switch(com[0]){
case 'n':
if(strcmp(com, "name") != 0)break;
for(int j = 0; j < i; j++)if(no == data[j]._no)printf("the name of %d is \"%s\"\n", data[j]._no, data[j]._name);
break;
case 'h':
if(strcmp(com, "hobby") != 0)break;
for(int j = 0; j < i; j++)if(no == data[j]._no)printf("the hobby of %d is \"%s\"\n", data[j]._no, data[j]._hobby);
break;
}
}
fclose(fp);return 0;
}
208デフォルトの名無しさん:2006/05/23(火) 19:03:59
[1]授業単元:演習
[2]問題文(含コード&リンク):
e=a+b*c+d;とe=(a+b)*c+d;は異なる。
前の式に演算子の優先順位や結合規則を考えて、あえてカッコをつけると
(e=((a+(b*c))+d));となる。

式e=d=a-b+c+b*(a+c)/a;
を実行した後のd,eの値を表示するプログラムを作成してください。
変数は全てint型で、a,b,cの初期値は、それぞれ10、20、30とする。
演算子の優先順位や結合規則を考えて、計算する順に全部あえてカッコをつけて下さい。
そしてカッコをつけないときと結果が同じになることを確認して下さい。
(注)カッコが多いと見づらくなるので、普通は必要のないカッコは書きません。

次のようにする。
a,b,cの初期値を設定してから

e=d=a-b+c+b*(a+c)/a;
printf("d=%d", "e=%d\n", d, e); ・・・@
e=d=a-b+c+b*(a+c)/a; ・・・左の式に全部カッコをつける
printf("d=%d", "e=%d\n", d,e); ・・・A

@とAの結果が同じになることを確認してください。
[3]環境
[3.1]OS:windowsXP
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C
[4]期限:明日
[5]その他の制限:特になし
209デフォルトの名無しさん:2006/05/23(火) 19:13:40
10進数を2進数(16bit)に量子化せよ。
ただし小数の場合も含む。

↑この難問解けるやつはいるか?無理だろぉ!?
210デフォルトの名無しさん:2006/05/23(火) 19:23:06
#include <stdio.h>

int main(void){

int a,b,?;

for(a=1;a<=?;?){
for(b=1;b<=?;?){
d = a*b;
printf("%4d",?);
}
printf("?");
}

return(0);
}
211210です:2006/05/23(火) 19:24:01
>>210と同じ結果に出力するにはどうすればいいですか?
#include <stdio.h>

int main(void){

int a,b,?;

for(a=1;a<=?;?){
for(b=1;b<=?;?){
d = a*b;
printf("%4d",?);
}
printf("?");
}

return(0);
}
212若葉マーク:2006/05/23(火) 19:38:51
この?には何が入るんですか?
213210です:2006/05/23(火) 19:40:30
?には何かしらのプログラムをいれるのですが…
214デフォルトの名無しさん:2006/05/23(火) 19:46:15
#include <stdio.h>

int main(void){

int a,b,d;

for(a=1;a<=9;a++){
for(b=1;b<=9;b++){
d = a*b;
printf("%4d",d);
}
printf("\n");
}

return(0);
}
215209:2006/05/23(火) 19:56:15
小数クリアー出来てないし、量子化の意味間違えてませんか?
216デフォルトの名無しさん:2006/05/23(火) 19:58:17
[1]授業単元:演習
[2]問題文(含コード&リンク):
製品数(lot)と、そのうちの不良品数(substandard)を読み込み、良品が製品全体の何パーセント
(stdPercent)か計算し、表示して下さい。製品数(lot)と、その不良品数(substandard)はint型で、パーセント
(stdPercent)はdouble型で、表示は小数部2桁までとして下さい。
(double型の値を、少数第2位まで表示するには、printfの変換書式で、%.2fとする。)
(注)定数で、0はint型、0,0はdouble型になります。
この課題ではパーセント計算で100.0を使ってください。
[3]環境
[3.1]OS:windowsXP
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C
[4]期限:明日
[5]その他の制限:特になし
217デフォルトの名無しさん:2006/05/23(火) 20:04:11
初めて2chに入ってみました。ここは女の子も来ていいんでしょうか?
学校で出された問題なんですが、全然分かりません。
C言語を習ってまだ1週間なのでドドド素人です。
助けてくださいm(_ _)m


入力ファイルから100個のデータを取り込み、その平均、分散、標準偏差を
求めよ。
さらにその結果を出力ファイルに格納するプログラムを作成せよ。
218デフォルトの名無しさん:2006/05/23(火) 20:04:29
■授業:プログラミング C
■提出日:5月24日0時0分
■プログラム作成及びコンパイラ:Visual Stdio.NET2003
■OS:Windows XP
■課題内容:
Prog33.c を、stat を使わずに、メモリに全てのレコードを読み込んでからソートして
保存するように変更せよ。

※ソースが長いのでUPしました。
【プログラム】
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1930.txt

よろしくお願いいたします。
219デフォルトの名無しさん:2006/05/23(火) 20:06:59
>>217
女だろうが爺だろうが>>1も読まない奴には答えが出ない
220デフォルトの名無しさん:2006/05/23(火) 20:07:50
>>216
int main(void){
int lot, substandard;

puts("製品数");
scanf("%d", &lot);
puts("不良品数");
scanf("%d", &substandard);
double stdPercen = (double)(lot - substandard) / lot * 100.0;
printf("良品は全体の%.2f%%\n", stdPercen);
return 0;
}
221 ◆4xnaa3pj4A :2006/05/23(火) 20:13:30
[1] 授業:プログラミング
[2] 問題文(含コード&リンク):
入力ファイルから100個のデータを取り込み、その平均、分散、標準偏差を
求めよ。
さらにその結果を出力ファイルに格納するプログラムを作成せよ。

[3] 環境
 [3.1] OS:Unix
 [3.2] コンパイラ:gcc (詳しいことは分かりません)
 [3.3] 言語:C言語
[4] 期限:無期限ですが早い方が...
[5] その他の制限:全くの素人です

すいませんでした
222デフォルトの名無しさん:2006/05/23(火) 20:30:09
>>220
エラーがでまくるんですが・・・
223デフォルトの名無しさん:2006/05/23(火) 20:30:44
>>221
#include <stdio.h>
#include <math.h>

int main(void){
double a, s= 0.0, s2 = 0.0, v, o;
FILE *fp;
if((fp = fopen("in.txt", "r")) == NULL)return 1;
for(int i = 0; i < 100; i++){
fscanf(fp, "%lf", &a);
s += a;
s2 += a * a;
}
s /= 100;
s2 /= 100;
v = s2 - s;
o = sqrt(v);
fclose(fp);
if((fp = fopen("out.txt", "w")) == NULL)return 1;
fprintf(fp, "平均%f\n", s);
fprintf(fp, "分散%f\n", v);
fprintf(fp, "標準偏差%f\n", o);
fclose(fp);
return 0;
}
分散求めるのが多少怪しいけど…
224デフォルトの名無しさん:2006/05/23(火) 20:31:50
>>222
どうせ、#include <stdio.h>してないってオチだろ
225デフォルトの名無しさん:2006/05/23(火) 20:33:40
>>224
いやそれしても
9行目ここでは宣言できない関数ってでる
226デフォルトの名無しさん:2006/05/23(火) 20:36:36
どっから数えて9行目w
double stdPercen;
をintの下にでも加えて
double stdPercen = (double)(lot - substandard) / lot * 100.0;

stdPercen = (double)(lot - substandard) / lot * 100.0;
って書き直せばできるんじゃね
227デフォルトの名無しさん:2006/05/23(火) 20:37:13
>>202
たぶんあってると思う。。。
#include <stdio.h>
int main(void){
double x,xx,y,m;
int i,n;
scanf("%lf %d",&x ,&n);
xx = m = y = 1;
for(i = 1; i < n; i++){
xx *= (-1) * x * x;
m *= (double) (2 * i) * (2 * i - 1);
y += xx / m;
}
printf("%.15f\n",y);
return 0;
}
228デフォルトの名無しさん:2006/05/23(火) 20:48:11
>>226
できました。サンクスコ
229デフォルトの名無しさん:2006/05/23(火) 20:53:28
[1]授業単元:演習
[2]問題文(含コード&リンク):
2つの正の実数値(a,b)を読み込み、その商(div)を整数値で求め、余り
(mod)を実数値で求め、表示してください。
[3]環境
[3.1]OS:windowsXP
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C
[4]期限:明日
[5]その他の制限:特になし
230デフォルトの名無しさん:2006/05/23(火) 20:56:32
[1]授業単元:演習
[2]問題文(含コード&リンク):
正の実数値を読み込んで、その値の少数第1位を四捨五入した整数値を求め、
表示してください。
[3]環境
[3.1]OS:windowsXP
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C
[4]期限:明日
[5]その他の制限:特になし
231デフォルトの名無しさん:2006/05/23(火) 21:09:11
>>230
#include <stdio.h>
int main(void){
double x;
scanf("%lf", &x);
printf("%d\n", (int)(x+0.5));
return 0;
}
こんなんでおkだったきがする
232デフォルトの名無しさん:2006/05/23(火) 21:15:31
[1]授業単元:演習
[2]問題文(含コード&リンク):
金額(price)を整数値で読み込み、その金額に対する消費税額(tax)を整数値で求め、
消費税額と消費税込み金額を表示してください。消費税率は5%とする。
(消費税額は、0,05を掛けて求める。)
消費税額は、少数第1位を四捨五入するものとする。
[3]環境
[3.1]OS:windowsXP
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C
[4]期限:明日
[5]その他の制限:特になし
233デフォルトの名無しさん:2006/05/23(火) 21:21:46
>>232
#include<stdio.h>
int main(){
    int price,tax;
    printf("price? ");scanf("%d",&price);
    tax = price / 20;
    printf("price = %d\ntax   = %d\ntotal = %d\n",price,tax,price+tax);
}
234デフォルトの名無しさん:2006/05/23(火) 21:25:54
0以上1以下の10進数を2進数にするプログラムを作ってみました。
理論的におかしなところはありますか?

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

int main(){
doubled, ans, divide;
int i, j = 0;
char s[256];
scanf("%lf", &d);

for (i = -1; i > -10; i--) {
divide = pow(2, i);
ans = d / divide;
if (ans >= 1) {
s[j] = '1';
d = d - divide;
}
else {
s[j] = '0';
}
j++;
}
s[j] = '\0';

printf("%s\n", s);

return 0;
}
235デフォルトの名無しさん:2006/05/23(火) 21:28:32
[1]授業単元:演習
[2]問題文(含コード&リンク):
整数値を2つ(a,b)読み込み、a,bが格納している値を交換して、結果を表示してください。
例:input a b:10 20
  交換前a:10, b:20
交換後a:20, b:10
[3]環境
[3.1]OS:windowsXP
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C
[4]期限:明日
[5]その他の制限:特になし
236デフォルトの名無しさん:2006/05/23(火) 21:31:44
[1]授業単元:演習
[2]問題文(含コード&リンク):
int 型の値の最大値と、それに1を足した値を10進数と16進数で表示してください。
-2147483648を初期値としたとき、waring(警告)メッセージがでた場合は、
n = -2147483648 -1などとしてください
消費税額は、少数第1位を四捨五入するものとする。
[3]環境
[3.1]OS:windowsXP
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C
[4]期限:明日
[5]その他の制限:特になし
237デフォルトの名無しさん:2006/05/23(火) 21:36:15
>>229 こんなん?
238デフォルトの名無しさん:2006/05/23(火) 21:36:56
>>236
消費税額ってなんだよ。
239237:2006/05/23(火) 21:37:50
まちがって書き込んだ。ごめん。
>>229 こんなんでどうですか?
#include <stdio.h>
#include<math.h>
int main(void){
double a, b, mod;
int div;
scanf("%lf", &a);
scanf("%lf", &b);
mod = fmod(a, b);
div = (int)(a / b);

printf("div:%d, mod:%lf\n", div, mod);
return 0;
}
240デフォルトの名無しさん:2006/05/23(火) 21:38:32
>>234
10進小数から2進小数の変換は確か倍々ゲームするんだっけか
まあどっちにしろ>>1を読まない奴は氏ねばいいし
そもそもここはお前の添削スレじゃない
241デフォルトの名無しさん:2006/05/23(火) 21:59:43
>>239
#include<math.h>
はまだ習ってないので使えないと思います。すいません。
242デフォルトの名無しさん:2006/05/23(火) 22:00:48
>>238
[1]授業単元:演習
[2]問題文(含コード&リンク):
int 型の値の最大値と、それに1を足した値を10進数と16進数で表示してください。
-2147483648を初期値としたとき、waring(警告)メッセージがでた場合は、
n = -2147483648 -1などとしてください
[3]環境
[3.1]OS:windowsXP
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C
[4]期限:明日
[5]その他の制限:特になし

消し忘れた。
243デフォルトの名無しさん:2006/05/23(火) 22:04:04
>>218 です。
プログラムだけでは分かりにくいと思ったので、
Visual Stdio.NET2003で作られるプロジェクトフォルダをUPしました。
(Prog33)この中に、プログラムなどが入っています。
http://www.uploda.org/uporg398554.zip.html

よろしくお願いします。
244デフォルトの名無しさん:2006/05/23(火) 22:05:29
>>229
#include <stdio.h>
int main(void){
double a, b;
puts("a=");
scanf("%lf", &a);
puts("b=");
scanf("%lf", &b);
printf("a = %f, b = %f\n", a, b);
printf("b div a = %d\n", (int)(b / a));
printf("b mod a = %f\n", b - (int)(b / a) * a);
return 0;
}
245デフォルトの名無しさん:2006/05/23(火) 22:09:51
>>242
#include <stdio.h>
#include <limits.h>
int main(void){
puts("int型の最大");
printf("%d\n", INT_MAX);
printf("%x\n", INT_MAX);
puts("+1");
printf("%d\n", INT_MAX + 1);
printf("%x\n", INT_MAX + 1);
}
246デフォルトの名無しさん:2006/05/23(火) 22:13:11
>>241
ちょくちょくそういうの見るが、そもそもヘッダで習うとか習わないとかって物じゃないと思うがな
247デフォルトの名無しさん:2006/05/23(火) 22:13:13
>>245
#include <limits.h>とかは習ってないので使えないっぽいです。
int_MAX+1とかのあたりもおそらく
そこらへん最初に制限書けなくてすいませんです。
248デフォルトの名無しさん:2006/05/23(火) 22:14:25
>>247
あint maxは短くしただけだからおkだ。
ヘッダとか用語がまず解らないし
249デフォルトの名無しさん:2006/05/23(火) 22:23:15
[1]授業単元:演習
[2]問題文(含コード&リンク):
月(month)を読み込み、範囲チェックをして下さい。月が1〜12の範囲なら、"正しい月"
、1〜12意外なら"誤った月"と表示してください。
[3]環境
[3.1]OS:windowsXP
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C
[4]期限:明日
[5]その他の制限:論理積演算子(&&)、
論理和演算子(||)を使わないで下さい。
250デフォルトの名無しさん:2006/05/23(火) 22:30:41
>>249
#include <stdio.h>
int main(){
int month;
puts("何月?");
scanf("%d", &month);
switch(month){
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
puts("正しい月");
break;
default:
puts("誤った月");
}
}
251デフォルトの名無しさん:2006/05/23(火) 22:32:51
この時期の問題は面白くないのばかりじゃのう
252デフォルトの名無しさん:2006/05/23(火) 22:35:49
[1]授業単元:演習
[2]問題文(含コード&リンク):
月(month)を読み込み、範囲チェックをして下さい。月が1〜12の範囲なら、"正しい月"
、1〜12意外なら"誤った月"と表示してください。
論理演算子を使ってください。
[3]環境
[3.1]OS:windowsXP
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C
[4]期限:明日
[5]その他の制限:
253デフォルトの名無しさん:2006/05/23(火) 22:41:22
[1]授業単元:演習
[2]問題文(含コード&リンク):
アルファベット文字を1文字読み込み、小文字なら"Lower"、大文字なら"Upper"と表示して下さい。
英文字しか入力されないものとして下さい。

小文字は'a'以上'z'以下です。ASCIIコードで'a'〜'z'は、連続した値です。
例えば、変数cに'b'という文字の値が入ってるかどうか判定する場合、
c=='b'と書きます
c==98と書くよりもはるかにわかりやすくなります。

1文字を入力する2つの方法(どちらでもいいです。)
@この問題集で使っている方法
char c;
scanf("%c", &c);
A他の方法
int c;
c = getcher();
[3]環境
[3.1]OS:windowsXP
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C
[4]期限:明日
[5]その他の制限:
254デフォルトの名無しさん:2006/05/23(火) 22:42:45
■授業:プログラミング
■言語:C言語
■提出期限:5月24日0時0分
■プログラム及びコンパイラ:Visual Stdio.NET2003
■OS:Windows XP
■問題文:
次のプログラムを stat を使わずに、メモリに全てのレコードを読み込んでからソートして
保存するように変更せよ。

※ソースが長いのでUPしました。
【プログラム】
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1930.txt

よろしくお願いいたします。
255デフォルトの名無しさん:2006/05/23(火) 22:52:51
>>253
#include <stdio.h>
#include <ctype.h>
int main(void){
char c;
scanf("%c",&c);
printf("%s\n",islower(c)? "Lower":"Upper");
return 0;
}
256デフォルトの名無しさん:2006/05/23(火) 22:53:50
257デフォルトの名無しさん:2006/05/23(火) 22:57:58
>>255
#include <ctype.h> がわからない・・・・これ使わない書き方ってないですか?
258デフォルトの名無しさん:2006/05/23(火) 22:59:37
>>253
#include <stdio.h>
int main(void){
char c;
scanf("%c",&c);
if( 'A' <= c && c <= 'Z' ) puts("Lower");

else puts("Upper"); /*英文字しか入力されないなら*/
if( 'a' <= c && c <= 'z' ) puts("Upper"); /*英文字以外の可能背もあるなら*/

return 0;
}
259デフォルトの名無しさん :2006/05/23(火) 23:00:14
[1] 授業単元: オペレーティングシステム
[2] 問題文:
1.引数にファイル名を指定すると、そのファイルのサイズと
ファイルの種類(一般ファイル、ディレクトリ、パイプ等)、
最終変更時刻を表示する(fview)を作成せよ。但し、引数には複数
のファイルを指定できるようにすること。また、fstatシステムコール
を用いること。

2.引数に指定した複数のテキストファイルの内容を結合して一つの
ファイルにまとめるコマンド(cat2)を作成せよ。但し、まとめた内容を
格納するファイル名は"concat.txt"とすること。但し、catコマンドを
system関数内部で呼ばないこと。

[3] 環境
 [3.1] OS:windowsXP cygwin
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C言語
[4] 期限: ([2006年5月26日23:59まで]
[5] その他の制限: 高水準ライブラリ関数は使用せずに
システムコールのみを使用する。

難しすぎて、分かりません。システムコールのみだとなおさらです。
よろしくお願いします。
260デフォルトの名無しさん:2006/05/23(火) 23:00:42
って大文字小文字が逆じゃないか
表示部分だけ変更してくれ
261デフォルトの名無しさん:2006/05/23(火) 23:03:25
>>259
>但し、catコマンドをsystem関数内部で呼ばないこと。
チッ、先を読まれたw
262デフォルトの名無しさん:2006/05/23(火) 23:04:58
>>258
Upperが2度出るのは何故ですか?
263デフォルトの名無しさん:2006/05/23(火) 23:22:12
>>262
コメントアウトし忘れた

英文字しか入力されないなら次ので十分
else puts("Upper");

英文字以外も入力されるなら次のにする
if( 'a' <= c && c <= 'z' ) puts("Upper");
264デフォルトの名無しさん:2006/05/23(火) 23:32:59
>>254 ですが、
stat を使わずにするには、このプログラムどこを変更すればいいですか?
265デフォルトの名無しさん:2006/05/24(水) 00:08:57
>>259
printfも使えないのか O| ̄|_
266デフォルトの名無しさん:2006/05/24(水) 00:16:50
[1]授業単元:演習
[2]問題文(含コード&リンク):
出席率(attend)と試験の得点(test)を読み込み、2つの条件を満たす場合
”合格”と表示し、満たさない場合”不合格”と表示してください。2つの条件は以下の通り。
@出席率が70以上、A試験得点が60以上。
この課題はif文のネストで、
[3]環境
[3.1]OS:windowsXP
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C
[4]期限:明日
[5]その他の制限:
26741:2006/05/24(水) 00:28:42
>>121
調べてみたんですが、どうやらEventLoopのエラーじゃないようです
orz ... もう少し粘りまsu
268デフォルトの名無しさん:2006/05/24(水) 00:44:23
+Void
-void
269デフォルトの名無しさん:2006/05/24(水) 00:46:07
スマン逆だった。
-Void
+void
な。
270デフォルトの名無しさん:2006/05/24(水) 00:52:42
>>259
(2)
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int main(int argc, char *argv[]){
int i, size, fd_in, fd_out;
char buf[256];
fd_out = creat("concat.txt", S_IRUSR | S_IWUSR);
for (i = 1; i < argc; i++) {
fd_in = open(argv[i], O_RDONLY);
while((size = read(fd_in, buf, sizeof(buf))) > 0) {
write(fd_out, buf, size);
}
close(fd_in);
}
close(fd_out);
return 0;
}
271デフォルトの名無しさん:2006/05/24(水) 01:00:40
[1] 授業単元: C言語実習
[2] 問題文(含コード&リンク):
//includ文
#include <stdio.h>
void main(void){
inti,j;
printf("好きな数字を一桁入力するのだ:");
scanf("%1d",&j);
for(i=0;i<0;i++){
if(j==0){}
else if(i==0){}
else if(i%j==0){
printf("\n");}
printf("%d ",i);}
printf("\n");}
結果が入力した数値iの個数ごとに改行するプログラム。
例:3を入力した場合
0 1 2
3 4 5
6 7 8
9
となるようにする。
で、自分で考えた結果が上記なのですが、「力技だからもっとスマートにしろ」と言われました。orz
まだ学校入学したばっかりで、これ以上の案が浮かびません。ご助力をお願いします。orz
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: .net2003
 [3.3] 言語: C
[4] 期限: 5月30日(火)
[5] その他の制限: if文の実習です。とりあえず、そういうレベルです。orz
272デフォルトの名無しさん:2006/05/24(水) 01:13:49
>>267
まだやってたのか
エラーメッセージぐらいちゃんと読もうよ…
273デフォルトの名無しさん:2006/05/24(水) 01:19:03
>271 こんな感じかな。
#include<stdio.h>
int main(void){
int i,j;
printf("好きな数字を一桁入力するのだ:");
scanf("%1d",&j);
for(i=0;i<10;i++){
printf("%d ",i);
if((i+1)%j == 0){
printf("\n");
}
}
return 0;
}


>272
たぶん単語の意味がわからなかったんじゃないかな。beforeとか。
274デフォルトの名無しさん:2006/05/24(水) 01:19:53
言語と関係ないアルゴリズムの質問っておk?
275デフォルトの名無しさん:2006/05/24(水) 01:27:16
>>274
とりあえず書く。おkなら答えを書いてくれるやつがいる…かもしれん
276デフォルトの名無しさん:2006/05/24(水) 01:28:14
>>271
#include <stdio.h>
void main(void){
int i,j;
printf("好きな数字を一桁入力するのだ:");
scanf("%1d",&j);
for(i=0;i<10;i++)printf("%d%c", i, (i + 1) % j == 0 ? '\n' : ' ');
puts("");
return 0;
}
もう>>273にあるけど

それにしても、beforeは中学生でも分かるだろ
277デフォルトの名無しさん:2006/05/24(水) 01:28:16
次の問題なんだ。

異なるn個の整数(まあ実数ならなんでもいいんだが)がランダムで並んだ
数列から、もっとも長い部分増加列をすばやく見つけるアルゴリズムを
考えて欲しいんだ。総当りだと最長で2^n回もかかるからだめなんです。

プログラムは自分で書くから、手法だけ教えて欲しい。
278デフォルトの名無しさん:2006/05/24(水) 01:33:11
前にあったよーな気がする。
279デフォルトの名無しさん:2006/05/24(水) 01:34:51
280デフォルトの名無しさん:2006/05/24(水) 01:40:07
[1] 授業単元: 情報処理演習
[2] 問題文(含コード&リンク):
標準入力から数行にわたるテキストファイル(1バイト文字のみからなる
もの)を読み込み、同一内容の行(空行を含む)が続いた場合には、それ
を一行にまとめて標準出力に出力するプログラムを作成せよ。
例えば、入力が
main()

{
printf("a\n");
printf("a\n");
printf("b\n");
printf("c\n");
printf("c\n");
printf("c\n");
}
の場合、下記のように出力するプログラムを作成せよ。
main()

{
printf("a\n");
printf("b\n");
printf("c\n");
}
[3] 環境
 [3.1] OS: Windows (cygwin)
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2006年5月24日17:00
281デフォルトの名無しさん:2006/05/24(水) 01:40:45
>>279
ありがとうございます。
これをヒントにして考えたいと思います。
282デフォルトの名無しさん:2006/05/24(水) 01:47:44
>>280
#include <stdio.h>
#include <string.h>
int main(){
FILE *fp;
char s1[0xff], s2[0xff];
fp = fopen("in.txt", "r");
fgets(s1, sizeof(s1), fp);
while(fgets(s2, sizeof(s2), fp) != NULL){
if(strcmp(s1, s2) != 0)printf("%s", s1);
strcpy(s1, s2);
}
printf("%s\n", s1);
return 0;
}

>>276
おいおい、voidで値返すなよ
283デフォルトの名無しさん:2006/05/24(水) 01:55:08
>282
それだと標準入力にならないぞ。
つーか前にあったな。>147だ。
284デフォルトの名無しさん:2006/05/24(水) 01:58:41
>>282
>>283
ありがとうございます。
>>147を参考にやってみます!
285デフォルトの名無しさん:2006/05/24(水) 02:13:39
リダイレクトってことかいな…
286284:2006/05/24(水) 02:22:47
>>147じゃあファイルを読み込むタイプではないのでできませんでした・・・orz

>>282のを標準入力にするのはどうすればいいんでしょうか?
287デフォルトの名無しさん:2006/05/24(水) 02:39:12
>>286
一番簡単なのは
- fp = fopen("in.txt", "r");
+ fp = stdin;
違和感あるけど、間違いではない。
288284:2006/05/24(水) 02:52:02
>>287
その方法でやってみます。
わざわざレスしてくださってありがとうございました。
289デフォルトの名無しさん:2006/05/24(水) 02:54:28
「やっぱりできませんでした」とか言いそうな予感
290デフォルトの名無しさん:2006/05/24(水) 06:20:53
>>254
お願いします 
291困ってます:2006/05/24(水) 07:38:03
1. 指定された個数だけ整数を読み込んで、それらの合計、平均、分散、標準
偏差を表示するプログラムを作成せよ。for文を使うこと。
2. 14の段数をもつピラミッドを表示するプログラムを作成
せよ。
3. 9段の市松模様(以下の例を参考にせよ)を表示するプロ
グラムを作成せよ.
段数は? 3
**** **** **** ****
**** **** **** ****
**** **** **** ****
**** **** **** ****  *ここまで1段
**** **** **** ****
**** **** **** ****
**** **** **** ****
**** **** **** **** *ここまで2段
**** **** **** ****
**** **** **** ****
**** **** **** ****
**** **** **** **** *ここまで3段
292デフォルトの名無しさん:2006/05/24(水) 08:24:57
>>254
ひんと。

char buf[256];
num=0;
while((i = fread(buf,1,sizeof(buf),fp))>0){
num += i;
}
num /= sizeof(recA);
293デフォルトの名無しさん:2006/05/24(水) 09:35:14
[1] 授業単元:
[2] 問題文(含コード&リンク):
double sin4(double x){
int i;
double ans=1.0,term=1.0,mx2=-x*x;
for(i=1;term!=0;i++){
term*=mx2/(2*i*(2*i-1));
ans+=term;
}
return(ans);
}
この関数はcosxのマクローリン展開を求めるものなんですが、sinxを求めるように改良したいんですが、
よくわからないので、教えて下さい


[3] 環境
 [3.1] OS WinXp
 [3.2] Borland
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: 今日中
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)


294デフォルトの名無しさん:2006/05/24(水) 09:54:27
>>235
void main() {
int a, b;
printf( "input a b: " ); scanf( "%d %d", &a, &b );
printf( "before a: %d b: %d\n", a, b );
a += b; b = a - b; a -= b;
printf( "after a: %d b: %d\n", a, b );
}

>>252
void main() {
int month;
printf( "input month :" ); scanf( "%d", &month );
printf( "%s\n", ( 1 <= month && month <= 12 ) ? "正しい月" : "誤った月" );
}

>>266
void main() {
int attend, test;
printf( "input attend test: " ); scanf( "%d %d", &attend, &test );
if ( attend >= 70 ) if ( test >= 60 ) printf( "合格\n" ); else printf( "不合格\n" ); else printf( "不合格\n" );
}
295デフォルトの名無しさん:2006/05/24(水) 09:55:53
>>293
double ans=0.0,term=x,mx2=-x*x;
for(i=1;term!=0;i++){
ans+=term;
term*=mx2/(2*i*(2*i+1));
}
296デフォルトの名無しさん:2006/05/24(水) 10:00:02
>>295
算術関数で出した値とだいぶずれるんですが・・・
297デフォルトの名無しさん:2006/05/24(水) 10:07:49
>>293
mx2=-((x-1.570796326)*(x-1.570796326));
298デフォルトの名無しさん:2006/05/24(水) 10:09:56
>>297
それはなんの処理ですか?
299デフォルトの名無しさん:2006/05/24(水) 10:11:13
>>298
mx2=-x*x;
と入れ替えろと言っている
300デフォルトの名無しさん:2006/05/24(水) 10:15:22
>>299
1.5・・・・がどこからでてくるのかさっぱりです・・
301デフォルトの名無しさん:2006/05/24(水) 10:20:30 BE:34937892-#
ヒント: π/2
302デフォルトの名無しさん:2006/05/24(水) 10:30:23
π/2 なのはわかりました。なぜそういうことするといいのですか?
303デフォルトの名無しさん:2006/05/24(水) 12:40:25 BE:122283397-#
ヒント: 中学校の数学の教科書
304デフォルトの名無しさん:2006/05/24(水) 13:23:15
double mysin(double x)
{
double ans, term, mx2;
int i;

ans = 0.0;
x = fmod(x, 3.141592653589793238462643383 * 2);
term = x;
mx2 = -x * x;
for( i = 1 ; term != 0 ; i++ ) {
ans += term;
term *= mx2 / (2 * i * (2 * i + 1));
}
return ans;
305デフォルトの名無しさん:2006/05/24(水) 17:20:38
>>291
#include <stdio.h>
#include <math.h>
int main(){
int i, n;
double a, s = 0.0, ss = 0.0, v, o;
printf_s("n = ");
scanf_s("%d", &n, 1);
for(i = 0; i < n; i++){
scanf_s("%lf", &a, 1);
s += a;
ss += a * a;
}
ss /= n;
v = ss - s/n;
o = sqrt(v);
printf_s("合計:%f\n平均:%f\n分散:%f\n標準偏差:%f\n",s , s / n, v, o);
return 0;
}
306デフォルトの名無しさん:2006/05/24(水) 17:30:01
try-catchの使い方を教えてください。
調べたんですけど、詳しく教えてくれるサイトが見当たりませんでした。
307デフォルトの名無しさん:2006/05/24(水) 17:36:13
>>291
#include <stdio.h>
int main(){
int i, j, n = 14;
for(i = 0; i < n; i++){
for(j = 0; j < n - i; j++)
putchar(' ');
for(j = 0; j < 2 *(i + 1) - 1; j++)
putchar('*');
puts("");
}
return 0;
}
308デフォルトの名無しさん:2006/05/24(水) 17:48:08
>>291
#include <stdio.h>
int main(){
int n;
scanf_s("%d", &n, 1);
while(n--)
for(int k = 0; k < 4; k++)
for(int j = 0; j < 4; j++){
for(int i = 0; i < 4; i++)putchar('*');
putchar((j + 1) % 4 ? ' ' : '\n');
}
}
309デフォルトの名無しさん:2006/05/24(水) 18:57:58
>>306
>>1もしくはスレ違い
310デフォルトの名無しさん:2006/05/24(水) 19:37:50
[1] 授業単元:卒業研究
[2] 問題文(含コード&リンク):コンピュータとのじゃんけんプログラム
ただしファイルの入出力を必ずする。
コンピュータの出すぐーかちょきかぱーの順番をファイルに書いておいて呼び出す
勝敗を常に表示してファイルに書きこんでいく
[3] 環境
 [3.1] OS: Windows/
 [3.2] コンパイラ名とバージョン:>>291と同じ
 [3.3] 言語: C++
[4] 期限: 今週中
[5] その他の制限:無いと思う

お願いします
311デフォルトの名無しさん:2006/05/24(水) 19:38:27
[1] 授業単元: C言語(こんな感じでいいのか?)
[2] 問題文(含コード&リンク): コマンドから2つの文字列を入力して、後ろにある文字列にある単語を検索できるようにする。何番目に登場するかも表示。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:よく分からないです…
[3.3] 言語:C
[4] 期限:今週中
[5]文字を比較する関数は使用不可
main以外に最低一つ使う


【例】"ahoahoshine" "shine"
結果:shineは7文字目からみたいよ
"ahoahoshine" "baka"
結果:無いわボケ
312デフォルトの名無しさん:2006/05/24(水) 19:44:19
文字列を検索する関数はいいんだな
313デフォルトの名無しさん:2006/05/24(水) 19:52:01
>>312さん
それもダメっぽいです…
strlenとかな大丈夫ぽいです
314デフォルトの名無しさん:2006/05/24(水) 19:54:27
>>311
# include <stdio.h>

int str_search(char *str,char *search)
{
int i;
for (i=1;*str!='\0';i++,str++){
if (*str==*search){
return i;
}
}
return 0;
}

int main(void)
{
int a;
char str[256],search[256];
scanf("%s",str);
scanf("%s",search);
a=str_search(str,search);
if (a==0){
printf("結果:無いわボケ\n");
}else{
printf("結果:%d番目からあるっぽいよ\n",a);
}
return 0;
}
315デフォルトの名無しさん:2006/05/24(水) 19:57:17
この問題で数週間浪費中…
助けて下さい(`・ω・´)
316デフォルトの名無しさん:2006/05/24(水) 19:58:36 BE:52406993-#
>>311
#include<stdio.h>
#include<string.h>
int main(int argc, char* argv[]){
char* find;
if (argc > 2) {
find = strstr(argv[1], argv[2]);
if (find) {
printf("%sは%i文字目からみたいよ\n", argv[2], (find - argv[1]));
} else {
printf("無いわボケ\n");
}
return 0;
}
317デフォルトの名無しさん:2006/05/24(水) 19:59:14
>>314
判定甘くね?
318デフォルトの名無しさん:2006/05/24(水) 19:59:55
strstrは使用不可じゃね?
319デフォルトの名無しさん:2006/05/24(水) 20:00:33
>>317
ばれなきゃいいんだ
320デフォルトの名無しさん:2006/05/24(水) 20:01:39
はやっ!
何だったんだおれは…orz
strstrは不可みたいです
楽しちゃダメらしいっす
321デフォルトの名無しさん:2006/05/24(水) 20:04:40
楽しちゃダメならここで答えを教えてもらうなんて論外だな
322デフォルトの名無しさん:2006/05/24(水) 20:05:48
>>321に激しく同意
323デフォルトの名無しさん:2006/05/24(水) 20:07:36
ある程度は出来たんですが、判定が微妙なんでソースを参考にしたかったんです
324デフォルトの名無しさん:2006/05/24(水) 20:10:29
2つめの文字列の先頭が見つかったらそこを返すんじゃ判定があますぎて
参考もなにもないだろ
325デフォルトの名無しさん:2006/05/24(水) 20:15:25
まぁ初心者という事で
2文字目以降が分からないです
326デフォルトの名無しさん:2006/05/24(水) 20:18:04 BE:104814296-#
>>318
#include<stdio.h>
char* mystrstr(const char* str1, const char* str2)
{
int i;
for(i=0; str2[i] != '\0'; i++) {
if (*str1=='\0' && str2[i] != '\0') {
return NULL;
}
if (*str1 == str2[i]) {
str1++;
} else {
continue;
}
}
return str1;
}

int main(int argc, char* argv[]){
char* find;
if (argc > 2) {
find = mystrstr(argv[1], argv[2]);
if (find) {
printf("%sは%i文字目からみたいよ\n", argv[2], (find - argv[1]));
} else {
printf("無いわボケ\n");
}
return 0;
}
327デフォルトの名無しさん:2006/05/24(水) 20:32:06 BE:157221599-#
>>326
全然駄目じゃん。

char* mystrstr(const char* str1, const char* str2)
{
int i;
for(i=0; str2[i] != '\0'; i++) {
if (*str1=='\0' && str2[i] != '\0') {
return NULL;
}
if (*str1 != str2[i]) {
i=0;
}
str1++:
}
return str1;
}
328デフォルトの名無しさん:2006/05/24(水) 20:59:18
すみませんが、質問です。
標準入力から、最大で1行600文字の文字列を受け取るにはどうしたら良いので
しょうか?ためしに書いてみたのですが、このコードだと600文字を超えると
暴走してしまいます。

#include <iostream>
# define MAXLEN 600

int main()
{
  char line[MAXLEN];
  while(!std::cin.eof())
    {
        std::cin.getline( line, MAXLEN ) ;
        std::cout << line << std::endl;
    }
  return 0;
}

環境は、以下のとおりです。
g++ (GCC) 3.4.3 20041212 (Red Hat 3.4.3-9.EL4)
329デフォルトの名無しさん:2006/05/24(水) 21:05:39
>>328
暴走。どの辺が?
まぁよう分からんけどstd::stringでも使えば。

#include<iostream>
#include<string>
int main()

  std::string line;
  while(getline(std::cin,line))
  {
    std::cout << line << std::endl;
  }
  return 0;
}
330デフォルトの名無しさん:2006/05/24(水) 21:06:24
[1] 授業単元:情報工学演習
[2] 問題文(含コード&リンク):指定したノードより下のノードを
(指定したノードは含まず)
すべて削除する関数int deletetree(Node *p)を作成せよ。
返り値は実際に削除したノードの数とせよ。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1933.txt
まではできています。
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:bcc32
 [3.3] 言語:C
[4] 期限:2006年5月29日18:00まで
お願いします。トリップは要りますか?
331デフォルトの名無しさん:2006/05/24(水) 21:11:29
>>328
# define MAXLEN 600
332328:2006/05/24(水) 21:16:56
>>329
ありがとうございます。
私にも原因は分かりませんが、確かにこのコードを実行すると、ASCIIキャラ
クタを600文字以上与えると暴走するのです。topコマンドが振り切れてしまい
ます。

いただいたコードはこちらでも動作しました。しかし、長さは不定になってし
まうようです。600文字で打ち切るにはどうしたら良いのでしょうか?
333デフォルトの名無しさん:2006/05/24(水) 21:18:09 BE:31057128-#
>>330
int deltree_t(Node* p, int ct){
if (p && p->left) {
++ct;
ct += deltree_t(p->left, ct);
free(p->left);
p->left=NULL;
}
if (p && p->right) {
++ct;
ct += deltree(p->right);
free(p->right);
p->right=NULL;
}
return ct;
}

int deltree(Node* p){
return deltree_t(p, 0);
}
334デフォルトの名無しさん:2006/05/24(水) 21:18:58 BE:31056544-#
>>333
×ct += deltree(p->right);
○ct += deltree_t(p->right, ct);
335デフォルトの名無しさん:2006/05/24(水) 21:19:37 BE:54348274-#
>>332
MAXLENを600にしても600文字は受けられない。
336330:2006/05/24(水) 21:26:04
>>333-334
ありがとうございます。
本当に助かりました。
337デフォルトの名無しさん:2006/05/24(水) 21:34:33
>>328
string使う場合は、メンバメソッドのresizeを使うか、
substrを使って部分文字列を取る。
あくまでレガシーな配列にこだわる場合は、
大きく配列サイズを取っておいて、
600文字分コピーする。
338328:2006/05/24(水) 21:39:48
>>337
ありがとうございます。
とりあえず、こんな感じでやってみることにしました。

#include<iostream>
#include<string>
#define MAXLEN 600
int main()
{
  std::string line, line2;
  while(getline(std::cin,line))
    {
      if (line.length() > MAXLEN) {
        line = line.substr(MAXLEN);
      }
      std::cout << line << std::endl;
    }
  return 0;
}
339デフォルトの名無しさん:2006/05/24(水) 21:46:48
[1] 授業単元:演習
[2] 問題文(含コード&リンク):
キーボードから入力した文字列に,'a'という文字と'A'という文字の出現数の合計を表示するプログラムを作成しなさい
* 入力する文字列の長さは最大で80文字までとしてよい.
* 文字は1文字ずつ読み込むのではなく文字列として読み込むこと.

[3] 環境
 [3.1] OS: linux
 [3.2] コンパイラ名とバージョン: gcc 4.00
 [3.3] 言語: C
[4] 期限: 今晩12時

[5] その他の制限:とくになし
340339:2006/05/24(水) 21:49:07
期限を今晩12時までとしましたが、明日25日の深夜24時までの間違いです。
よろしくお願いします。
341デフォルトの名無しさん:2006/05/24(水) 21:52:20
>>339
#include<stdio.h>
int main()
{
    char l[81],*p=l,c=0;
    gets(l);
    while(*p)c+=(*p++|32)=='a';
    printf("%d\n",c);
}
342デフォルトの名無しさん:2006/05/24(水) 23:04:30
[1] 授業単元:プログラム演習
[2] 問題文(含コード&リンク)
簡単なタイピングソフトを作成しなさい.画面上に,例文を表示し,ユーザーにキーボードから入力させる入力した文字列と例文が等しい時には,"Ok!",等しくない時には"Miss!"と表示するようにしなさい.
例文は「How is it that our conscious and private minds have a sense of self?」とすること.
文字列を比較するC言語の標準関数であるstrcmpを使ってプログラムを作成すること.
入力される文字列の最大の長さはで80文字とする

[3] 環境
 [3.1] OS: linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 木曜日 朝9時まで
[5] その他の制限:とくになし

よろしくお願いします
343デフォルトの名無しさん:2006/05/24(水) 23:06:55
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
正整数の組n,kに対する関数subsum(n,k)は集合{1,2,・・・n}の部分集合Sで、S中の数の総和が丁度kとなるものの
種類数を表すとする。このときf(0,k)を適切に定めると以下が成り立つ。

f(n,k)=f(n-1,k)+f(n-1,k-n) (1≦n≦k)
f(n-1,k) (1≦n, n>k)
1 (n=0=k)
0 (n=0,k>0)
上記の式を用いて、f(n,k)を計算するプログラムを作成せよ。

[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 明日までです
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

問題の意味から理解できなくて・・・お願いします!m(_ _)m
344デフォルトの名無しさん:2006/05/24(水) 23:14:27
>>342
#include <stdio.h>
#include <string.h>
int main()
{
char buf[80];
char ex[] = "How is it that our conscious and private minds have a sense of self?";
puts(ex);
fgets(buf, sizeof(buf) - 1, stdin);
buf[strlen(buf) - 1] = NULL;
if(strcmp(buf, ex) == 0)puts("ok");
else puts("miss");
return 0;
}
345 ◆2LLfCgVf7Y :2006/05/24(水) 23:16:19
>>44
ありがとうございます!!
しかしながら配列(fgetsってそうですか?)まだ習ってないのを忘れてました…_| ̄|○
346デフォルトの名無しさん:2006/05/24(水) 23:18:23
>>342
#include <stdio.h>
#include <string.h>

#define ANS "How is it that our conscious and private minds have a sense of self?"

int main(void)
{
char str[81];
puts(ANS);
gets(str);
if (strcmp(str,ANS)==0){
puts("OK!");
}else{
puts("Miss!");
}
return 0;
}
347デフォルトの名無しさん:2006/05/24(水) 23:18:50
[1] 授業単元:C演習
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1934.txt
[3] 環境
 [3.1] OS:freeBSD
 [3.2] コンパイラ名:gcc
 [3.3] 言語:C
[4] 期限:5月25日12:00まで
[5] その他の制限:特に無し

お願いします
348デフォルトの名無しさん:2006/05/24(水) 23:25:22
>>343
int f(int n, int k){
int r;
if(n == 0){
if(k == 0) r = 1;
else r = 0;
}else if(n >= 1){
if(n > k) r = f(n - 1, k);
else r = f(n - 1, k) + f(n - 1, k - n);
}
return r;
}
f(n,k)はこんな感じになると思う
あとは、mainに組み込めば
349デフォルトの名無しさん:2006/05/24(水) 23:30:19
>>342
配列をまだ習っていない…
文字列比較関数strcmpを使う…
矛盾してね?
350デフォルトの名無しさん:2006/05/24(水) 23:31:02 BE:27174072-#
>>347
実際に動かしてみろ。
351デフォルトの名無しさん:2006/05/24(水) 23:33:53
1
352デフォルトの名無しさん:2006/05/24(水) 23:34:04
行番号は取る気しないよね
353デフォルトの名無しさん:2006/05/24(水) 23:37:24
>>348
ありがとうございました。関数f(n,k)が成り立つことを示せと言われたんですが、やはり意味がわかりません。教えて下さい
354デフォルトの名無しさん:2006/05/24(水) 23:41:59
>>353
関数subsumって関数f?
355デフォルトの名無しさん:2006/05/24(水) 23:44:52
>>350
動かしたら、
JohnJimJaneClyde%s

と出力されるのですがなにがいけないのかがわかりません。
356デフォルトの名無しさん:2006/05/24(水) 23:48:23
>>354
よくわかんないんですが、他になにも書かれてないので、そうと考えるしかないですよね
357デフォルトの名無しさん:2006/05/25(木) 00:20:24
>>349
レス番号の読み違い?
358デフォルトの名無しさん:2006/05/25(木) 00:27:40
初めてお伺いします。
よろしくお願いします。
[1] 授業単元:C言語実践演習
[2] 問題文(含コード&リンク): 人数Xを読み込んだ後,配列に身長のデータを読み込んでいき,
入力された身長を10cmごとにわけたヒストグラムを生成するプログラムの作成
[3] 環境
 [3.1] OS: Linux
 [3.2] gcc 3.4
 [3.3] 言語: C
[4] 期限: 明日
[5] その他の制限: 先週の時点でWhille fo if文などを、
今回で配列を学びました。
359デフォルトの名無しさん:2006/05/25(木) 00:28:26
>>355
>listに格納された名前を表示させるというものである

それ以外のものが表示されてはいけないとは思わないか?
360デフォルトの名無しさん:2006/05/25(木) 00:38:33
>>359
なぜ%sが出力されてしまうのかがわからない、
という意味で言ったのですが答え方が悪かったですね。
361デフォルトの名無しさん:2006/05/25(木) 00:50:20 BE:54348847-#
>>358
#include<stdio.h>
#include<stdlib.h>
#define MAXITEM 100
int main(void){
char tmp[100];
int tall[MAXITEM];
int hist[30];
int i, j, bound;
fgets(tmp, 100, stdin);
if ((bound=atoi(tmp)) < MAXITEM){
for(i=0; i<bound; i++){
fgets(tmp, 100, stdin);
tall[i] = atoi(tmp);}
for(j=0; j<300; j+=10)
for(i=0; i<bound; i++)
if (j<=tall[i] && tall[i]<(j+10))
hist[j/10]++;
for(j=0; j<300; j+=10){
printf("%03i ", j);
for(i=0; i<hist[j/10]; i++)
putchar('*');
putchar('\n');}
return 0;}
362デフォルトの名無しさん:2006/05/25(木) 00:51:14 BE:54348847-#
>>360
listの要素数に対して、ループが何回回っているか考えろ。
363デフォルトの名無しさん:2006/05/25(木) 01:15:43
>>362
MEMBERを4にしても%sが出力されてしまいます
364デフォルトの名無しさん:2006/05/25(木) 01:19:37
1:科目名 C言語プログラミング2
2:環境 リナックス gcc C言語
3:問題文 整数Xと実数データa1, a2, ..., aXを読み込んだ後,a1, a2, ...,
aXを小さい順に並べ替えるプログラムを作成せよ.
4:期限 26日
5:制限、習ったところ 講義では配列まで

よろしくお願いします
365デフォルトの名無しさん:2006/05/25(木) 01:38:52
[1] 授業単元:プログラミング入門
[2] 問題文:文字を入力して、入力した文字列の中から"均s"と"均e"を検索する。もし"均s"
と"均e"の両方が入っていれば、main関数に0を返し、「編集していません」と表示して、入
力した文字列は、そのまま出力せよ。もしも"均s"か"均e"のどちらかしかなければ、main
関数に1を返して、「編集しました」と表示して、文字列から"均s"か"均e"の部分を削除して
表示させよ。
(具体例)
入力された文字 出力時
均sあいうえお均e ------>     均sあいうえお均e
あいうえお均e ------> あいうえお
均sあいうえお ------> あいうえお
あい均sうえお均e ------> あい均sうえお均e
あ均sいうえ均sお ------> あいうえお
あい均eうえお均e ------> あいうえお
[3] 環境
 [3.1] OS:unix
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 今日中
[5] その他の制限: 文字の入力と関数で行われた処理の結果を出力する部分は、main関
数内で、検索や削除は自作関数内で行う。
少々難しいかもしれませんが、職人の皆様よろしくお願いします。
366デフォルトの名無しさん:2006/05/25(木) 01:53:13
>>363
ループの中で index の値を表示させてみ?
367デフォルトの名無しさん:2006/05/25(木) 01:56:31
>>363
MEMBERが4ならループする回数は何回?
368デフォルトの名無しさん:2006/05/25(木) 01:59:46
>>366-367
あぁ、
index <= MEMBERではなく index < MEMBER にするのか。
ありがとうございました。
369デフォルトの名無しさん:2006/05/25(木) 03:41:54
単元名:プログラミングC
問題文:次のような機能を持つ電卓プログラムを実現せよ。
(1)基本機能
 1.演算子は+,-,*,/を許す。
 2.被演算子にはdouble型を許す。
 3.式の記法には逆ポーランド記法を用いよ。
 4.演算子=により結果を表示する。
 実行例(左端の>は入力を表す):(1-3)*(5+6)の計算
 >1 3 - 5 6 + * =
 >-11

(2)数学関数
 sin,cos,tan,exp,sqrなど(サポートする関数は各自決めよ)
 実行例:
 >3 sqr =
 >9
 >2 sin sqr 2 cos sqr + =
 >1

(3)メモリ機能
 代入法は特定しないが、次のような方法がある。
 '>'+英文字によって、英文字変数に直前の演算結果の内容を保存する。
 >1 2 + >a
 >3 a * >b
 >b a - =
 >6

環境:OS→WindowsXP、コンパイラ→gcc
言語:C
期限:2006年05月29日0:00まで
その他:配列を利用したスタックを使うようです。ポインタなどの知識はありません。
よろしくお願いします。
370デフォルトの名無しさん:2006/05/25(木) 03:56:32
>>259
(1)が分かる方、どなたかいらっしゃいませんか?
371困ってます:2006/05/25(木) 05:29:00
1. 指定された個数だけ整数を読み込んで、それらの合計、平均、分散、標準偏差
を表示するプログラムの書き方がわかる方いますか?
372デフォルトの名無しさん:2006/05/25(木) 08:12:50
>>369 まんどくせ
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<ctype.h>
double s[80],*t=s,value[80];
char c[80],name[80][80];
int max_p=0;
double*srch(char*p){
    int i;
    for(i=0;i<max_p;++i)
        if(strcmp(name[i],p)==0)return value+i;
    strcpy(name[i],p);
    return value+i;
}
#define o(p) else if(strcmp(c,#p)==0){--t;t[-1] = t[-1] p t[0];}
int main(){
    while(!~-scanf(" %79s",c))
        if(0){}o(+)o(-)o(*)o(/)
        else if(strcmp(c,"=")==0)printf("%g\n",*--t);
        else if(strcmp(c,"sin")==0)t[-1] = sin(t[-1]);
        else if(strcmp(c,"cos")==0)t[-1] = cos(t[-1]);
        else if(*c=='>') printf("%g\n",*srch(c+1) = *--t);
        else if(isdigit(*c)) *t++=atof(c);
        else *t++ = *srch(c+1);
    return 0;
}
373デフォルトの名無しさん:2006/05/25(木) 08:23:28
>>370
ライブラリ使っちゃったモナ。
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <time.h>
int main(int argc,char *argv[]){
struct stat st;
int i,fd;
for(i=1;i<argc;i++){
fd = open(argv[i],O_RDONLY);
fstat(fd,&st);
printf("%16s %10d %8o %s",argv[i],st.st_size,st.st_mode,ctime(&st.st_mtime));
close(fd);
}
return 0;
}
374デフォルトの名無しさん:2006/05/25(木) 08:33:26
お願いしますー

[1] 授業単元: C言語プログラミング1
[2] 問題文(含コード&リンク):配列を利用し、整数Xと実数データa1, a2, ..., aXを読み込んだ後,a1, a2, ...,
aXを小さい順に並べ替えるプログラムを作成せよ.
[3] 環境
 [3.1] OS:VineLinux
 [3.2] コンパイラ名とバージョン: gcc3.4
 [3.3] 言語: C
[4] 期限: 本日13:00
[5] その他の制限:ifやwhileなどの構文や、配列まで
375デフォルトの名無しさん:2006/05/25(木) 08:35:47
>>374
あれ、良く見たら同じ問題っぽいのがあるや…
学校同じなのかな・・・
重複失礼しました。
376デフォルトの名無しさん:2006/05/25(木) 09:27:18 BE:122283779-#
>>364
#include<stdio.h>
#include<stdlib.h>
int cmpdbl(const double* a, const double* b){return (int)*a-*b;}
int main(void){
char tmp[100];
int x, i;
double* f;
fgets(tmp, 100, stdin);
x=atoi(tmp);
f=(double*)malloc(sizeof(double)*x);
for(i=0; i<x; i++){
fgets(tmp, 100, stdin);
f[i]=atof(tmp);
}
qsort(f, x, sizeof(double), (int (*)(const void*, const void*))cmpdbl);
for(i=0; i<x; i++){
printf("%f\n", f[i]);
}
return 0;
}
377デフォルトの名無しさん:2006/05/25(木) 09:29:38 BE:124224588-#
>>376
やべ。
×int cmpdbl(const double* a, const double* b){return (int)*a-*b;}
○int cmpdbl(const double* a, const double* b){return (*a>*b)?1:((*a<*b)?-1:0);}
378デフォルトの名無しさん :2006/05/25(木) 12:10:43
あの質問なのですが、
例えば、
int x = 10;
があって、
write()を使って10をプロンプトに出力するには
どうすればいいのでしょうか?
379369:2006/05/25(木) 12:15:32
>>372
レスありがとうございます
ですがポインタの使用などがよくわかりません…
380デフォルトの名無しさん:2006/05/25(木) 12:35:06
>>378
標準出力にwrite(2)を使ってと言うことなら、
char buf[20];
sprintf(buf, "%d", x);
write(1, buf,strlen(buf);
こんなもんで。
381デフォルトの名無しさん :2006/05/25(木) 13:11:00
>380
sprintfって高水準ライブラリ関数ですか?
システムコールのみしかつかえないっていう制約があるのですが。
382デフォルトの名無しさん:2006/05/25(木) 13:22:48
[1] 授業単元:コンピュータ基礎
[2] 問題文:円周率を小数点以下100桁を計算するプログラム
[3] 環境
[3.1] OS:WinXP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:5月28日
[5] その他の制限:マーチンの公式
π=16arctan1/5-4arctan1/239
を使って求める

初心者なのでサーパリわかりません、職人様よろしくお願いします。
383デフォルトの名無しさん:2006/05/25(木) 13:24:52 BE:52406993-#
>>369 とりあえず2まで。
#define STACK_DEPTH 100
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
double stack[STACK_DEPTH];
int sp=STACK_DEPTH;
double pop(void){return (sp<STACK_DEPTH)?stack[sp++]:0.0;}
void push(double f){if(sp>0)stack[--sp]=f;}
int main(void){
char line[100],*str,*str2,tmp[100];
while(1){
fgets(line, 100, stdin);
str=line;str2=strchr(line,' ');
if(str2){strncpy(tmp,str,str2-str);str=str2+1;
if(strcmp(tmp, "sin")==0) push(sin(pop())); else
if(strcmp(tmp, "cos")==0) push(cos(pop())); else
if(strcmp(tmp, "sqr")==0) push(pow(pop(),2)); else
if(strcmp(tmp, "+")==0) push(pop()+pop()); else
if(strcmp(tmp, "-")==0) push(pop()-pop()); else
if(strcmp(tmp, "*")==0) push(pop()*pop()); else
if(strcmp(tmp, "/")==0) push(pop()/pop()); else
if(strcmp(tmp, "=")==0) printf("%f\n", pop()); else
push(atof(tmp));
}
return 0;
}
384デフォルトの名無しさん:2006/05/25(木) 13:29:49 BE:67935375-#
>>383
いけね。内側ループ忘れ。

while(1){ str=line;
while((str2=strchr(line,' '))){strncpy(tmp,str,str2-str);str=str2+1;
if(strcmp(tmp, "sin")==0) push(sin(pop())); else
if(strcmp(tmp, "cos")==0) push(cos(pop())); else
if(strcmp(tmp, "sqr")==0) push(pow(pop(),2)); else
if(strcmp(tmp, "+")==0) push(pop()+pop()); else
if(strcmp(tmp, "-")==0) push(pop()-pop()); else
if(strcmp(tmp, "*")==0) push(pop()*pop()); else
if(strcmp(tmp, "/")==0) push(pop()/pop()); else
if(strcmp(tmp, "=")==0) printf("%f\n", pop()); else
push(atof(tmp));
}}
return 0;
385デフォルトの名無しさん:2006/05/25(木) 13:49:05
>>101
すみません、これを
mode, m3f, x0, y0を宣言しないでやることはできますか?
386デフォルトの名無しさん:2006/05/25(木) 15:12:46
グラヒィック関数だかで星を書きたいんですけどそのプログラムを教えて下さい。
387デフォルトの名無しさん:2006/05/25(木) 15:29:09
fstatシステムコールを使ってファイルの種類
(一般ファイル、ディレクトリ、パイプ等)を
表示するにはどうすればよいでしょうか?
388デフォルトの名無しさん:2006/05/25(木) 15:47:29
>>1
389デフォルトの名無しさん:2006/05/25(木) 15:53:54
このN88Basicのプログラムを、C++に書き換えたいのですが
ボクの脳では、もうお手上げです・・・。

自動で書き換えるソフトを検索したりもしたのですが
Win98用だったりで使えなかったりと、ダメでした。

http://heppoko.fam.cx/upload/min/download.cgi?mode=form&file=159
DLKey memo

N88Basic→C++の作業を
もしよろしければ、お願いします。
390デフォルトの名無しさん:2006/05/25(木) 15:56:57
>>1
391デフォルトの名無しさん:2006/05/25(木) 16:18:37
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
中置記法で書かれた式を後置記法に変換するプログラムを作成せよ。
ただし、負の数やカッコを考える必要はない。
(実行例)
12+34-56*789/10
1234+56789*10/-
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 5月29日(月)
[5] その他の制限:
キューとスタックの演習なので、できるだけ用いていただきたいです。
392デフォルトの名無しさん:2006/05/25(木) 16:20:41
[1] 授業単元: オペレーティングシステム
[2] 問題文:
1.引数にファイル名を指定すると、そのファイルのサイズと
ファイルの種類(一般ファイル、ディレクトリ、パイプ等)、
最終変更時刻を表示する(fview)を作成せよ。但し、引数には複数
のファイルを指定できるようにすること。また、fstatシステムコール
を用いること。

2.引数に指定した複数のテキストファイルの内容を結合して一つの
ファイルにまとめるコマンド(cat2)を作成せよ。但し、まとめた内容を
格納するファイル名は"concat.txt"とすること。但し、catコマンドを
system関数内部で呼ばないこと。

[3] 環境
 [3.1] OS:windows cygwin
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C言語
[4] 期限: ([2006年5月27日23:59まで]
[5] その他の制限: 高水準ライブラリ関数は使用せずに
システムコールのみを使用する。

すみません。宜しくお願いします。
393デフォルトの名無しさん:2006/05/25(木) 16:29:00
>>341さんが答えてくださった回答を
ポインタを使わずに記述したらどのようになるのか
どなたか、教えていただけないでしょうか?
394デフォルトの名無しさん :2006/05/25(木) 16:31:17
>>392
おまいはCSの誰だ?
395 ◆2LLfCgVf7Y :2006/05/25(木) 16:40:59
[1] 授業単元: 計算機プログラミング
[2] 問題文(含コード&リンク): 再帰的関数定義とsin(x)のマクローリン展開の初めの10項を用いてsin(x)の近似値を出力するプログラムを作成せよ。
この際、xの値をキーボード入力すると、sin(x)の値の近似値を

sin_10=*******

の形式で表示させるようにせよ。
[3] 環境
 [3.1] OS: (Windows/Linux/等々) winxp
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) LSI-C86試食
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) c
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 2006.5.26
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
再帰的関数定義でやる。
ポインタ?、配列は未習です。
先日もうpしたのですが、[5]を忘れていました。
どなたかやさしい人おねがいします_| ̄|○
396デフォルトの名無しさん:2006/05/25(木) 16:45:17
>389
ざっと見たがソース変じゃないか。
WHITEってwhileじゃね?とか*SELPが2700と2770の両方にあってGOSUB *SETPの飛び先が無いようだが?とか。
エラー出ずに動くのか?これ。
397デフォルトの名無しさん:2006/05/25(木) 17:07:31 BE:77640858-#
>>395
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
double fact(int n){ return n>0?n*fact(n-1):1;}
int main(void){
int n; double sinx, x; char tmp[100];
fgets(tmp, 100, stdin);
x=atof(tmp); sinx=0.0;
for(n=0; n<=10; n++){ sinx += (pow(x,2*n-1)/fact(2*n+1)); }
printf("sin_10=%f\n", sinx);
return 0;
}
398デフォルトの名無しさん:2006/05/25(木) 17:09:03 BE:69876566-#
>>398
必ずどっかしら間違うな。一発コーディングは難しい…
×pow(x,2*n-1)
○pow(x,2*n+1)
399デフォルトの名無しさん:2006/05/25(木) 17:15:58 BE:34937892-#
>>397
符号も抜けてるし…
sinx += pow(-1,n)*(pow(x,2*n+1)/fact(2*n+1));
400デフォルトの名無しさん:2006/05/25(木) 17:39:36
/\/\
( . . )
( )~~~



この画像を指定した座標を中心に回転させるプログラムを作りなさい。

という課題です(?_?)
三角関数を使うらしいんですけど…。
どなたか教えてください(ノ_・。)
401デフォルトの名無しさん:2006/05/25(木) 17:39:47
[1] 授業単元: 数値解析学

[2] 問題文
Gauss−Seidel反復法、及びSOR反復法によって連立一次方程式を解くプログラムを作成せよ。
(プログラム実行時に行列のデータ入力を行ない、計算できる様にプログラムせよ。)

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc、バージョンは分かりません。
 [3.3] 言語:C言語
[4] 期限: 29日までです。
[5] その他の制限:CとC++を少し習いました。
402デフォルトの名無しさん:2006/05/25(木) 18:19:14
>>393
char l[81],i,c=0;

for(i=0;l[i];i++)c+=(l[i]|32)=='a';

こんな感じ
403デフォルトの名無しさん:2006/05/25(木) 18:46:24
[1] 授業単元:演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1937.txt
[3] 環境
 [3.1] OS: linux
 [3.2] コンパイラ名とバージョン:gcc4.00
 [3.3] 言語: C
[4] 期限: 明日朝8時まで
[5] その他の制限: とくになし

よろしくお願いします。

404デフォルトの名無しさん :2006/05/25(木) 18:54:02
>>392
CS学科のプログラミングできないおバカさん、オレ様はもう課題終わったぜ。
まだ、やってんのか?
こんなトコで質問すると誰だかバレるな。
かわいそうに。
405デフォルトの名無しさん:2006/05/25(木) 19:14:27 BE:46585038-#
>>403
#include<stdio.h>
#include<stdlib.h>
int main(void){
double m1[3][3],m2[3][3],m3[3][3]; char tmp[100]; int i,j,k;
for(i=0; i<3; i++){
fgets(tmp, 100, stdin);
sscanf(tmp, "%lf %lf %lf", &m1[0][i], &m1[1][i], &m1[2][i]);
}puts("-----");
for(i=0; i<3; i++){
fgets(tmp, 100, stdin);
sscanf(tmp, "%lf %lf %lf", &m2[0][i], &m2[1][i], &m2[2][i]);
}puts("-----");
for(i=0;i<3;i++)for(j=0;j<3;j++)m3[j][i]=0;
for(i=0;i<3;i++)for(j=0;j<3;j++)for(k=0;k<3;k++)m3[j][i]+=m1[j][k]*m2[k][i];
for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%g ",m3[j][i]);putchar('\n');}
return 0;
}
406デフォルトの名無しさん:2006/05/25(木) 21:06:03
>>404
おまえここで何してんの
407311:2006/05/25(木) 21:11:24
関数4つ作ってみましたー
やっとできた・・・
408灰色の幽霊:2006/05/25(木) 21:14:04
>>146
>>147
>>148
どうもありがとうございました。完璧でした、

[1]情報処理
[2]標準入力から最初に与えられた個数(整数)の要素を持つ配列を
動的に生成し、その後、その個数分だけ(標準入力から)与えられた整数
データを逆順にして出力するプログラムを作成せよ(動作例参照)。
なお、プログラム終了時の領域の解放についても留意すること。

(動作例)「> 」の後の文字列はキーボードからの入力を表す

生成する配列の要素数を入力してください。
> 4
1つめの値を入力してください。
> 12
2つめの値を入力してください。
> 23
3つめの値を入力してください。
> 34
4つめの値を入力してください。
> 99
入力された値を逆順に表示します。
99 34 23 12
おわり
[4]6/1迄

よろしくお願いします。。
40941:2006/05/25(木) 21:52:50
>>101
確かに単純なエラーでした orz
大文字のVと小文字のVかよ、、、

こちらのプログラムだとエラーなし、で動くのですが、
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1938.txt

メニュークリックまで線を描かない
線が右上から勝手に始まってしまう
テキストが一文字のみ
2点をつなげるなどができません

最後、ご教授下さい!お願いします
410デフォルトの名無しさん:2006/05/25(木) 22:02:02
科目名:CAD/CAM演習

課題:GRAPHIC関数を使った愛のあるアート
まじで頼む
411デフォルトの名無しさん:2006/05/25(木) 22:10:24
[1] 授業単元:演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1939.txt
[3] 環境
 [3.1] OS: linux
 [3.2] コンパイラ名とバージョン:gcc4.00
 [3.3] 言語: C
[4] 期限: 明日朝まで
[5] その他の制限: ポインタは習っていません

よろしくお願いします。
412デフォルトの名無しさん:2006/05/25(木) 22:12:28
なんかつい最近同じ問題を見た気がする
413デフォルトの名無しさん:2006/05/25(木) 22:19:56
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
中置記法で書かれた式を後置記法に変換するプログラムを作成せよ。
ただし、負の数やカッコを考える必要はない。
(実行例)
12+34-56*789/10
12 34 + 56 789 * 10 / -
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 5月29日(月)
[5] その他の制限:
キューとスタックの演習なので、できるだけ用いていただきたいです。
414デフォルトの名無しさん:2006/05/25(木) 22:24:28
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1940.txt
[3] 言語: ProC
[4] unix
期限:もう過ぎてる・・・
その他の制限:sqlplusに接続しなくてはならない
[内容]
会員登録、削除等のプログラム

現在、プログラムの起動はされるのですが
各種項目が正常に作動しておりません。
入力そのものはできてるので、各関数部分に問題があるようです。
Procなのでスレ違いかもですがもしわかる方がおりましたらお願いします・・・
415 ◆2LLfCgVf7Y :2006/05/25(木) 22:28:33
>>397
ありがとうございます!!
でも、fgetsは配列関係ですか??
習ってないので良く分からないんですが(;´д`)
良ければfgetsを使わない方法お願いします(´・ω・`)
416デフォルトの名無しさん:2006/05/25(木) 22:31:41
417デフォルトの名無しさん:2006/05/25(木) 22:35:48
授業で習ってないから〜っての多いね
英作文で教科書にまだ出てない単語使うなって言うようなものだよなぁ
418デフォルトの名無しさん:2006/05/25(木) 22:39:06
>>410訂正
[1]授業単元:CAD/CAM演習
[2]問題文:GRAPHIC関数を使った愛のあるアート(なんかの絵、何でも良い)のプログラムを作れ
[3]環境
[3.1]OSと言われてイマイチ分からないXPで良いのかな?
[3.2]C言語
[3.3]1年前

ほんとお願いします><゛
419デフォルトの名無しさん:2006/05/25(木) 22:40:05
[授業単元]プログラミング
[言語]C言語
[提出日]5月26日
[環境]Visual Stdio.NET2003
[OS]Windows XP
[問題]
次の2題のプログラムを参考にしてプログラムを作成せよ。
1.データファイル DatFile.dat を読み込み、「会員番号」と「通し 番号」
(最初の会員番号 555 の A さんが 0 番、最後の 333 の J さん が 9 番)を順番に表示するプログラム
2. 「会員番号」と「通し番号」を順番に表示した後、「会員番号」 と「位置」を保存したインデックスファイル
IdxFile.dat を自動的 に作成するプログラム

とりあえず、1問目だけでもいいのでお願いします。
プログラムはUPしました。
■参考プログラム1
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1941.txt
■参考プログラム2
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1942.txt

420デフォルトの名無しさん:2006/05/25(木) 22:47:24
>>408
#include <stdio.h>
#include <stdlib.h>

int main(){
int num, *p, i, *p_tmp;

printf("生成する配列の要素数を入力してください。\n> ");
scanf("%d", &num);

if ((p = (int *)calloc(num, sizeof(int))) != NULL){
p_tmp = p;
for (i = 0; i < num; i++){
printf("%dつめの値を入力してください。\n> ", i + 1);
scanf("%d", p++);
}

printf("入力された値を逆順に表示します。\n");
do {
printf("%d ", *(--p));
} while (p != p_tmp);

free(p);

printf("\nおわり\n");
}

return 0;
}
421デフォルトの名無しさん:2006/05/25(木) 22:57:54
>>417
言語仕様でならってないなら分かるが標準ライブラリだもんな
習うとかじゃなくて、自分で調べるレベルだし
422デフォルトの名無しさん:2006/05/25(木) 23:06:05
>>417
あれれ?単語と文法の違いも分からないのかな?
馬鹿の僕たちが学習しているのはIやpenなどの単語じゃないでしょ?
I have a pen というIやpenの使い方を学習してるんだよ
それだから英語ができないんだよ^^
423デフォルトの名無しさん:2006/05/25(木) 23:12:27
>>418
ほんと誰かお願いします><゛
424デフォルトの名無しさん:2006/05/25(木) 23:20:21
>>423
ネタにマジレスしてみる。
>OSと言われて…
グラフィック関係なら、OSとコンパイラが指定されないと実質的に無理。

>GRAPHIC関数を使った
↑とも関連するけど、標準にはGRAPHIC関数という物はないので、その辺の指定を詳しく。

>1年前
何で今頃頑張ってるの?

>>422
例え話の揚げ足取るなんて、暇だね。
425デフォルトの名無しさん:2006/05/25(木) 23:21:55
>>424
具体例の使い方が間違ってますよ って言ってるだけだお^^
426デフォルトの名無しさん:2006/05/25(木) 23:39:39
>>424
ほんとスイマセン><゛
こんな感じのですhttp://p.pic.to/5637u
昨年単位取れなかったやつで、追認をしてくれないので出しますって言ったら明日なって言われたんです><;
だから明日ですスイマセン><゛
427デフォルトの名無しさん:2006/05/25(木) 23:43:42
>>419 です。
お願いします。問題でもいいので
428365:2006/05/25(木) 23:44:29
期限は過ぎてしまいましたが、かまわないので、誰か助けてください。
429デフォルトの名無しさん:2006/05/25(木) 23:47:05
>425
Cのifやwhileってのは文法だと思うぞ。
関係代名詞習ってないので使わないでって言うのと同じ気がする。

>426
>大変申し訳ございませんが、ただいまの時間はPCでのアクセスを制限しております。
別のところにアップしたほうがいいぞ。
430デフォルトの名無しさん:2006/05/25(木) 23:47:06
>>428
明らかに、まだ期限内だろ。そういう態度が気に食わない。
431苦しい ◆6plO32FN4k :2006/05/25(木) 23:48:33
[1] 授業単元: 計算機システム構成原理
[2] 問題文(含コード&リンク):

  (問題1)削除コマンド(myrm)及びハードリンクとシンボリックリンクの違い。
      unlinkを用いて、リンクを削除するプログラムmyrmを作成してください
  (問題2)ファイル属性を保存してコピーするコマンドmylsを作成してください。
        保存すべき属性は以下のものとします。
        ・モード(アクセス許可)
        ・最終変更時刻
     ヒント:statを用いてコピー元の情報を取り出し、chmodやutimeで設定します
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ名とバージョン: gcc 3.4 VC 6.0 であってると思う
 [3.3] 言語: C
[4] 期限: 2006年05月30日12:00まで
[5] その他の制限:特になし。よろしくお願いします
432デフォルトの名無しさん:2006/05/25(木) 23:54:11 BE:29115353-#
>>415
あとは自分で。
433デフォルトの名無しさん:2006/05/25(木) 23:55:31 BE:108696678-#
>>431
> [3.1] OS: UNIX
> [3.2] コンパイラ名とバージョン: gcc 3.4 VC 6.0 であってると思う
ねえよw
434苦しい ◆6plO32FN4k :2006/05/25(木) 23:59:14
>>gccではあります。バージョンはわかりません
435デフォルトの名無しさん:2006/05/26(金) 00:10:17
これですスイマセン><゛
http://a.p2.ms/n3vlq
436デフォルトの名無しさん:2006/05/26(金) 00:18:51
>>365
動作チェックはしてない。
#include <stdio.h>
#include <string.h>

int jisaku(char str[])
{
char *p, *q, *constr;
p = strstr(str, "均s");
q = strstr(str, "均e");
if( (p == NULL && q == NULL) || (p != NULL && q != NULL) ) return 0; /*前半は念のため*/
constr = (p == NULL)?"均e":"均e";
for( p = strstr(str, constr) ; p ; p = strstr(p + 1, constr) ) {
for( q = p ; *(q + 3) ; q++ ) *q = *(q + 4);
}
return 1;
}

int main(void)
{
char str[256];
whlie( fgets(str, 256, stdin) ) {
if( jisaku(str) ) puts("編集しますた");
else puts("編集してません");
printf("%s", str);
}
return 0;
}
437デフォルトの名無しさん:2006/05/26(金) 00:20:10
>>435
読めるか阿呆め。
文章で書かれてるなら、その内容をここに写せ。
438デフォルトの名無しさん:2006/05/26(金) 00:25:46
やるなあ>435
正直、そうくるとは思わなかった。
439デフォルトの名無しさん:2006/05/26(金) 00:34:42
>>437
#include <Glibw32>
int main()
{
ginit(300,300,WHITE);
GRAPH g;
g.line(100,100,200,200);
}
gend();
[EOF]
こんな感じです><゛
440デフォルトの名無しさん:2006/05/26(金) 00:36:28
>>439
すいませんこっちです><゛
#include <glibw32>
int main()
{
ginit(300,300,WHITE);
GRAPH g;
g.line(100,100,200,200);
}
gend();
[EOF]
こんな感じです><゛
441419:2006/05/26(金) 00:38:29
>>419 って難しいですか?
442デフォルトの名無しさん:2006/05/26(金) 00:43:47
入門レベル。これが自力でできないなら単位は諦めた方がいい。
443デフォルトの名無しさん:2006/05/26(金) 00:48:39
いや基本はコレなんですがアートって事で見本が宇宙の絵とかかなり凄いんですよ…‥
簡単な文字とかじゃダメみたいでまったく分からないんです><゛
444デフォルトの名無しさん:2006/05/26(金) 00:51:08
>419
ざっと見た感じ、参考プログラムそのままでいいんじゃないの?
何か駄目なの?
445 ◆2LLfCgVf7Y :2006/05/26(金) 00:53:29
>>432
このスレを卒業するべくもう一度一から勉強しようと思いました(´・ω・`)
今、学校で使っている『Cによるプログラミング演習』という本しかないのですが、
何かはじめに読むには最適な、↑の本より分りやすいものを教えてください!!
お願いします!!
446デフォルトの名無しさん:2006/05/26(金) 00:54:48 BE:122283779-#
>>443
カオスかフラクタルでもやればよかろ。
447デフォルトの名無しさん:2006/05/26(金) 01:06:25
>>369です

>>383
レスありがとうございました
内側のループとは何処につくのでしょうか?
448デフォルトの名無しさん:2006/05/26(金) 01:09:06
ほんと誰かお願いします><゛
これ出さないとヤバいんです><゛
449デフォルトの名無しさん:2006/05/26(金) 01:09:23
[1] 授業単元: アルゴリズム
[2] リストの最後に順次要素を追加できるように下線部を埋めなさい。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1943.txt

改行エラーが出たのでリンクで貼らせていただきます。
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: borland C++
 [3.3] 言語: C
[4] 期限: 5/29

何卒お願いします。
450224:2006/05/26(金) 01:10:53
>>443
『さようなら』って左上に文字列が出て。
10秒後、ピンク色で『でも大好き!』って文字列が右下に出る。
451224:2006/05/26(金) 01:11:44
>>443
あっ?
ライフゲームでいいじゃなーい!
452デフォルトの名無しさん:2006/05/26(金) 01:30:39
>>449
void lastin(int x, struct cell *head)
{
struct cell *p, *q;
p = head;
while(p->next!=NULL){
p = p->next;
}
q = (struct cell*)malloc(sizeof(struct cell));
p->next = q;
q->element = x;
q->next = NULL;
}
453デフォルトの名無しさん:2006/05/26(金) 01:31:48
鼻血でた
454デフォルトの名無しさん:2006/05/26(金) 01:33:24
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1944.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc 4.0
 [3.3] 言語: C
[4] 期限: 26日08:00
よろしくお願いします
455デフォルトの名無しさん:2006/05/26(金) 01:39:29
>>454
もしかして、問題違うんじゃ…
456デフォルトの名無しさん:2006/05/26(金) 01:46:38
助けてください(;ω;#)
457454:2006/05/26(金) 01:49:29
>>455
もうしわけないです

下のプログラムは関係ない問題のものです。
458413:2006/05/26(金) 01:53:02
どなたかお願いしますです
459デフォルトの名無しさん:2006/05/26(金) 01:58:29
>>454
void to_low(char s[]){
int i;
for(i = 0; s[i] != NULL; i ++)
if(s[i] >= 'a' && s[i] <= 'z')
s[i] -= 'a' - 'A';
}
460デフォルトの名無しさん:2006/05/26(金) 02:05:16
大学でCを習っている学生がC++を習い始めるのは
大体何年生くらいからなんですか?
461419:2006/05/26(金) 02:06:16
>>419
参考プログラム変更でいいので よろしくお願いします。
462デフォルトの名無しさん:2006/05/26(金) 02:11:02
>>460
>1
463デフォルトの名無しさん:2006/05/26(金) 02:21:57
[1] 授業単元:プログラミングT
[2] 問題文:
次の5×5行列を次のように整列し、出力も行列の形で出力せよ
22 19 12 6 20 1 2 3 4 5
5 11 2 19 9 6 7 8 9 10
21 18 1 13 4 → 11 12 13 14 15
3 10 25 7 14 16 17 18 19 20
23 15 8 16 24 21 22 23 24 25

[3] 環境
 [3.1] OS: windowsXP
 [3.2] コンパイラ: gcc
 [3.3] C
[4]今日中
お願いします
464463:2006/05/26(金) 02:26:32
問題文がおかしくなりました
22  19  12   6  20
5   11  2   19  9
21  18   1   13  4
3   10  25   7  14
23  15  8   16  24
これを
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
に整列する問題です
465デフォルトの名無しさん:2006/05/26(金) 02:36:23
[1] 授業単元:プログラミング演習T
[2] 問題文(含コード&リンク):
変数nameには名前,変数amountには貯金額(最初は0円)が入っている.
以下のように3回貯金できるプログラムを作成せよ.ただし変数はname, amount以外には一つしかつかえない.
-----------------------------
名前を入力して下さい:michinobu

michinobu さん.
現在の貯金高は,0円です.
今回はいくら貯金しますか?(単位:千円):10.5

michinobu さん.
現在の貯金額は,10500円です.
今回はいくら貯金しますか?(単位:千円):0.03

michinobu さん.
現在の貯金額は,10530円です.
今回はいくら貯金しますか?(単位:千円):100.0

michinobu さん.
全部で110530円貯まりました.
よくがんばりました.
------------------------------
[3] 環境
 [3.1] OS:WindowsXP-SP2
 [3.2] Microsoft Visual Studio 2003
 [3.3] 言語:C++
[4] 期限: 05月26日13:00まで
[5]下の状態までは出来ました。しかし貯金額に少数を打ち込むと失敗します。
あと、応用で[10530円]を[10,530円]といった具合にコンマを入れる問題があるのですがさっぱりです(汗
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1945.txt
466デフォルトの名無しさん:2006/05/26(金) 02:45:41
>>465
int enter; を double enter;
scanf("%d", &enter);をscanf("%lf", &enter);に書き直す

,のほうは
printf("%d,%d", amount/10000, amount%10000);
一万以下だと表示的におかしいけどif文でも使って分岐させれば…
467デフォルトの名無しさん:2006/05/26(金) 04:15:41
468デフォルトの名無しさん:2006/05/26(金) 05:32:43
469449:2006/05/26(金) 08:20:42
>>452
ありがとうございます。
470デフォルトの名無しさん:2006/05/26(金) 12:05:37
A=1 を何倍ずつしていくと5 回目に10000 を超えるか?
このプログラムお願いします!
471デフォルトの名無しさん:2006/05/26(金) 12:09:56
断る
472デフォルトの名無しさん:2006/05/26(金) 12:30:31
急ぎすぎて稚拙な文を書いたことをお詫び申しあげます。
473デフォルトの名無しさん:2006/05/26(金) 13:25:17
[1] 授業単元:プログラミング通論
[2] 問題文:
連結リストに対して、それを逆順に書き換える関数Reverse(struct node* p)を作成せよ。
(連結リストにおける構造体はこのように学習しました。)
struct node {
int i;
struct node* next;
}
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 5/29(月)
474デフォルトの名無しさん:2006/05/26(金) 13:47:10
>>473
struct node* Reverse(struct node* p)
{
  struct node* prev = NULL;
  while(p)
  {
    struct node* next = p->next;
    p->next = prev;
    prev = p;
    p = next;
  }
  return prev;
}
475デフォルトの名無しさん:2006/05/26(金) 14:33:51
>>474
本当にどうもありがとうございます。これからもがんばってください!
476デフォルトの名無しさん:2006/05/26(金) 14:38:10
>>474
オマエモナー
477デフォルトの名無しさん:2006/05/26(金) 15:20:16
[1] 授業単元:言語総論
[2] 問題文:
社員5名の給与を一万円,五千円,二千円,千円,五百円,百円,五
十円,十円,五円,一円の各紙幣および硬貨で支払う条件下で,社員5名の給与
をキーボードから入力し,各金額に対して用意すべき紙幣・貨幣の札数・個数およ
びそれらの合計を表示するプログラムを作成せよ.ただし,計算には
配列を使用すること.
入出力例)
Please input salary.
ID#1:216787
ID#2:150986
ID#3:357800
ID#4:109999
ID#5:234439
ID#1: Salary 216787YEN
10000YEN: 21  5000YEN: 1  2000YEN: 0  1000YEN: 1  500YEN: 1
100YEN: 2  50YEN: 1  10YEN: 3  5YEN: 1  1YEN: 2
ID#2: Salary 150986YEN
    ・
    ・
    ・
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 5/31
[5] どうかおねがいします(ノД`)なんかエグそうで申し訳ないですが・・・
478デフォルトの名無しさん:2006/05/26(金) 16:10:52
>>477
漏れの頭じゃこんなのしかできんかった
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1948.c
479デフォルトの名無しさん:2006/05/26(金) 16:14:01 BE:95109577-#
>>477
#include<stdio.h>
#include<stdlib.h>
#define MEMBERS 5
int changes(int money,int par){int res=0;while(money>par){money-=par;res++;}return res;}
int main(void){
int salary[MEMBERS];int fukuzawa[MEMBERS];int higuchi[MEMBERS];int noguchi[MEMBERS];
int shureimon[MEMBERS];int coin500[MEMBERS];int coin100[MEMBERS];int coin 50[MEMBERS];
int coin10[MEMBERS];int coin5[MEMBERS];int coin1[MEMBERS];
int i;char tmp[100];
for(i=0;i<MEMBERS;i++){printf("ID#%i:", i);fgets(tmp,100,stdin);salary[i]=atoi(tmp);}
for(i=0;i<MEMBERS;i++){printf("ID#%i: Salary %iYEN\n",i,salary[i]);
fukuzawa[i]=changes(salary[i],10000);salary[i]-=10000*fukuzawa[i];
higuchi[i]=changes(salary[i],5000);salary[i]-=5000*higuchi[i];
shureimon[i]=changes(salary[i],2000);salary[i]-=2000*noguchi[i];
noguchi[i]=changes(salary[i],1000);salary[i]-=1000*shureimon[i];
coin500[i]=changes(salary[i],500);salary[i]-=500*coin500[i];
coin100[i]=changes(salary[i],100);salary[i]-=100*coin100[i];
coin50[i]=changes(salary[i],50);salary[i]-=50*coin50[i];
coin10[i]=changes(salary[i],10);salary[i]-=10*coin10[i];
coin5[i]=changes(salary[i],5);salary[i]-=5*coin5[i];coin1[i]=salary[i];
printf("10000YEN:%i 5000YEN:%i 2000YEN:%i 1000YEN:%i 500YEN:%i\n",
fukuzawa[i],higuchi[i],shureimon[i],noguchi[i],coin500);
printf("100YEN:%i 50YEN:%i 10YEN:%i 5YEN:%i 1YEN:%i\n",
coin100[i],coin50[i],coin10[i],coin5[i],coin1[i]);}
return 0;}
480デフォルトの名無しさん:2006/05/26(金) 16:35:56
>479
int shureimon
ワロタw
その命名センスに座布団5枚w
481デフォルトの名無しさん:2006/05/26(金) 16:43:44 BE:139752498-#
しょうがねえだろ。守礼門描いてあるんだから。
482477じゃないよ:2006/05/26(金) 16:47:48
はーーい!>>479先生!
結果にマイナスとか出鱈目な値が出るのは仕様でつか?
483デフォルトの名無しさん:2006/05/26(金) 17:12:43
皆%演算子使わないのは何故・・・?
484デフォルトの名無しさん:2006/05/26(金) 17:12:44 BE:23292634-#
>>482
バグ3件くらい仕込んである。自分でデバッグしる。
485デフォルトの名無しさん:2006/05/26(金) 17:12:59 BE:58230656-#
>>483
嫌がらせ。
486難問〜:2006/05/26(金) 17:36:44
【質問テンプレ】
[1] 授業単元:C言語
[2] 問題文(含コード&リンク): 素因数分解の問題で、再帰を使って、和が一定となる自然数の列をすべて列挙するプログラムを考えよ。
また再帰を用いずに素因数分解を行うプログラムも考えよ。
そして、再帰を用いたプログラムと、再帰を用いないやつの比較 検討せよ

[3] 環境
 [3.1] OS: Windows
 [3.2] スタジオ6.0
 [3.3] 言語: C++
[4] 期限: 05月31日まで
です。
ほんとわかりません・・。
助けてください・・・。
どうかお願いします!
487難問〜:2006/05/26(金) 17:37:38
参考プログラムです!!お願いいたします。。
#include<stdio.h>
void abs_sum(int n,int w);
int main(){
int w=2,n=3;
abs_sum(n,w);
return 0;}
void abs_sum(int n,int w){
void in_abs_sum(int total_length,int n,int w);
in_abs_sum(n,0,w);}
void in_abs_sum(int total_length,int pos,int w){
int i,j,called=0;
if(pos>=total_length){
putchar('\n');
return;}
for(i=0;i<=w;++i){
if(called++){
for(j=0;j<pos;++j){
printf(" ");}}
printf(" %2d",i);
in_abs_sum(total_length,pos+1,w-i);}}
488デフォルトの名無しさん:2006/05/26(金) 17:38:33
>素因数分解の問題で、再帰を使って、和が一定となる自然数の列をすべて列挙するプログラムを考えよ。
意味が分からん。
489デフォルトの名無しさん:2006/05/26(金) 17:50:07
>>486
日本語でおk
それが原文なら教官にアフォって言っとけ
490難問〜:2006/05/26(金) 17:50:07
実行結果が
111
12
21

みたいに和が一定になるようなプログラムを作ってください。お願いします!!
491デフォルトの名無しさん:2006/05/26(金) 17:53:37 BE:108696678-#
何の和が何に対して一定なのかがさっぱりわからん。
492デフォルトの名無しさん:2006/05/26(金) 17:57:07
和がn(∈N)となる素因数の列を求めろって事か?
素因数分解じゃねーじゃん
493難問〜:2006/05/26(金) 17:59:22
この場合だと、各列の和が全て3になるという意味です!
494デフォルトの名無しさん:2006/05/26(金) 18:00:09 BE:108696678-#
「列」がどれを指してるのか不明。「3」がどこから来てるのかも不明。
495デフォルトの名無しさん:2006/05/26(金) 18:03:48
言いたいことは分かったような気がするが、素因数分解とどういう関係があるんだ?
496難問〜:2006/05/26(金) 18:12:35
487のプログラムを参考にして、
[非負整数 -> 自然数],[長さ一定 -> 和一定]といった変形を加えることを考える
っていってました。
3っていうのは、例えです。
111で3
12で3
21で3
3で3
という風にすべての列が、和が3になっているということです。
素因数分解では,同じ因数が複数回出て来ることがあることに 注意.とも言ってました。
わかりましたでしょうか??
497難問〜:2006/05/26(金) 18:16:56
参考プログラムの実行結果は
000
1
2
10
1
20
100
1
10
200
です。
参考までに・・。
お願いします。
498デフォルトの名無しさん:2006/05/26(金) 18:17:15 BE:34938836-#
>>496
例えの「3」の根拠が分からん。「3」に相当する物は入力なのか自分で作るのか。
素因数分解がどこにどう関係してるのかもさっぱり分からん。
499デフォルトの名無しさん:2006/05/26(金) 18:17:37
その例は本当に正しいのか
というかその場合、和が一定は列じゃなくて行だし
500難問〜:2006/05/26(金) 18:18:37
左寄りになってますが、ほんとは右よりでした。
すいません。
501デフォルトの名無しさん:2006/05/26(金) 18:19:19 BE:27174072-#
>>497
その実行結果が問題と何の関係があるのかもさっぱり分からん。
というか、参考プログラムが何をする物なのか、何の参考になるのかがまずわからん。
502デフォルトの名無しさん:2006/05/26(金) 18:21:50
ほんとに題意がわからん。とりあえず >>496 の結果が出るやつ。
#include<stdio.h>
int array[1000];
void trial(int sum, int n){
int i;
if (sum <= 0) {
for (i = 0; i < n; ++i) printf("%2d", array[i]);
putchar('\n');
} else {
for (i = 1; i <= sum; ++i) {
array[n] = i;
trial(sum - i, n + 1);
}
}
}
int main(){
int wa=3;
trial(wa, 0);
return 0;
}
503デフォルトの名無しさん:2006/05/26(金) 18:22:57
俺気づいたんだけどさ、ひょっとしたら>>486の出題者って馬鹿じゃね?
504デフォルトの名無しさん:2006/05/26(金) 18:30:04 BE:122283779-#
出題者がバカなのか質問者がバカなのかはわからんが、どちらかがバカであるのは疑いようがない。
505デフォルトの名無しさん:2006/05/26(金) 18:40:55
それに加えて回答者まで馬鹿だからどうにもならん
506デフォルトの名無しさん:2006/05/26(金) 19:23:09
わからないのなら
わかりません、ごめんなさいとはっきり言えよ
507デフォルトの名無しさん:2006/05/26(金) 20:15:57
#include <stdio.h>

int input (char);

int calc1 (int,int);
int calc2 (int,int);
int calc3 (int,int);

void output (int,int,int,int);

void main (void)
{

int a,b,c,n;

a=input('1');
b=input('2');
c=input('3');

n=calc1(a,b);
n=calc2(b,c);
n=calc3(a,c);

output(a,b,c,n);

}

508デフォルトの名無しさん:2006/05/26(金) 20:16:56
int input (char m)
{
int x;

if(m=='1')
printf("入力1→");
else if(m=='2')
printf("入力2→");
else
printf("入力3→");

scanf("%d",&x);

return x;

}

calc1 (int a,int b)
{
return a+b;
}
calc2 (int b,int c)
{
return b+c;
}
calc3 (int c,int a)
{
return c+a;
}

509デフォルトの名無しさん:2006/05/26(金) 20:17:27
void output(int a,int b,int c,int n)
{
printf("\n");

printf("%d+%d=%d\n",a,b,n);
printf("%d+%d=%d\n",b,c,n);
printf("%d+%d=%d\n",c,

inputの部分が違うと思うんだけど、どう直せばいい?
入力123って続くのが入力333になる・・・
510デフォルトの名無しさん:2006/05/26(金) 20:20:22
>>509
長い上にインデント崩れて見にくい
次からはうpろだに貼れ

多分だが、if条件式の中の'1', '2', '3'が全角なのが原因
511デフォルトの名無しさん:2006/05/26(金) 20:20:29
スレ違い
512デフォルトの名無しさん:2006/05/26(金) 20:23:03
全角半角を直しても望みの動作はしないだろうな。

それにしても汚いコードだ
513デフォルトの名無しさん:2006/05/26(金) 21:32:28
質問なんですが
int number=110530;
printf("%d",number);
という風にして実行すると
110530 という風に表示されるじゃないですか。
それを
11,0530 という風に11と0530の間に,を入れて表示したいのですががどうすればいいでしょうか?
514難問〜:2006/05/26(金) 21:44:04
たとえの3は関係なくて、
入力するのではなく
int w=2,n=3; の部分の数字を変えてくパターンです。
数字をいじれば和の合計が変わっていくような。
もし3にすれば、和はすべて3になるし、
5にすれば和はすべて5になるっといった感じです。
参考プログラムを少しいじればできる問題だそうです・・。
参考のでは、非負整数で、長さが一定なんですが、
それを非負整数ではなく自然数にし、長さ一定 ではなく、和一定にすればできるらしいんですが。
なんか意味わからなくてすいません・・。
515デフォルトの名無しさん:2006/05/26(金) 21:44:33
>>513
>>466
を参考に
516デフォルトの名無しさん:2006/05/26(金) 22:04:09
terapadを用意しました
コマンドプロンプトでCを始めたいんですが、設定変えたり必要ですか?
517デフォルトの名無しさん:2006/05/26(金) 22:12:20
>>516
失せろ
518デフォルトの名無しさん:2006/05/26(金) 22:46:15
俺大学生なんだけど、SEやPGは>>514みたいな指示でモノを作らされたりするの?
しかもそれで相手の期待通りのモノができなきゃダメなの?
519デフォルトの名無しさん:2006/05/26(金) 22:58:30
>>518
ひどいとそうだけど、
まともな人間なら客からヒアリングをきちんとして
スケジュール、要件定義書、機能設計書、詳細設計書、テスト計画書、その他諸々
ドキュメントを書き、
「これでいいんですよね?これでつくりますよ?後で違うとか文句言うなよ?」

と確認を取ってからつくります
520デフォルトの名無しさん:2006/05/26(金) 23:11:37 BE:122283397-#
>>513
char number[]="11,0530";
printf("%s",number);

>>514
もう付き合ってられん。通訳連れてこい。
521デフォルトの名無しさん:2006/05/26(金) 23:18:49
和がnになるような自然数の列を全て表示せよ。
ただし、nの値はmainのローカル変数の初期値として与える。

ってことだろ。
522デフォルトの名無しさん:2006/05/26(金) 23:22:29 BE:157221599-#
どこに素因数分解が出てくるのかと。
523デフォルトの名無しさん:2006/05/26(金) 23:29:18
もう>>486は無視していいと思うよ
再帰のような初歩的なものしか学習してないのに、自分で難問とかほざいてる
つまりこの問題は解かなくてもいい問題だと先生が言ってるんでしょ(必修問題ではない)

はい、さようなら
524デフォルトの名無しさん:2006/05/26(金) 23:36:47
解きたい奴は解けばいい。そうでない奴はスルーしろ。
最初から義務ではないんだから、「無視していいと思うよ」という発言は無意味。
そういうスレだろ?
525デフォルトの名無しさん:2006/05/26(金) 23:45:10
486の問題解けたらすげーな。
ここのヒーローになれるぜ!!
解けなかったらお前は所詮そこまでだったってことだ。
526デフォルトの名無しさん:2006/05/26(金) 23:52:21
よし、俺はそこまでだ。
527デフォルトの名無しさん:2006/05/26(金) 23:53:52
>>525
君にヒーローの称号を譲るよ。
所詮、俺はそこまでだ。
528デフォルトの名無しさん:2006/05/27(土) 00:03:13
あれだよ
処理の前半で適当に因数分解すればいいんじゃね?
12とか。んで適当に3とか抜き出してnにセット
529デフォルトの名無しさん:2006/05/27(土) 00:08:09
2ちゃんねるの力みしたろぜ〜。
530デフォルトの名無しさん:2006/05/27(土) 00:10:57
>>529よ2chの力を見せてやれ。
あ、俺は見せんよ。
531デフォルトの名無しさん:2006/05/27(土) 00:15:05 BE:31057128-#
今どき「2chの力」とかいってるバカを相手にする奴なんかいねえよ
532デフォルトの名無しさん:2006/05/27(土) 00:26:26
昔は言っていたらしい。
533デフォルトの名無しさん:2006/05/27(土) 00:27:15
俺らはプログラムが書けるだけであって、
エスパーではないからな。
534デフォルトの名無しさん:2006/05/27(土) 00:28:29
だな。でもかけてない自分がいる・・。
535デフォルトの名無しさん:2006/05/27(土) 00:34:28
単純に素因数分解しろって問題じゃ無いの?
和って言ってるけど積だったってオチ。
536デフォルトの名無しさん:2006/05/27(土) 00:36:36
結局答えは?
537デフォルトの名無しさん:2006/05/27(土) 00:38:15
はははwありえるな。
でも積は一定だから素数の順列を表示とか?意味ねえw
538デフォルトの名無しさん:2006/05/27(土) 00:38:27 BE:58230465-#
問題が不明なのに答えもクソもあるか。
539デフォルトの名無しさん:2006/05/27(土) 00:54:21
>>486
勝手に束縛条件をつけて解答
#include <stdio.h>
#define KOU_SUU 5//項の数
#define HENIKI 5//それぞれが0~HENIKIの値をとりうる 0が自然数でない派はnum[]を1で初期化して、num[i]=0をnum[i]=1に直す
#define WA 10//表示する和
int main(void)
{
int num[KOU_SUU]={0},i,goukei,show=0;
for(;num[KOU_SUU-1]<=HENIKI;)
{
for(i=KOU_SUU-1,goukei=0;i>=0;i--)goukei+=num[i];
if(goukei==WA)
{
for(i=KOU_SUU-1;i>=0;i--){printf("%d",num[i]);if(i)printf("+");else printf("=");}
printf("%d\n",WA);show++;
if((show%20)==0)getchar();
}
num[0]++;
for(i=0;i<=KOU_SUU-2;i++)
if(num[i]>HENIKI){num[i]=0;num[i+1]++;}
}
return 0;
}
和が一定となる自然数の列を列挙する というところまでは答えた。
540デフォルトの名無しさん:2006/05/27(土) 00:59:14
[1] 授業単元: C language
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1949.txt
課題の内容:hash関数を用いてデータの格納、検索を行うプログラムを作成し、
分割コンパイルする。

[3] 環境
 [3.1] OS: Windows (cygwin)
 [3.2] gcc
 [3.3] 言語: C
[4] 期限: ([2006年5月30日12:00amまで]
[5] その他の制限: 特になし

上記のろだに詳細を書きました、
以上です、長々とすみません
よろしくお願いいたします。
541デフォルトの名無しさん:2006/05/27(土) 01:14:37
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): 3個の変数のうち、最小のものを返す関数型引数マクロmin3(a,b,c)を作成し、これを確認するメイン関数をかけ。ただし、メイン関数内では、a,b,cの値がキーボード入力されると、その最小値を出力せよ。
[3] 環境
 [3.1] OS: (Windows/Linux/等々) winxp
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) 3個の変数のうち、最小のものを返す関数型引数マクロmin3(a,b,c)を作成し、これを確認するメイン関数をかけ。ただし、メイン関数内では、a,b,cの値がキーボード入力されると、その最小値を
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 再来週
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
マクロがわかりません…
542デフォルトの名無しさん:2006/05/27(土) 01:15:07
1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): 10までの整数値(length)を読み込んで,以下のような表示をするプログラムを作成せよ.

[実行結果1]
一辺の長さを入力してください(1から10まで):3

xxx
xxo
xoo

[実行結果2]
一辺の長さを入力してください(1から10まで):7

xxxxxxx
xxxxxxo
xxxxxoo
xxxxooo
xxxoooo
xxooooo
xoooooo

[3] 環境
 [3.1] OS: Windows 
[3.2] コンパイラ名とバージョン: VisualStudio.net2003
 [3.3] 言語: C++
[4] 期限: 6月7日
[5] その他の制限: まだ、初期で、for文、while文まで習いました。
よろしくお願いします!


543デフォルトの名無しさん:2006/05/27(土) 01:26:25
>>541
#include<stdio.h>

//マクロ
#define min2(a, b) ((a) < (b) ? (a) : (b))
#define min3(a, b, c) (min2((min2((a),(b))),(c)))

int main(){
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
printf("%d\n", min3(a, b, c));
}
544デフォルトの名無しさん:2006/05/27(土) 01:29:52
>>542
#include <stdio.h>

int main(void) {
int i,j,length=10;
for(i=0;i<length;i++) {
for(j=0;j<length;j++) {
printf("%s",(j < length-i ? "x" : "o"));
}
printf("\n");
}
return (0);
}
545デフォルトの名無しさん:2006/05/27(土) 01:30:30
>>542
#include<iostream>
using namespace std;
int main(){
    int n,i;
    cout<<"一辺の長さを入力してください(1から10まで):";
    cin >> n;
    for(i=n;i;)cout.write("xxxxxxxxxxooooooooo"+10-i--,n) << endl;
}
546デフォルトの名無しさん:2006/05/27(土) 01:33:13
>>544さん>>545さん
ありがとうございます。。
547デフォルトの名無しさん:2006/05/27(土) 01:43:10
>>543
マクロ2つ使うんですね!!
1つだけでめちゃめちゃになってました。
ありがとうございます。
548デフォルトの名無しさん:2006/05/27(土) 02:16:20
>>540
//(1)
nt enter(char *id1, int info1){
int x, count = 0;
x = hash(id1);
while(strlen(table[x].id)){
if(strcmp(id1, table[x].id) == 0 || ++count == M)return (-1);
if(++x == M)x = 0;
}
table[x].info = info1;
strcpy(table[x].id, id1);
return (x);
}

int search(char *id1){
int x, count = 0;
x = hash(id1);
while(strcmp(id1, table[x].id)){
if(strlen(table[x].id) == 0 || ++count == M)return (-1);
if(++x == M)x = 0;
}
return (table[x].info);
}
549デフォルトの名無しさん:2006/05/27(土) 02:23:28
>>540
(2), (3)↓ (4)は勝手に分割してやっちゃって
つかmain内に変数buf用意したけどあんまり意味ないなぁ…
int cancel(char *id1){
int x, count = 0;
x = hash(id1);
while(strcmp(id1, table[x].id)){
if(strlen(table[x].id) == 0 || ++count == M)return (-1);
if(++x == M)x = 0;
}
strcpy(table[x].id, "");table[x].info = -1;
return (x);
}

/* ---main.c--- */
int main(){
int t, busy = 1; char key[20], buf[10];
initialize();
while(busy){
printf("a:add member\nc:remove member\ns:search member\nq:quit\n");
scanf("%9s", buf); //fseek(stdin, 0L, SEEK_CUR);
switch(buf[0]){
case 'a':
printf("add (ex. hoge 2006)\n"); scanf("%19s %d", key, &t); enter(key, t); break;
case 'c':
printf("cancel (ex. hoge)\n"); scanf("%19s", key); cancel(key); break;
case 's':
printf("search (ex. hoge)\n"); scanf("%19s", key); t = search(key); printf("%s => %d\n", key, t); break;
case 'q':
busy = 0; break; } }
show_table(); return 0;
}
550デフォルトの名無しさん:2006/05/27(土) 02:54:10
[1] 授業単元: プログラミング演習T
[2] 問題文(含コード&リンク):
#include <stdio.h>
int main(void)
{
int i,j;

for(i=1; i<=9 ; i++)
{
printf("%dの段スタート!\n",i);
for(j=1 ; j<=9 ; j++)
{
printf("%dかける %d は %d\n",i,j,i*j);
}
printf("%dの段おわり!\n\n",i);
}
}
------------------------------------------------------------------------------
このリストをwhile文を使って作成せよ.なお,使用する変数の数は制限しない.

[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: VisualStudio.net2003
 [3.3] 言語: C++
[4] 期限: 6月9日13:30まで)
[5] その他の制限:特になし
551デフォルトの名無しさん:2006/05/27(土) 03:01:38
>>550
おいおい
このスレで言っちゃいけないかも知れんが
ごく簡単な基礎の問題だし、締め切りもまだ先なんだから
ちょっとは自分で考えた方がよくないか?

気に障ったらスルーしてね
552デフォルトの名無しさん:2006/05/27(土) 05:13:13
#include <stdio.h>
int main(void)
{
int i,j;

while(1){
for(i=1; i<=9 ; i++)
{
printf("%dの段スタート!\n",i);
for(j=1 ; j<=9 ; j++)
{
printf("%dかける %d は %d\n",i,j,i*j);
}
printf("%dの段おわり!\n\n",i);
}
break;
}
}
553デフォルトの名無しさん:2006/05/27(土) 06:39:08
>>550
#include <stdio.h>
int main(void)
{
int i,j;
i = 1;
while(i <= 9) {
printf("%dの段スタート!\n",i);
j = 1;
while(j <= 9) {
printf("%dかける %d は %d\n",i,j,i*j);
j++;
}
printf("%dの段おわり!\n\n\a",i);
i++;
}
}
554デフォルトの名無しさん:2006/05/27(土) 09:32:07
>>552
好き。
555デフォルトの名無しさん:2006/05/27(土) 09:44:41
[1] 授業単元:プログラミング
[2] 問題文:f(x)=5exp(-3.28x)sin(13x)+x^3-0.8=0(0<x<1)を2分法、ニュートン法を用いて解け
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: BCC
 [3.3] 言語: C
[4] 期限: 5月29日
[5] その他の制限:
556デフォルトの名無しさん:2006/05/27(土) 14:43:22
[1] 授業単元:プログラミング3
[2] 西暦年を入力し,その年がうるう年かどうかを調べ,結果を表示するプログラムを考え,下のようなプログラムを作った.しかし,このプログラムには誤りがあり,うまく動かなかった.

1. 下のプログラムの誤りを指摘せよ.ただし,誤りは1つではない. 2.当初の目的の機能を持つよう直せ. 3指摘し,直した点は,なぜ下のプログラムではうまくいかないのか.考察せよ.

なお,うるう年は以下のルールに従う.基本的に4で割りきれる年がうるう年であるが,100年に一度はうるう年でなく,その中でも400年に一度はうるう年である.(例:1900年,2006年はうるう年でない.2000年,2004年はうるう年である.)

1:#include <stdio.h>
2:
3:int main(void)
4: {
5: int year, leep;
6:
7: printf("西暦年を入力してください:");
8: scanf("%d",&year);
9:
10: leep = (year%4==0) && (!year%100==0) && (year%400==0);
11:
12: if (leep=1)
13: {
14: printf("%d年はうるう年です\n",year);
15: }
16: printf("%d年はうるう年ではありません\n",year);
17: }
--------------------------------------------------------------------------------
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: VisualStudio.net2003
 [3.3] 言語: C++
[4] 期限: 5月29日
考えたけどよく分かりません。提出期限が近いので教えてもらいたいです。
557デフォルトの名無しさん:2006/05/27(土) 15:04:59
×leep=1
○leep==1
558デフォルトの名無しさん:2006/05/27(土) 15:06:10
>>556
なんというか間違いの嵐だな。
1.  言語がC++と指定しているのに書き方がC
2.  if文の中で==ではなく=を使っている。==が正しい
3.  if文の直後にprintfがあるがelse文でくくるべき
4.  leepではなくleapが正しい綴り
5.  閏年の判定が全体的に間違っている
    正しくは leep = year%4==0 && ( year%100!=0 || year%400==0 );
上記を踏まえて修正するとこう。
#include <stdio.h>
int main(void){
    int year, leap;
    printf("西暦年を入力してください:");
    scanf("%d",&year);
    leap = year%4==0 && ( year%100!=0 || year%400==0);
    if (leap==1) printf("%d年はうるう年です\n",year);
    else printf("%d年はうるう年ではありません\n",year);
    return 0;
}


559デフォルトの名無しさん:2006/05/27(土) 15:10:12
質問者は行番号ぐらいはとるべきだと思うんだ
560デフォルトの名無しさん:2006/05/27(土) 15:13:59
>>556
leep = (year%4==0) && (year%100!=0) || (year%400==0);
おそらくこれで行ける
それとleepじゃなくてleapじゃね?

ちなみに上の奴の根拠はこれ↓
((x mod 4 = 0)∧(x mod 100 ≠ 0))∨(x mod 400 = 0)
561デフォルトの名無しさん:2006/05/27(土) 15:17:05
皆さんありがとうございます。ホントに助かりました!!
562デフォルトの名無しさん:2006/05/27(土) 16:02:03
2chブラウザから投稿できねー!
563デフォルトの名無しさん:2006/05/27(土) 16:37:13
1400年はうるう年?
とか言ってみたり。
564デフォルトの名無しさん:2006/05/27(土) 16:53:13
誰か>>555頼みます
565デフォルトの名無しさん:2006/05/27(土) 17:09:36
>>555
#include <stdio.h>
#include <math.h>
#define EPS .00001//相対誤差
double func_y(double x){ return (pow(x, 3)-2*pow(x,2)-x+2.0); }
double nibun(double a, double b){
int i = 0;double x;//xをnextと読みかえて
printf(" a b c f(c)\n");
do{
x = (a + b) / 2.0;
if((func_y(x) * func_y(a)) < 0)b = x;
else a = x;
printf("%02d : %6.3lf %6.3lf %6.3lf %6.3lf\n", i, a, b, x, func_y(x));
i++;
}while(fabs(a - b) > EPS);
return (x);
}
int main(void){
double a, b, x;//a,bをx0,x1と読みかえて
printf("範囲の左の値を入力してください.\n");
scanf("%lg",&a);
printf("範囲の右の値を入力してください.\n");
scanf("%lg",&b);
printf("x^3 - 2x^2 - x + 2 = 0の二分法による数値計算\n");
printf("初期値a=%6.3lf\n",a);
printf("初期値b=%6.3lf\n",b);
x = nibun(a, b);
printf("近似解x=%6.3lf\n",x);
return 0;
}
前スレにあったやつ、関数func_yを書き換えれば多分いける
566デフォルトの名無しさん:2006/05/27(土) 17:28:37
30の課題についての回答の31のやつ
>上限の数未満
これがぬけて組まれてない?
567デフォルトの名無しさん:2006/05/27(土) 17:29:26
まだ2回しか授業してないので簡潔に書けるのがいいのですが
繰り返しがforを使うやつでお願いします
568デフォルトの名無しさん:2006/05/27(土) 17:36:08
後から問題に付け足しするなって>1にあるだろ
それに、簡潔に書けるのがいいとかって
解答が気に入らなければ自分でやればいいじゃん
569デフォルトの名無しさん:2006/05/27(土) 17:59:04
そもそも高々2回しか授業受けてないのに簡潔なコード書いたら目を付けられるだろうな
今後の課題でも回答されたのと同じかそれ以上のクオリティで書けるならまだしも
そうじゃないなら簡潔なコードなんて求めるな
570デフォルトの名無しさん:2006/05/27(土) 18:17:27
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
入力された英単語をリスト構造に格納し、格納された単語を出力するプログラムを作成せよ。
参考プログラム↓
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1950.txt
1. 単語格納領域と次ポインタを持つリスト構造を構造体で宣言する.
2. 1単語分のリスト構造体データをmalloc関数で確保する。
3. readword関数を使って1単語を読み込み,リスト構造体データの単語格納領域に保存する.
4. 1 単語分の構造体データをリストの末尾に連結する.追加されたデータの次ポインタはnullにしておく.リスト先頭データのアドレスは,ポインター型変数headに記憶させておく.
5. 単語がすべて読み込まれたら、リストの先頭から終わりまで単語を表示する。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Borland C++
 [3.3] 言語: C
[4] 期限: 5/29

お願いします。
571デフォルトの名無しさん:2006/05/27(土) 18:19:24
>>570
このスレか前スレ辺りで似たような課題を見た気がするから
それ探してきて自分で修正しろ


とゆうかここで質問してる奴は類題探してきて修正したり組み合わせるって事しないのか?
572デフォルトの名無しさん:2006/05/27(土) 18:28:34
できるやつは、質問なんてしません
573デフォルトの名無しさん:2006/05/27(土) 19:22:32
ってかテンプレさえまともに見てない状態だからな
574419:2006/05/27(土) 21:47:01
>>419 お願いします。
575デフォルトの名無しさん:2006/05/27(土) 21:53:42
>>548-549
ありがとう
576デフォルトの名無しさん:2006/05/27(土) 22:26:34
1] 授業単元: プログラミング入門
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1952.txt
[3] 環境
 [3.1] Windows
 [3.2] gcc
 [3.3] 言語: C言語
[4] 期限: 5月29日 9:00
[5] その他の制限: まだポインタなどは習っていません。

お願いします。
577デフォルトの名無しさん:2006/05/27(土) 22:29:12
>>478
ちょっとお聞きしたいのですが、
これは4つのファイルに分けていいんですよね
最初のやつと、hash.c, openaddr.cとmain.c

この場合、hash.cとopenaddr.cにも宣言しなければいけないのですか?
578372:2006/05/27(土) 22:37:12
>>576まじまんどくせ
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
double s[80],value[80];
char c[80],name[80][80];
int max_p=0,t=0;
int srch(char p[]){
    int i;
    for(i=0;i<max_p;++i)
        if(strcmp(name[i],p)==0)return i;
    strcpy(name[i],p);
    return i;
}
#define o(p) else if(strcmp(c,#p)==0){--t;s[t-1] = s[t-1] p s[t];}
int main(){
    while(scanf(" %79s",c)==1)
        if(0){}o(+)o(-)o(*)o(/)
        else if(strcmp(c,"=")==0)printf("%g\n",s[--t]);
        else if(strcmp(c,"sin")==0)s[t-1] = sin(s[t-1]);
        else if(strcmp(c,"cos")==0)s[t-1] = cos(s[t-1]);
        else if(strcmp(c,"tan")==0)s[t-1] = tan(s[t-1]);
        else if(strcmp(c,"exp")==0)s[t-1] = exp(s[t-1]);
        else if(strcmp(c,"sqr")==0)s[t-1] = s[t-1] * s[t-1];
        else if(*c=='>') printf("%g\n",value[srch(c+1)] = s[--t]);
        else if(isdigit(*c)) s[t++]=atof(c);
        else s[t++] = value[srch(c)];
    return 0;
}
579デフォルトの名無しさん:2006/05/27(土) 22:43:15
>>576
RPN電卓自体は簡単な話だが、スタック作るのが面倒なんでCFL使ってもいいか?
一応計算手順は示しておく

1)数字をPush
2)演算子が来たら2つPopして演算後Push
これを数式を読み終わるまで繰り返すだけ。数字が足りなくなったり
逆に数字が2つ以上スタックに残ったら数式が狂ってる
580579:2006/05/27(土) 22:44:26
レス書いてる間に回答出たか。>>578
581デフォルトの名無しさん:2006/05/27(土) 22:44:32
>>577
誤爆?
582372:2006/05/27(土) 22:50:46
あ、仕様の解釈間違ってた。
>>578
else if(strcmp(c,"=")==0)printf("%g\n",s[t-1]);
に修正しといて。forth言語の . 相当の処理と勘違いしてた。

あとポインタ習ってないらしいから*cと書いてるとこc[0]に書き換えといて。
583デフォルトの名無しさん:2006/05/27(土) 22:56:40
>>579
できればスタックを使ってほしいです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1953.txt

一応自分でここまでできた。
後は演算子がsinとか三文字のときにnextTokenでNUMBERではなく
IDENTを返すらしいが、それがよくわからない。

後はメモリ機能がさっぱり。
584デフォルトの名無しさん:2006/05/27(土) 23:03:10
【質問テンプレ】
[1] 授業単元:プログラミング
[2] 問題文: 数式を入力し、逆ポーランド記法に変換せよ。
[3] 環境
 [3.1] OS: WindowsXP sp2
 [3.2] コンパイラ:visual C
 [3.3] 言語: C++
[4]提出期限 :5/29(月)

[5] その他の制限:無制限

■使用変数
instring[] キーボードから入力した数式を格納する配列(文字型)
outstring[] 逆ポーランド記法に返還された式を格納する配列
stack[100] スタック
sp スタックポインタ
token instring[]から取り出した文字

[プログラム]
ttp://eload.run.buttobi.net/cgi-bin/img/e_534.txt

エラー60個代から4時間かけてエラー取りをしました。
エラーを吐かなくなったものの、実行すると「フフフ」と表示されてしまいます。
逆ポーランド記法なんざ表示されません。
根本的に間違っている気がしてきました。
宜しくお願いします。
585584:2006/05/27(土) 23:06:44
すいません。一つ抜けていました

■問題文
演算の優先順位
'*' '/' > '+''-' >'=''(' > ')''$'
int priority(char token)
{
int w;
switch(ch){
case '*':case'/';
w=4;
break;

case'+':case'-'
w=3;
break
}
return w;
}

上記のプログラムが問題文にありました。
586デフォルトの名無しさん:2006/05/27(土) 23:06:54
>>584
1関数が長すぎで読む気がしないんで適当に答えるが
token[k]=outstring[a+c+e];
これは合ってるのか?outstringという名前からして出力結果のバッファだろうが
そこから代入するというのが間違ってる気がしてならない
それとフフフってのは未初期化バッファを文字列として出力しようとしたときによくでる
587デフォルトの名無しさん:2006/05/27(土) 23:15:03
>>577
誤爆ってどういう意味ですか
588デフォルトの名無しさん:2006/05/27(土) 23:18:51
>>584
資料等は何ももらわなかったのか?
589デフォルトの名無しさん:2006/05/27(土) 23:19:57
>>587
お前のやってることだ
590デフォルトの名無しさん:2006/05/27(土) 23:26:05
誤爆は間違って違うスレに投稿してしまうこと。
だったような気がする。

2ch専用ブラウザにも誤爆警告ってあるし。
実際そいつに何度助けられたか・・・
591デフォルトの名無しさん:2006/05/27(土) 23:29:07
>>584
ところどころif文の条件で代入してるよね
592デフォルトの名無しさん:2006/05/27(土) 23:34:51
>>584
読むのがかったるいので自前で書いた。
演算子順位解析法は面倒なので再帰下降解析法でささっと書いた
#include<stdio.h>
#include<ctype.h>
void parse(char**,char**);
int main(){
    char in_string[80],out_string[80];
    char*p=in_string,*q=out_string;
    scanf("%79[^\n]",in_string);
    parse(&p,&q);*q='\0';
    puts(out_string);
}
void parsenum(char**p,char**q){
    while(isspace(**p))++*p;
    if(**p=='('){++*p;parse(p,q);++*p;}
    else{while(isalnum(**p))*(*q)++ = *(*p)++;*(*q)++ = ' ';}
    while(isspace(**p))++*p;
}
void parsemul(char**p,char**q){
    parsenum(p,q);
    while(**p == '*' || **p == '/'){char c =*(*p)++;parsenum(p,q);*(*q)++ = c;*(*q)++ = ' ';}
}
void parse(char**p,char**q){
    parsemul(p,q);
    while(**p == '+' || **p == '-'){char c =*(*p)++;parsemul(p,q);*(*q)++ = c;*(*q)++ = ' ';}
}
593デフォルトの名無しさん:2006/05/27(土) 23:39:00
[1] 応用プログラミング [2] bitmap.bmpをコンソールに表示しなさい
[3] 環境 [3.1] Windows [3.2] gcc 3.4 [3.3] どちらでも可
[4] 無期限
[5] 画像処理
for(y=height-1;y>=0;y--)/*左上から順に処理するためにyを工夫しているので注意*/
{
for(x=0;x<width;x++)
{
/*基本的にはここでピクセルごとの処理を行う
BGRの順に並んでいることに注意
画像の左下から右に並んでいることに注意
従って、buffer[0]には 左下のB、buffer[1]には左下のG、
buffer[2]には左下のRの入っている
以下順番に右方向に続いている*/

n = y*width+x;
n = n*3;
/*とりあえず各ピクセルをコピーするだけ*/
out_buffer[n]=buffer[n]; /*Blueのデータ*/
out_buffer[n+1]=buffer[n+1]; /*Greenのデータ*/
out_buffer[n+2]=buffer[n+2]; /*Redのデータ*/
}
}
594デフォルトの名無しさん:2006/05/27(土) 23:46:07
>>589-590
誤爆だ、、、Orz
ってかなんか別の言葉なかったっけ?

まぁとにかく
本当は
>>548-549
ちょっとお聞きしたいのですが、
これは4つのファイルに分けていいんですよね
最初のやつと、hash.c, openaddr.cとmain.c

この場合、hash.cとopenaddr.cにも宣言しなければいけないのですか?

だった
お願いします。
595デフォルトの名無しさん:2006/05/27(土) 23:52:07
>>594
何個でも好きに分けろ
>hash.cとopenaddr.cにも宣言しなければいけないのですか?
何をだ?
596デフォルトの名無しさん:2006/05/28(日) 00:00:51
【質問テンプレ】
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
残念なことに,毎年,他人の課題をコピーしたために単位を落とす学生が居る.
そこで、こういった学生を減らすために,どういった対策を行えば良いか提案せよ.
597デフォルトの名無しさん:2006/05/28(日) 00:05:37
>>596
レポート丸写しは落とすと明言しておく
更に、質問を個人個人にだすと明言しておく
そいでもって、穴埋め問題を出すと明言しておく
598デフォルトの名無しさん:2006/05/28(日) 00:08:09
>>596
そういう馬鹿がいないとこのスレが成り立たないから必要悪
599デフォルトの名無しさん:2006/05/28(日) 00:11:03
実際の所、手間は掛かるが>>597の2個目が一番だろ
提出されたレポートに基づいて、そのレポート書かれた内容についての質問をすると言っておく
そうすりゃ少なくともレポートの内容に関しては理解しなきゃならんわけだから
丸移ししたとしてもある程度の力は付く
600デフォルトの名無しさん:2006/05/28(日) 00:32:34
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): ニュートン法のプログラムを用いて、正の実数5の平方根を求めるプログラムを作成したい。
このとき、実数5の値と、ニュートン法の初期値の値x0を入力すると、5の平方根を返す関数
double Newton(double a, double x0)
を作り、これをメイン関数の中で呼ぶことで、5の平方根を表示するプログラムを作成せよ。
[3] 環境
 [3.1] OS: (Windows/Linux/等々) Windows XP
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) LSI-C 86 試食版
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 過ぎてしまったけど、
提出しなければいけないので、どちらかというと「無期限」
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
#include <stdio.h>
#include <math.h>
double Newton(double a, double x0);
double Newton(double a, double x0)
{double e,x;
e=pow(10,-10);
while(fabs(x0-x)>e){
x=x0;
x0=((a-x*x)/(2.0*x))+x;}
return(a,x0);}
main(){
double x0,a;
printf("x0=");scanf("%lf", &x0);
printf("x=%.10f\n",Newton(5, x0));
}
これを提出したら×だったのですが、どこが間違っているのかわかりません…
601570:2006/05/28(日) 00:47:29
いろいろ探したんですが、関数から1単語読み込んで単語格納領域に保存する.
というのに類似した問題が見つからないんです。>>570お願いできないでしょうか。
602デフォルトの名無しさん:2006/05/28(日) 00:52:19
>>600
c言語って戻り値2つ返せたんだな…
603デフォルトの名無しさん:2006/05/28(日) 01:02:32
>>602
どういう意味ですか?(;´д`)
604デフォルトの名無しさん:2006/05/28(日) 01:07:14
>>600
とりあえず、xの初期値を決めろよ
605デフォルトの名無しさん:2006/05/28(日) 01:11:46
>>600
カンマ演算子を勉強してください、とヘタレレスしたりする。
606デフォルトの名無しさん:2006/05/28(日) 01:12:27
>>602だた。しかもageちょるし。
マジヘタレ
607デフォルトの名無しさん:2006/05/28(日) 01:14:57
>>600
scanfで入力したものを初期値…というつもりでやってたんですが…
上のままではならないんですか?!
608デフォルトの名無しさん:2006/05/28(日) 01:16:01
>>>596
受講申請時に個別面接して入り口で減らす。
そういうやつにまで単位をやろうなんてのはナンセンス。
やる気のないやつはどんどん落とせ。
609デフォルトの名無しさん:2006/05/28(日) 01:21:53
>>595
int 何々とか

分割してあるからいらないと思ってたんですけど
gcc -c ○○.c とやるとそれら二つはエラーが出るんで、、、
普通は ○○.o ができるはずなんですけど
610デフォルトの名無しさん:2006/05/28(日) 01:30:07
>>609
翻訳単位やリンクの概念が分からない奴が分割コンパイルに手を出すな
611デフォルトの名無しさん:2006/05/28(日) 01:45:32
>>609
とりあえず、ここを読め
ttp://www.gulf.or.jp/~damayan/calc/divide.html
612デフォルトの名無しさん:2006/05/28(日) 09:58:09
Download the seqFIO.cpp file. This file provides an example of how to use iostreams to perform sequential file I/O. Compile and run the code.
It is best to use the Win32 Console template in Visual C++ Express to create the project for running this program--there is no GUI associated with this code; only cin, cout, cerr, and a file are utilized to perform I/O.
After analyzing the code, and understanding how iostream file I/O is done, modify your Hangman game as follows. Use a file called "gamestats.dat" to store the game statistics for the number of games won, and the number of games lost.
If you quit the game and restart it, the game statistics will be read from the file and used to initialize the game statistics instance variables.
You should not assume that the "gamestats.dat" file exists. If the file does not exist when the game loads, then you should create the file. Use a file called "words.dat" to store all of the words that will be used in the game.
You will need to read through the file first to count the number of words in the file, so you can properly dimension the size of the strWordListArray array.
Then, you will need to read through the file with a second pass to load each word into the array. You may assume that the "words.dat" does exist.
You can manual type in your list of words into the file. Please include this file with your project, so I can run your project without encountering a missing file problem.

助けてください。お願いします。
613デフォルトの名無しさん:2006/05/28(日) 10:01:17
614デフォルトの名無しさん:2006/05/28(日) 12:00:27
>>612
>Download the seqFIO.cpp file.
お前問題文すら読んでないだろ。
615デフォルトの名無しさん:2006/05/28(日) 12:21:56
>>600
どこが違うのかどなたかお願いします_| ̄|○
616デフォルトの名無しさん:2006/05/28(日) 12:39:15
x初期化しろ
617デフォルトの名無しさん:2006/05/28(日) 12:46:01
>>616
初期化ってどうやるんですか?(;´д`)
618デフォルトの名無しさん:2006/05/28(日) 12:48:53
[1] プログラミング [2] bitmap.bmpをコンソールに表示しなさい
[3] 環境 [3.1] Windows [3.2] gcc 3.4 [3.3] どちらでも可
[4] 6/8
[5] 画像処理
for(y=height-1;y>=0;y--)/*左上から順に処理するためにyを工夫しているので注意*/
{
for(x=0;x<width;x++)
{
n = y*width+x;
n = n*3;
/*とりあえず各ピクセルをコピーするだけ*/
out_buffer[n]=buffer[n]; /*Blueのデータ*/
out_buffer[n+1]=buffer[n+1]; /*Greenのデータ*/
out_buffer[n+2]=buffer[n+2]; /*Redのデータ*/
}
おねがいします。
619デフォルトの名無しさん:2006/05/28(日) 13:03:42
>>617
x=1.0とでもすればいいんじゃね?
620デフォルトの名無しさん:2006/05/28(日) 14:33:19
>>619
初期化って何ですか?初期値を与えることですが?
全くわかってなくてすみません。。
初期値は入力された値を使いたいのですが_| ̄|○
621デフォルトの名無しさん:2006/05/28(日) 14:43:40
>>620
初期化というのは、変数を初めて使う前にその変数に値を代入すること。

xを初期化しないと、xの値は不定だから、
fabs(x0-x)>eという比較がたまたま失敗して、既に十分近似したと判定される可能性がある。
これを防ぐには、関数の最初で、x0の値から離れた値でxを初期化しておけば良い。
x = x0 + 1;とでもすればいいだろう。
622デフォルトの名無しさん:2006/05/28(日) 14:45:20
なんかこういうのを見てると
学校の先生ってのも大変なんだな、と思うわ。
623デフォルトの名無しさん:2006/05/28(日) 14:55:23
do~while文にして最低一度は実行させるって手もある
624デフォルトの名無しさん:2006/05/28(日) 14:58:06
学校の先生は、ただ言いっ放しでいいけど
調べることもせず、ただ分かりませんというやつを相手するここの住人のほうがずっと大変なんじゃ…
625デフォルトの名無しさん:2006/05/28(日) 15:11:15
>>600
とりあえずOKもらえそうなの置いとくから、何が間違っていたのか自分で見ておけ。
double Newton(double a, double x0)
{
double x, e=1e-10;
do{
x=x0;
x0=((a-x*x)/(2.0*x))+x;
}while(fabs(x0-x)>e);
return x0;
}
626デフォルトの名無しさん:2006/05/28(日) 15:17:12
[1] 授業単元:プログラミング言語
[2] 問題文(含コード&リンク): 1〜1000までの素数の合計と、素数以外の合計を書き出す
               Cプログラムを作成せよ。
[3] 環境
 [3.1] OS: Linux
 [3.2] gcc
 [3.3] 言語:C言語
[4] 期限: 2006年6月2日まで
[5] その他の制限: if,switch,while,for,配列を習いました。
627デフォルトの名無しさん:2006/05/28(日) 15:26:53
>>626
# include <stdio.h>

int is_prime(int n)
{
  int i;
  if(n == 1)
    return 0;
  for(i = 2; i < n; i++)
    if(n % i == 0)
      return 0;
  return 1;
}

int main(void)
{
  int n;
  int sum_prime = 0, sum_nonprime = 0;
  for(n = 1; n <= 1000; n++)
    if(is_prime(n))
      sum_prime += n;
    else
      sum_nonprime += n;
  printf("%d, %d\n", sum_prime, sum_nonprime);
  return 0;
}
628デフォルトの名無しさん:2006/05/28(日) 15:31:39
>>627
ありがとうございます!
629デフォルトの名無しさん:2006/05/28(日) 15:42:20
>>621
>>625
難しいです…returnのところも違いましたか?
…理解できてません。。
630デフォルトの名無しさん:2006/05/28(日) 15:46:36
>>629
ここはお前が理解するのをサポートする場じゃない
631デフォルトの名無しさん:2006/05/28(日) 15:59:23
>>630
すみませんー
違う板に行ってきまっす!!
632デフォルトの名無しさん:2006/05/28(日) 16:20:45
>>618
int main(void){
printf("bitmap.bmp\n");
return 0;
}
633デフォルトの名無しさん:2006/05/28(日) 17:38:00
>>632
ありがとうございますた!
634401:2006/05/28(日) 17:57:25
>>401です。
明日が期限なのですがピンチです・・・
教えて貰えないでしょうか。宜しくお願いします。


635デフォルトの名無しさん:2006/05/28(日) 18:10:46
>>634
その程度のサンプルプログラムなら山ほど転がってるだろ
自分で探してこい
636デフォルトの名無しさん:2006/05/28(日) 18:30:53 BE:34938263-#
>>634
まずガウスザイデル法。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define MAXDIM 3
#define LIMIT 50
#define EPS (0.00001)
int main(void){
double a[MAXDIM][MAXDIM],x[MAXDIM],y[MAXDIM],s,e;
char tmp[100]; int i,n;
for(i=0; i<3; i++){fgets(tmp, 100, stdin);
sscanf(tmp, "%lf %lf %lf", &m1[0][i], &m1[1][i], &m1[2][i]);x[i]=y[i]=1.0;}
for(n=0;n<LIMIT;n++){for(i=0;i<MAXDIM;i++){s=0.0;
for(j=0;j<MAXDIM;j++)if(i!=j)s+=a[i][j]*y[j];y[i]=(a[i][MAXDIM-1]-s)/a[i][i];}
for(i=0,e=0.0;i<dim;i++){e+=fabs(x[i]-y[i]);x[i] = y[i];}
if(e<EPS){for(i=0;i<MAXDIM;i++)printf("x[%i]=%f\n",i,x[i]);return 0;}}
puts("解けなかったぽ");return 1;;}
637デフォルトの名無しさん:2006/05/28(日) 18:44:03
文字列の中に数字があれば、それを整数に変換したいのですが
[一部抜粋]
if('0'==outstring[i])
{
push(0);
}
//1〜9までelse ifで組む

void push(int a)
{
sp=sp+1;
stack[sp]=a;
}

こう組んでもスタックに整数が入ってくれませんでした。
どのようにすれば良いのかご教授してください。
638デフォルトの名無しさん:2006/05/28(日) 18:46:37
>>637
見た限りでは間違ってるところはない。

それから、このスレは宿題の代行を依頼するスレであって添削を依頼するスレではない。
639デフォルトの名無しさん:2006/05/28(日) 18:47:21
[1] 授業単元:プログラミング
[2] 問題文: memcpy標準関数を使わずに、同じ機能を実装せよ。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ:gcc
 [3.3] 言語: C
[4]提出期限 :5/29(月)
[5] その他の制限:無制限
640デフォルトの名無しさん:2006/05/28(日) 18:48:47
>sp=sp+1;
>stack[sp]=a;
このふたつは逆にした方が自然な挙動になるかな。
641デフォルトの名無しさん:2006/05/28(日) 19:08:34 BE:31057128-#
>>639
void* mymemcpy(void* dst, const void* src, size_t length)
{while(--length>=0)*(char*)dst[length]=*(const char*)src[length];return dst;}
642おながいします:2006/05/28(日) 20:13:13
[1]情報処理
[2]
ジュースの自販のつり銭を計算するプログラムを書け。
受け付ける金種は1000円札、500円玉、100円玉、50円玉、10円玉とする。
またジュースの価格は120円と150円とする。
[3]C [4]5/29 [5]制限はありません。
643デフォルトの名無しさん:2006/05/28(日) 20:15:18
awkで、ファイルの中の

...
aaa bbb
,,,
... ccc ddd ...
...

aaaの次に来るbbbをcccとdddの間に挿入するってことはどうやればいいでしょうか?
644デフォルトの名無しさん:2006/05/28(日) 20:47:31
645デフォルトの名無しさん:2006/05/28(日) 20:50:51
>>643
>C/C++の宿題を片付けます 65代目
ここ見えてる?一行だけじゃ見えないかも知れないからもう一行書いておくよ

>C/C++の宿題を片付けます 65代目


>>642
どんな入力を受けて何をすりゃいいのかが読み取れない
もうちょっと詳しく書け
646 ◆ZV5jDnus1M :2006/05/28(日) 23:36:05
[1] 授業単元:C言語入門
[2] 問題文(含コード&リンク):2次方程式の解を求めるプログラムを書け。
また実数解、重解、虚数解か判別せよ。
表示例
2次方程式a*x*x+ b*x+c=0を求めます。
a=
b=
c=
a*x*x + b*x + c = 0 の解は
実数解x= , です。
重解x=  です。
虚数解x=  です。
2次方程式
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 5月29日7:00まで
[5] その他の制限:if,while,まで習いました。

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

int main(void)
{
float a, b, c;
float x_1, x_2;
float D;

/* 係数の入力 */
printf(
647 ◆ZV5jDnus1M :2006/05/28(日) 23:38:40
途切れた?
#include <stdio.h>
#include <math.h>
int main(void)
{
float a, b, c;
float x_1, x_2;
float D;
printf("2次方程式a*x*x+ b*x+c=0を求めます。");
printf("a=");
scanf("%f", &a);
printf("b=");
scanf("%f", &b);
printf("c=");
scanf("%f", &a);
D = b*b - 4*a*c; /* 判別式の計算 */
printf("\n*** 2次方程式 %f*x*x + %f*x + %f = 0 の解 ***\n", a, b, c);
if (D > 0.0) {
x_1 = (-b + sqrt(D))/2*a;
x_2 = (-b - sqrt(D))/2*a;
printf("実数解 x = %f, %f です。\n", x_1, x_2);
}
else if (D == 0.0) {
x_1 = -b/2*a;
printf("重解 x = %f です。\n", x_1);
}
else (D < 0.0) {
printf("虚数解です。\n");
}
return 0;
}
648デフォルトの名無しさん:2006/05/28(日) 23:43:22
[1] 授業単元:プログラム演習
[2] 問題文(含コード&リンク):
x1              x2    x3 
●ーーーーーーーーー●ーーー●
0               3     4
質量:m1,m2,m3
自然長l、バネ定数kが2本用意して上の図のようにする
m1=m2=m3=1、l =1とする
粒子の位置は左からそれぞれx1, x2, x3とし最初にx1=0, x2=3, x3=4の位置で固定し、
時刻t=0の瞬間に自由にする。                         
時刻tを入力したときの全ての粒子の位置x1, x2, x3と速度v1, v2, v3を求めよ
 [3.1] WindowsXP
 [3.2] gcc
 [3.3] C
[4] 5月29日
お願いします
649648:2006/05/28(日) 23:46:25
書き損ねがありました
m1=m2=m3=1、l =1とする→m1=m2=m3=1、l =1、k=1とする です
650デフォルトの名無しさん:2006/05/29(月) 00:13:38 BE:17469533-#
>>642
#include<stdio.h>
#include<stdlib.h>
int main(void){int orgent,entrust=0,price=0,i,shohin[]={120, 150,};
int noguchi=0,coin500=100,coin100=100,coin50=100,coin10=100;
int og_noguchi=0,og_coin500=0,og_coin100=0,og_coin50=0,og_coin10=0;
printf("1000円=");fgets(tmp,100,stdin);entrust+=1000*atoi(tmp);
printf(" 500円=");fgets(tmp,100,stdin);entrust+=500*atoi(tmp);
printf(" 100円=");fgets(tmp,100,stdin);entrust+=100*atoi(tmp);
printf(" 50円=");fgets(tmp,100,stdin);entrust+=50*atoi(tmp);
printf(" 10円=");fgets(tmp,100,stdin);entrust+=10*atoi(tmp);
orgent=entrust;
for(i=0;i<sizeof(shohin)/sizeof(int);i++){printf("商品%i(\%i)の数量:",i+1,shohin[i]);
fgets(tmp,100,stdin);price+=atoi(tmp)*shohin[i];}
if(entrust>=price)entrust-=price;else printf("お金が足りません\n");
while(noguchi&&entrust>=1000){entrust-=1000;++og_noguchi;--noguchi;}
while(coin500&&entrust>=500){entrust-=500;++og_coin500;--coin500;}
while(coin100&&entrust>=100){entrust-=100;++og_coin100;--coin100;}
while(coin50&&entrust>=50){entrust-=50;++og_coin50;--coin50;}
while(coin10&&entrust>=10){entrust-=10;++og_coin10;--coin10;}
printf("預り金:\%i 商品合計:\%i\n",orgent,price);
printf("払出金: \1,000:%i枚 \500:%i個 \100:%i個 \50:%i個 \10:%i個\n",
og_noguchi,og_coin500,og_coin100,og_coin50,og_coin10);
return 0;}
651デフォルトの名無しさん:2006/05/29(月) 00:17:54
[1] 授業単元:クラスの記述とオブジェクト
[2] 問題文:
#include<iostream>
using namespace std;
class Person{
public:
char no[7];
char name[20];
int age;
void Print();
};

void Person::Print(){
cout<<
652651:2006/05/29(月) 00:24:39
何故か途中で切れてしまったので再度投稿します。

[1] 授業単元:クラスの記述とオブジェクト
[2] 問題文:
既存のプログラム(後述)を以下のように変更せよ。
1:メンバ変数をプライベートにする。
2:10名以内の学生の学籍番号・名前・年齢をキーボードから入力できるようにする。
  (人数が10名より少ない場合でも、途中で終われるようにする)
3:入力データが画面に表示されるようにする。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:General CPad [3.3]
 [3.3] 言語: C++
[4] 期限: 5月31日まで
653651:2006/05/29(月) 00:25:23
これが元のプログラムです。

#include<iostream>
using namespace std;
class Person{
public:
char no[7];
char name[20];
int age;
void Print();
};

void Person::Print(){
cout<<"番号:"<<no<<endl;
cout<<"氏名:"<<name<<endl;
cout<<"年齢:"<<age<<"才"<<endl;
}

int main(void){
Person yamada;
strcpy(yamada.no,"12-345");
strcpy(yamada.name,"ヤマダ タロウ");
yamada.age=20;
yamada.Print();
return 0;
};
654デフォルトの名無しさん:2006/05/29(月) 00:56:40 BE:15528724-#
>>646
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main(void){double x,a,b,c,d,r1,r2;char tmp[100];int imaginary=0;
printf("a=");fgets(tmp,100,stdin);a=atof(tmp);
printf("b=");fgets(tmp,100,stdin);b=atof(tmp);
printf("c=");fgets(tmp,100,stdin);c=atof(tmp);
puts("a*x*x + b*x + c = 0 の解は");
d=b*b-4*a*c;r1=(-b+sqrt(d))/(2*a); r2=(-b-sqrt(d))/(2*a);
if(d==0.0)printf("重解 x=%f です。\n",r1);else if(d>0.0) printf("実数解 x=%f,%f です。\n",r1,r2);
else puts("虚数解です。");
return 0;}
655デフォルトの名無しさん:2006/05/29(月) 01:09:49
>>625
不合格ですた…
656デフォルトの名無しさん:2006/05/29(月) 01:39:01
そもそも、最初のプログラムがニュートン法じゃなかったんじゃね?
657デフォルトの名無しさん:2006/05/29(月) 01:40:27
ニュートン法なんてその辺からコピペすればいいじゃない
658デフォルトの名無しさん:2006/05/29(月) 01:48:03
>>657
ニュートン法の課題は前出して合格でした_| ̄|○
659デフォルトの名無しさん:2006/05/29(月) 01:52:14
>>658
んじゃ、オレのやったことって…
とは言わんが、不合格の責任は貴様にある。
660デフォルトの名無しさん:2006/05/29(月) 04:22:45
>>655
問題文を読む限り、5も入力しろってことじゃね?
661デフォルトの名無しさん:2006/05/29(月) 04:28:50
Newton法って確か一次導関数使って接線出して
それとx座標軸との交点を出して、そのx座標と
接点のx座標が一定値以内に収まるようにするやり方だよな?

ざっとみただけだが>>625で問題なくないか?
662デフォルトの名無しさん:2006/05/29(月) 04:39:50
>>661
>600の問題文の解釈の問題だと>660は言っている。
そうでないにしても、きっと>655が書いた>625以外の部分(main()か)の問題だろ。
663デフォルトの名無しさん:2006/05/29(月) 04:51:39
>>600を素直に読み取るなら、入力値は2つあって
内一つが初期値、もう一つをnとすると√nを返せって事だろうな

まぁ問題文に問題があるとは思う
664600 ◆manko/yek. :2006/05/29(月) 05:35:27
だめです。うまくいきません。コンパイラがへぼいのでしょうか?
665デフォルトの名無しさん:2006/05/29(月) 06:41:43
>625のソースをLSI C-86 v3.30c 試食版で試してみた。
結果 ルート5=2.236068

>662の言うとおり、>625以外の部分の問題なんじゃないかな。
666デフォルトの名無しさん:2006/05/29(月) 08:17:01
>>665
>662の言うとおり、>625以外の部分の問題なんじゃないかな。
たとえば、教官もこのスレの住人だったとか?
667デフォルトの名無しさん:2006/05/29(月) 08:46:54
朝まで粘っていたのですが期限が迫ってきていて・・・よろしくお願いします。
[1] 情報物理:
[2] 単振動のバネの運動方程式、二階微分方程式をオイラー法を用いて表せ。:
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:cc
 [3.3] 言語: C
[4] 期限: 2006.5.29
[5] その他の制限:無制限
668デフォルトの名無しさん:2006/05/29(月) 08:59:37
>>651
#include <iostream>
#include <cassert>

using namespace std;

class Person{
private:

static const int NO_LEN_MAX = 7;
static const int NAME_LEN_MAX = 20;

char no[ NO_LEN_MAX ];
char name[ NAME_LEN_MAX ];
int age;

public:
void Print();
void setNo( const char* str );
char* getNo();
void setName( const char* str );
char* getName();
void setAge( const int value );
int getAge() const;
};
669デフォルトの名無しさん:2006/05/29(月) 09:01:41
void Person::Print(){
cout <<
670667:2006/05/29(月) 09:02:22
式はd^2x/dt^2=-kx/m
解はx=x_0π(m/k)^1/2
です。

v=dx/dtとおくとdv-dt=-kx/mとなること。
時間刻み数nと刻み幅hを用いること。

質量m、刻み幅h、バネ定数kと上限時間t、
グラフを書く上でのx、yはscanfを用いて入力します。
671デフォルトの名無しさん:2006/05/29(月) 09:03:54
static const int USER_NUM_MAX = 10;
static const int INPUT_BUFFER_SIZE = 128;
int main(void){
Person person[ USER_NUM_MAX ];
char sBuffer[ INPUT_BUFFER_SIZE ];
int dBuffer;
for(int i=0; i<USER_NUM_MAX; i++){
cout << "番号を入力。" << endl;
cin >> sBuffer;
person[i].setNo( sBuffer );
cout << "名前を入力。" << endl;
cin >> sBuffer;
person[i].setName( sBuffer );
cout << "年齢を入力。" << endl;
cin >> dBuffer;
person[i].setAge( dBuffer );
for(int j=0; j<=i; j++)
person[j].Print();
cout << "継続して入力? 1:継続 9:終了" << endl;
cin >> dBuffer;
if( dBuffer != 1 )
break;
}
return 0;
};
672デフォルトの名無しさん:2006/05/29(月) 09:36:09
[1] 授業単元: Foundations of Computer
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1955.txt
[4] 期限: ([2006年5月30日12:00amまで]

プログラミング物ではないんですが、一応C言語関係の授業なので
どなたかよろしくお願いいたします。翻訳が必要でしたら、こちらでやってみます。
ダメでしたらスルーしてください。
673デフォルトの名無しさん:2006/05/29(月) 11:06:14
>>672
流し読みしたがCなんて関係ない
論理設計とかそういう類だろ
そんなのまでC関係と言ってたら、その内アセンブラまでC関係になるな
674デフォルトの名無しさん:2006/05/29(月) 11:17:11 BE:23292634-#
>Foundations of Computer
どこがC言語関連なのか問題文を読んでみてもさっぱり分からん。

2.VHDL的に書くとこんな感じ。(問題文で指定されていないアドレスは考慮しない)
D0<=not((not A0)and(not A1)and(notA2))
D1<=A2
D2<=1
D3<=A2
D4<=(not A0)and(not A1)

3.シングルCPUで動いていたときのロードをLとすると、スーパーハカーが書き換えてクアッドCPUに
移行した後のCPUあたりのロードは(0.7L)/4+0.3L=0.475L。
675デフォルトの名無しさん:2006/05/29(月) 16:10:45
>>544
[実行結果1]
一辺の長さを入力してください(1から10まで):3

xxx
xxo
xoo

[実行結果2]
一辺の長さを入力してください(1から10まで):7

xxxxxxx
xxxxxxo
xxxxxoo
xxxxooo
xxxoooo
xxooooo
xoooooo

となるようにするにはどうしたらいいですか?
>>545さんのは習っていませんでした。スミマセン・・
676デフォルトの名無しさん:2006/05/29(月) 16:46:18 BE:58230465-#
>>675
#include<stdio.h>
#include<stdlib.h>
int main(void){char tmp[100],fmt[6];int i,j,n;char pattern[]="xxxxxxxxxxoooooooooo";
printf("一辺の長さを入力してください(1から10まで):");fgets(tmp,100,stdin);n=atoi(tmp);
for(i=0;i<n;i++){for(j=0;j<n;j++)putc(pattern[10-n+i+j],stdout);putc('\n',stdout);}return 0;}
677デフォルトの名無しさん:2006/05/29(月) 16:48:23
>>664
ヒント:解が√5になる方程式をまず考える
678デフォルトの名無しさん:2006/05/29(月) 17:26:08
>>675
>>544じゃダメなのか?
679デフォルトの名無しさん:2006/05/29(月) 17:30:07
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):英語の小文字の文字列をキーボードから入力した時、
その文字列の大文字を出力するプログラムを作ってください。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: [2006年5月29日20時まで
[5] その他の制限: 得にないです。

680デフォルトの名無しさん:2006/05/29(月) 17:34:32 BE:46584364-#
>>679
#include<stdio.h>
#include<stdlib.h>
int main(void){int i;char tmp[100];fgets(tmp,100,stdin);
for(i=0;i<strlen(tmp);i++)putchar(toupper(tmp[i]));return 0;}
681デフォルトの名無しさん:2006/05/29(月) 17:41:18
>>680 すいません。scanf()関数を使用した奴をお願いします。
682デフォルトの名無しさん:2006/05/29(月) 17:44:23
>>544さんのだと
xxxxxxxxxx
xxxxxxxxxo
xxxxxxxxoo
xxxxxxxooo
xxxxxxoooo
xxxxxooooo
xxxxoooooo
xxxooooooo
xxoooooooo
xooooooooo
という実行結果が常にでてくるのですが、
例えば、3と入力したら
xxx
xxo
xoo
7と入力したら
xxxxxxx
xxxxxxo
xxxxxoo
xxxxooo
xxxoooo
xxooooo
xoooooo
というようなプログラムをつくりたいです。
683デフォルトの名無しさん:2006/05/29(月) 17:44:30 BE:40761937-#
>>681
断る。
684デフォルトの名無しさん:2006/05/29(月) 17:46:48
>>683 なぜ?
685デフォルトの名無しさん:2006/05/29(月) 17:48:54
scanfで読み込むやつぐらい自分でつくれってことじゃね
686デフォルトの名無しさん:2006/05/29(月) 17:50:42
>>682
length=10;
↑ここをscanfで受け取るように変えるだけやん・・・
687デフォルトの名無しさん:2006/05/29(月) 17:50:47
>>685 実行はできるんですが、大文字の文字列が出てこないんですよ。
688デフォルトの名無しさん:2006/05/29(月) 17:52:35
つscanf("%s",tmp);
689デフォルトの名無しさん:2006/05/29(月) 17:55:06 BE:7764522-#
俺の脳内ライブラリにはscanfなんて関数無いから
690デフォルトの名無しさん:2006/05/29(月) 17:55:06
tmp.....?
691デフォルトの名無しさん:2006/05/29(月) 17:56:11
>>689 池沼?
692デフォルトの名無しさん:2006/05/29(月) 17:57:59 BE:52408139-#
>>691
帰れ。
693デフォルトの名無しさん:2006/05/29(月) 17:59:59
>>692 まさか分からないの?
694デフォルトの名無しさん:2006/05/29(月) 18:01:23 BE:54348274-#
>>693
俺はscanfの安全な使い方を知らないので使えません。お引き取りください。
695デフォルトの名無しさん:2006/05/29(月) 18:03:21
>>694 そうなんだ。ごめん。てか安全じゃない使い方kwsk
696デフォルトの名無しさん:2006/05/29(月) 18:03:41
[1] 授業単元: ゼミ
[2] 問題文:if else を使って、scanfで複数数値を入力すると
最大値〜、最小値〜と表示される
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] Vidual c++: (gcc 3.4 VC 6.0等)
 [3.3] 言語: C/C++/どちらでも可
[4] 期限: (本日夕刻まで)
一応、エラーが出ますがこんなん作りました。
#include<stdio.h>
#include<conio.h>

void main(void)
{ int x, y, n, i, saidai;
printf(
697大変失礼しました:2006/05/29(月) 18:05:05
[1] 授業単元: ゼミ
[2] 問題文:if else を使って、scanfで複数数値を入力すると
最大値〜、最小値〜と表示される
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] Vidual c++: (gcc 3.4 VC 6.0等)
 [3.3] 言語: C/C++/どちらでも可
[4] 期限: (本日夕刻まで)
一応、エラーが出ますがこんなん作りました。
#include<stdio.h>
#include<conio.h>
void main(void)
{ int x, y, n, i, saidai;
printf("データ数は?"); scanf("%d",&n);
scanf("%d",&x);
saidai=x;
min=y;
for(i=2; i<=n; i++)
{ scanf("%d",&x);
if(x>saidai)
{ saidai=x; }
else if(x<min)
{ min=y; }
}

printf("最大値は%d",saidai);
printf("最小値は%d",min);
getchar();
getchar();
}
698デフォルトの名無しさん:2006/05/29(月) 18:20:00
>>697
#include <stdio.h>
#include <limits.h>
int main()
{
    int x, i, num, saidai, saisyou;
    
    saidai=INT_MIN;
    saisyou=INT_MAX;

    printf("データ数は?");
    scanf("%d",&num);

    
    for(i=0; i<num; i++)
    {
        scanf("%d",&x);
        if(x>saidai)
        {
            saidai=x;
        }
        else if(x<saisyou)
        {
            saisyou=x;
        }
    }

    printf("最大値は%d\n",saidai);
    printf("最小値は%d\n",saisyou);

    return 0;
}
699デフォルトの名無しさん:2006/05/29(月) 18:20:01
>>697
#include <stdio.h>

int main(void)
{
int max=0,min,i,n,x;
printf("個数 > ");
scanf("%d",&n);
for (i=0;i<n;i++){
scanf("%d",&x);
if (i==0){
min=x;
}
if (x>max){
max=x;
}else if (x<min){
min=x;
}
}
printf("max=%d\nmin=%d\n",max,min);
return 0;
}
700どこが違いますか?:2006/05/29(月) 18:23:11
#include<stdio.h>
int main(void){

char s[10];

printf(
701デフォルトの名無しさん:2006/05/29(月) 18:51:42
>>698-699 ありがとうございました。ただ最小値がおかしかったような?
702デフォルトの名無しさん:2006/05/29(月) 18:56:42
>>701
入力される値が常に最大を更新する様な値だと最小が更新されないのでelseイラネ
703デフォルトの名無しさん:2006/05/29(月) 19:01:43 BE:38820454-#
>>702
入力の最大値が負の時もmaxが0固定になるので、最初の入力の時にmax=min=xにしる。
704デフォルトの名無しさん:2006/05/29(月) 20:00:14
>>686
できました。ありがとうございます。
705デフォルトの名無しさん:2006/05/29(月) 20:03:44
a
706デフォルトの名無しさん:2006/05/29(月) 20:04:15
[1]授業単元:演習
[2]問題文(含コード&リンク):
e=a+b*c+d;とe=(a+b)*c+d;は異なる。
前の式に演算子の優先順位や結合規則を考えて、あえてカッコをつけると
(e=((a+(b*c))+d));となる。

式e=d=a-b+c+b*(a+c)/a;
を実行した後のd,eの値を表示するプログラムを作成してください。
変数は全てint型で、a,b,cの初期値は、それぞれ10、20、30とする。
演算子の優先順位や結合規則を考えて、計算する順に全部あえてカッコをつけて下さい。
そしてカッコをつけないときと結果が同じになることを確認して下さい。
(注)カッコが多いと見づらくなるので、普通は必要のないカッコは書きません。

次のようにする。
a,b,cの初期値を設定してから

e=d=a-b+c+b*(a+c)/a;
printf("d=%d", e=%d\n", d, e); ・・・@
e=d=a-b+c+b*(a+c)/a; ・・・左の式に全部カッコをつける
printf("d=%d", e=%d\n", d,e); ・・・A

@とAの結果が同じになることを確認してください。
[3]環境
[3.1]OS:windowsXP
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C
[4]期限:明日
[5]その他の制限:
#include <limits.h>みたいなヘッダはまだ習ってないので使わないで下さい。
習ってないのを使うと正解をくれない教員なので
707デフォルトの名無しさん:2006/05/29(月) 20:12:20
[1]授業単元:演習
[2]問題文(含コード&リンク):
2つの正の実数値(a,b)を読み込み、その商(div)を整数値で求め、余り
(mod)を実数値で求め、表示してください。
[3]環境
[3.1]OS:windowsXP
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C
[4]期限:明日
[5]その他の制限:
putsは使わないで下さい。
#include <limits.h>みたいなヘッダはまだ習ってないので使わないで下さい。
習ってないのを使うと正解をくれない教員なので
708デフォルトの名無しさん:2006/05/29(月) 20:14:16
>>679に誰か答えて下さい。
709デフォルトの名無しさん:2006/05/29(月) 20:15:23
>>習ってないのを使うと正解をくれない教員なので

ひどい教員ですね。
710デフォルトの名無しさん:2006/05/29(月) 20:49:53
[1]授業単元:演習
[2]問題文(含コード&リンク):
西暦の年(year)を読み込み、その年がうるう年であれば"閏年"、うるう年でないときは"平年"と表示して下さい。
うるう年とは、2月が29日の年。基本は4年に一回(4で割り切れる年はうるう年)、
それだと多すぎるので100年に1回は平年とする(100で割り切れる年は平年)、
それだと少なすぎるので400年に一回をうるう年に戻す(400で割り切れる数はうるう年)。
この課題はif文のネストで。(論理和、論理積は使わないで下さい。)
[3]環境
[3.1]OS:windowsXP
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C
[4]期限:明日
[5]その他の制限:

あれ同じスレが二つあるけどこっちでいいのかな?
711デフォルトの名無しさん:2006/05/29(月) 20:50:41
>>709
生徒の自主性を摘み取るのが好きなんだなw
712デフォルトの名無しさん:2006/05/29(月) 20:51:44
>>710
このスレで俺含め数人が答えたと言おうと思ったが短絡演算子使っちゃダメなのか
713デフォルトの名無しさん:2006/05/29(月) 21:02:01
>>707
ヘッダ無しでどうやって表示すればいいんだ
714デフォルトの名無しさん:2006/05/29(月) 21:16:13
715デフォルトの名無しさん:2006/05/29(月) 21:36:33
[1]授業単元:演習
[2]問題文(含コード&リンク):
月(month)を読み込み、範囲チェックをして下さい。月が1〜12の範囲なら、"正しい月"
、1〜12意外なら"誤った月"と表示してください。
[3]環境
[3.1]OS:windowsXP
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C
[4]期限:明日
[5]その他の制限:論理積演算子(&&)、
論理和演算子(||)を使わないで下さい。
ヘッダint month; は使わないで下さい。
716デフォルトの名無しさん:2006/05/29(月) 22:12:44
>>715
>ヘッダint month; は使わないで下さい。
そんなヘッダ見たことも聞いたこともない
717デフォルトの名無しさん:2006/05/29(月) 22:14:06
718デフォルトの名無しさん:2006/05/29(月) 22:19:39
>>710

#include <stdio.h>
int main (void)
{
int year;

printf(
719デフォルトの名無しさん:2006/05/29(月) 22:20:56
>>710

#include <stdio.h>
int main (void)
{
int year;

printf("INPUT_YEAR-->");
scanf("%d",&year);
if (year%400 == 0)
{
printf("閏年");
}
else if (year%100 == 0)
{
printf("平年");
}
else if (year%4 == 0)
{
printf("閏年");
}
else
{
printf("平年");
}


return 0;
}
これでどう?まだC言語やり初めて2週間しか経ってないから間違ってる
かもしれん
720デフォルトの名無しさん:2006/05/29(月) 23:04:30
>>673-674
dです
721デフォルトの名無しさん:2006/05/29(月) 23:47:03 BE:62112184-#
72258:2006/05/30(火) 01:29:56
返答どうもありがとうございました、
助かりました。

図々しいのですが
出力が
Please input mass:10.0←入力
Please input time:5←入力
Please input acceleration:9.8←入力
Please input initial velocity:2.0←入力
Condition:m=10.000000, t=5.000000, v0=2.000000, a=9.800000
Velocity at t=5.000000 (i.e., v) :51.000001
Distance at t=5.000000 (i.e., x) :132.500002
Energy of movement at t=5.000000 (i.e., E) :13005.000000

ローカル変数使用の場合

Please input mass:10.0←入力
Please input time:5←入力
Please input acceleration:9.8←入力
Please input initial velocity:2.0←入力
Condition:m=10.000000, t=5.000000, v0=2.000000, a=9.800000
Velocity at t=5.000000 (i.e., v) :51.000001
Distance at t=5.000000 (i.e., x) :132.500002
Energy of movement at t=5.000000 (i.e., E) :13005.000000
となるようにプログラムを組んでいただけないのでしょうか?
追加で申し訳ないですが、できればおねがいします(iдi)
723デフォルトの名無しさん:2006/05/30(火) 01:35:25
>>722
それぐらい自分でやれ
724デフォルトの名無しさん:2006/05/30(火) 07:06:44
[1]授業単元:演習
[2]問題文(含コード&リンク):
2つの整数値(a,b)を読み込み、aに、小さくない方(大きい方)の値を入れて、表示して下さい。
例:aに3、bに10が入力されたとき、aに10を代入してaを表示する。
aに10、bに3が入力されたとき、aをそのまま表示する。
[3]環境
[3.1]OS:windowsXP
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C
[4]期限:明日
[5]その他の制限:特になし
725デフォルトの名無しさん:2006/05/30(火) 07:07:20
[1]授業単元:演習
[2]問題文(含コード&リンク):
2つの整数値(a、b)を読み込み、小さい方(mini)(等しいときはどちらでもよい)の値を表示して下さい。
(注)aがbより大きい場合、aがbより小さい場合、aとbが等しい場合のデータを入力し、正しく動作することを確認すること。
[3]環境
[3.1]OS:windowsXP
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C
[4]期限:明日
[5]その他の制限:特になし
726デフォルトの名無しさん:2006/05/30(火) 07:07:51
[1]授業単元:演習
[2]問題文(含コード&リンク):
2つの整数値(a,b)を読み込み、aをbで割った商(quot)の小数部を切り上げてください。全てint型で処理してください。また、bがゼロの場合は、"ゼロ除算例外"と表示してください。
[3]環境
[3.1]OS:windowsXP
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C
[4]期限:明日
[5]その他の制限:
727デフォルトの名無しさん:2006/05/30(火) 07:40:45
[1]授業単元:プログラム
[2]問題文(含コード&リンク):
0〜100点まで点数を入力して0〜59で不可、60〜69で可、70〜84で良、85〜100で優
とディスプレイとファイルに出力。ファイルに出力するときは点数も出力してください。
範囲が0〜100以外の場合はエラーが出るようにしてください。入力した数値でオーバーフローが
おきた時に誤動作が起きないようにしてください。
[3.1]OS:windowsXP Profesional SP2
[3.2]コンパイラ名とバージョン:VisualStudio2005
[3.3]言語:C
[4]期限:今週中
[5]その他の制限:特になし
728デフォルトの名無しさん:2006/05/30(火) 11:14:31
[1] 授業単元:プログラミング言語・演習U
[2] 問題文(含コード&リンク):
実数xを引数として受け取り、y=(x^3)-(3x^2)-6x+8を計算し、yの値が正の場合は1を、
負の場合は-1を、0の場合は0を返す関数(戻り値は整数型)を作成し、その関数が正常に動作するか
どうかを、実際に実行して確認せよ。ただし、main関数では、xの値をキーボードから入力し、関数を
呼び出した後は、戻り値の値を出力せよ。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:VisualStudio6.0
 [3.3] 言語: C/C++/どちらでも可
[4] 期限:早めに
[5] その他の制限: 特になし
よろしくおねがいします。
729デフォルトの名無しさん:2006/05/30(火) 11:23:22
#include <stdio.h>
#include <math.h>
int signfunc(double x) { return sgn(((x-3)*x-6*x)+8); }
int main(void) { double x; scanf("%lf",&x); printf("%d\n", signfunc(x)); return 0; }
期限:早めにって何だよ。
730デフォルトの名無しさん:2006/05/30(火) 11:28:08
[1] 授業単元:プログラミング言語・演習U
[2] 問題文(含コード&リンク):
一次方程式ax+b=0の係数a,bの値(実数)を引数として受け取り、方程式の解を返す関数を作り、
正常に動作するかどうかを確認せよ。ただし、係数a,bはアドレス渡しとし(引数にポインタを使う)、
解は、引数を用いて返すこと(ポインタの引数を使用し、戻り値は0とする)。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:VisualStudio6.0
 [3.3] 言語: C/C++/どちらでも可
[4] 期限:早めに
[5] その他の制限: 特になし
おねがいします。
731デフォルトの名無しさん:2006/05/30(火) 11:45:29
#include <stdio.h>
int solve(double* x, double* a, double* b)
{
if(*a==0.0){
if(*b==0.0){*x=0.0; /* 任意の解 */}
else{*x=0.0/0.0; /* NaNって定数であったっけ?不可能解 */}
} else {
*x = -*a/*b;
}
return 0; /* a==0.0の処理が面倒なのはここの指定のせい */
}
int main(void)
{
double x, a, b;
printf("a, b >"); scanf("%lf , %lf", &a, &b);
solve(&x, &a, &b);
printf("%fx+%f=0 -> x=%f\n", a, b, x);
return 0;
}
732デフォルトの名無しさん:2006/05/30(火) 13:53:02 BE:54348847-#
>>724
#include<stdio.h>
#include<stdlib.h>
int main(void){char tmp[100];int a,b;fgets(tmp,100,stdin);a=atoi(tmp);
fgets(tmp,100,stdin);b=atoi(tmp);a=(a>b)?a:b;printf("%i\n",a);return 0;}

>>725
#include<stdio.h>
#include<stdlib.h>
int main(void){char tmp[100];int a,b;fgets(tmp,100,stdin);a=atoi(tmp);
fgets(tmp,100,stdin);b=atoi(tmp);printf("%i\n",(a<b)?a:b);return 0;}

>>726
#include<stdio.h>
#include<stdlib.h>
int main(void){char tmp[100];int a,b,c,d;fgets(tmp,100,stdin);a=atoi(tmp);
fgets(tmp,100,stdin);b=atoi(tmp);if(b){c=a/b;d=(a%b)?1:0;printf("%i\n",c+d);}
else printf("ゼロ除算例外\n");return 0;}
733デフォルトの名無しさん:2006/05/30(火) 14:15:22
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):C言語のソースファイルのコメント文削除し、ディスプレイに表示
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限:2006年5月30日16:00まで
[5] その他の制限:構造体、ファイル操作、基本的な文法は習いました
734デフォルトの名無しさん:2006/05/30(火) 14:29:36
>>733
コメントはC89なのかC99なのかはっきりしろ
課題で決められてないならお前が決めろ
735733:2006/05/30(火) 14:53:52
>>734
C99でしたorz
736デフォルトの名無しさん:2006/05/30(火) 15:12:36 BE:108696678-#
>>733
#include<stdio.h>
#include<stdlib.h>
int main(int argc,char*argv[]){FILE*fp;char*buf;int i;size_t len;
if(argc>1&&(fp=fopen(argv[1],"rt"))){fseek(fp,0,SEEK_END);len=ftell(fp);
buf=(char*)malloc(len);rewind(fp);fread(buf,len,1,fp);fclose(fp);
for(i=0;i<len&&buf[i]!='\x1a';i++){if(buf[i]=='/'&&(i+1)<len&&buf[i+1]=='/'){i+=2;
while(i<len&&buf[i]!='\n')i++;}else if(buf[i]=='/'&&(i+1)<len&&buf[i+1]=='*'){i+=2;
while(i<len&&!(buf[i]=='*'&&(i+1)<len&&buf[i+1]=='/'))i++;i++;}
else putchar(buf[i]);}}return 0;}
737733:2006/05/30(火) 15:16:23
>>736
助かりますorz
738デフォルトの名無しさん:2006/05/30(火) 15:28:14
>>733
もう回答されてるが質問した手前、ついでだから貼っとく
簡単なステートマシンで実装した

#include<stdio.h>

int main(){
int state = 0;
char ch;
char oldCh;
/* ファイル名 */
char *FileName = "test.c";
FILE *fp;

fp = fopen(FileName, "r");

while ((ch = fgetc(fp)) != EOF)
{
switch (state)
{
case 0:
if (ch == '/')
{
//コメントテスト
oldCh = ch;
state = 1;
} else putc(ch, stdout);
break;
739デフォルトの名無しさん:2006/05/30(火) 15:29:16
case 1:
if (ch == '*') state = 2;
else if (ch == '/') state = 4;
else putc(oldCh, stdout), putc(ch, stdout), state = 0;
break;

case 2:
if (ch == '*') state = 3;
break;

case 3:
if (ch == '/') state = 0; //C89形式のコメントを抜ける
else state = 2;
break;

case 4:
if (ch == '\n') state = 0; //C99形式のコメントを終わる
break;
}
}
return 0;
}

ファイル名固定にしてるんで、自分で弄ってくれ
それとステートマシン本体(switch)以外の部分のエラー処理はすっ飛ばしてるんでそこも勝手にやってくれ
740デフォルトの名無しさん:2006/05/30(火) 15:39:02
>>736 文字列に//とか/*が含まれてる場合には対応してる?
741738:2006/05/30(火) 15:47:55
>>740
その事忘れてたな・・・ 面倒なんで質問者への課題ということにしたいと思う
742デフォルトの名無しさん:2006/05/30(火) 16:06:20 BE:46584746-#
>>740
こんな感じか。
#include<stdio.h>
#include<stdlib.h>
int main(int argc,char*argv[]){FILE*fp;char*buf;int i,reteral=0;size_t len;
if(argc>1&&(fp=fopen(argv[1],"rt"))){fseek(fp,0,SEEK_END);len=ftell(fp);
buf=(char*)malloc(len);rewind(fp);fread(buf,len,1,fp);fclose(fp);
for(i=0;i<len&&buf[i]!='\x1a';i++){if(!reteral&&buf[i]=='/'&&(i+1)<len&&buf[i+1]=='/'){i+=2;
while(i<len&&buf[i]!='\n')i++;}else if(!reteral&&buf[i]=='/'&&(i+1)<len&&buf[i+1]=='*'){i+=2;
while(i<len&&!(buf[i]=='*'&&(i+1)<len&&buf[i+1]=='/'))i++;i++;}
else if((buf[i]=='\"'||buf[i]=='\'')&&(buf[i-1]!='\\'))reteral=!reteral;else putchar(buf[i]);}}return 0;}
743デフォルトの名無しさん:2006/05/30(火) 16:19:03 BE:31055982-#
>>742
下2行訂正。
while(i<len&&!(buf[i]=='*'&&(i+1)<len&&buf[i+1]=='/'))i++;i+=2;}
else if((buf[i]=='\"'||buf[i]=='\'')&&(buf[i-1]!='\\'))reteral=!reteral;putchar(buf[i]);}}return 0;}
744ほかに情報がほしい方は、遠慮なく聞いてください:2006/05/30(火) 16:29:48
[1] 授業単元: ゼミの宿題
[2] 問題文(含コード&リンク):c++で
@最初、画面に文字を出力して
A1〜3のキーを1つ入力して
B入力したのは〜番ですか?と表示
C更に1から3までの入力で何かを更に表示される
(結局、このプログラムは3×3=9通りの出力がある。)
[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ名とバージョン:borland c++
 [3.3] 言語: C++
[4] 期限: 明日まで
[5] その他の制限: switch case文を使う
745デフォルトの名無しさん:2006/05/30(火) 16:37:15
>>742 unix & gcc だから、0x1aの処理とか、fopen(..,"rt") いらんのじゃないの?
っていうか、余計なものつけてて説明もとめられたら、説明できるのか。 > 書き込んだ学生
746デフォルトの名無しさん:2006/05/30(火) 16:50:53 BE:46584746-#
>>744
3.「〜番ですか?」の「〜」は何を出力すればいいのか。
4.「何か」って何だよ
747デフォルトの名無しさん:2006/05/30(火) 16:52:19 BE:77640858-#
>>745
丸写しした学生がどうなろうと知ったことではない。というのがこのスレの趣旨。
748ほかに情報がほしい方は、遠慮なく聞いてください:2006/05/30(火) 16:55:03
>>746 大変失礼しました
3.Aで入力した番号です。この場合は1〜3までしかプログラムしていないので1〜3のいずれかです。
4.〜は何でもいいのです。こんにちは、とか
749デフォルトの名無しさん:2006/05/30(火) 17:00:15
>>745
横からで済まないが、fopenにtなんてオプションあったっけ?
manにも記載が無いようなんだが
750デフォルトの名無しさん:2006/05/30(火) 17:05:34
>>749
わざと間違っているんだと。
751デフォルトの名無しさん:2006/05/30(火) 17:18:11
>>749
マジレスすると、MS固有の拡張機能
752デフォルトの名無しさん:2006/05/30(火) 17:25:03 BE:52408139-#
>>744
#include<stdio.h>
#include<stdlib.h>
char* message[3][3]={{"こんにちわ","さようなら","ごきげんよう",},
{"Guten Tag","Auf Wiedersehen","Mutiger Mann",},
{"Good day","Good bye","Have a niceday",},};
int main(void){int a,b;char tmp[100];
fgets(tmp,100,stdin);a=atoi(tmp);
switch(a){case 1:case 2:case 3:printf("入力したのは%i番ですか?",a);
fgets(tmp,100,stdin);b=atoi(tmp);
printf("%s\n",message[a][b]);break;}return 0;}
753デフォルトの名無しさん:2006/05/30(火) 17:25:57 BE:67935375-#
>>752
最後の行訂正。
printf("%s\n",message[a-1][b-1]);break;}return 0;}
754デフォルトの名無しさん:2006/05/30(火) 18:53:36
[1] 授業単元:
[2] 問題文(含コード&リンク):

2分探索(binary search)は、要素があらかじめキーの昇順あるい
は降順にソートされている配列から効率よく探索するアルゴリズムであ
る。

要素数がnである配列aの要素が昇順に並んでいて、
keyを探索するとして、探索範囲の先頭の添字をpl、末尾の添字を
pr、中央の添字をpcと表すことにする。探索開始時に、pl
は0、prはn-1、pcは(n-1)/2である。

keyとa[pc]を比較して等しければ探索成功であるが、そうでなけ
れば、次のように探索範囲を縮小する。
・key > a[pc]のとき
 探索範囲はa[pc+1] 〜 a[pr]になる。
・key < a[pc]のとき
 探索範囲はa[pl] 〜 a[pc-1]になる。
なお、アルゴリズムの終了条件は、以下に示す条件のいずれかが成立す
ることである。
・a[pc]とkeyが一致した
・探索範囲がなくなった
このアルゴリズムを利用して、2分探索を行うプログラムを作成せよ。

[3] 環境 UNIX
[4] 期限 今週中
755754:2006/05/30(火) 18:54:08
よろしくお願いします
756デフォルトの名無しさん:2006/05/30(火) 18:58:38 BE:69876566-#
なんつーか、K&Rに答えが載ってるような問題はやる気しねえな。
757 ◆VBguGDzqNI :2006/05/30(火) 19:22:13
お願いします。
[1] 授業単元:プログラミング応用
[2] 問題文(含コード&リンク):
echoサーバを改造してtinychatサーバを作れ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1959.txt
[3] 環境
 [3.1] OS: unix
 [3.2] コンパイラ名とバージョン:gcc 3.4 VC 6.0等
 [3.3] 言語: C
[4] 期限: 今日の22:00まで
[5] その他の制限: コンパイラは通ったんですが、クライアント(telnet)をつなぎ、
         発言するとパイプ破壊と出て、強制終了してしまいます。
758お願いします。。:2006/05/30(火) 19:52:34
[1] プログラミング入門:

[2] キーボードから入力された整数nを素因数分解するプログラミングを作成せよ。
(※ただし以下のように表示するようにする:1445300を入力すると、
 1445300=2*2*5*5*97*149と表示される)


[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:Microsoft Visual C++
 [3.3] 言語: C
[4] 期限:2006年5/31(つまり明日)の10:00までです…
[5] まだ基本しかやっていません。(for文、while文等まで)
  よろしくお願いします!!
759デフォルトの名無しさん:2006/05/30(火) 19:56:53
[1]授業単元:演習
[2]問題文(含コード&リンク):
金額(price)を整数値で読み込み、その金額に対する消費税額(tax)を整数値で求め、
消費税額と消費税込み金額を表示してください。消費税率は5%とする。
(消費税額は、0,05を掛けて求める。)
消費税額は、少数第1位を四捨五入するものとする。
[3]環境
[3.1]OS:windowsXP
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C
[4]期限:明日
[5]その他の制限:特になし
760デフォルトの名無しさん:2006/05/30(火) 20:03:10 BE:93168768-#
>>759
#include<stdio.h>
#include<stdlib.h>
#define TAX_RATE (0.05)
int main(void){int price;double tax;char tmp[100];
printf("本体価格:");fgets(tmp,100,stdin);price=atoi(tmp);
tax=price*TAX_RATE+0.5;printf("消費税額:%i 税込価格:%i\n",
(int)tax,(int)tax+price);return 0;}
761デフォルトの名無しさん:2006/05/30(火) 20:03:22
[1] 授業単元:C言語プログラミング
[2] 問題文(含コード&リンク):以下の表が与えられているもの(入力データ)とし,C言語で作成したシンプレックス法で最適解を求めよ.
また,以下の表より入力データも各自作成せよ.
基底変数 基底値  z  x1  x2  x3  x4
z        0  1  8   21  0  0
x3        1  0  2   3  1  0
x4        2  0  1   7  0  1
プログラムは下記のように分割せよ.
1.メインプログラム
2.データ入力
3.基底に入る変数を選択する
4.基底から出る変数を選択する
5.ピボット演算
6.出力
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:BCC
 [3.3] 言語: C言語
[4] 期限: 2006年5月31日9:00まで
[5] その他の制限:ごく初歩的なことしか習っていません。for,if,while文,ファイル処理(読み込み・書き込み程度)程度の簡単なものを使用した単純なプログラム をお願いします.できればなんの処理をしているのか説明が書いていただければ幸いです.

2段階シンプレックス法に対応したプログラムを作らなければならないのですが,さっぱりわかりません;;
762デフォルトの名無しさん:2006/05/30(火) 20:23:50
>>758
# include <stdio.h>

int main()
{
  int n, i;
  char opr = '=';
  scanf("%d", &n);
  printf("%d", n);
  i = 2;
  while(n > 1)
    if(n % i == 0)
    {
      printf("%c%d", opr, i);
      opr = '*';
      n /= i;
    }
    else
      i++;
  putchar('\n');
  return 0;
}
763デフォルトの名無しさん:2006/05/30(火) 20:25:45
>>757
...
/*target_fds = org_target_fds;*/ /*コメントアウト*/
memcpy(&target_fds,&org_target_fds,sizeof(org_target_fds)); /* 挿入 */
...
for (j=2; j < FD_SETSIZE; j++) {
if (j==2 || j != sock_fd && FD_ISSET(j, &org_target_fds)) { /* 挿入 */
/*write(j,&j,sizeof(int));*/ /*コメントアウト*/
write(j, buf, read_len);
} /* 挿入 */
}
764デフォルトの名無しさん:2006/05/30(火) 20:31:55
[1]授業単元:演習
[2]問題文(含コード&リンク):
e=a+b*c+d;とe=(a+b)*c+d;は異なる。
前の式に演算子の優先順位や結合規則を考えて、あえてカッコをつけると
(e=((a+(b*c))+d));となる。

式e=d=a-b+c+b*(a+c)/a;
を実行した後のd,eの値を表示するプログラムを作成してください。
変数は全てint型で、a,b,cの初期値は、それぞれ10、20、30とする。
演算子の優先順位や結合規則を考えて、計算する順に全部あえてカッコをつけて下さい。
そしてカッコをつけないときと結果が同じになることを確認して下さい。
(注)カッコが多いと見づらくなるので、普通は必要のないカッコは書きません。

次のようにする。
a,b,cの初期値を設定してから

e=d=a-b+c+b*(a+c)/a;
printf("d=%d", e=%d\n", d, e); ・・・@
e=d=a-b+c+b*(a+c)/a; ・・・左の式に全部カッコをつける
printf("d=%d", e=%d\n", d,e); ・・・A

@とAの結果が同じになることを確認してください。
[3]環境
[3.1]OS:windowsXP
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C
[4]期限:明日
[5]その他の制限:
765デフォルトの名無しさん:2006/05/30(火) 20:35:14
ちょっと困ってるんで助けてください。

BCDコードでの加算をやりたいのです。
例えば
BCDでコードで9(00001001)+1(00000001)=10(00010000)になるようにしたいのですがどうしたらいいですか?
766765:2006/05/30(火) 20:36:59
言い忘れてました。
sprintfなどのCのライブラリは使えません。
767758の者です:2006/05/30(火) 20:37:57
762さん本当にありがとうございました!!

ただ、まだ「putchar」というものを習っていないので、そこを
考慮していただけると誠に幸いです…
768デフォルトの名無しさん:2006/05/30(火) 20:38:19
>>765
>1
769デフォルトの名無しさん:2006/05/30(火) 20:42:58 BE:38820454-#
770765:2006/05/30(火) 20:46:57
>>768
スレ違いなのは分かります。ごめんなさい。m(_ _)m
でも、今すごく困ってるんです。
分かったら教えてください。
771デフォルトの名無しさん:2006/05/30(火) 20:47:59
>>767
なら、putchar('\n');の代わりにprintf("\n");で。
772デフォルトの名無しさん:2006/05/30(火) 20:48:28 BE:46584746-#
773デフォルトの名無しさん:2006/05/30(火) 20:49:59
>>770
テンプレに沿って書けってこと
774デフォルトの名無しさん:2006/05/30(火) 20:50:15
>>765
#include <stdio.h>
int main(void)
{
int a=9, b=1, c;
__asm {
mov eax, a
add eax, b
daa
mov c, eax
}
printf("c = %x\n",c);
return 0;
}
775デフォルトの名無しさん:2006/05/30(火) 20:51:00
テンプレに沿ってもすれ違いはすれ違いだが名。
776765:2006/05/30(火) 20:54:32
>>774
ごめん。(゜゜)(。 。 )
インラインアセンブラは使えないんだ。
C言語だけで出来ないかな?
777デフォルトの名無しさん:2006/05/30(火) 20:56:17
いったん、10進とかに変換してから計算すれば…
778デフォルトの名無しさん:2006/05/30(火) 21:01:16 BE:52408139-#
>>765
2桁限定。
int bcdadd(int a, int b){int c;a=(a>>4)*10+(a&0xf);b=(b>>4)*10+(b&0xf);
c=a+b;c=(c/10)<<4 | (c%10);return c;}
779デフォルトの名無しさん:2006/05/30(火) 21:21:12
[1]授業単元:演習
[2]問題文(含コード&リンク):
西暦の年(year)を読み込み、その年がうるう年
であれば"閏年"、うるう年でないときは"平年"と
表示して下さい。うるう年とは、2月が29日の
年。基本は4年に一回(4で割り切れる年はうる
う年)、それだと多すぎるので100年に1回は
平年とする(100で割り切れる年は平年)、そ
れだと少なすぎるので400年に一回をうるう年
に戻す(400で割り切れる数はうるう年)。
この課題はif文一つで。
[3]環境
[3.1]OS:windowsXP
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C
[4]期限:明日
[5]その他の制限:
780765:2006/05/30(火) 21:21:50
>>778
ありがとう。
いったん10進数に直してから計算して、再度BCDコードに変換するんだね。
でもこれって2桁の数字までしか対応できないね。

やりたかったのは4バイト(8桁)の演算だったのだけど、まあいいや。

ありがとう。
781デフォルトの名無しさん:2006/05/30(火) 21:22:16
閏年か…このスレの中にあるはず
782デフォルトの名無しさん:2006/05/30(火) 21:22:30 BE:104814869-#
783デフォルトの名無しさん:2006/05/30(火) 21:23:26
[1]授業単元:演習
[2]問題文(含コード&リンク):
西暦の年(year)を読み込み、その年がうるう年
であれば"閏年"、うるう年でないときは"平年"と
表示して下さい。うるう年とは、2月が29日の
年。基本は4年に一回(4で割り切れる年はうる
う年)、それだと多すぎるので100年に1回は
平年とする(100で割り切れる年は平年)、そ
れだと少なすぎるので400年に一回をうるう年
に戻す(400で割り切れる数はうるう年)。
[3]環境
[3.1]OS:windowsXP
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C
[4]期限:明日
[5]その他の制限:
この課題はif文のネス
トで。(論理和、論理
積は使わないで下さい
784デフォルトの名無しさん:2006/05/30(火) 21:42:03
#include<stdio.h>

int main(){
int year;
printf("year->");
scanf("%d",&year);
if(year%4){printf("閏年");return 0;}
if(year%400){printf("閏年");return 0;}
printf("平年");
return 0;}
785デフォルトの名無しさん:2006/05/30(火) 21:44:21
眠気で脳がやられているようです
誤記ばかり

だが訂正はしない
786デフォルトの名無しさん:2006/05/30(火) 22:17:08
>>783
#include <stdio.h>
const char *s[2]={"閏","平"};
int main()
{
 int year,n;
 printf("year\n");
 n=scanf("%d",&year);
 if (n==1) {
  year%=400;
  if ((year==100)+(year==200)+(year==300)) { /*if文ネスト*/
   year=1;
  }
  year=(year%4!=0);
  printf("%s年\n",s[year]);
 }
}
787デフォルトの名無しさん:2006/05/30(火) 22:36:05
C#お願いします

[1] 授業単元: 課題
[2] 問題文(含コード&リンク):
素数を求める。
表示方法は各自工夫して、1,3,5,7,11,13・・・・という素数を表示した数までの中から
抽出するプログラムを作成する。(数字指定1〜50まで。とか)
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: VC#
 [3.3] 言語: C#
[4] 期限: ([2006年5月31日21:00まで])
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

788デフォルトの名無しさん:2006/05/30(火) 22:45:20
C#お願いします

[1] 授業単元: 課題
[2] 問題文(含コード&リンク):

ある文字列にたいして、指定した文字列を検索し指定した置換文字列に置換する。
(※例えば「こんにちは、私はプログラマ初心者です」と入力したら 
  初心者をキーにこれを上級者に置換できるようにしておき
     「こんにちは、私はプログラマ上級者です」 と表示する
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: VC#
 [3.3] 言語: C#
[4] 期限: ([2006年5月31日21:00まで])
[5] その他の制限:
789デフォルトの名無しさん:2006/05/30(火) 22:54:11
スレ違い
790デフォルトの名無しさん:2006/05/30(火) 23:05:20 BE:69892272-#
>>787
意味がわからん。
791デフォルトの名無しさん:2006/05/30(火) 23:06:33 BE:149769656-#
>>788
C#の文字列クラスには、置換のメソッドがあったような気がする。
792バカぽん:2006/05/30(火) 23:07:06
この問題どうしても解けなくて、どなたかがアドバイスください;;;
↓ No.1964です;;;
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm?
793デフォルトの名無しさん:2006/05/30(火) 23:19:59
>>792
>1
794バカぽん:2006/05/30(火) 23:41:13
1?
795デフォルトの名無しさん:2006/05/30(火) 23:43:47
ハジメちゃんに頼め
796バカぽん:2006/05/30(火) 23:50:56
頼めるのなら、頼みたいが・・・
797ハジメ:2006/05/31(水) 00:09:43
呼んだ?
798バカぽん:2006/05/31(水) 00:18:50
じっちゃんの名に懸けて、問題を解いてください!!
799デフォルトの名無しさん:2006/05/31(水) 00:41:29
>1を読めってことだバーロー
800デフォルトの名無しさん:2006/05/31(水) 01:16:32 BE:54348274-#
801デフォルトの名無しさん:2006/05/31(水) 02:04:26
802デフォルトの名無しさん:2006/05/31(水) 06:19:19
[1] 授業単元:
[2] 問題文(含コード&リンク):

2分探索(binary search)は、要素があらかじめキーの昇順あるい
は降順にソートされている配列から効率よく探索するアルゴリズムであ
る。

要素数がnである配列aの要素が昇順に並んでいて、
keyを探索するとして、探索範囲の先頭の添字をpl、末尾の添字を
pr、中央の添字をpcと表すことにする。探索開始時に、pl
は0、prはn-1、pcは(n-1)/2である。

keyとa[pc]を比較して等しければ探索成功であるが、そうでなけ
れば、次のように探索範囲を縮小する。
・key > a[pc]のとき
 探索範囲はa[pc+1] 〜 a[pr]になる。
・key < a[pc]のとき
 探索範囲はa[pl] 〜 a[pc-1]になる。
なお、アルゴリズムの終了条件は、以下に示す条件のいずれかが成立す
ることである。
・a[pc]とkeyが一致した
・探索範囲がなくなった
このアルゴリズムを利用して、2分探索を行うプログラムを作成せよ。

[3] 環境 UNIX
[4] 期限 今週中

すみませんが、お願いします
803バカぽん:2006/05/31(水) 06:27:44
>801 ありがとうございました。
環境によって「error C2117: '*********' : 指定された配列には、初期化子が多すぎます。
」っという状況もあったが、その他のコンパイラが通れました。
ありがとうございましたw感謝します。
804デフォルトの名無しさん:2006/05/31(水) 07:09:58 BE:139752498-#
>>802
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
const char* table[]={"aho","baka","chisho","dame","eta","funuke","gerou","hentai","idiot",
"jama","kuzu","loser","manuke","neet","otankonasu","pekepon","quack","ratbrain","shine",
"tamanashi","unko","wanker",};
int bsearch(const char* key, const char* a[],int pc, int pr){int cmp;
if(pc>=pr)return -1;
cmp=strcmp(key,a[pc]);if(cmp==0)return pc;
if(cmp>0)return bsearch(key,a,pc+1,pr);else return bsearch(key,a,0,pc-1);
return -1;}
int main(void){char tmp[100];int c,n=sizeof(table)/sizeof(const char*);
printf("word:");fgets(tmp,100,stdin);c=bsearch(tmp,table,(n-1)/2.n-1);
if(c==-1)printf("%sはねえよバカ!\n",tmp);else printf("%sは%i番目\n",tmp,c);
return 0;}
805よろしくお願いします:2006/05/31(水) 12:24:56
1] 授業単元: ゼミ
[2] 問題文(含コード&リンク):
c++でprintf,scanfとかじゃなくてcin,ioutに直しswitch case文も使う。
以下のプログラムを追加・変更してください
#include<stdio.h>
#include<conio.h>
void main(void)
{ int n,y;
cin<<"メニューをお選びください\n1:カレーライスn\2:ラーメン\n3:カツ丼"); scanf("%d",&n);
switch(n)
{ case 1:cout<< "500円です。よろしいですか?";break;

case 2cout<< "600円です。よろしいですか?";break;
case 3:cout<< "700円です。よろしいですか?";break;
default:printf("想定外入力");
}
getchar();
getchar();
}

ここで123を選んで"〜です。よろしいですか?"を表示すると1or2をまた入力して1であれば最初のcinに戻り
2を入力すると。"ありがとうございます"と表示されるプログラムを作りたい
[3] 環境
 [3.1] OS:XP
 [3.2] borland c++
 [3.3] 言語: C++
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限:初歩の初歩if elseまで
806デフォルトの名無しさん:2006/05/31(水) 12:56:29
>>805
#include <iostream>
using namespace std;

int main(void){
int n,y;
do{
cout << "メニューをお選びください\n1:カレーライス\n2:ラーメン\n3:カツ丼" << endl;
cin >> n;
switch(n){
case 1:cout << "500円です。よろしいですか?" << endl;break;
case 2:cout << "600円です。よろしいですか?" << endl;break;
case 3:cout << "700円です。よろしいですか?" << endl;break;
default:cout << "想定外入力" << endl;
}
cin >> y;
if(y == 1)break;
}while(1);
cout << "ありがとうございます"<<endl;
return 0;
}
807よろしくお願いします :2006/05/31(水) 14:00:06
>>806
ありがとうございます。C++だとiostreamになるのですか?スレ違いならスイマセン
808デフォルトの名無しさん:2006/05/31(水) 15:10:02
[1] 授業単元:応用プログラミング
[2] 問題文:

少し長かったのでアップローダーに貼らせてもらいました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1966.txt

[3] 環境
[3.1] OS:windowsXP
[3.2] コンパイラ名とバージョン:不明
[3.3] 言語:C++
[4] 期限: ([2006年6月1日10:00まで]
[5] その他の制限: 「ポインタとアドレス」を使用すること。
ポインタの説明が授業を聞いただけだとよく分かりませんでした…。
どなたかお願いいたします。
809デフォルトの名無しさん:2006/05/31(水) 15:35:32
>>808
void put_into_orbit(Point *p,double rd){
//pは移動する点を指すポインタ、rdは原点中心とする円の半径。
//distance0()メンバ関数を使い、原点からの距離を計算し、
//この値とrdとの差が±0.1以下になるように移動する。
//点の移動には、Pointクラスのmove()とhalf()メンバ関数を用いる。
//点が円の内部にあるときにはmove()によりy座標を0.1ずつ移動。
//点が円の外部にあるときにはhalf()により移動。
//移動状況はprint()メンバ関数で座標を示す。
double er;
do{
er = p->distance0();
if(er > rd)p->half();
else p->move(0.0, 0.1);
p->print();
}while(fabs(er - rd) > 0.1);
}
810デフォルトの名無しさん:2006/05/31(水) 17:09:10
>>807
「C++だと」ではなく、cinやcoutが宣言されているヘッダファイルが<iostream>ということなだけ。
811デフォルトの名無しさん:2006/05/31(水) 18:27:53
>>808
なにもかも未完成と判断してスクラッチで書きおこしたら原点かなあ。
812デフォルトの名無しさん:2006/05/31(水) 19:41:17
>>808

void put_into_orbit(Point *p,double rd){
  double err=p->distance0()-rd;
  while (fabs(err)>0.1) {
    if (err > 0) p->half(); else p->move(0.0,0.1);
    p->print();
  }
}
813デフォルトの名無しさん:2006/05/31(水) 19:43:15
>>812訂正
void put_into_orbit(Point *p,double rd){
  double err=p->distance0()-rd;
  while (fabs(err)>0.1) {
    if (err > 0) p->half(); else p->move(0.0,0.1);
    p->print();
    err=p->distance0()-rd;
  }
}

814デフォルトの名無しさん:2006/05/31(水) 22:01:06
>>609
分割コンパイルの続きなのですが、一応ここまでやってみたのですが、
検索と削除ができません。
どなたかご教授お願いします。

ろだにうpしました:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1967.txt
よろしくお願いします。
815どなたかお願いします。:2006/05/31(水) 22:22:20
[1] 授業単元:基本プログラミング
[2] 問題文(含コード&リンク): 1桁の正の数字を整数変数nに入力し、その後からn個の整数を入力した後にそれらの和を出力するプログラムを作成せよ。
実行例その1
Input n<10:5
23
45
67
12
9
sum=156
実行例その2
Input n<10:-9
Input Error
実行例その3
Input n<10:15
Sorry (n<10)
[3] 環境
 [3.1] OS:UNIX
 [3.3] 言語:C++
[4] 期限: 明日
[5]まだfor文までしかやっていません。

816デフォルトの名無しさん:2006/05/31(水) 22:25:34
どうしてそういうちっともC++らしからぬコーディングを求めるような例題で学習させようとするか理解に苦しむな……
817デフォルトの名無しさん:2006/05/31(水) 23:03:27
818デフォルトの名無しさん:2006/05/31(水) 23:05:59 BE:62112184-#
制御文の演習なら、その制御文が必要なシチュエーションを問題として作るのが実践的
なんだが、forを使う必要のない計算でforを使えとか普通はswitchなんか使わないような
アルゴリズムでswitchを使えとか、あれこれ使えと言う前に出題者は頭を使え!と言いたく
なるような愚問が多いな。
819デフォルトの名無しさん:2006/05/31(水) 23:24:31
何事も初歩ってのはそんなもんじゃん

ある程度理解できるようになると、愚問だとか考えられるようになるんだろうけど
820デフォルトの名無しさん:2006/05/31(水) 23:37:52 BE:23292162-#
んなアホな。
ゴルフのレッスンでティーショットにパターを使えと言うくらい意味のない課題に初歩もクソもない。
821デフォルトの名無しさん:2006/05/31(水) 23:56:55
まあなんにしろ言うだけなら誰でもでき…
822デフォルトの名無しさん:2006/06/01(木) 00:44:00
>>817
ありがとうございます
使ったことがないやつが多数ありましたけれど、
自分でそこは調べてレポートを書いてみます
勉強になりました
823デフォルトの名無しさん:2006/06/01(木) 01:15:02
>>822
cancelにバグがあった。
Copernicusを先にcancelすると
Heisenbergがcancelできなくなる。

int cancel(char *id1){
  int x, count = 0;
  x = hash(id1);
  while(strcmp(id1, table[x].id)){
    if(++count == M) /*変更箇所*/
      return (-1);
    if(++x == M)x = 0;
  }
  strcpy(table[x].id, "");table[x].info = -1;
  return (x);
}
824デフォルトの名無しさん:2006/06/01(木) 01:20:26
searchも同様に修正しないと検索できなくなるな。
825757:2006/06/01(木) 01:47:25
>>763
亀すみません。本当に助かりました。
ありがとうございます。
826デフォルトの名無しさん:2006/06/01(木) 03:42:58
>>815をどなたかお願いします…
827デフォルトの名無しさん:2006/06/01(木) 04:07:59
#include <iostream>
using namespace std;

int main(){
int n, sum = 0, num;
cout << "Input n<10:";
cin >> n;
if (n < 0){
cout << "Input Error" << endl;
} else if (n >= 10){
cout << "Sorry (n<10)" << endl;
} else {
for (int i = 0; i < n; i++){
cin >> num;
sum += num;
}
cout << "sum=" << sum << endl;
}
return 0;
}
828デフォルトの名無しさん:2006/06/01(木) 04:24:54
>>827ありがとうございました 助かりました
829デフォルトの名無しさん:2006/06/01(木) 06:42:16
[1] 授業単元: プログラム演習C・JAVAコース
[2] 問題文(含コード&リンク):
任意の文字列を配列に読み込み、
その中に出てくる特定の文字列を指定した文字列に置き換えるプログラムの作成

【実行例】

入力文字列:boku ha suika ga suki dayo
置き換え元:suika
置き換え後:meron
結果:boku ha meron ga suki dayo

必要であれば以下の関数を用いること

文字列を複写する関数:strncpy(str1,str2,n)
文字列の長さを返す関数:strlen(str1)
文字列をn文字分比較する関数:strncmp(str1,str2,n)

[3] 環境
 [3.1] OS: リナックス
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 本日
[5] その他の制限: 独習C言語を教科書に、配列・文字列の章まで学びました
830デフォルトの名無しさん:2006/06/01(木) 08:05:23
よろしくお願いしますっ

授業名:C言語演習A−2
環境:リナックス
コンパイラ:gcc
言語:C言語です
期限:明日
問題:10-4
x個の文字列を読み込んだ後に、
その文字列を反転させるプログラム。
尚、反転とは、例えば「takedayousuke」という文字列を打ち込むと、
「ekusuoyadekat」と出力するものである
以下に実行例を記す
xを入力せよ:3
1個目の文字列を入力!:yamato
反転しました!:otamay
2個目の文字列を入力!:yousuke
反転しました!:ekusuoy
3個目の文字列を入力!:enraku
反転しました!:ukarne
その他の制限:どこまで習ったか
if for do goto while switch文、配列、文字列
の辺りまでです
831デフォルトの名無しさん:2006/06/01(木) 08:11:34
[1] 授業単元: プログラミング C言語
[2] 提出期日: 6月2日
[3] コンパイラ&環境:Visual Stdio.NET2003 (Windows XP)
[3] 問題文(含コード&リンク):
次のプログラムを変更して、以下のプログラムを作成せよ。
1.”pen” だけではなく任意の文字列を画面から入力して検索できるプログラム

例:

検索したい文字列: have
2文字目に見つかりました

2. 任意の一行(ただし80文字以内)を画面から入力させ、さらにその中の任意の文字列を検索できるプログラム

例:

元の文字列: To be to be ten made to be.
検索したい文字列: to
6文字目に見つかりました
21文字目に見つかりました
[プログラム]
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1969.txt
1問めと2問めできれば分けて、それぞれ作成お願いします。
プログラム長いと思うので、UPしてかまわないです。
832デフォルトの名無しさん:2006/06/01(木) 08:24:06
>>830
#include <stdio.h>
int main()
{
  char s[64];
  int i,n;
  int i1,i2;
  char t;
  printf("xを入力せよ\n");
  if (1!=scanf("%d",&n)) {
    printf("error!\n");
    exit(1);
  }
  for(i=1;i<=n;i++) {
    printf("%d個目の文字列を入力!:",i);
    if (1!=scanf("%63s",s)) break;
    ;
    
    for(i1=0,i2=strlen(s);i1>i2;i1++,i2--) {
      t=s[i1];
      s[i1]=s[i2];
      s[i2]=t;
    }
    printf("反転しました!:%s\n",s);
  }
}

}
833デフォルトの名無しさん:2006/06/01(木) 08:30:29
>>832訂正
#include <stdio.h>
#include <string.h>
int main()
{
char s[64];
int i,n;
int i1,i2;
char t;
printf("xを入力せよ\n");
if (1!=scanf("%d",&n)) {
printf("error!\n");
return 1;
}
for(i=1;i<=n;i++) {
printf("%d個目の文字列を入力!:",i);
if (1!=scanf("%63s",s)) break;
;

for(i1=0,i2=strlen(s)-1;i1>i2;i1++,i2--) {
t=s[i1];
s[i1]=s[i2];
s[i2]=t;
}
printf("反転しました!:%s\n",s);
}
return 0;
}
834デフォルトの名無しさん:2006/06/01(木) 08:32:29
>>833さらに訂正
#include <stdio.h>
#include <string.h>
int main()
{
char s[64];
int i,n;
int i1,i2;
char t;
printf("xを入力せよ\n");
if (1!=scanf("%d",&n)) {
printf("error!\n");
return 1;
}
for(i=1;i<=n;i++) {
printf("%d個目の文字列を入力!:",i);
if (1!=scanf("%63s",s)) break;
;

for(i1=0,i2=strlen(s)-1;i1<i2;i1++,i2--) {
t=s[i1];
s[i1]=s[i2];
s[i2]=t;
}
printf("反転しました!:%s\n",s);
}
return 0;
}
835デフォルトの名無しさん:2006/06/01(木) 08:43:49
1)単元:プログラミング技術演習(C)
2)問題文
7章 問12
txtファイルの各行の終端には通常、復帰及び改行を示すアスキーコードが加えられている。
これを利用し、ファイルの行数を復帰、改行の数をカウントすることにより計算が可能である。
これを利用し、txtファイルの行数を計算するプログラムの作成を行え。
尚、復帰・改行に対応するアスキーコードは「10」である。
txtファイルの読み込みは、初回の講義で説明した通り、
./a.out < ファイル名.txt となる。
3)環境 gcc VineLinux3.2 C言語
4)制限
C言語入門にて、配列、文字列の項まで。

初めてお世話になります、よろしくお願いします。
836デフォルトの名無しさん:2006/06/01(木) 10:34:23 BE:69877049-#
>>835
#include<stdio.h>
int main(void){int c,l=0;while((c=getchar())!=EOF)if(c=='\n')++l;printf("%i\n",l);return 0;}
837デフォルトの名無しさん:2006/06/01(木) 10:54:29 BE:104814869-#
>>831
1.
-char s[] = "pen";
+char s[81];

forの前に↓を追加
fgets(s,81,stdin);

2.
-char bunsho[] = "I have a pen & pencil";
+char bunsho[81];

forの前に↓を追加
fgets(bunsho,81,stdin);
838デフォルトの名無しさん:2006/06/01(木) 11:29:30
>>837
ありがとうございました
839デフォルトの名無しさん:2006/06/01(木) 11:33:19
>>837

-char s[] = "pen";
+char s[81];

-,+の意味が分かりません。追加するってことですか?
840デフォルトの名無しさん:2006/06/01(木) 11:42:03
>>837
ごめんなさい。動作しました。ありがとうございました。
841デフォルトの名無しさん:2006/06/01(木) 11:56:15
>>829
#include <stdio.h>
#include <string.h>

int replace(char s1[], char s2[], char s3[]){
int i, j, wk2, wk3;
char r[0xff];
for(i = 0;s1[i] != NULL && s1[i] != s2[0];i++);
if(strncmp(&s1[i], s2, (wk2 = strlen(s2))) != 0)return 0;
for(j = 0; j < i;j++)r[j] = s1[j];
for(j = 0; s3[j] != NULL;j++)r[i + j] = s3[j];
for(j = 0, wk2 += i, wk3 = strlen(s3) + i; s1[j] != NULL;j++)r[wk3 + j] = s1[wk2 + j];
strcpy(s1, r);
return 1;
}

int main(){
char s1[255], s2[100], s3[100];
printf("入力文字列:");gets(s1);
printf("元:");gets(s2);
printf("後:");gets(s3);
if(replace(s1, s2, s3))printf("結果:%s", s1);
else printf("失敗");
return 0;
}
842デフォルトの名無しさん:2006/06/01(木) 12:00:49
>>841
訂正
int replace(char s1[], char s2[], char s3[]){
int i, j, wk2, wk3;
char r[0xff];
for(i = 0;s1[i] != NULL;i++)if(s1[i] == s2[0] && strncmp(&s1[i], s2, (wk2 = strlen(s2))) == 0)break;
if(s1[i] == NULL)return 0;
for(j = 0; j < i;j++)r[j] = s1[j];
for(j = 0; s3[j] != NULL;j++)r[i + j] = s3[j];
for(j = 0, wk2 += i, wk3 = strlen(s3) + i; s1[j] != NULL;j++)r[wk3 + j] = s1[wk2 + j];
strcpy(s1, r);
return 1;
}
843831:2006/06/01(木) 12:45:35
>>831 ですが、
>>837のように改良しましたが、

1問目は、実行画面で入力できるのですが、
検索したい単語は任意です。pen だけではなくhaveとかも検索できるプログラムを
お願いします。
2問目も同様に、実行画面で英文の文章を入力したら、その文から任意の単語を検索して
表示するプログラムをお願いします。

(例):
元の文字列    :   To be to be ten made to be.
検索したい文字列 :   to
6文字目に見つかりました
21文字目に見つかりました

↑実行画面ではこんな感じ。
844デフォルトの名無しさん:2006/06/01(木) 12:55:14
1] 単元名: プログラム演習C・C♯・C++コース
2] 問題文:
任意の文字列を配列に読み込み、
その中に出てくる特定の文字列を指定した文字列に置き換えるプログラムの作成

実行例を以下のようにせよ。

入力文字列:boku ha suika ga suki dayo
置き換え元:suika
置き換え後:meron
結果:boku ha meron ga suki dayo

必要であれば以下の関数を用いること

文字列を複写する関数:strncpy(str1,str2,n)
文字列の長さを返す関数:strlen(str1)
文字列をn文字分比較する関数:strncmp(str1,str2,n)

3] 環境
 31] OS: VineLinux3.2
 32] コンパイラー: gcc
 33] 言語: C言語
4] 期限: あと90分強
5] その他の制限: 配列、文字列まで修了、ポインタの使用禁止だそうです。

よろしくお願いします・・・っ
845デフォルトの名無しさん:2006/06/01(木) 12:56:23
>>844
あるじゃん>>841-842
846デフォルトの名無しさん:2006/06/01(木) 13:01:26 BE:23292926-#
847デフォルトの名無しさん:2006/06/01(木) 13:03:06 BE:122283779-#
>文字列を複写する関数:strncpy(str1,str2,n)
>文字列の長さを返す関数:strlen(str1)
>文字列をn文字分比較する関数:strncmp(str1,str2,n)
>ポインタの使用禁止だそうです。

もうね、ア(ry
848844:2006/06/01(木) 13:06:18
あ、ホントだ!
同じ単元の別コースの同じ問題なのかな…?
凄い偶然・・・



あ、でもダメです、
なんか7、8、10、11行目でコンパイルエラーでてしまいます
どう直せばいいのでしょう orz
849デフォルトの名無しさん:2006/06/01(木) 13:09:05
>・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
850デフォルトの名無しさん:2006/06/01(木) 13:09:36
ポインタだめでインデックスおーけーな意味がわからんわ
851844:2006/06/01(木) 13:18:03
はうぁ!なんか色々ごめんなさい!
ポインタ禁止は別の問題の禁則でした・・・。
えっと、エラーは7、8、10、11行目で、
エラーメッセージは全て
警告 :ポインタと整数との比較を行っています   です。
852デフォルトの名無しさん:2006/06/01(木) 13:26:19
それはエラーじゃなくてワーニングじゃ…
いやなら、キャストすれば
853デフォルトの名無しさん:2006/06/01(木) 13:30:27
>>852
あっ、二行目は勘違いかも
854844:2006/06/01(木) 13:38:22
やっと意味が分かりました、へたれですみませんでした
ありがとうございましたー!精進します!
855デフォルトの名無しさん:2006/06/01(木) 13:56:06
なんかアホを通りこして微笑ましくすらあったな
先輩に頼りまくってた1回生の頃思い出した
856デフォルトの名無しさん:2006/06/01(木) 14:10:34
[1] 授業単元:アルゴリズム論
[2] 問題文:
コマンドライン上の括弧文字列を読み込んで、
左括弧と右括弧が釣り合っているか(整合しているか)どうかを判定し、
釣り合っている場合には対応する括弧対に番号をつけて出力するようなプログラムを
作成せよ。

ヒント:文字入力にはgetchar()関数を呼び出す。

例:入力[ [ ] [ [ ] ] ] [ ] ⇒ 出力 [1 [2 ]2 [3 [4 ]4 ]3 ]1 [5 ]5

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:6/7まで
[5] その他の制限:無し

どなたかご教授お願いします。

857デフォルトの名無しさん:2006/06/01(木) 14:24:45 BE:122283779-#
858デフォルトの名無しさん:2006/06/01(木) 14:33:05
>>857
そのプログラムをコンパイルしてみたのですが、

13:3: missing terminating " character
6:44: possible start of unterminated string literal

というエラーメッセージが出るんですが、さっぱり意味がわかりません。
どこを修正すればいいんでしょうか?
859デフォルトの名無しさん:2006/06/01(木) 14:54:42
>>856
#include <stdio.h>

int func(int count)
{
int ch;

for (;;) {
ch = getchar();
if (ch == '[') {
int n = count++;

printf("[%d ", n);
count = func(count);
printf("]%d ", n);
}
else if(ch == ']')
return count;
else if(ch == '\n')
putchar(ch);
}
}

main(void)
{
/* (C) 2ch syukudai sure */
func(1);
}
860デフォルトの名無しさん:2006/06/01(木) 15:09:44 BE:139752498-#
>>858
日本語とおらねえのか。
#include<stdio.h>
int main(void){int l,m,s,c,len=0;l=m=s=0;char tmp[1000];
while((c=getchar())!=EOF&&len<1000){{
tmp[len++]=c;switch(c){
case'[':++l;len+=sprintf(&tmp[len],"%i",l);break;case']':--l;len+=sprintf(&tmp[len],"%i",l);break;
case'(':++s;len+=sprintf(&tmp[len],"%i",s);break;case')':--s;len+=sprintf(&tmp[len],"%i",s);break;
case'<':++m;len+=sprintf(&tmp[len],"%i",m);break;case'>':--m;len+=sprintf(&tmp[len],"%i",m);break;}
if (!(l && m && s))printf("%s\n",tmp);else printf("not match\n");return 0;}}
861デフォルトの名無しさん:2006/06/01(木) 15:17:25 BE:34937892-#
>>860
しまった。
#include<stdio.h>
int main(void){int l,m,s,c,len=0;l=m=s=0;char tmp[1000],tmp2[10];
while((c=getchar())!=EOF&&len<1000){
tmp[len++]=c;switch(c){
case'[':++l;len+=sprintf(&tmp[len],"%i",l);break;case']':len+=sprintf(&tmp[len],"%i",l--);break;
case'(':++s;len+=sprintf(&tmp[len],"%i",s);break;case')':len+=sprintf(&tmp[len],"%i",s--);break;
case'<':++m;len+=sprintf(&tmp[len],"%i",m);break;case'>':len+=sprintf(&tmp[len],"%i",m--);break;
}}tmp[len]='\0';if (!(l && m && s))printf("%s\n",tmp);else printf("not match\n");return 0;}
862デフォルトの名無しさん:2006/06/01(木) 17:59:13
[1] 授業単元: 情報処理
[2] 問題文:文字列の長さが長い順に,文字列配列を使って,並べ替えるプログラムを作成しなさい.
ただし,文字列の長さを求める関数と,文字列をコピーする関数を作成しなさい
(ライブラリとして用意されている関数は用いないこと).
[3] 環境
 [3.1] OS:Windows xp
 [3.2] コンパイラ名とバージョン: bcc55
 [3.3] 言語:C
[4] 期限:2006年6月5日
ある程度は作成しましたが、実行したら強制終了してしまいます。

863デフォルトの名無しさん:2006/06/01(木) 18:13:04
↑強制終了はなくなりました。
ライブラリの関数を使わずに、
文字列を格納するのがうまくいってないようです。
864デフォルトの名無しさん:2006/06/01(木) 18:41:13 BE:38820645-#
>>862
#include<stdio.h>
#include<stdlib.h>
size_t mystrlen(const char* str){size_t i;for(i=0;*str!='\0';str++,i++);return i;}
char* mystrcpy(char* dst,const char* src,size_t len){size_t i;for(i=0;i<len&&*src!='\0';src++;i++)
dst[i++]=*src;return dst;}
int cmplen(const char* s1,const char* s2){return mystrlen(s1)-mystrlen(s2);}
int main(void){char tmp[100],char* list[1000];int n=0,len;
while(fgets(tmp,100,stdin)&&n<1000){list[n]=(char*)malloc((len=mystrlen(tmp)));
mystrcpy(list[n],tmp,len-2);list[n][len-1]='\0';n++;}
qsort((void*)list,n,sizeof(char*),(int (*)(const void*, const void*))cmplen);
while(--n>=0)printf("%s\n",list[n]);return 0;}
865843:2006/06/01(木) 18:43:29
>>843 お願します。
866デフォルトの名無しさん:2006/06/01(木) 18:48:55
>>862
/* テストしないでかきこ */
#include <stdio.h>
#include <stdlob.h>
char strings[3][100];
void str_copy(char* to, char* from)
{while (*from != '\0') {*to++ = *from++;} *to = '\0'; }
int str_length(char* str)
{int length = 0; while (*str != '\0') {length++; str++; } return length; }
int main()
{str_copy(strings[0], "Banana"); str_copy(strings[1], "Pineapple"); str_copy(strings[2], "Grape");
bool sorted_flag;
do
{sorted_flag = false;
for (int i = 0; i < NUM_STRING; i++)
{for (int n = i + 1; n < NUM_STRING; n++)
{if (str_length(strings[i]) < str_length(strings[n])
{char str_buffer[100];
str_copy(str_buffer, strings[i]);
str_copy(strings[i], strings[n]);
str_copy(strings[n], str_buffer);
sorted_flag = true; }}}}
while (sorted_flag);
return 0;
for (int i = 0; i < NUM_STRING; i++)
printf("[%d] %s\n", i, strings[i]);
return 0; }
867デフォルトの名無しさん:2006/06/01(木) 19:00:51
>>866 >>864ありがとうございます!ですが、
下の文は文字列の文字数abcを引数として入れ替える関数です。
自分で作った文ですが、うまくいきません。
int Fnc2(char str[m][n],int a,int b,int c){
int i=0,j=1;
char tmp[m][n];
if(a<b){tmp[m][n]=str[i][n];
str[i][n]=str[j][n];
str[j][n]=tmp[m][n];}
i++;j++;
if(b<c){tmp[m][n]=str[i][n];
str[i][n]=str[j][n];
str[j][n]=tmp[m][n];}
printf("%s %s %s",str[0],str[1],str[2]);
return 0;
}
868デフォルトの名無しさん:2006/06/01(木) 19:07:06 BE:34938836-#
>>867
何をやりたいのかがよくわからん。
869デフォルトの名無しさん:2006/06/01(木) 19:09:28
>>867
mとnは定数?
aとbとcは何?
とりあえず、比較と入れ替えを別々の関数にしたほうが作りやすいと思う。
870デフォルトの名無しさん:2006/06/01(木) 19:31:42
>>869 すみません、これが全体のプログラムです。
#include <stdio.h>
#define m 5
#define n 80
#define string char *
int Fnc(char str[m][n],int *a,int *b,int *c);
int Fnc2(char str[m][n],int a,int b,int c);
main(){int a=0,b=0,c=0,i;
char str[m][n];
printf("3列分文字列を入力してください。\n");
for(i=0;i<3;i++){scanf("%s",str[i]);}
Fnc(str,&a,&b,&c);
Fnc2(str,a,b,c);return 0;}
int Fnc(char str[m][n],int *a,int *b,int *c){
int i=0;
while(str[0][i]!=NULL){(*a)++;i++;}i=0;
while(str[1][i]!=NULL){(*b)++;i++;}i=0;
while(str[2][i]!=NULL){(*c)++;i++;}return 0;}
int Fnc2(char str[m][n],int a,int b,int c){
int i=0,j=1;
char tmp[m][n];if(a<b){tmp[m][n]=str[i][n];
str[i][n]=str[j][n];
str[j][n]=tmp[m][n];}i++;j++;
if(b<c){tmp[m][n]=str[i][n];
str[i][n]=str[j][n];
str[j][n]=tmp[m][n];}
printf("%s %s %s",str[0],str[1],str[2]);return 0;}
871866:2006/06/01(木) 19:47:31
>>870
二次元配列を丸ごと引数として渡したりとかできないよ。
>文字列の長さを求める関数と,文字列をコピーする関数を作成しなさい
っていう意味も理解していないっぽい。
>>864>>866でどういう関数を作っているかよくみてみれ。
872デフォルトの名無しさん:2006/06/01(木) 22:00:55
>>865
int slen = strlen(s);の下に
if(s[--slen] == '\n')s[slen] = NULL;
加える
873デフォルトの名無しさん:2006/06/01(木) 23:39:38
cygwinでscriptが出来ないのでどなたか下記のプログラムをscript
していただけないでしょうか。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1970.txt
よろしくお願いいたします。
874デフォルトの名無しさん:2006/06/02(金) 00:12:59
>>873
1. script の意味を取り違えてる。そもそも動詞ではない。
2. 分割コンパイルの考え方を誤っている。
3. >>1 を見ていない。
4. 誰かがコンパイルしたとして、その結果出来る a.exe をどうするの?
875デフォルトの名無しさん:2006/06/02(金) 00:46:27
>>874
1.屁理屈言うなって。ニュアンスは伝わるべ。
2.どこが誤っている?
3.これは同意。
4.cygwinじゃないんだからa.exeはないだろ。
876デフォルトの名無しさん:2006/06/02(金) 01:04:09
1. なんて説明すればよいかわからなかっただけです
2. 分割コンパイルは問題なく動作してます
3. いや、前にこちらでテンプレ付で頼んだやつの実行したやつをtxtで
取りたかったんですけど、もう一回テンプレはうざいかなと思って
4. コンパイルしたファイルは頼んでいません、ただcygwinなら最初に
gcc ○○.c でコンパイルしないと、./a.exeでscriptできないかなと思ったので
そう書きました

普通cygwinではgcc ○○.c , script開始, ./a.exe, exitという流れでtypescript
を取っているので、そのtypescriptを貼っていただければと思ったのですが
877デフォルトの名無しさん:2006/06/02(金) 01:33:23
>>873
スクリプトするなんて言葉聞いたこと無いし、意味が分からない
878デフォルトの名無しさん:2006/06/02(金) 01:48:37
実行結果をファイル出力するなら>使えば
879デフォルトの名無しさん:2006/06/02(金) 02:01:04
>>876
分からないと言われてる(しかも自分自身何て説明すればいいか分からん)言葉を
説明無く使うな。余計意味が分からん。結局何したいの?

ついでにいっておくと、>>874での2.は、コンパイルできるかどうかの問題ではなく、
あのコンパイルの仕方は分割コンパイルではない、ということ。
880デフォルトの名無しさん:2006/06/02(金) 02:08:07
>>879
実行結果をファイル出力ってscriptって言いませんでしたっけ?
どっかで聞いた気がするんですけど、間違ってたらすみません
それをとにかくやりたいのですが、script以外にやり方あったら教えて下さい
>はどうやって使うんでしょうか

別の場所のcygwinではscriptって入れれば、実行結果が見れるので
それでいいんだと思ってました
881デフォルトの名無しさん:2006/06/02(金) 02:09:07
・コンパイル単位を分けることを分割コンパイルと呼ばずになんて呼ぶんだ?
・scriptコマンドを知らない香具師が随分いるんだな。
882デフォルトの名無しさん:2006/06/02(金) 02:13:14
つーか、ぐぐれ
いいかげん、スレ違い
883デフォルトの名無しさん:2006/06/02(金) 02:35:51
そもそもUNIXコマンドなんてスレ違い甚だしい
884デフォルトの名無しさん:2006/06/02(金) 08:44:15
>>881
>・scriptコマンドを知らない香具師が随分いるんだな。
そもそもスレ違いな事を知っている必要はない
885デフォルトの名無しさん:2006/06/02(金) 09:12:01
scriptコマンドなんて初めて知った。ありがとう。
886858:2006/06/02(金) 09:57:15
>>861
実行してみましたが、858のと同じエラーメッセージが出てしまいます。
いやはやどうすればいいのやら。。。
887858:2006/06/02(金) 10:30:50
>>859
申し訳ありません。あなたの書き込み、見逃していました。
実行してみたところ、正常に作動しました。
本当にありがとうございます。助かりました。
888デフォルトの名無しさん:2006/06/02(金) 10:35:54
>886
試してみたけどtmp2いらねえよって言われただけでコンパイル通ったぞ。
つか8行しか無いのに13行目でエラーっておかしく無いか?
889デフォルトの名無しさん:2006/06/02(金) 14:00:55
コンパイルはできるが、>>858が要求している結果にはならんな
890デフォルトの名無しさん:2006/06/02(金) 14:11:07 BE:93168768-#
なるよ。珍しく動作確認済み。
891デフォルトの名無しさん:2006/06/02(金) 14:41:33
>>890
ならんよ。>>856の例を試してみればいい。深さを出しちゃいかんよ。
892デフォルトの名無しさん:2006/06/02(金) 15:00:41 BE:23292634-#
なんだ深さじゃねえのか。
893デフォルトの名無しさん:2006/06/02(金) 15:22:25
[1] 授業単元: 情報演習
[2] 問題文: 以下の手順にしたがって文字列を処理するプログラムを作成し,実行し
なさい.ただし,配列内各要素へのアクセスにはポインタを使用し、関数(strcpy(), strcat(), strlen()等)は使用しないこと.
(1)2つの文字配列A, Bを用意する.
(2)文字配列A, Bに,対象文字列を格納する.
(3) B に格納された文字列の末尾に, A に格納された文字列を連結させ,それらを表
示させる.
(4)(3)の処理後, Bの文字列を逆順にAにコピーし,それらを表示させる.
入出力例)
Please􀀕input􀀕first􀀕words:abcd􀀕efgh􀀕(注:末尾にスペース有)
Please􀀕input􀀕second􀀕words:ijkl􀀕mnop􀀕(注:末尾にスペース有)
Connected􀀕words:ijkl􀀕mnop􀀕abcd􀀕efgh􀀕(注:末尾にスペース有)
Backwared􀀕arranged􀀕words:􀀕hgfe􀀕dcba􀀕ponm􀀕lkji(注:先頭にスペース有)
[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限:2006年6月7日
よろしくお願いいたします(´Д⊂
894デフォルトの名無しさん:2006/06/02(金) 15:32:34
>>893
マルチ乙
895デフォルトの名無しさん:2006/06/02(金) 15:48:08
#include<stdio.h>
int main(void){
char a[0xff], b[0xff], *p, *q;
printf("Please input first words:");gets_s(a, sizeof(a));
printf("Please input second words:");gets_s(b, sizeof(b));
for(q = b; *q != NULL; q++);
for(p = a; *p != NULL; *q = *p, p++, q++);
*q = NULL;
printf("Connected words:");puts(b);
for(p = a, q--; q >= b; *p = *q, p++, q--);
*p = NULL;
printf("Backwared arranged words:");puts(a);
return 0;
}
しまった、やってしまった…
896デフォルトの名無しさん:2006/06/02(金) 19:30:33
[1] 授業単元:
[2] 問題文(含コード&リンク):
整数を要素とするスタックのクラス定義をC++あるいはJavaで作成せよ
[3] 環境 Windows
[4] 期限 明日まで

初心者です。
意味が分かりません…お願いします。
897デフォルトの名無しさん:2006/06/02(金) 19:39:24
>>896ほらよ
#include<stack>
class Stack : public std::stack<int>{};
898デフォルトの名無しさん:2006/06/02(金) 20:36:00
キーボードから0以上の整数を入力し、その整数の和を計算し表示する
プログラムを作成せよ。for文をしよう
[1] 授業単元:計算力学
[2] 問題文(含コード&リンク): キーボードから0以上の整数を入力し、
その整数の和を計算し表示するプログラムを作成せよ。for文を使用いて作成してください
[3] 環境
 [3.1] OS:Windows
 [3.3] 言語:C
[4] 期限: 6月5日

お願いします。
899デフォルトの名無しさん:2006/06/02(金) 21:03:15 BE:149769656-#
>>896
---------------------------
#include <stdexcept>

class IntStack {
private:
/* (C) 2ch tech syukudai sure */
int size_;
int index_;
int* table_;
public:
IntStack(int);
virtual ~IntStack();

void push(int);
int pop();
};

IntStack::IntStack(int size)
: size_(size), index_(0), table_(new int[size])
{
}

IntStack::~IntStack()
{
delete table_;
}
---------------------------
つづく
900デフォルトの名無しさん:2006/06/02(金) 21:04:05 BE:139785247-#
>>899 の続き
--------------------------
void IntStack::push(int n)
{
if (index_ >= size_) throw std::out_of_range("error");
table_[index_++] = n;
}

int IntStack::pop()
{
if (index_ <= 0) throw std::out_of_range("error");
return table_[--index_];
}
901デフォルトの名無しさん:2006/06/02(金) 21:15:21
>>899
delete[]table_;じゃないから駄目。
902デフォルトの名無しさん:2006/06/02(金) 21:37:10 BE:174730875-#
>>899
じゃ、delete table_; の行はdelete[] table_; に直しといてね。

903デフォルトの名無しさん:2006/06/02(金) 21:45:43 BE:119816238-#
>>898
#include <stdio.h>

main(void)
{
int n;
int i;
int sum;

/* (C) 2ch tech syukudai sure */
prntf("0以上の整数>");
scanf("%d", &n);
sum = 0;
for (i = 0; i <= n; i++)
sum += i;
printf("整数の和: %d\n", n);
}
904デフォルトの名無しさん:2006/06/02(金) 21:52:43
>>898
#include <stdio.h>
int main(void){
int sum,n;
for(sum=0;scanf("%d",&n)!=EOF;sum+=n);
printf("sum:%d\n",sum);
return 0;
}
905デフォルトの名無しさん:2006/06/02(金) 22:17:12
>>903
>>904
こんなに早く教えていただきありがとうございました。
906デフォルトの名無しさん:2006/06/02(金) 22:18:25 BE:279569287-#
>>905
「整数の和」ってどっちなの?
複数の整数を入力してもらって、それの合計?
907デフォルトの名無しさん:2006/06/02(金) 22:29:42
割り込んですいませんが、はじめてのCを購入した
のですが、これ一冊である程度まで覚えられるで
しょうか?初心者でプログラムのことはよくわか
ってないです。16進法は別のネットワークの本
に書いてあったのでなんとかなります。
908デフォルトの名無しさん:2006/06/02(金) 23:39:28
やる気しだい
909デフォルトの名無しさん:2006/06/02(金) 23:54:35
>>908
やってみます。ありがとうございました。
910 ◆ZnBI2EKkq. :2006/06/03(土) 00:51:55
[1] 授業単元: 数値計算法
[2] 問題文(含コード&リンク): @f (x) = cos (x) - x2 = 0 の根のうち、0 < x < 1 を満たすものを2分法で求める
初期値 a, b が入力でき、 6桁推定された解と関数 f (x) を呼びだした回数を出力するようにしなさい。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C
[4] 期限: (2006年06月08日まで

よろしくお願いします
911デフォルトの名無しさん:2006/06/03(土) 01:05:58
突然すいません。
例えばa[i][j]という二次元配列があり、
その中から特定の要素が入っている配列を探し出し、その配列の
iとjを知るにはどうすればいいでしょうか?
二重ループを使って色々やってみましたがうまくいきません。
912デフォルトの名無しさん:2006/06/03(土) 01:11:56
根性
913デフォルトの名無しさん:2006/06/03(土) 01:29:12 BE:46585038-#
>>911
for(i=0;i<IMAX;i++)for(j=0;j<JMAX;j++)if(a[i][j]==key)break;
914デフォルトの名無しさん:2006/06/03(土) 01:51:40 BE:139752498-#
>>910
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
double f(double x, int* n){++*n; return cos(x)*pow(x,2);}
int main(void){double a,b,c,y;char tmp[100];int t,n=0;double e=0.0001;
printf("初期値a:");fgets(tmp,100,stdin);a=atof(tmp);
printf("初期値b:");fgets(tmp,100,stdin);b=atof(tmp);
for(t=0;(double)(abs(b-a)/pow(2,t))>=e;t++);
do{c=(a+b)/2;y=f(c,&n);if((f(a,&n)*y)<0)b=c;else a=c;}while(!(abs(b-a)<e)&&!(y<e)&&(--t>0));
if(t)printf("解:%.6f(%i attempts)\n",c,n);else printf("収束しません\n");return 0;}
915デフォルトの名無しさん:2006/06/03(土) 02:00:47
>898

template <typename T>class MyStack{
public:
MyStack(int s = 0){m_size = s;m_stack = new T[m_size];m_top = 0;}
T top(){if(!empty())return *(m_stack + sizeof(T) * (m_top -1));}
bool empty(){if(m_top == 0)return true;return false;}
bool pop(){if(m_top == 0)return false;else{m_top--;return true;}}
bool push(T elem){if(m_top == m_size - 1 ){m_size = m_size * 2;T* temp;temp = new T[m_size];
for(int i = 0; i < m_top; i++){*(temp + sizeof(T) * i) = *(m_stack + sizeof(T) * i);}m_stack = temp;delete [] temp;}
*(m_stack + sizeof(T) * m_top) = elem;m_top++;return true;}
int size(){return m_top;}
private:
intm_size, m_top;T*m_stack;
};

916デフォルトの名無しさん:2006/06/03(土) 02:16:39 BE:69876094-#
>>914
よく見たら方程式が違ってるけど適当に直しといて。
917デフォルトの名無しさん:2006/06/03(土) 02:29:13
>>913
それだとうまくいかないっぽいです。。。
(配列の最大値が表示されてしまう)
>>911の具体的なプログラムはこんな感じです。

#include <stdio.h>

int main(){
int i,j,key;
int a[4][4];

scanf("%d", &key); /*探したい要素を入力*/

for(i=0; i<4; i++){
for(j=0;j<4;j++){
a[i][j]=i+1+4*j;
}
}
/*ここに検索するためプログラムを記述したい*/
printf("%d %d",i,j);
}
918917:2006/06/03(土) 02:31:06
917は4*4の配列の初期値をあらかじめ入れています。
919デフォルトの名無しさん:2006/06/03(土) 02:36:01
breakは内側のループからしか脱出しないから、ここでは使えない。
for(i=0;i<IMAX;i++)for(j=0;j<JMAX;j++)if(a[i][j]==key)goto found;
found:
920デフォルトの名無しさん:2006/06/03(土) 02:37:01 BE:104814869-#
>>917
ああそうか。break1個じゃ二重ループ抜けねえんだっけ。

そしたら番人を立ててこんな感じで。

int u,v;u=v=-1;
for(i=0;i<4&&u<0&&v<0;i++)for(j=0;j<4&&u<0&&v<0;j++)if(a[i][j]==key){u=i;v=j;}
printf("%d %d",u,v);
921デフォルトの名無しさん:2006/06/03(土) 02:43:03
for(i=0;i<IMAX;i++)for(j=0;j<JMAX;j++)if(a[i][j]==key)goto nullpo;
nullpo:
922917:2006/06/03(土) 02:45:54
>>919-920
おぉ、できました!
ありがとうございました。
923デフォルトの名無しさん:2006/06/03(土) 10:36:01
前に大変お世話になったのでまたお願いいたします。
[1] 授業単元: C language
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1971.txt
課題の内容
連結リストにデータの格納をして効率の良いハッシュを実現するプログラムを作成し (chain.c)、
あらかじめ作成しておいたmain.cとhash.cを利用して分割コンパイルする。
具体的な用件
連結リストを利用して、効率良く、かつメモリに無駄のないハッシュを実現する。
@ cancel関数部分を完成させる。データの削除は、削除したいノード(key)を指していたリンク(previous->next)
を次のノード(key->next)につなぎ変えてから、不要になったノードのアドレスを開放(free(key);)する。
A hash.cとmain.cを利用して、分割コンパイルの醍醐味を実感する。
つまり、chain.cはopenaddr.cと同様の関数名、引数、返り値を用いて、main.cでの整合性を保つようにすること。

[3] 環境
 [3.1] OS: Windows (cygwin)
 [3.2] gcc
 [3.3] 言語: C
[4] 期限: ([2006年6月6日12:00amまで]
[5] その他の制限: 特になし

長いプログラムですが、
hash.c main.c openaddr.c はもう完成しています。
chain.cの最後の部分、int cancelだけだと思うのですが、void enterまでは
できました。少し前に分割コンパイルの質問をした者ですが、これは前回の課題の続きです。
詳細は長いのでろだにアップしました、
よろしくお願いいたします。
924デフォルトの名無しさん:2006/06/03(土) 11:29:48
[ 7] id: Galilei, info: 1564
[239] id: Maxwell, info: 1831
[247] id: Einstein, info: 1879
[249] id: Heisenberg, info: 1901
[249] id: Copernicus, info: 1473
[253] id: Newton, info: 1643
1.Enter 2.Search 3.Cancel 4.End Program
2
Enter Name : Heisenberg
Heisenberg => 1901
Heisenberg => 1

1.Enter 2.Search 3.Cancel 4.End Program
2
Enter Name : Copernicus
Copernicus => 1473
Copernicus => 1
衝突してね?
925デフォルトの名無しさん:2006/06/03(土) 12:42:10
[1] 授業単元:情報処理言語演習
[2] 問題文(含コード&リンク):正の整数を読み込むと、その整数を構成する数の中で
 最大の数を表示するプログラムを作成せよ。
 例:2006と入力すると、その中で最大の数である6を表示する。

[3] 環境
 [3.1] OS: Windows
 [3.2] Borland C++ Cpad
 [3.3] 言語: C
[4] 期限: 2006年06月05日まで
[5] その他の制限: ttp://www.bohyoh.com/Books/MeikaiC01/index.html
 上記のリンク先の参考書を使っていて、「目次」の第4章4-4までを授業でやりました。
 
よろしくお願いします。
926デフォルトの名無しさん:2006/06/03(土) 12:54:00
参考書の内容なんて知るかよ。
927デフォルトの名無しさん:2006/06/03(土) 12:58:07
>>925
一応習ってる範囲で。
#include <stdio.h>
int main(void){
int num,x;
scanf("%d",&num);
for(x = 0; num != 0; num /= 10) if(x < num%10) x = num % 10;
printf("%d\n",x);
return 0;
}
928925:2006/06/03(土) 13:32:59
>>926
このスレにいる人なら大体目次の内容から判断できるかと思いまして…
リンク先におおまかに載っているので。ごめんなさい。
>>927
ありがとうございます!できました!
929728:2006/06/03(土) 14:31:43
[1] 授業単元:プログラミング言語・演習U
[2] 問題文(含コード&リンク):
実数xを引数として受け取り、y=x*x*x-3*x*x-6*x+8を計算し、yの値が正の場合は1を、
負の場合は-1を、0の場合は0を返す関数(戻り値は整数型)を作成し、その関数が正常に動作するか
どうかを、実際に実行して確認せよ。ただし、main関数では、xの値をキーボードから入力し、関数を
呼び出した後は、戻り値の値を出力せよ。

#include <stdio.h>
#include <math.h>
int signfunc(double x) {
return sgn(x*x*x-3x*x-6*x+8);
}
int main(void) {
double x;
scanf("%lf",&x);
printf("%d\n", signfunc(x));
return 0;
}

C:\ユーザー\プロ言T\演習19\演習19...cpp(4) : error C2065: 'sgn' : 定義されていない識別子です。
C:\ユーザー\プロ言T\演習19\演習19...cpp(4) : error C2059: 構文エラー : 'サフィックスが無効です。'
C:\ユーザー\プロ言T\演習19\演習19...cpp(4) : error C2146: 構文エラー : ')' が、識別子 'x' の前に必要です。
C:\ユーザー\プロ言T\演習19\演習19...cpp(4) : error C2059: 構文エラー : ')'
cl.exe の実行エラー

演習19.exe - エラー 4、警告 0
930728:2006/06/03(土) 14:32:48
長すぎたみたいで分割します
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:VisualStudio6.0
 [3.3] 言語: C/C++/どちらでも可
[4] 期限:月曜
[5] その他の制限: >>728 でやってもらったんですが、先生にエラーが出るのが
ばれて再提出となりましたorz
どなたかご教授おねがいします。
931デフォルトの名無しさん:2006/06/03(土) 14:40:48
sgnってBASICでは使ったことあるけど、
Cにあったっけ?
932デフォルトの名無しさん:2006/06/03(土) 15:00:31
>>930
だからといってマルチはいくない
933デフォルトの名無しさん:2006/06/03(土) 15:31:22 BE:46584083-#
>>929
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int func(double x){double res=pow(x,3)-3*pow(x,2)-6*x+8;return res>0?1:res==0?0:-1;}
int main(void){double x;char tmp[100];
fgets(tmp,sizeof(tmp),stdin);x=atof(tmp);
printf("%d\n",func(x));return 0;}
x*x*x-3x*x-6*x+8じゃなくて、
(x * x * x) - (3 * x * x) - (6 * x) + 8
のタイプミスだな。演算子の前後にきちんとスペースを入れることを
お勧めする。
935デフォルトの名無しさん:2006/06/03(土) 16:13:38
[1] 授業単元:演習
[2] 問題文(含コード&リンク):
正の整数値nを受け取り、nの階乗(n * (n-1) * (n-2)*… 2 * 1)を
計算して返す関数を作成し、その関数が正常に動作するかどうかを、実際に
実行して確認せよ。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:VisualStudio6.0
 [3.3] 言語: C/C++/どちらでも可
[4] 期限:月曜
[5] その他の制限:
できるだけ<stdio.h>のみでできるものをおねがいします。
for文を使うようです。
nはキーボード入力です。
936デフォルトの名無しさん:2006/06/03(土) 16:25:24
#include <stdio.h>
int f(int n){
if(n == 0) return 1;
return (f(n - 1) * n);
}
int main(){
int n;
printf("n = ");
scanf("%d", &n);
printf("%dの階乗は%d\n", n, f(n));
return 0;
}

あえて、再帰で
937デフォルトの名無しさん:2006/06/03(土) 18:34:28
>>914
ありがとうございます!!
938935:2006/06/03(土) 18:47:25
>>936
ご苦労様
939デフォルトの名無しさん:2006/06/03(土) 19:01:44
[1] 授業単元:演習
[2] 問題文(含コード&リンク):
整数型配列のデータと、配列の大きさ(要素の数)を受け取り、配列のデータを
大きい順に並び替える関数を作成せよ。ただし、main関数では、適当なデータを
初期値代入し、関数を呼び出した後は、配列のデータを出力せよ。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:VisualStudio6.0
 [3.3] 言語: C/C++/どちらでも可
[4] 期限:月曜
[5] その他の制限:
<stdio.h>のみでできるものをおねがいします。
インクリメント演算子(i++など)と2重ループのfor文を使ってください。
配列の数は10個です。
940デフォルトの名無しさん:2006/06/03(土) 19:44:15
[1] 授業単元:カプセル化 オーバーロード コンストラクタ デストラクタ
[2] 問題文(含コード&リンク):
#include<iostream>
using namespace std;
class Person{
int no;
char name[20];
public:
void Print();
};
void Person::Print(){
cout<<"学籍番号:"<<no<<endl;
cout<<"氏 名:"<<name<<endl;
}
int main(void){
Person man;
man.Print();
return 0;
}
上記のプロフラムを以下のように変更せよ。
1:ディフォルトコンストラクタを記述する。
2:各メンバ変数の初期値を1つずつ引数として与えるコンストラクタを記述する。
3:メンバ変数両方の初期値を引数として与えるオブジェクト生成の記述を追加して実行する。
 ・学籍番号の初期値を引数で与える場合:99999を与える。
 ・名前の初期値を引数で与える場合:初期値1を与える。
 ・学籍番号と名前の初期値を引数で与える場合:学籍番号に10000、名前に初期値2
 ・引数で与えない場合:学籍番号は0、名前はブランクとする。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:VC
 [3.3] 言語:C++
[4] 期限:2006年3月6日まで
941デフォルトの名無しさん:2006/06/03(土) 19:53:37
>>940
過ぎてる、過ぎてる
942デフォルトの名無しさん:2006/06/03(土) 20:01:05
[1] 授業単元: プログラミング入門
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1972.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C言語
[4] 期限: 2006年6月4日

よろしくお願いします。
943デフォルトの名無しさん:2006/06/03(土) 20:03:22
>>939
#include <stdio.h>
#define N 10
void arraysort(int *a, int n){
for(int i = 0;i < n - 1; i++)for(int j = i; j < n; j++)
if(a[i] > a[j]){
int tmp = a[j];
a[j] = a[i], a[i] = tmp;
}
}
int main(){
int a[10], i;
for(i = 0; i < N; i++)printf("a[%d] = ", i),scanf("%d", &a[i]);

arraysort(a, N);

for(i = 0; i < N; i++)printf("a[%d] = %d\n", i, a[i]);

return 0;
}
944デフォルトの名無しさん:2006/06/03(土) 20:28:05
>>942
#include<stddef.h>
#include<string.h>
#include<stdio.h>
static unsigned hash(char key[]){int x = 0;while(*key)x = x * 37 + *key++;return x;}
static struct assoc*find_assoc(char key[],int newly){
    unsigned x = hash(key) % MAX_KEYS,y=x;
    while(assocList[x].key[0]){
        if(strcmp(assocList[x].key,key)==0)return assocList+x;
        if(++x == MAX_KEYS)x = 0;
        if(x == y)return NULL;
    }
    if(!newly)return NULL;
    strcpy(assocList[x].key,key);
    return assocList+x;
}
double getValue(char key[]){
    struct assoc*t = find_assoc(key,0);
    if(t)return t->value;
    puts("こんなキーねーよ");
    return 0.0;
}
void setValue(char key[], double value){
    struct assoc*t = find_assoc(key,1);
    if(t){t->value=value;return;}
    puts("ハッシュこれ以上追加できなす");
}
945デフォルトの名無しさん:2006/06/03(土) 20:37:53 BE:279569478-#
>>944
そのインデント、どうやるの?
946デフォルトの名無しさん:2006/06/03(土) 20:44:49
>>945
自分はギコナビの特殊文字変換を使って書いた。
947デフォルトの名無しさん:2006/06/03(土) 20:49:07
ふつうに&nbsp;でいけるだろ。
948デフォルトの名無しさん:2006/06/03(土) 20:51:58 BE:319507788-#
&nbsp;&nbsp;&nbsp;test
949デフォルトの名無しさん:2006/06/03(土) 20:53:04
>>944
ありがとうございます。
950デフォルトの名無しさん:2006/06/03(土) 20:55:09
   test
>>948
ブラウザが勝手に&を&amp;に変換してるんじゃない?
951デフォルトの名無しさん:2006/06/03(土) 21:06:48 BE:19410252-#
>>938
何様のつもりですかこのクズは。
952デフォルトの名無しさん:2006/06/03(土) 21:32:45
935です
ほっといたけど938は私ではありません
誰か知らないけど止めてください
953デフォルトの名無しさん:2006/06/03(土) 22:50:01
一応お礼っぽいし、まあ、許容範囲でしょ?
それよりも、何も言わないでいる方が…
954デフォルトの名無しさん:2006/06/03(土) 22:52:08 BE:359446289-#
>>953
おまえまちがってもお礼するときに「ご苦労様」なんて、言うなよ。
955デフォルトの名無しさん:2006/06/03(土) 22:52:26 BE:31057128-#
宿題を丸投げするクズに「ご苦労様」とか言われるくらいならそのまま消えてもらった方がマシ。
956デフォルトの名無しさん:2006/06/03(土) 22:52:34
ご苦労様ってお礼でしょ?
957デフォルトの名無しさん:2006/06/03(土) 22:57:09
>>956
ttp://www.nhk.or.jp/a-room/kininaru/2004/04/0413.html

一般的に、目上の人には「お疲れ様でした」、目下の人には「ご苦労様でした」と使います。
この使い分けは、歌舞伎の世界から始まった・・・など、諸説あるようです。
958デフォルトの名無しさん:2006/06/03(土) 23:18:15 BE:69876566-#
>>956
お礼と労いの違いが理解できないなら小学校へ。
959936=953:2006/06/03(土) 23:19:30
ねーよ>>954
960デフォルトの名無しさん:2006/06/04(日) 00:37:57
961デフォルトの名無しさん:2006/06/04(日) 01:05:00
>>960
ふざけすぎ

次スレ
ttp://pc8.2ch.net/test/read.cgi/tech/1149350525/
気に入らない人はスルーしてください。
962デフォルトの名無しさん:2006/06/04(日) 01:22:16
二直線の交点を求める関数をお願いします。
963デフォルトの名無しさん:2006/06/04(日) 01:22:58 BE:104814296-#
重複スレを再利用すりゃいいじゃねえか。出されたごはんは残さず食べる。
C言語/C++言語の宿題を片付けます 65代目
http://pc8.2ch.net/test/read.cgi/tech/1147902222/
964デフォルトの名無しさん:2006/06/04(日) 01:29:03
>>963
そこは過去スレ一覧に引っかからないから却下された
965デフォルトの名無しさん:2006/06/04(日) 01:42:33
>>924
すみません、
これが修正版です
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1974.txt
配られた回答なのでこちらは間違っていないと思います
966デフォルトの名無しさん:2006/06/04(日) 01:43:38
連コすみません

>>924
もしよろしければ、
よろしくお願いいたします
967デフォルトの名無しさん:2006/06/04(日) 02:20:03
968おながいします:2006/06/04(日) 10:55:48
[1]情報処理
[2]正の実数値による入力データを使って(0を入力したらデータ入力終了)平均値を求め、
それぞれのデータと平均値の差の2乗和を計算・表示するプログラムを作れ。
[3]C [4]6/5 [5]制限はありません。

よろしくお願いいたします。
969デフォルトの名無しさん:2006/06/04(日) 12:46:31
>>966
cancel内のif文を
if(item > 1){
table[x] = key->next;
//各自で作成
free(key);
}else if(item == 1){
table[x] = NULL;
//各自で作成
free(key);
}
と書き換える
970デフォルトの名無しさん:2006/06/04(日) 18:41:45
>>968
#include <stdio.h>
#include <math.h>

void main() {
 int i,x[1000];
 double avg,d;

 avg=0;
 for(i=0;i<1000;i++) {
  scanf("%d",&x[i]);
  if(x[i]==0) break;
  avg+=x[i];
 }
 if(i) {
  avg/=i;
  printf("average=%f\n",avg);
  d=0;
  for(i=0;i<1000 && x[i]!=0;i++) {
   printf("[%d]=%d %f\n",i,x[i],pow((x[i]-avg),2));
   d+=pow((x[i]-avg),2);
  }
  printf("%f\n",d);
 }
 else {
  printf("no data\n");
 }
}

こんなかんじか
971デフォルトの名無しさん:2006/06/04(日) 20:05:20
[1] 授業単元:c言語演習
[2] 問題文(含コード&リンク):
   半径1の円の面積を近似的に求めよ。
   その際、dxとyの長方形を考え、それらを足し合わせて求めよ。
    dxは0.1、0.03、0.0001と記入したファイルを作り、実行時に
    dx=0.1の時面積・・・
    dx=0.03の時面積・・・
    と箇条書きになるようにせよ。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C言語
[4] 期限:6/7
[5] その他の制限:
for文を使わずwhile、if文を用いてお願いします。

よろしくお願いいたします。
972デフォルトの名無しさん:2006/06/04(日) 20:45:02 BE:122283779-#
>>971
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main(int argc,char* argv){char tmp[100];double dx,s,y,t=0.0,x=0.0;FILE* fp;
if(argc>1){if((fp=fopen(argv[1],"r"))){while(fgets(tmp,sizeof(tmp),fp)!=EOF){
dx=atof(tmp);y=sin(x);s=y*2*dx;x+=dx;printf("dx=%fの時面積%f\n",dx,s);t+=s;}fclose(fp);}
printf("円の面積:%f\n",t);return 0;}
973デフォルトの名無しさん:2006/06/04(日) 20:45:57
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
グラフがオイラーグラフであるかどうかを判定するプログラムを作成し、
graph.txtにて表現されるグラフに対して実行せよ。

オイラーグラフに関する重要な定理として、以下の2つがあげられる
(1)Gがオイラーグラフ⇔全ての点の次数が偶数
(2)フラーリーのアルゴリズムを用いて、オイラー閉路を探索可能
・フラーリーのアルゴリズム
(i)任意の点v0から閉路の探索を始める。W0=v0とする。eは辺。
(ii)W0=v0e1v1e2...eiviまで選択されたとする。次の辺ei+1は次のように求める
(a)ei+1∈E-{e1,e2,...ei}かつei+1はviに接続。
(b)選択の余地がある限り、橋を避ける。
(iii)(ii)が実行できなくなるまで繰り返す。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: できれば月曜日いっぱいまでに・・・
[5] その他の制限: なし

次数:点に接続している辺の数
橋:1本の辺を削除すると、グラフが2つになってしまう部分
graph.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1982.txt
ちょっとめんどくさいかもしれませんが、ぜひともよろしくお願いいたします。
974デフォルトの名無しさん:2006/06/04(日) 20:48:01
[1] 授業単元:情報処理演習
[2] 問題文(含コード&リンク):
ファイルtest.txtの内容をリダイレクトで読み込み、
同じくリダイレクトでそのままresult.txtに出力するプログラムを作成しなさい。
但し名前が入力された時にEOFを検出した際読み取りを終えるようにすること。

text.txt内容
a 87 32 46 33 78
b 87 32 34 87 98
c 87 98 23 76 23

 [3] 環境
 [3.1] OS: Vine Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C言語
[4] 期限:6/7
[5] その他の制限:
途中まで自作したのですが、整数表示が-1073876028などとおかしくなってしまいます。
以下のプログラムを添削願えればと思います。
975974:2006/06/04(日) 20:49:16
プログラム

#include <stdio.h>
int main(void){

typedef struct{
char name[1000];
int a1;
int a2;
int a3;
int a4;
int a5;
}data;

int num = 0;

while(scanf("%s %d %d %d %d %d", data[num].name, &data[num].a1, &data[num].a2, &data[num].a3, &data[num].a4, &data[num].a5) != EOF)
num++;

{
int i;
for(i = 0; i < num ; i++)
printf("%s %d %d %d %d %d\n", data[i].name, &data[i].a1, &data[i].a2, &data[i].a3, &data[i].a4, &data[i].a5);
}

return 0;
}
976デフォルトの名無しさん:2006/06/04(日) 21:01:06
printf側に&はイランよ。
977974:2006/06/04(日) 21:06:51
orz

>>976
2時間悩みましたw

その一言でもう本当にすっきりです。
大変感謝致します。
978971:2006/06/04(日) 21:32:09
>>972

ありがとうございます!!

ホント助かります。
979974:2006/06/04(日) 21:33:28
すみません、もう一つ…

[1] 授業単元:情報処理演習
[2] 問題文(含コード&リンク):
ファイルtest.txtの内容をリダイレクトで読み込み、
同じくリダイレクトでそのままresult.txtに出力するプログラムを作成しなさい。
但し名前が入力された時にEOFを検出した際読み取りを終えるようにすること。

text.txt内容
a 87 32 46 33 78
b 87 32 34 87 98
c 87 98 23 76 23

上の問題に加え名前ならname、1つめの数値ならa1という感じでキーボードからキーを読み込ませ、
データをそれに応じて並び替えなさい。
名前の場合はアルファベット順、その他数値のキーの場合はその列の数値が大きい順とする。

実行時のコマンド
$ ./pro01 a1 < test.txt > result.txt

 [3] 環境
 [3.1] OS: Vine Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C言語
[4] 期限:6/7
[5] その他の制限:
>>975のプログラム(printfの&を消した…)に基づいて頂ければと思います。
よろしくお願いします。
980974:2006/06/04(日) 21:37:11
>>979
× 並び替えなさい。
○ 並び替えるプログラムを作成しなさい。

の間違いでした。
すみませんがよろしくお願いします。
981デフォルトの名無しさん:2006/06/04(日) 21:42:47
実行例を示したほうが良いね
982974:2006/06/04(日) 22:02:26
>>979の実行例です

$ ./pro01 a4 < test.txt > result.txt
$ cat result.txt
b 87 32 34 87 98
c 87 98 23 76 23
a 87 32 46 33 78

(a4 というキーの入力で4列目の数値が大きい順に並び替え)

こういう感じで実現出来ればと思います。
重ね重ね、よろしくお願い致します。
983デフォルトの名無しさん:2006/06/04(日) 22:11:42 BE:269584496-#
>>979
mixiでも、同じ質問見たな。
984デフォルトの名無しさん:2006/06/04(日) 22:32:45
985デフォルトの名無しさん:2006/06/04(日) 23:43:22
>>979
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
char name[1000];
int a1;
int a2;
int a3;
int a4;
int a5;
} DATA;
char* pKey= NULL;
int Comp(const DATA* p1, const DATA* p2) {
if(strcmp(pKey, "name") == 0)return -strcmp(p1->name, p2->name);
if(strcmp(pKey, "a1") == 0)return -(p1->a1 - p2->a1);
if(strcmp(pKey, "a2") == 0)return -(p1->a2 - p2->a2);
if(strcmp(pKey, "a3") == 0)return -(p1->a3 - p2->a3);
if(strcmp(pKey, "a4") == 0)return -(p1->a4 - p2->a4);
if(strcmp(pKey, "a5") == 0)return -(p1->a5 - p2->a5);
return 0;
}/*
986デフォルトの名無しさん:2006/06/04(日) 23:44:09
*/int main(int argc, char** argv){

DATA data[1000];

int num = 0;

while(scanf("%s %d %d %d %d %d", data[num].name, &data[num].a1, &data[num].a2, &data[num].a3, &data[num].a4, &data[num].a5) != EOF)
num++;

if(argc == 2){
pKey= argv[1];
qsort(data, num, sizeof(DATA), Comp);
}

{
int i;
for(i = 0; i < num ; i++)
printf("%s %d %d %d %d %d\n", data[i].name, data[i].a1, data[i].a2, data[i].a3, data[i].a4, data[i].a5);
}

return 0;
}
987974:2006/06/04(日) 23:57:06
>>983
まさか同じ学部だったりして…
別人とはいえ、重複してしまいお手数掛けましたw

>>985-986
凄い…大変感謝いたします。
どうもありがとうございました。
988973:2006/06/05(月) 00:25:04
>>973は、やはりめんどくさいでしょうか?
989デフォルトの名無しさん:2006/06/05(月) 00:40:11 BE:62112184-#
クズの分際で催促とかしてんじゃねえよクズ。
990デフォルトの名無しさん:2006/06/05(月) 00:52:08 BE:159753784-#
>>973
> グラフがオイラーグラフであるかどうかを

まで読んだ。
991デフォルトの名無しさん:2006/06/05(月) 01:11:09
>>969
どうもありがとうございます。
ちょっとお聞きしたいのですが、
各自で作成ってところにまだ付け足さなきゃいけないものありますか?
992デフォルトの名無しさん:2006/06/05(月) 01:16:54
>>988
graph.txtの書式を
1行目:点数
2行目以降:辺(接続する点(0〜点数−1) 接続する点(0〜点数−1))
という解釈で、
#include <stdio.h>
#include <stdlib.h>
int main() {
intcPoints= 0;
int*pPoints= NULL;
intiPoint= 0;
scanf("%d", &cPoints);
pPoints= malloc(sizeof(int)*cPoints);
for(iPoint = 0 ; iPoint < cPoints ; iPoint++)pPoints[iPoint]= 0;
while(scanf("%d", &iPoint) != EOF)if(0 <= iPoint && iPoint < cPoints)pPoints[iPoint]++;
for(iPoint = 0 ; iPoint < cPoints ; iPoint++)if(pPoints[iPoint]%2!=0)break;
if(iPoint == cPoints)printf("グラフがオイラーグラフ\n");
elseprintf("グラフが非オイラーグラフ\n");
return 0;
}
993デフォルトの名無しさん:2006/06/05(月) 01:23:31
失敗した。
#include <stdio.h>
#include <stdlib.h>
int main() {
int cPoints = 0;
int* pPoints = NULL;
int iPoint = 0;
scanf("%d", &cPoints);
pPoints = malloc(sizeof(int)*cPoints);
for(iPoint = 0 ; iPoint < cPoints ; iPoint++) pPoints[iPoint] = 0;
while(scanf("%d", &iPoint) != EOF) if(0 <= iPoint && iPoint < cPoints) pPoints[iPoint]++;
for(iPoint = 0 ; iPoint < cPoints ; iPoint++) if(pPoints[iPoint]%2!=0) break;
if(iPoint == cPoints) printf("グラフがオイラーグラフ\n");
else printf("グラフが非オイラーグラフ\n");
return 0;
}
994デフォルトの名無しさん:2006/06/05(月) 15:35:06
995デフォルトの名無しさん:2006/06/05(月) 15:35:39
996973:2006/06/05(月) 15:35:58
>>993
ありがとうございます。
コンパイルして実行したのですが、何を入力すればよいのでしょうか?
ファイルの読み込みは手動でしょうか?
997デフォルトの名無しさん:2006/06/05(月) 15:37:20
998デフォルトの名無しさん:2006/06/05(月) 15:37:50
999デフォルトの名無しさん:2006/06/05(月) 15:38:22
1000デフォルトの名無しさん:2006/06/05(月) 15:42:12
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。