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

このエントリーをはてなブックマークに追加
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
【過去ログ検索】        http://chomework.sakura.ne.jp/
【wiki】               http://www23.atwiki.jp/homework/

【前スレ】
C/C++の宿題を片付けます 88代目
http://pc11.2ch.net/test/read.cgi/tech/1180070116/
2デフォルトの名無しさん:2007/06/06(水) 11:47:13
3デフォルトの名無しさん:2007/06/06(水) 12:25:00

問題文(含コード&リンク):
環境
OS: (Windows/Linux/等々)
コンパイラ名とバージョン: ボーランド
言語: C
[5] その他の制限:現在for文 if文 入力・出力・演算子
テーマ:繰り返し処理(while文)
問題:キーボードより整数nを入力し、1〜nまでの合計を求めなさい
実行画面
整数nの入力==>5
合計:15


4デフォルトの名無しさん:2007/06/06(水) 12:48:08
>>3
#include <stdio.h>
int main(void)
{

int a,count,total;
count=total=0;

printf("キーボードより整数nを入力=");
scanf("%d",&a);
while(count <= a){
total += count;
count++;
}
printf("合計=%d",total);
return 0;
}
5デフォルトの名無しさん:2007/06/06(水) 13:09:48
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): キーボードから入力される2つの整数a、bについて、
aとbの最大公約数g、最小公倍数lを計算し出力するプログラムを作成せよ。

【ヒント】
最大公約数 g は、しらみつぶしに調べる方法や、ユークリッドの互除法を使って計算できる。
最小公倍数 l は、aとbとgから計算できる。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:visual studio 2005
 [3.3] 言語: C
[4] 期限: 6/6 午後二時まで
[5] その他の制限: #include<stdio.h> ヘッダーは←だけを使って。

お願いします
6デフォルトの名無しさん:2007/06/06(水) 13:40:33
>>5
#include<stdio.h>
int main(void)
{
int a,b,m,n,g,l;
printf("a:");scanf("%d",&a);
printf("b:");scanf("%d",&b);
m=a;n=b;
while(m%n!=0){
g=m%n;m=n;n=g;
}
g=n;
l=a*b/g;

printf("GCD(%d,%d)=%d\n",a,b,g);
printf("LCM(%d,%d)=%d\n",a,b,l);


return 0;
}
7デフォルトの名無しさん:2007/06/06(水) 14:21:16
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):キーボードから2以上の整数を入力し、
その数が素数であるかどうかを判断するコードを記述せよ。

【ヒント】
素数‥2以上の整数について、1とその数以外で割り切れない数
しらみつぶしに割り切れるかどうか調べる
調べる範囲(繰り返しの継続条件)に注意する

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:visual studio 2005
 [3.3] 言語: C
[4] 期限: 6/6 午後3時まで
[5] その他の制限: #include<stdio.h> ヘッダーは←だけを使って。

二つ目お願いします。
8デフォルトの名無しさん:2007/06/06(水) 14:39:42
> [4] 期限: 6/6 午後3時まで
これは・・・レスするのを3時まで待つしかないわめ
9デフォルトの名無しさん:2007/06/06(水) 14:40:55
>>7
#include<stdio.h>
int main(void)
{
  int n,i,flg=0;;
  printf("n: ");scanf("%d",&n);
  if(n<2)return -1;
  for(i=2;i<=n/2;i++)if(!(n%i)){flg=1;break;}
  printf("%d is%sprime number.\n",n,flg?" not ":" ");
  return 0;
}
10デフォルトの名無しさん:2007/06/06(水) 14:47:31
>>9
ありがとですー
11デフォルトの名無しさん:2007/06/06(水) 14:50:00
>>7
#include <stdio.h>
int main(void) {
int x,i,flg=1;
printf("Input > ");
scanf("%d",&x);
if(x<2) return 1;
else if(x==2) flg=1;
else if(x%2==0) flg=0;
else if(x>=3) {
for(i=3; i*i<=x; i+=2) {
if(x%i==0) { flg=0; break; }
}
}
if(flg) printf("素数である\n");
else printf("素数ではない\n");
return 0;
}
12デフォルトの名無しさん:2007/06/06(水) 15:16:28
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
char[20]型の文字配列に入力された情報を受取り
取得したデータが日本語・2バイト文字を含んでいた場合TRUEを返し
そうでなければFALSEを返すクラスを作成せよ
(クラス名は各自にまかせる)

[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: visual studio 2003
 [3.3] 言語: C
[4] 期限: 06/08まで
[5] その他の制限:-

一文字取得してisalnumかと思ったのですが
2バイト文字の場合でも、1バイトだけ取得してしまい思った結果がだせません
解決法よろしくお願いします
13デフォルトの名無しさん:2007/06/06(水) 15:21:10
>>12
文字セット/エンコーディングは不明だわ
「日本語・2バイト文字」という超アバウトさ

極めつけは
> [1] 授業単元:C言語
> [3.3] 言語: C
なのに
> クラスを作成せよ

釣りか。釣りなのか。

14デフォルトの名無しさん:2007/06/06(水) 15:23:35
ライブラリのことか?
1512:2007/06/06(水) 15:25:22
>>13
すいません、本当に問題文は口頭説明そのままです
ただ、2回講義を受けられなかったので
過去になにか別の言い回し?クセ?がある人なのかもしれないです(普段別言語の開発を行っているらしい)

ちょっと出題した人に問題自体聞きなおしてきます
お騒がせしました
16デフォルトの名無しさん:2007/06/06(水) 15:31:10
>>7

追加がありました。

入力される数値が2以上でない場合、
繰り返し入力を求めるように改良しなさい
(実行時エラーの回避)。

#include <stdio.h>
int main(void) {
int x,i,flg=1;
printf("Input > ");
scanf("%d",&x);
if(x<2) return 1;
else if(x==2) flg=1;
else if(x%2==0) flg=0;
else if(x>=3) {
for(i=3; i*i<=x; i+=2) {
if(x%i==0) { flg=0; break; }
}
}
if(flg) printf("素数である\n");
else printf("素数ではない\n");
return 0;
}

このプログラムで追加のものを
どのように入れればうまい具合に行きますか?
教えてください。
17デフォルトの名無しさん:2007/06/06(水) 15:37:24
>>16
do{
printf("Input > ");
scanf("%d",&x);
}while(x<2);
18デフォルトの名無しさん:2007/06/06(水) 15:38:26
>>16 >>17の追加修正
if(x<2) return 1; < この行を削除
else if(x==2) flg=1; < else を削除
19デフォルトの名無しさん:2007/06/06(水) 15:38:53
>>15
とりあえず
Cでクラスってどういう了見よ?
と問い詰めてこい

クラスの三文字を見なかったことにすれば、出題のアバウトさから言って
↓程度で済む話かもしれない。

#include <ctype.h>
int f(const char *s)
{
    while (*s && isascii((unsigned char)*s)) 
        ++s;
    return !*s;
}
20先生失格です:2007/06/06(水) 16:34:46
12 の先生です。このたびは私が生徒にこのような無知でいい加減な出題をして
皆さんに大変な迷惑をかけてしまい申し訳ありませんでした。
先生として、非常に恥ずかしいとともに、何故こんな出題をしてしまったのだろう
という後悔の気持ちで一杯です。
元々頭の弱く、学校ではいつも苛められて、いつの頃からか精神的にも異変が出てきたので
何とかしなければいけないと心配していたのですが、まさかこんなことになって
しまうとは.....
先生として何とお詫びすればよろしいのやら...
でも、来週から精神病院に入院することが決まりました。
多分、一生退院できないと思います。
先生失格である 私 を一生世の中に出さないことが、
先生の私にできる、皆様への精一杯のお詫びだと考えています。
このたびは本当に申し訳ありませんでした。
21デフォルトの名無しさん:2007/06/06(水) 16:35:45
>>12 SHIFT-JISを参照して書いてみたが、これでいけるだろうか?
#include <stdio.h>
#include <string.h>
#include <ctype.h>

// SHIFT-JISの全角文字が入っているか?
char *shift_jis(unsigned char *str, size_t len) {
size_t i;
for(i=0; i<len; i++) {
if(str[i]>=0x81 && str[++i] >=0x3f) return "TRUE";
}
return "FALSE";
}

int main(void) {
unsigned char *str1="abcあいうえお";
unsigned char *str2="abc";
printf("%s : %s \n",str1, shift_jis(str1,strlen(str1)) );
printf("%s : %s \n",str2, shift_jis(str2,strlen(str2)) );
return 0;
}
22デフォルトの名無しさん:2007/06/06(水) 16:38:34
23 ◆lIN/ESgxWw :2007/06/06(水) 18:14:36
[1]c言語
[2]1本の道に,食べ物が多数落ちている.
ランダムに動く動物が,それらを全て食べ尽くすと終了するようなプログラムを作成せよ.

<仕様>
「道」は要素数20程度の1次元配列で表現する.
「食べ物」は,上記配列の各要素に値1があればその場所に存在し,値0であればその場所には存在しないものとする.
「動物」は,1回の移動で配列中の1つ左または1つ右に移動できる.
「動物」の訪れた場所のエサは食べられたものとする.
「道のうち食べ物のない箇所」,「道のうち食べ物のある箇所」,「動物」は,それぞれ -, *, O で表現する.それらを横一列の文字で表示する.
繰り返し処理中は,毎回数十〜数百ミリ秒程度の時間,実行を一時停止させることで,状態の推移を見やすくする.
[3]OS:Linux
コンパイラ名:スイマセン、分かりません
言語:C
[4]できれば今日中にお願いします
[5]制限:配列まで習ってます。標準ライブラリは習ってません

よろしくお願いします。
24デフォルトの名無しさん:2007/06/06(水) 18:22:58
>>23
つまり、標準ライブラリを使うな、ということだな。
25デフォルトの名無しさん:2007/06/06(水) 18:24:50
>>23
つまり遠まわしにぬるぽって言いたいわけだな
26デフォルトの名無しさん:2007/06/06(水) 18:26:44
>>24-25 要約すると、おまいらイッてよし!
27デフォルトの名無しさん:2007/06/06(水) 18:31:30
いやん
28デフォルトの名無しさん:2007/06/06(水) 18:32:27
そして、その後>>23は別のスレへと答えを求めて旅立ったのであった・・・
29デフォルトの名無しさん:2007/06/06(水) 18:32:32
アッー

つまり標準ライブラリ関数以外を使えばいいんだぜ
30デフォルトの名無しさん:2007/06/06(水) 18:33:08
必要なライブラリを実装すりゃええがな。
31デフォルトの名無しさん:2007/06/06(水) 18:33:40
そうか

ってことは、標準ライブラリじゃなきゃ何使ってもいいってことだな
32デフォルトの名無しさん:2007/06/06(水) 18:35:07
maniac libraryでおk
3323:2007/06/06(水) 18:43:34
アッー
34デフォルトの名無しさん:2007/06/06(水) 19:47:38

[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
テキストファイル中で,最も文字数が多い行の行番号と文字数,最も文字数が少ない行番号と文字数
を出力するプログラムを作成せよ.
% ./test < test.c
最も文字数が多い行番号は 13 行目で,その文字数は 18 文字です.
最も文字数が少ない行番号は 3 行目で,その文字数は 2 文字です.
%
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: [2007年6月11日])
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
ポインタと構造体はまだは習ってません
よろしくお願いします
35デフォルトの名無しさん:2007/06/06(水) 20:03:49
>>34
#include <stdio.h>
int main(void){
    int line_number=1, line_max, line_min, row_number=0, row_max, row_min;
    int moji;

    while((moji=getchar())!=EOF){
        if(moji=='\n'){
            if(line_number==1){
                line_max=line_min=line_number;
                row_max=row_min=row_number;
            }
            if(row_min>row_number){
                line_min=line_number;
                row_min=row_number;
            }
            if(row_max<row_number){
                line_max=line_number;
                row_max=row_number;
            }
            line_number++;
            row_number=0;
        }
        else{
            row_number++;
        }
    }
    printf("最も文字数が多い行番号は %d 行目で,その文字数は %d 文字です\n", line_max, row_max);
    printf("最も文字数が少ない行番号は %d 行目で,その文字数は %d 文字です.\n", line_min, row_min);
    return 0;
}
36デフォルトの名無しさん:2007/06/06(水) 20:06:14
>>34
#include <stdio.h>
#include <limits.h>
int main(void)
{
    int c, len = 0, lno = 1, maxlno = 0, minlno = 0,
        maxlen = INT_MIN, minlen = INT_MAX;
    while ((c = getchar()) != EOF) {
        if (c == '\n') {
            ++len;
            if (len < minlen) minlen = len, minlno = lno;
            if (len > maxlen) maxlen = len, maxlno = lno;
            len = 0, ++lno;
        } else ++len;
    }
    if (len > 0) {
        if (len < minlen) minlen = len, minlno = lno;
        if (len > maxlen) maxlen = len, maxlno = lno;
    }
    if (maxlno > 0) {
        printf("最も文字数が多い行は %d 行目で,"
                "その文字数は %d 文字です.\n", maxlno, maxlen);
        printf("最も文字数が少ない行は %d 行目で,"
                "その文字数は %d 文字です.\n", minlno, minlen);
    }
    return 0;
}
37デフォルトの名無しさん:2007/06/06(水) 21:06:54
>>997
#include <stdio.h>

typedef int HUMAN;
typedef int ANIMAL;

int main()
{
    HUMAN nanoha[2] = {9, 19};
    ANIMAL yukari[2] = {31, 17};
    int i=0;

    printf("なのはたんが%d才の頃、ゆかりんは%d才でしたが\n", nanoha[i], yukari[i]);
    printf("なのはたんが%d才になり、ゆかりんは%d才になりました\n", nanoha[++i], yukari[i]);
    
    return 0;
}
38デフォルトの名無しさん:2007/06/06(水) 21:10:55
[1] 授業単元: C++実習
[2] 問題文(含コード&リンク):
?新しい型(設計図)として,下記の要素を含む「電車」型を設計しなさい(新しい型(設計図)は,main関数の外で記述すること)。
?次に,main関数で上記の型(設計図)の変数を1つ宣言(生成)し,その変数の要素に適当な初期値を格納しなさい。
?最後に,main関数で上記で生成した変数の要素をすべてコマンドプロンプトに出力しなさい。
?新しい型名:TRAIN
?要素1:車輪数・・・型,型名は考えること
?要素2:窓数・・・型,型名は考えること
?要素3:座席数・・・型,型名は考えること
?要素4:車内温度・・・型,型名は考えること
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] visual studio2005
 [3.3] 言語: C++
[4] 期限: 6/15まで
[5] その他の制限: 特になし
前すれでから引用
よろしくお願いします。
39デフォルトの名無しさん:2007/06/06(水) 21:11:16
>>3
#include <stdio.h>

int main()
{
    int n, sum;
    for (scanf("%d", &n), sum=0 ; n>0 ; sum+=n, n--);
    printf("%d", sum);
}
40デフォルトの名無しさん:2007/06/06(水) 21:12:38
>>38
class?struct?
41デフォルトの名無しさん:2007/06/06(水) 21:16:46
>> structです
42デフォルトの名無しさん:2007/06/06(水) 21:19:56
え〜クラスじゃないの?C++らしい問題が来たと思って張り切って作ったのに
43デフォルトの名無しさん:2007/06/06(水) 21:21:08
[1] 授業単元: C言語演習
[2] 問題文:配列宣言以外はポインタを用いること。空白英数字からなる2つの文字列を入力し、それぞれをa1,a2とおく、
a1が”NHK”で、a2が”NH"の場合のように、a2の先頭の文字が
a1に含まれているときは1を返し、違えば0を返す関数 int suture(char *a1,char *a2);
を作成しなさい.

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 2007年6月7日 0:00まで
[5] ポインタまで

お願いします。
44デフォルトの名無しさん:2007/06/06(水) 21:26:56
>>42 クラスでつくってもらったのなら、クラスで構わないです
課題ではstructで作るのが通常みたいですが、クラスでも問題ないようなので
45デフォルトの名無しさん:2007/06/06(水) 21:26:56
>>43
a2の先頭の文字?a2がa1の先頭に含まれている場合じゃなくて?
46デフォルトの名無しさん:2007/06/06(水) 21:27:07
>>42
structって単に全部のメンバがpublicなclassじゃん
C++なら
47デフォルトの名無しさん:2007/06/06(水) 21:27:22
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4167.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限: 6月7日まで
[5] その他の制限: 構造体まで習っています。よろしくお願いします。
48デフォルトの名無しさん:2007/06/06(水) 21:38:25
43の問題 すみません。そうですねa2がa1に含まれているときはyes 含まれていなかったら no
と表示させたいです。お願いします
49デフォルトの名無しさん:2007/06/06(水) 21:41:11
a2がa1に含まれていれば yes 違えば no と表示させたいです。
50デフォルトの名無しさん:2007/06/06(水) 21:44:12
>>43
#include<stdio.h>
#define N 256
int suture(char *a1,char *a2){
while(*a1 && *a2 && *a1++ == *a2++);
return !*a2;
}
int main(){
char a1[N],a2[N];
printf("a1:");
fgets(a1,N,stdin);
printf("a2:");
fgets(a2,N,stdin);
printf("%s\n",suture(a1,a2)?"yes":"no");
return 0;
}
51デフォルトの名無しさん:2007/06/06(水) 21:45:23
>>43
#include <stdio.h>

int suture(char *a1,char *a2)
{
    return *a1 ? (*a1==*a2)+suture(a1+1,a2): 0 ;
}

int main()
{
    printf("%d\n", suture("NHK", "NH"));
}
52デフォルトの名無しさん:2007/06/06(水) 21:49:33
宿題ではないのですが、我流独習のC++で詰まりました
すっごい文法基礎な予感なので、テンプレ形式にキャストしてこっちに持ってきてみました
ヒントください;

template<typename T> class sometemplates {
  static int i;
public:
  sometemplates(){
    i=0;
  }
};

void main(void){ // てきとーだ
  sometemplates<int> o;
}

(コンパイル結果)

sample.obj : error LNK2001: 外部シンボル ""private: static int sometemplates<int>::i" (略

)" は未解決です

問題文: sometemplates<int>::i がインスタンス化されないことを説明せよ。
処理系: VC6gold (万一に処理系の問題なようでしたらVC7-8にしますが、違う気がする)
期限: 特にないが数日を目処に取り下げ宣言の上他スレに移動(恥ずかしい;)
53デフォルトの名無しさん:2007/06/06(水) 21:55:48
>>44
クラス内の変数は全部privateになって、set〜,get〜でクラス内の変数にアクセス
するようしてあります。多分、問題の趣旨と激しく異なっているので他の人に期待してください。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4168.cpp
54デフォルトの名無しさん:2007/06/06(水) 21:57:40
>>35>>36
有り難うございます!
55デフォルトの名無しさん:2007/06/06(水) 22:04:06
>>52
iの定義が必要。
template <typename T>
int sometemplates<T>::i;

それから、mainの結果の型はintね。
56デフォルトの名無しさん:2007/06/06(水) 22:13:26
早い!

>>55
!!!
何かが見えた気がします もちろんVC6goldでコンパイル通りました
ちょっと派生疑問もあるのですが、(即聞かずに)ちょっといろいろやってみます

> mainの結果の型はint

いくらなんでも手抜き過ぎますたw
…反省は、していない // お約束


ありがとうございました 精進します
5752,56:2007/06/06(水) 22:27:34
そうだった、ここ(サンデープログラマさんだけじゃなくて)学生さんも見てるんだった
気が変わって、恥の上塗りにきますた

void main(void){} は、そのコンパイル結果に責任を持てないなら…
…何が起こるかわからないなら、やってはいけない 少なくとも非礼です


おいらは/Fa,ml /coffを日常的に使い、crt/srcよりもntsdの出力を信じ、
なにより粗野な性格ゆえ、あのような非礼なコードを書くのです 真似しないよう


ソースコードは人の恥部とは、言ったものだな…。
58デフォルトの名無しさん:2007/06/06(水) 22:36:10
学生メインのスレだろここはw
サンデープログラマで宿題ってどうよ
59デフォルトの名無しさん:2007/06/06(水) 22:38:29
サンデーってずっと水曜日のことだと思ってたよ
60デフォルトの名無しさん:2007/06/06(水) 22:43:32
つーか、手抜きならintの方が一文字短いぞ。
C++ならreturn 0;が省略できるから。
61デフォルトの名無しさん:2007/06/06(水) 22:45:29
解答する方にはサンデープログラマが結構居そうだけど
質問するサンデープログラマは珍しいな。
別に質問者が何者でもOK。俺っちは、答えたい質問には誠意を持って対応
気に入らない質問&レスは脳内あぼ〜んするだけだ。
62デフォルトの名無しさん:2007/06/06(水) 22:47:43
仮引数のvoidとかいらねーしな
それと、少なくともg++は戻り値voidだとエラーにするぞ
63デフォルトの名無しさん:2007/06/06(水) 22:48:31
俺は日曜日だと思ってた
64デフォルトの名無しさん:2007/06/06(水) 22:49:40
プログラマーになるにはどれくらい知識つけないとダメでしょうか?
今、我流でC言語を勉強してて今配列やってる
65デフォルトの名無しさん:2007/06/06(水) 22:55:11
>>64
配列とポインタとメモリの関係を理解できて、
まだ学生であればプログラマーになれる。
66デフォルトの名無しさん:2007/06/06(水) 22:57:22
どうせ入社したらC言語やらないんだよ
67デフォルトの名無しさん:2007/06/06(水) 22:59:23
>>65
今現在は25歳のフリーター・・・
しかもパソコン一年生です・・・
68デフォルトの名無しさん:2007/06/06(水) 23:01:39
>>67
よほど才能が無い限り無理。
ほかの道を探したほうが自分のため。
69デフォルトの名無しさん:2007/06/06(水) 23:03:00
C言語といいますか、10進数を2進数に変換する問題について教えてください

S(符号)は1ビットで仮数の符号を表す
E(指数部)は4ビットで指数を表し負数は2の補数で表現
M(仮数部)は11ビットで仮数の絶対値を表す

基数は2とする
仮数の0,2進数の少数以下第一位が1になるように、正規化された形で表す
小数点はEとMの位置にする
0の表現はー0と+0の二通りがあり特別に指数部と仮数部をすべて0にする

問.10進数の-5.25を2進数で表示しなさい
問.10進数の-0.125を2進数で表示しなさい

解き方と答えを教えて頂ければ幸いです
70デフォルトの名無しさん:2007/06/06(水) 23:04:13
>>69
>>1読んで書き直し
71デフォルトの名無しさん:2007/06/06(水) 23:04:46
>>47
#include <stdio.h>
#include <string.h>
struct data{ int point; char name[20];};
int input_data(struct data *x){
    char temp[20];
    printf("Name : "); scanf("%s", temp);
    if(!strcmp(temp, "END")) return 0;
    strcpy(x->name, temp);
    printf("Point : "); scanf("%d", &(x->point));
    while(x->point < 0 || x->point > 100){
        printf("Sorry. Point is 0-100\n");
        printf("Point : "); scanf("%d", &(x->point));
    }
    return 1;
}
void display_data(struct data *x){ printf("%3d %s\n", x->point, x->name);}
void bsort(struct data x[], int index){
    int i, j;
    for(i = 0; i < index-1; i++)
        for(j = i+1; j < index; j++)
            if(x[i].point < x[j].point){ struct data temp = x[i]; x[i] = x[j]; x[j] = temp;}
}
int main(void){
    struct data x[10];
    int i = 0, j;
    while(i < 10 && input_data(&x[i])) i++;
    bsort(x, i);
    printf("-point- -name-------\n");
    for(j = 0; j < i; j++) display_data(&x[j]);
    return 0;
}
72デフォルトの名無しさん:2007/06/06(水) 23:05:20
前スレ>>969-971
亀ですが教えていただきありがとうございました。
73デフォルトの名無しさん:2007/06/06(水) 23:06:18
>>64
Cが書けるだけではプロにはなれない
上司・顧客が要求するモノを書けなければいけない 実は、どんな業種でも同じ事

でも、Cすらもかじったことないような営業は、事務職やってるアマのおいらでもイヤだ
納められたコードは必ず読む 逆汗に通す 腐ったコード納めるんじゃない。
顧客に、手抜きはわかると思ってほしい
その感覚が、Cやった人間なら、多少わかるんじゃないか

実装に苦心した様子だって逆汗からわかるもんさ ガキじゃないんだ 無下にはしない!
自分で、「自分の要求」をC/C++で実装してみろ。他人の苦労がわかるようになる


もう一度言う、Cが書けるだけではプロにはなれない
でも、Cはやっとけ。


Cとともにアセンブラが使え、「組み込みC」のスキルが取れれば、形勢は逆転かもw
74デフォルトの名無しさん:2007/06/06(水) 23:09:06
どうせやるのはJavaかASPばかり
75デフォルトの名無しさん:2007/06/06(水) 23:09:55
GOING GOIN HOME
H Jungle With t


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

S(符号)は1ビットで仮数の符号を表す
E(指数部)は4ビットで指数を表し負数は2の補数で表現
M(仮数部)は11ビットで仮数の絶対値を表す

基数は2とする
仮数の0,2進数の少数以下第一位が1になるように、正規化された形で表す
小数点はEとMの位置にする
0の表現はー0と+0の二通りがあり特別に指数部と仮数部をすべて0にする

問.10進数の-5.25を2進数で表示しなさい
問.10進数の-0.125を2進数で表示しなさい

[3] 環境
 [3.1] OS:Windows
[4] 期限: 6月7日午前10:30
[5] その他の制限:
76 ◆GKPST/gGoM :2007/06/06(水) 23:10:52
>>75
GOIN GOINGは間違えてコピーしてしまいました、お気になさらないでください
7776:2007/06/06(水) 23:12:37
トリップは間違えて入れてしまいました。お気になさらないでください
7877:2007/06/06(水) 23:15:14
間違えて産まれてしまいました。お気になさらないでください
79デフォルトの名無しさん:2007/06/06(水) 23:20:02
問題文(含コード&リンク):課題04Aをdo〜while文を使用して合計を求めなさい
課題:04A
#include<stdio.h>
void main(void)
{
int n,m,sum;
printf("整数nの入力==>");
scanf("%d",&n);
m = 0; sum = 0;
while(m < n){
sum+=++m;

}
printf("合計:%d\n",sum);
}

実行画面
整数nの入力==>5
合計:15

OS:Windows
コンパイラ名とバージョン: ボーランド
言語: C
[5] その他の制限:現在for文 if文 入力・出力・演算子
テーマ:繰り返し処理(while文)
問題:キーボードより整数nを入力し、1〜nまでの合計を求めなさい
実行画面
整数nの入力==>5
合計:15


80デフォルトの名無しさん:2007/06/06(水) 23:21:06
>>79
このスレで既出
81デフォルトの名無しさん:2007/06/06(水) 23:24:30
>>75
ただの浮動小数点の問題じゃねえか。消えろ
8271:2007/06/06(水) 23:35:46
>>47
int input_data(struct data *x){
    char temp[256];
    printf("Name : "); scanf("%s", temp);
    while(strlen(temp) >= 20){
        printf("Error\n");
        printf("Name : "); scanf("%s", temp);
    }
    if(!strcmp(temp, "END")) return 0;
    strcpy(x->name, temp);
    printf("Point : "); scanf("%d", &(x->point));
    while(x->point < 0 || x->point > 100){
        printf("Sorry. Point is 0-100\n");
        printf("Point : "); scanf("%d", &(x->point));
    }
    return 1;
}
83デフォルトの名無しさん:2007/06/06(水) 23:46:04
>>82
strcmpを使わないでできますか?
84デフォルトの名無しさん:2007/06/06(水) 23:49:45
>>83
if(temp[0] == 'E' && temp[1] == 'N' && temp[2] == 'D' && temp[3] == '\0') return 0;
85デフォルトの名無しさん:2007/06/06(水) 23:50:52
*(int*)temp=='DNE' みたいな感じで?(試さないけど。)
86デフォルトの名無しさん:2007/06/06(水) 23:55:27
>>85
不思議だなあ
87デフォルトの名無しさん:2007/06/07(木) 00:30:49
20行ごとに改行するにはfor文でどう書けばいいんでしょうか?
88デフォルトの名無しさん:2007/06/07(木) 00:37:14
>>87
for(;i%20==0;)printf("\n");
89デフォルトの名無しさん:2007/06/07(木) 00:38:26
>>87
ただの質問ならスレ違い。宿題ならテンプレ通りに書いてな
90デフォルトの名無しさん:2007/06/07(木) 00:38:44
>>87
20行ある時点で少なくとも19回は改行してるんj(ry
91デフォルトの名無しさん:2007/06/07(木) 00:53:20
>>90
それ言っちゃいやーーーーーーんw
92デフォルトの名無しさん:2007/06/07(木) 02:16:17
[1] 授業単元: プログラミング技術
[2] 問題文(含コード&リンク):
整数nを入力し入力された整数分”山”を表示せよ。
(例)
n=1
*
**
*

n=3
*
**
*
*
**
*
*
**
*
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Cygwin gcc
 [3.3] 言語:C言語
[4] 期限:無理を承知で今晩中にお願いします。
起きてる方いたらお願いします。
93デフォルトの名無しさん:2007/06/07(木) 02:19:59
>>92
#include <stdio.h>
int main(void) {
int i,n;
printf("Input n > ");
scanf("%d",&n);
for(i=0; i<n; i++)
printf("*\n**\n*\n");
return 0;
}
94デフォルトの名無しさん:2007/06/07(木) 02:20:58
ほんとに例のとおりでいいのか?

#include<stdio.h>
int main(void)
{
int i;
int n;
printf("n=");
scanf("%d", &n);
for( i = 0; i < n; i++ ) {
printf( "*\n" );
printf( "**\n" );
printf( "*\n" );
}
return 0;
}
95デフォルトの名無しさん:2007/06/07(木) 02:25:55
>>92
汚いプログラムで悪いが、エスパーしてみた。
#include<stdio.h>
int main(void)
{
int i;
int j;
int n;
printf("n=");
scanf("%d", &n);
for ( i = 0; i < n; i++ ) {
for ( j = 0; j <= i; j++ ) {
printf( "*" );
}
printf( "\n" );
}

for ( i = n - 1; i > 0; i-- ) {
for ( j = 0; j < i; j++ ) {
printf( "*" );
}
printf( "\n" );
}
return 0;
}
96デフォルトの名無しさん:2007/06/07(木) 02:32:48
ウンコーなソースを貼るんじゃねぇ〜〜〜w
97デフォルトの名無しさん:2007/06/07(木) 02:34:47
お二方ありがとうございます。
初めて2週間でfor分の回し方がよく分からなかったので参考になります。
98デフォルトの名無しさん:2007/06/07(木) 02:36:33
>>93-95
せめて変数nだけは初期化して欲しい・・・
あと、ループするとこないなぁ。
入力を何度も受け付けるんだよね?
99デフォルトの名無しさん:2007/06/07(木) 02:39:55
>>95
エスパーはよく分からないですけど、そのソースも参考にさせていただきます。
100デフォルトの名無しさん:2007/06/07(木) 02:44:23
>>98は何を言っているんだ?朝鮮語で頼む
101デフォルトの名無しさん:2007/06/07(木) 03:00:42
賠償しるニダ
102デフォルトの名無しさん:2007/06/07(木) 04:21:25
賠償したニダ
103デフォルトの名無しさん:2007/06/07(木) 04:24:47
>>98
scanfで代入されるから初期化は意味無くね?
104デフォルトの名無しさん:2007/06/07(木) 06:25:08
>>103
scanfで代入されればの話な。
数字以外を入力されたらnには代入されんよ。
そうすると何が入っているかは実行環境ごとのお楽しみに。
105デフォルトの名無しさん:2007/06/07(木) 07:39:58
それを言い出したら……
106デフォルトの名無しさん:2007/06/07(木) 07:43:39
[3] 制限:do〜while文・while文・for文・if文
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:ボーランド
 [3.3] 言語:C言語
テーマ:繰り返し処理(do〜while文)
問題:収支と金額を入力し、残高を求め表示しなさい
残高の処理値は0とする
収支0は収入、収支1は支出、収支に不の値が入力されたら、データの終了とする
実行画面
収支、金額==>0,10000
収支、金額==>1,1500
収支、金額==>1,2300
収支、金額==>0,3000
収支、金額==>1,4800
収支、金額==>1,560
収支、金額==>-10
残高:3840円

107デフォルトの名無しさん:2007/06/07(木) 08:04:28
>>106 収支、金額==>-10 のところを再現してません
#include <stdio.h>

int main(void){
    int syuushi, kingaku, zandaka = 0;

    do{
        printf("収支、金額==>");
        scanf("%d%d", &syuushi, &kingaku);
        if(syuushi == 0)
            zandaka += kingaku;
        else if(syuushi == 1)
            zandaka -= kingaku;
    }while(syuushi >= 0);

    printf("残高:%d円\n", zandaka);

    return 0;
}
108デフォルトの名無しさん:2007/06/07(木) 09:02:03
1] 授業単元:C言語演習
[2] 問題文(含コード&リンク):
長さ157以下の英数字,空白の並びからなる文字列を二つ入力し,
それぞれをa1, a2とする. a1が"abc",a2が"ab"の場合のように,
a2の先頭部分がa1の先頭部分に含まれるときは1を,そうでないときは0を値として
返す関数 int match(char *a1, char *a2);を作成しなさい.
配列宣言を除きすべてポインタを用いて処理すること.
文字列は157文字以下が入力されるものとし,文字列の長さに関するエラー処理を
する必要はない.
計算の手順としては,文字列の先頭から一文字ずつ一致するかどうかを比較する.
a2にあたる文字列中の比較対象となった文字が'\0'であれば,a2はa1に包含された
ものとして扱う.これ以外で比較時に,一文字でも一致しない場合があれば
包含されていないとして扱う.
この関数をもちいて,2つの文字列を与えたとき,一つ目の文字列の中に二つ目の
文字列が含まれている場合(この場合先頭が必ずしも一致していなくてもよいものとする)
には "一致"をさもなければ"不一致"を出力するプログラムを作成しなさい.

[3] 環境
 [3.1] OS:Windows
[4] 期限: 6月7日午前10:30
[5] その他の制限:

よろしくお願いいたします。
109デフォルトの名無しさん:2007/06/07(木) 09:08:57
↑実行結果はこのようになります。
[home@C*LPC* ~/test]% ./test
abc
ab
一致
[home@C*LPC* ~/test]% ./test
ab
abc
不一致
[home@C*LPC* ~/test]% ./test
abc
abd
不一致
[home@C*LPC* ~/test]% ./test
abc
bc
一致
[home@C*LPC* ~/test]%
110デフォルトの名無しさん:2007/06/07(木) 09:20:58
#include<stdio.h>
void main(void)
{
int n,m,sum;
printf("整数nの入力==>");
scanf("%d",&n);
m = 0; sum = 0;
while(m < n){
sum+=++m;

}
printf("合計:%d\n",sum);
}

実行画面
整数nの入力==>5
合計:15
このプログラムをdo〜while文に変えたやつ何方か作ってください(ノ_<。)
111デフォルトの名無しさん:2007/06/07(木) 09:27:05
>>108
#include <stdio.h>
#include <string.h>

int match(char *a1, char *a2){
    int i = 0, j = 0;
    while(a2[j] != '\0'){
        if(a1[i] == '\0')
            return 0;
        else if(a1[i] == a2[j])
            i++, j++;
        else
            i++, j = 0;
    }
    return 1;
}

int main(void){
    char a1[158], a2[158], *p;
    fgets(a1, 158, stdin);
    fgets(a2, 158, stdin);
    p = strchr(a1, '\n'), *p = '\0';
    p = strchr(a2, '\n'), *p = '\0';
    if(match(a1, a2))
        printf("一致\n");
    else
        printf("不一致\n");
    return 0;
}
112デフォルトの名無しさん:2007/06/07(木) 09:31:24
>>110
#include<stdio.h>
int main(void)
{
int n,sum=0;
printf("整数nの入力==>");
scanf("%d",&n);
do sum+=n--;while(0 < n);
printf("合計:%d\n",sum);
return 0;
}
113デフォルトの名無しさん:2007/06/07(木) 09:33:12
>>110
#include <stdio.h>

void main(void)
{
    int n, m, sum;

    printf("整数nの入力==>");
    scanf("%d",&n);

    m = 0, sum = 0;

    do{
        sum += ++m;
    }while(m < n);

    printf("合計:%d\n",sum);
}
114デフォルトの名無しさん:2007/06/07(木) 09:42:35
>>111
ありがとうございました。助かりました^^
115デフォルトの名無しさん:2007/06/07(木) 09:47:44
>>110
マルチ氏ね
116デフォルトの名無しさん:2007/06/07(木) 10:01:00
>>115
                -―-
               . ´       ` 、
           '    , i l ! ヽ  ヽ
            〈\ .〃/‐リノ ノリ)ヘヽ.\`
         ,' ヽ \ /,ィ'"|`  f'!ヽト、!_ヽ!      / ̄ ̄ ̄ ̄ ̄
           l//, ゙{0))! ヒ1!   ,l.!,. l、 | |         |
          ' /l/` リl、"´  !7  イゝ| |        < お呼びに?
            '´ l/_i_リ,!  r__´ リ r‐ '、      |
             '「 , ‐ゝ>r'l〉く.、 {` ト、        \_____
            く,`l  ,.`Kト〉ヾ ヽ,TT.ソ
              ゝL  ヾ.l、〉,!、' ` ' }/
                ,. -\  ヽ'ヽ 〉ーr'
                 ! ー〉 ヽ __/ | |
                `>/ 》ー-‐'l   | |
              く./ くj    l}  | |
              // 「i.     k | |
              ,.' /   >!    l} | |
           j /   r'j    i1 | |
              ^!,'    k1   k' | |
117デフォルトの名無しさん:2007/06/07(木) 10:04:34
量産化の暁には俺にも嫁が
118デフォルトの名無しさん:2007/06/07(木) 10:13:04
量産化の暁には俺にも夫が
119デフォルトの名無しさん:2007/06/07(木) 11:27:33
授業単元:C言語
環境:if文・do〜while文・while文・for文
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:多分岐処理(switch〜case文)
問題1:整数nを入力し、nが1:ABC、nが2:DEF、nが1,2以外:XXXを表示しなさい
実行画面
整数nの入力==>1
ABC
整数nの入力==>2
DEF
整数nの入力==>10
XXX

問題2:成績(A、B、C、D)を入力し、評価を表示しなさい
実行画面
成績入力==>A
評価:たいへん優秀です
成績入力==>a
評価入力:たいへん優秀です
成績入力==>B
評価:普通です
成績入力==>C
評価:上を目指しましょう
成績入力==>D
評価:もっと頑張りましょう
成績入力==>E
評価:成績の入力エラーです
120デフォルトの名無しさん:2007/06/07(木) 11:58:09
授業単元:C言語
環境:if文・do〜while文・while文・for文
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:数値配列の操作
要素数5のarrayの合計を求めなさい
int array[5] = {3,8,2,10,1}
実行画面
合計:24
121デフォルトの名無しさん:2007/06/07(木) 12:46:06
>>120

int sum=0;
int i=5;
int array[5] = {3,8,2,10,1};
while(i-->0)
sum+=array[i];
printf("%d",sum);
return 0;
122デフォルトの名無しさん:2007/06/07(木) 13:03:59
[1] 授業単元: C
[2] 問題文(含コード&リンク):
姓,名,年齢,郵便番号,電話番号の各データをメンバとする構造体配列を下記のように宣言し,
その構造体配列にキーボードからデータを逐次入力して,最大100名のデータを格納できるようにしなさい。
但し,入力の終了は,姓入力の際にnullと入力することによって判定しなさい。また,入力が終了した時点で,
格納された複数名のデータをすべて出力するようにしなさい。
#define MAXREC 100
struct namelist {
char last_name[21], first_name[21];int age;char zip[9], tel[13];
} meibo[MAXREC];
▼出力例
Last name(終了はnull入力)> Natsume↵
First name > Soseki↵
Age > 49↵
Zip code > 123-4567↵
Telephone > 0120-1234567↵
Last name(終了はnull入力)> null↵

Name : Soseki Natsume
Age : 49
Zip code : 123-4567
Telephone: 0120-1234567

[3] 環境
 [3.1] OS: Windows  [3.2] コンパイラ名とバージョン: borland  [3.3] 言語: C
[4] 期限: 明日まで
よろしくお願いします。

123デフォルトの名無しさん:2007/06/07(木) 13:04:08
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):キーボードから入力される2つの整数を変数a、bに格納し、
aの0乗からaのb乗までを順に出力するプログラムを作成せよ。
ただし変数bは0以上の整数が入力されるまで、入力を繰り返すものとする。

【ヒント】
aに2、bに3を入力した場合の実行結果は

2の0乗 = 1
2の1乗 = 2
2の2乗 = 4
2の3乗 = 8
となる。

【発展】
bに負の値が入力された場合も、
計算結果を出力するように拡張しなさい。
このとき、計算結果は実数(小数)で表示すること。

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:visual studio 2005
 [3.3] 言語: C
[4] 期限: 明日まで
[5] その他の制限: #include<stdio.h> ヘッダーは←だけを使って。

お願いします
124デフォルトの名無しさん:2007/06/07(木) 13:24:54
>>123
発展も一緒にしてくれるとうれしいです
125デフォルトの名無しさん:2007/06/07(木) 13:36:35
>>123
すげー簡単な初歩的な部分だと思うんだけど
それを他人まかせでやらせて自分は大丈夫なのか?
たぶん学生だと思うけど、自分の為に少しはソース書いてみたら?
126デフォルトの名無しさん:2007/06/07(木) 13:40:03
>>123
#include <stdio.h>
int main(void)
{
    int a, b, i, sign = 0;
    double n;
    while (scanf("%d %d", &a, &b) != 2) {
        clearerr(stdin);
        scanf("%*[^\n]\n");
    }
    if (b < 0) {
        sign = 1;
        b *= -1;
    }
    for (i = 0, n = 1.0; i <= b; ++i, n *= a)
        printf("%dの%d乗 = %g\n", a, i, sign ? 1.0 / n : n);
    return 0;
}
127デフォルトの名無しさん:2007/06/07(木) 13:41:27
>>123
#include <stdio.h>
int main(void) {
int a,b,i,res;
printf("Input a > ");
scanf("%d",&a);
printf("Input b > ");
scanf("%d",&b);

for(i=0,res=1; i<b; i++) {
printf("%dの%d乗 = %d \n",a,i,res);
res*=a;
}
return 0;
}
128デフォルトの名無しさん:2007/06/07(木) 13:50:48
>>123
#include <stdio.h>
int main(void) {
int a,b,i;
double res=1.0;
printf("Input a > ");
scanf("%d",&a);
if(a==0) return 1;
printf("Input b > ");
scanf("%d",&b);

if(b>=0) {
for(i=0; i<=b; i++) {
printf("%dの%d乗 = %.0lf \n",a,i,res);
res*=a;
}
}
else {
for(i=0,b*=-1; i<=b; i++) {
printf("%dの%d乗 = %lf \n",a,i,1.0/res);
res*=(double)a;
}
}
return 0;
}
129デフォルトの名無しさん:2007/06/07(木) 13:52:59
>>126
0の0乗=1キターーーーーー!
130デフォルトの名無しさん:2007/06/07(木) 13:53:07
>>122
int i=0,last=0;
while(i<MAXREC)
{
printf("Last name(終了はnull入力)>");
scanf("%s",meibo[i].last_name);
if(strcmp(meibo[i].last_name,"null")==0)
break;
printf("First name >");
scanf("%s",meibo[i].first_name);
printf("Age >");
scanf("%d",&meibo[i].age);
printf("Zip code >");
scanf("%s",meibo[i].zip);
printf("Telephone >");
scanf("%s",meibo[i].tel);
last=i++;
putchar('\n');
}
printf("\n\n\n");

for(i=0;i<=last;i++)
{
printf("Name : %s %s\n",meibo[i].first_name,meibo[i].last_name);
printf("Age : %d\n",meibo[i].age);
printf("Zip code :%s\n",meibo[i].zip);
printf("Telephone:%s\n",meibo[i].tel);
putchar('\n');
}
131デフォルトの名無しさん:2007/06/07(木) 14:00:29
何方か119の問題お願いします
132デフォルトの名無しさん:2007/06/07(木) 14:05:11
>>126
ついでに0の-n乗だと0で助産もキターーーー!
133デフォルトの名無しさん:2007/06/07(木) 14:08:56
>>131
char res;

printf("成績を入力してください(A〜D) ->>");
scanf("%c",&res);
if(res=='a')
res='A';
if(res=='b')
res='B';
if(res=='c')
res='C';
if(res=='d')
res='D';

printf("評価:");
switch(res)
{
case 'A' : printf("たいへん優秀です。\n"); break;
case 'B' : printf("普通です。\n"); break;
case 'C' : printf("上を目指しましょう。\n"); break;
case 'D' : printf("もっと上を目指しましょう\n"); break;
default : printf("成績の入力エラーです。"); break;
}
134デフォルトの名無しさん:2007/06/07(木) 15:11:12
[2] 問題文:入力した文字列をaから順に並べるプログラム
[3] 環境
 [3.1] OS:WinXP
 [3.2] BorlandC++
 [3.3] 言語:C++
[5] その他の制限:ヘッダファイルは<stdio.h>のみです。while、do、switchも使えないです。
例 acbd →abcdとなる
135デフォルトの名無しさん:2007/06/07(木) 15:11:36
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):入力した単語の長さをヒストグラムにしてプリントするプログラムを書け。ヒストグラムは横に書く方が簡単だが縦書きに挑戦してみるのもいい。
[3] 環境 [3.1] OS:windows XP [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5 [3.3] 言語: C
[4] 期限: 無期限
[5] その他の制限:#include<stdio.h> テーマ:一次配列 使えるもの:今まで学習した for文 while文 switch文 if文
改良点した方がいい点、問題点があったらお願いします。
#include <stdio.h>
#define IN 1 /* 単語の中 */
#define OUT 0 /* 単語の外 */
main(void)
{
int length[10];
int i , c , n, state;
n = 0; state = OUT;
for(i=0;i<10;i++){
length[i] = 0;
}
while((c = getchar()) != EOF){
if(c == ' ' || c == '\t' || c == '\n'){
if(state == IN) printf(" = %d\n",length[n]);
n++;
state = OUT;
}else{
putchar(c);
state = IN;
length[n]++;
}
}
return 0;
}
136デフォルトの名無しさん:2007/06/07(木) 15:42:06
[1] 授業単元:プログラミング
[2] 問題文: 2つの数字を入力してそれらを加算した値を2進数で表示させる
[3] 環境
 [3.1] WinXP
 [3.2] BorlandC++
 [3.3] 言語:C++
137デフォルトの名無しさん:2007/06/07(木) 15:43:50
>>134 大文字が入力されたら小文字に、英字以外の文字も入る仕様になっているけど。
なんっちゅーか、変な制限があると面倒だな。

#include <stdio.h>
int main(void) {
int c,i,j,pos;
char str[256],swp;
printf("Input string > ");
fgets(str,sizeof(str)/sizeof(str[0]),stdin);
for(i=0; str[i]!='\n'; i++) {
if( str[i]>='A' && str[i]<='Z' )
str[i]+='a'-'A';
}
for(i=0; str[i]!='\n'; i++) {
pos=i;
for(j=i+1; str[j]!='\n'; j++) {
if(str[pos]>str[j]) pos=j;
}
swp=str[pos];
str[pos]=str[i];
str[i]=swp;
}
printf("%s",str);
return 0;
}
138デフォルトの名無しさん:2007/06/07(木) 15:50:18
言語:C
環境:if・for・while文
問題:複数件の整数を入力し、合計、件数、平均を求め表示しなさい
0が入力されたらデータの終了とし、合計、件数には反映しない実行画面
整数入力(0で終了)==>5
整数入力(0で終了)==>4
整数入力(0で終了)==>10
整数入力(0で終了)==>8
整数入力(0で終了)==>0
合計:27 件数:4 平均:6.8
139デフォルトの名無しさん:2007/06/07(木) 16:14:19
>>138

int kensu=0,sum=0,i=1;
while(i!=0)
{
scanf("%d",&i);
sum+=i;
if(i)
kensu++;
}
printf("合計:%d 件数:%d 平均%.1f\n",sum,kensu,(double)sum/kensu);
140デフォルトの名無しさん:2007/06/07(木) 16:30:40
誰か>>135お願い
141デフォルトの名無しさん:2007/06/07(木) 16:45:36
きちんと回答を解説している書籍の購入をすすめる
142デフォルトの名無しさん:2007/06/07(木) 16:58:26
>>135
#include <stdio.h>
#include <string.h>

int main(void){
    int i = 0, j, k, max_len = 0;
    char word[10][20];

    while(i < 10){
        printf("word : "); scanf("%s", word[i]);
        if(max_len < (int)strlen(word[i])) max_len = strlen(word[i]);
        i++;
    }

    for(k = 0; k < max_len; k++){
        for(j = 0; j < i; j++){
            if(k < (int)strlen(word[j])) printf("%c ", word[j][k]);
            else printf(" ");
        }
        printf("\n");
    }

    for(k = 0; k < max_len; k++){
        for(j = 0; j < i; j++){
            if(k < (int)strlen(word[j])) printf("* ");
            else printf(" ");
        }
        printf("\n");
    }

    return 0;
}
143135:2007/06/07(木) 16:59:33
課題なので回答を解説してる書籍なんてないです・・・
とりあえずヒストグラムにして画面に出力するプログラムを作って提出しようと思うんで、誰かお願いします・・・
144142:2007/06/07(木) 17:00:13
まずった

printf(" ");はprintf("  ");にしといて
145デフォルトの名無しさん:2007/06/07(木) 17:01:36
1〜∞ の1幅ヒストグラムならば 単語数の総数で終了さね
146デフォルトの名無しさん:2007/06/07(木) 17:07:32
>>144
ありがとうござます
大変申し訳ないんですが、135にもあるように #include<stdio.h> の制限があるのです
147デフォルトの名無しさん:2007/06/07(木) 17:12:32
>>135
#include <stdio.h>
int my_strlen(char *str){
    int i = 0;
    while(str[i++] != '\0');
    return i;
}
int main(void){
    int i = 0, j, k, max_len = 0;
    char word[10][20];
    while(i < 10){
        printf("word : "); scanf("%s", word[i]);
        if(max_len < my_strlen(word[i])) max_len = my_strlen(word[i]);
        i++;
    }
    for(k = 0; k < max_len; k++){
        for(j = 0; j < i; j++){
            if(k < my_strlen(word[j])) printf("%c ", word[j][k]);
            else printf("  ");
        }
        printf("\n");
    }
    for(k = 0; k < max_len; k++){
        for(j = 0; j < i; j++){
            if(k < my_strlen(word[j])) printf("* ");
            else printf("  ");
        }
        printf("\n");
    }
    return 0;
}
148147:2007/06/07(木) 17:14:25
while(str[i++] != '\0'); を
while(str[i] != '\0) i++;に変更plz
149デフォルトの名無しさん:2007/06/07(木) 17:31:24
[1] C言語演習
[2] OS windos
[3]課題
長さ256文字以下の英数字,空白の並びからなる文字列を二つ
入力し,それぞれをT1, T2とする. T1の中にT2が出現する場
合に,その一番左に現れる文字列の先頭アドレスを値として返
す関数 char *findstr(char *t1, char *t2);を作成しなさい
.ただし,T1の中にT2が出現しないときはNULLを値として返す
ものとする.findstr()の中で,比較対象となるT1のなかの先頭文字を先頭
から一文字ずつずらして 7-2で用いたchkmatch()を呼び出すこ
とにより要求を満たす関数を作成することができる.
150デフォルトの名無しさん:2007/06/07(木) 17:43:47
>>149
> 7-2で用いたchkmatch()を呼び出すこ
7-2で用いたchkmatch()について悔しく
151デフォルトの名無しさん:2007/06/07(木) 17:46:57
↑の続き
この関数を用いて, 1)最初にT1を表示し,2)その次にT1の中
でT2の文字列が出現するまでの文字をスペース(' ')として端
末に出力し,そのあとT2の文字列文だけ(’^’)を出力し、
再度T2の文字列が出現するまでスペース(’ ’)を出力し..
というプロセスを文末まで続けるプログラムを作成しなさい。
3a)このプロセスは、findstrを実行して文字列の先頭を検索
し、そこまでスペースを出力する。3b)文字列の先頭が検出さ
れたら、T2の文字列分だけ(’^’)を出力する。3c)T2の
文字列分だけポインタを進め、そこからfindstrを再実行する
(3aにもどる)というプロセスを繰り返すことで完成する。
4)T2がT1に出現しない場合はT1の文字数だけのスペースが表
示されるようにすること.
配列宣言を除き,すべてポインタを用いて処理すること.文字
列の長さに関するエラー処理をする必要はない.

152デフォルトの名無しさん:2007/06/07(木) 17:48:30
>>136
#include <stdio.h>

void nishin(int c)
{
    if (!c) return;
    nishin(c>>1);
    printf("%d", c&1);
}

int main()
{
    int a,b;
    scanf("%d", &a);
    scanf("%d", &b);

    nishin(a+b);

    return 0;
}
153デフォルトの名無しさん:2007/06/07(木) 17:50:13
[4] 6月8日 午後6:00
[5] 実行結果
[home@C*LPC* ~/test]% ./test
pen and pencils
pen
pen and pencils
^^^ ^^^
[home@C*LPC* ~/test]% ./test
Government of the people by the people for the people
people
Government of the people by the people for the people
^^^^^^ ^^^^^^ ^^^^^^
[home@C*LPC* ~/test]%

特に、検索文字列が重複している場合も正確に検出できるよう
にせよ。例えば、下記のような出力となる。
[home@C*LPC* ~/test]% ./test
aaaaaaaaaaaaaaaaabbaaa
aaaa
aaaaaaaaaaaaaaaaabbaaa
^^^^^^^^^^^^^^^^^
[home@C*LPC* ~/test]%

宜しくお願いします。
続けての書き込みすいませんでした…
154デフォルトの名無しさん:2007/06/07(木) 17:54:39
>>149
#include <stdio.h>
#include <string.h>

char *findstr(char *t1, char *t2)
{
     return strstr(t1, t2);
}

int main()
{
    char T1[500],T2[500];
    scanf("%s", T1);
    scanf("%s", T2);

    printf("%s\n", findstr(T1, T2));

    return 0;
}
155デフォルトの名無しさん:2007/06/07(木) 17:56:08
strstrは浮かんだが、それを実装しろって話じゃね・・・?
156デフォルトの名無しさん:2007/06/07(木) 18:01:23
char *
strstr(s, find)
    const char *s, *find;
{
    char c, sc;
    size_t len;

    _DIAGASSERT(s != NULL);
    _DIAGASSERT(find != NULL);

    if ((c = *find++) != 0) {
        len = strlen(find);
        do {
            do {
                if ((sc = *s++) == 0)
                    return (NULL);
            } while (sc != c);
        } while (strncmp(s, find, len) != 0);
        s--;
    }
    /* LINTED interface specification */
    return ((char *)s);
}
157デフォルトの名無しさん:2007/06/07(木) 18:01:34
[1] 授業単元: プログラミングA

[2] 問題文(含コード&リンク):a,b,cをキーボードから入力し、最小値を出力するプログラムを作成せよ。3項演算子を用いること。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: CC
 [3.3] 言語: C++

[4] 期限: 6月7日 21:00まで

[5] その他の制限:

基本なのだと思いますが、どうかよろしくお願いします。
158デフォルトの名無しさん:2007/06/07(木) 18:14:00
>>157
#include <stdio.h>

int main(void){
    int a, b, c;
    scanf("%d%d%d", &a, &b, &c);
    printf("min : %d\n", a > b ? b > c ? c : b : a > c ? c : a);
    return 0;
}
159デフォルトの名無しさん:2007/06/07(木) 18:14:52
>>149
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4177.c
> 7-2で用いたchkmatch()
を妄想実装して、string.hを使用しないで書いてみたが、これで良いんだろうか?
160デフォルトの名無しさん:2007/06/07(木) 18:27:35
[1] 授業単元:C++
[2]
1.Person Classを作り、身長、体重をメンバ変数とする。各メンバ変数へアクセスするメンバ関数を作り、Aくん、Bくん、Cくんの身長、体重、を出力する。
2.身長、体重の和と平均を出力する。
3.World Classを作る。そのメンバ変数に、Person Classの
インスタンスであるAくん、Bくん、Cくんを入れて、身長、体重の平均を出力する。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] visual studio
 [3.3] C++
[4] 6月7日20:00まで
[5] 初歩的なんですけど、お願いします。
161デフォルトの名無しさん:2007/06/07(木) 18:32:00
っつか>>159はうまく処理されないものがあった orz
162デフォルトの名無しさん:2007/06/07(木) 19:06:52
>>149
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4178.c
fgetsで改行コードも含まれた文字列のせいで、比較がうまくいってなかったようだ。
scanfだと空白は無効になるから、とりあえずこれで対処でうまく行った?かと。
163デフォルトの名無しさん:2007/06/07(木) 20:08:34
>>160
int main(void)
{
  return 0;
}
164デフォルトの名無しさん:2007/06/07(木) 20:30:04
>>163
#include <stdio.h>

int main(void)
{
printf("%c %c %c %c %c %c\n",110,117,114,117,112,111);
return 0;
}
165デフォルトの名無しさん:2007/06/07(木) 20:34:58
ランレングス関係で、符号を白ランと黒ランの系列に直す、とかでも構いませんか?
166デフォルトの名無しさん:2007/06/07(木) 20:37:24
キャッチ ガッ!
167デフォルトの名無しさん:2007/06/07(木) 20:47:39
>>160
Aくん、Bくん、Cくんのデータは既知なん?(´・ω・`)
168デフォルトの名無しさん:2007/06/07(木) 20:50:02
>>164
ッガ!
169デフォルトの名無しさん:2007/06/07(木) 20:59:06
>>167 既知ということでお願いします!
170デフォルトの名無しさん:2007/06/07(木) 21:00:06
>>168
#include <stdio.h>
int main(void) {
int *x=NULL;
return x; }
171771:2007/06/07(木) 21:02:09
一度 アプリを起動したら開いたアプリケーションを終了するまで
同一のアプリは表示できなくなる方法を教えて下さい。

ちなみに環境はBorland C++ Builder5.0です。
172デフォルトの名無しさん:2007/06/07(木) 21:24:15
>>169
class Person{
double height;
double weight;
public :
Person(double h,double w){height=h;weight=w;}
double GetHeight(){return height;}
double GetWeight(){return weight;}
};
int main()
{
Person A(170.5,68.9),B(180.9,78.6),C(160.8,41.2);
double HeightSum=A.GetHeight()+B.GetHeight()+C.GetHeight();
double WeightSum=A.GetWeight()+B.GetWeight()+C.GetWeight();
cout <<"Aくんの身長:"<<A.GetHeight()<<endl;
cout <<"Aくんの体重:"<<A.GetWeight()<<endl;
cout <<"Bくんの身長:"<<B.GetHeight()<<endl;
cout <<"Bくんの体重:"<<B.GetWeight()<<endl;
cout <<"Cくんの身長:"<<C.GetHeight()<<endl;
cout <<"Cくんの体重:"<<C.GetWeight()<<endl;
cout <<"平均身長:"<<HeightSum/3<<endl
<<"平均体重:"<<WeightSum/3<<endl;
return 0;
}

173デフォルトの名無しさん:2007/06/07(木) 21:33:34
>>172
World Classはどこに?
174デフォルトの名無しさん:2007/06/07(木) 21:34:29
175デフォルトの名無しさん:2007/06/07(木) 21:36:36
>>174
死ね
176デフォルトの名無しさん:2007/06/07(木) 21:37:41
>>175
断る
177デフォルトの名無しさん:2007/06/07(木) 21:38:40
>>176
死ねったら死ね死ね死ね死ね
178デフォルトの名無しさん:2007/06/07(木) 21:39:24
>>177
や〜だねやだやだやだやだ
179デフォルトの名無しさん:2007/06/07(木) 21:39:52
>>171
HANDLE hMutex;
hMutex=CreateMutex(NULL,TRUE,TEXT("hoge"));
if(GetLastError()==ERROR_ALREADY_EXISTS){
MessageBox(NULL,TEXT("hoge"),TEXT("hoge"),MB_OK)
return 0;

もしくは
if(FindWindow(TEXT("hoge"),NULL)!=NULL)
return 0;
180デフォルトの名無しさん:2007/06/07(木) 21:40:02
ちょっとゲームやってくる、後はお前らで適当に宿題に答えておいてくれ。
くれぐれも、0^0=1なんてソースは書くなよ
181デフォルトの名無しさん:2007/06/07(木) 21:55:47
>>173
Worldクラスの仕様をもう少し、
というか全体的に質問する時はもう少し詳細に書くべきだと思うよ?(´・ω・`)
とりあえず入れるだけなら
class World{
public :
World();
Person A;
};

ていうかこんなの書くより
http://www.kumei.ne.jp/c_lang/cpp/cpp_14.htm
ここ見たほうが幸せになれると思う。
182デフォルトの名無しさん:2007/06/07(木) 21:56:36
>>180
ふりってことでおk?
183デフォルトの名無しさん:2007/06/07(木) 22:24:39
[1] 授業単元:c言語プログラミング
[2] 問題文:
例に示す数値が有効か無効か判定せよ。
数値はキーボードで入力し、gets()を使うこと。

有効             無効
0            00010
00000      1,00,00000
10,000,000 0,10000000
100,000,000 1,000000,0
結果は入力数値とステータスのみ出力する
(例)

入力数値:0
判定結果:有効

入力数値:00010
判定結果:無効

入力数値:10,000,000
判定結果:有効

入力数値:1,00,00000
判定結果:無効
[3] 環境
 [3.1] OS:win xp
 [3.2] コンパイラ名とバージョン:vc6.0
 [3.3] 言語:c言語
[4] 期限:6月8日 9:00
急な期限で申し訳ないですが、よろしくお願いします。
184デフォルトの名無しさん:2007/06/07(木) 22:27:24
ずれすぎ(汗
数値の例を訂正します。すいません。


有効             無効
0             00010
00000      1,00,00000
10,000,000 0,10000000
100,000,000 1,000000,0
185デフォルトの名無しさん:2007/06/07(木) 22:31:50
>>183-184
それ以外の入力はすべて無効でいいのか?
186デフォルトの名無しさん:2007/06/07(木) 22:40:14
187デフォルトの名無しさん:2007/06/07(木) 22:41:58
せっかくネタ回答を用意して待ってたのに・・・
188デフォルトの名無しさん:2007/06/07(木) 22:42:07
>>185
例に示している8つの数値だけです。
解けていない私が言うのもなんですが、
数値として正しい表記が有効だそうです。

例えば、123,45はコンマの位置がおかしいので無効。
7, 781 は有効に見えても、スペースがあるから無効とか。
数値として無効な0もダメだそうです。
0や00はOKでも01はダmだそうです。

わかりずらければ、すいませんです。


189デフォルトの名無しさん:2007/06/07(木) 22:44:14
>>188
ズラとか言っちゃ駄目!
190デフォルトの名無しさん:2007/06/07(木) 22:45:26
>>189 がんばれよ、ズラw
191デフォルトの名無しさん:2007/06/07(木) 22:48:26
>>186
参考になります。ソースをいじってみます。ありがとうございます。
前スレは1000レスもあるので、全部は確認できてませんでした。。。

>>189
はい。づらが正しい表記だと思います。
192デフォルトの名無しさん:2007/06/07(木) 22:51:37
>>191
先頭にスペースがある場合は飛ばす仕組みになっているから、そこを外すなり
符号の+−は有効になっていて、その次が0でない数値なら有効といった流れだから
先頭に数字が来ていなければ無効にする形に書き換えればおkかと。
193デフォルトの名無しさん:2007/06/07(木) 23:04:09
>>183
>数値はキーボードで入力し、gets()を使うこと。
( ´,_ゝ`)プッ

194デフォルトの名無しさん:2007/06/07(木) 23:11:08
195デフォルトの名無しさん:2007/06/07(木) 23:16:58
[1] 授業単元: プログラミング

[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4180.txt

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C

[4] 期限: 6月8日 

[5] その他の制限:

自分にはできません、お願いします
196デフォルトの名無しさん:2007/06/07(木) 23:19:12
>>183
#include<stdio.h>
#define isnum(c) ('0'<=c && c<= '9')
int check(char *s){
int i = 0, f = 1;
if(*s == '0'){
while(*s && *++s == '0');
return !*s;
}else{
while(isnum(*s)){
while(*s && isnum(*s)){ i++; s++; }
if(i>3) return 0;
if(!*s && (f || i == 3)) return 1;
if(*s == ','){ i = f = 0; s++; }
}
return 0;
}
}
int main(){
char s[256];
while(1){
printf("入力数値:");
gets(s);
printf("判定結果:%s\n\n",check(s)?"有効":"無効");
}
}
途中であきらめた
197デフォルトの名無しさん:2007/06/07(木) 23:30:35
>>196 1000だと無効やぞ・・・
198デフォルトの名無しさん:2007/06/07(木) 23:33:54
>>197
え?無効でいいんじゃないの?1,000だろ?
199デフォルトの名無しさん:2007/06/07(木) 23:36:10
>>198  失礼、勘違いしとっただけ。
200デフォルトの名無しさん:2007/06/07(木) 23:40:10
カンマ無しの数字も有効にしたければ、if(i>3) return 0;をひとつ下に下げればOKかな?
なんとなくだけど
201171:2007/06/07(木) 23:42:06
>>179

ありがとう。
202デフォルトの名無しさん:2007/06/07(木) 23:45:54
>>201
いえいえ、というか今見返したら上のやり方の方で
テスト用に書いたMessageBoxのあたり中途半端に消し忘れてた・・・orz
203デフォルトの名無しさん:2007/06/07(木) 23:56:51
>>183はコンマの区切りを判別するだけなら
>>186みたいなごちゃごちゃしたものにならずに済む罠。
204デフォルトの名無しさん:2007/06/08(金) 00:42:07
[1] 授業単元: プログラミング

[2] ttp://www-2ch.net:8080/up/download/1181230743729546.jPSXRN

[3] 環境
 [3.1] OS:Windows Vista
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler
 [3.3] 言語: C

[4] 期限: 6月8日 午前8時以内

[5] 

[2]のリンク先passは syukudai です。


205デフォルトの名無しさん:2007/06/08(金) 00:45:05
>>204
重くてつながらない
メンドクせ
206204:2007/06/08(金) 00:46:34
大変申し訳ない。
私の確認不足で二次曲線の表示にミスがありました。
製作途中のプログラムも載せてあるので気づかれた方がほとんどかと思います。

申し訳ない
207デフォルトの名無しさん:2007/06/08(金) 00:57:52
>>206
whileの中身だけ。
while(x<=8.0)
{
y=(int)pow((double)x,(double)2);
printf("%4.1f",x);
for ( i = 0; i < y; i++ ) {
printf( " " );
}
printf("*\n");

x=x+1;
}
208デフォルトの名無しさん:2007/06/08(金) 02:21:39
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): BIOSを書き換えてパソコンを起動できなくするプログラムを作成せよ

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc32
 [3.3] 言語: C
[4] 期限: 6/12
[5] その他の制限:

お願いします
209デフォルトの名無しさん:2007/06/08(金) 02:27:13
>>208
そんな課題でるかよw
210デフォルトの名無しさん:2007/06/08(金) 02:33:42
>>208
BIOSのROMを抜いた方が早いだろw
211デフォルトの名無しさん:2007/06/08(金) 02:35:36
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): (´・ω・`)

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc32
 [3.3] 言語: C
[4] 期限: 6/12
[5] その他の制限:
212デフォルトの名無しさん:2007/06/08(金) 02:54:22
(´・ω・`)・・・
213デフォルトの名無しさん:2007/06/08(金) 02:59:24
>>211
(´・ω・`) < 俺と一緒にCをやらないか?
214デフォルトの名無しさん :2007/06/08(金) 03:23:43
>>206
#include <stdio.h>
#include <math.h>
int main()
{
int y,i;
double x=-8.0;
printf(" 1 2 3 4 5 6 7\n");
printf(" 01234567890123456789012345678901234567890123456789012345678901234567890\n");

while(x<=8.0){
y=(int)pow(x,2);
printf("%+.1f",x);
for(i = 0; i <= y; i++)
putchar(' ');
putchar('*');
putchar('\n');
x+=1.0;
};


return 0;
}
215214:2007/06/08(金) 03:31:05
ん?コピペしたらy軸用のprintf文がおかしくなったな
ま、変更点はint iの宣言と、while文のみです
216デフォルトの名無しさん:2007/06/08(金) 03:37:51
>>211
えーと、問題文は?
217デフォルトの名無しさん:2007/06/08(金) 04:38:38
>>211
#include <stdio.h>
int main(void)
{
printf("(´・ω・`)");
return 0;
}
218デフォルトの名無しさん:2007/06/08(金) 04:57:14
>>217
これが・・・も・・・・萌えってやつなのか・・・
219195:2007/06/08(金) 08:05:45
だれか〜
220デフォルトの名無しさん:2007/06/08(金) 08:37:28
>>195
>matrixA[ i ][ 0 ] ? matrixB[ 0 ][ j ] + matrixA[ i ][ 1 ] ? matrixB[ 1 ][ j ] + ・ ・ ・
>・ ・ ・+matrixA[ i ][ m? 1 ] ? matrixB[ m ? 1 ][ j ]
これでどうしろと?
221デフォルトの名無しさん:2007/06/08(金) 08:42:50
403
222デフォルトの名無しさん:2007/06/08(金) 08:54:57
--
% test
l とm を入力してください: 2 3
行列A を入力してください
> 2 4 8
> 7 3 3
n を入力してください(m = 3): 4
行列B を入力してください
> 4 5 2 7
> 5 6 2 8
> 1 2 3 6
C=
36 50 36 94
46 59 29 91
%
--
これだけ判っていれば作れるだろ。
223195:2007/06/08(金) 09:14:52
matrixA[ i ][ 0 ] * matrixB[ 0 ][ j ] + matrixA[ i ][ 1 ] * matrixB[ 1 ][ j ] + ・ ・ ・
・ ・ ・+matrixA[ i ][ m - 1 ] * matrixB[ m - 1 ][ j ]
文字化けしてた
224デフォルトの名無しさん:2007/06/08(金) 09:16:36
>>195
#include<stdio.h>
#define N 99
int matrixA[N][N];
int matrixB[N][N];
int matrixC[N][N];

void read(int matrix[N][N],int x,int y){
int i,j;
printf("enter matrix\n");
for(i=0;i<x;i++){
for(j=0;j<y;j++){
scanf("%d",&matrix[i][j]);
}
}
}

int main(){int i,j,k,n,l,m;
printf("m=?n=?");
scanf("%d %d",&m,&n);
read(matrixA,m,n);
225デフォルトの名無しさん:2007/06/08(金) 09:18:43
>>195続き
printf("l=?");
scanf("%d",&l);
read(matrixB,n,l);
for(i=0;i<m;i++){
for(j=0;j<l;j++){
for(k=0;k<n;k++){
matrixC[i][j]+=matrixA[i][k]*matrixB[k][j];
}
}
}
printf("C=\n");
for(i=0;i<m;i++){
for(j=0;j<l;j++){
printf("%2d ",matrixC[i][j]);
}
printf("\n");
}
}
226195:2007/06/08(金) 09:51:46
ありがとう!
227デフォルトの名無しさん:2007/06/08(金) 10:01:21
[1] 授業単元:プログラミングA

[2] 問題文(含コード&リンク):
  whileループを用いて、等差数列
  1+3+5+7+...+9999
  を計算するプログラムを作成せよ。複合代入演算子を使用すること。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: c++

[4] 期限: 6月8日16:00まで

[5] その他の制限:

どうぞよろしくお願いします。
228デフォルトの名無しさん:2007/06/08(金) 10:06:51
お願いします・・・

      /´ ヽ` ̄        ー-゙:.、
     i          - 、         `ヽ_
     l:    、.:         ヽ       ゙i"
       !    i ; n  .:c.:   ',    _..ハ
      |    ハ/ {   _,..-ァノ 、r‐、>ー ヽ
     |   ト./  ` ̄__,.:=彡  :.ヾ、ニ二 /
.       |    |ノ     -=<      ゙=tラ'"
        |   /   ,-一'" ̄´         i
       |:/     / \:.           !
      | '    /   ヽ:.         :、  \
        ゙、  ノ    .i:.        `   ヽ
       `ー'    _:/__:.            `ー---─ ''"´ ̄ ̄`` ー- 、
          /´    `ヽ、.         .:                   `ヽ、
           /             `ヽ、                          ゙i
            i                  :;                    ,!
           !       ‐-、      :. ;: .:'                      /
         ヽ        ヽ     ; j:! "       __..:-‐'"´ ̄ ̄`   __ノ
             \         !    .:' 〃 ,..:---─‐'"´ __.. -──── ''"´
            `ヽ、     ヽ、 ノー;'"、二:.:'ー--ァ'"´
                  `ヽ、   >:).......ヽ、_∨:/` ̄i
             ....:::::::::::にニニイ::::::::::::::::ヾK.._.ノ、
           ....::::::::::::::::::,! _ i!:::::::::::::::::..ヾ:、__/ ミ、::::::::::::::::.........
            ..::::::::::::::::::::::::!`´_` .!        `===='' :::::::::::::.......
          ::::::::::::::::::::::::::k'´! i ,``;|
           ..:::::::::::::::::::::ヾ三三ノ
229デフォルトの名無しさん:2007/06/08(金) 10:56:50
>>227
int an(int n)
{
return (2*n-1);
}

int main()
{
int sum=0;
int n=1;
while(n<=5000)
sum+=an(n++);

cout<<sum<<endl;
return 0;
}
230デフォルトの名無しさん:2007/06/08(金) 13:19:13
>>227
#include <iostream>
using namespace std;
int main() {
int sum=0;
int n=1;
while(n<=9999) {
sum+=n; n+=2;
}
cout<<sum<<endl;
return 0;
}
231デフォルトの名無しさん:2007/06/08(金) 14:33:30
[1] C言語
[2] http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4183.txt
このソースを使って2.3行列Aと2.3行列Bの転置行列Cの積である2.2行列Dを求めようとしたのですが、答えが出ません。
エラーを消していってこの形までになったのですが、もうお手上げです。助けてください。

[3.1] Windows
[4]明後日まで
232デフォルトの名無しさん:2007/06/08(金) 14:57:13
>>231
> if(l=0)
とか、これじゃ代入であって比較じゃないよ。
ttp://ja.wikipedia.org/wiki/%E8%BB%A2%E7%BD%AE%E8%A1%8C%E5%88%97
233デフォルトの名無しさん:2007/06/08(金) 15:02:12
>231
d_method()が無限ループになってるてのは、>230の指摘にあるけど、
そもそも0と1で場合わけしたらループにする意味が全くないぞ。

ついでに言えばb_rebirth()(関数名としては意味がおかしい)も転置してない。
234デフォルトの名無しさん:2007/06/08(金) 15:04:01
rebirthとは、転生しているんでしょう。
235デフォルトの名無しさん:2007/06/08(金) 15:18:26
>380じゃなくて>382だった。
b_rebirth()の C[i][j] は C[j][i] じゃないと単なるBのコピーにしかならない。
d_method()は一般化しないんなら
D[0][0] = A[0][0] * C[0][0] + A[0][1] * C[1][0] + A[0][2] * C[2][0];
D[0][1] = A[0][0] * C[0][1] + A[0][1] * C[1][1] + A[0][2] * C[2][1];
D[1][0] = A[1][0] * C[0][0] + A[1][1] * C[1][0] + A[1][2] * C[2][0];
D[1][1] = A[1][0] * C[0][1] + A[1][1] * C[1][1] + A[1][2] * C[2][1];
をそのまま書いたほうが無駄にループで書くよりマシ。
236デフォルトの名無しさん:2007/06/08(金) 15:19:15
>>380>>382 に期待
237デフォルトの名無しさん:2007/06/08(金) 16:49:58
[1] 授業単元: 情報処理
[2] 問題文:
1行1単語の形式で単語が辞書順にならんでいる辞書ファイルがある。
(例えば http://www.jp.freebsd.org/cgi/cvsweb.cgi/~checkout~/src/share/dict/web2?rev=1.12&content-type=text/plain
で入手できる)
引数で渡された単語を辞書からCase無視で先頭一致検索し、
マッチした単語を全て標準出力に出力せよ。
辞書内の配列が昇順であることを利用して、なるべく効率のよいアルゴリズムを
考えてみよ。
[3] 環境
 [3.1] OS: Windows XPまたはLinux
 [3.2] コンパイラ: Visual Studio 2005またはgcc
 [3.3] 言語: C++
[4] 期限: 6/11 午前10時
[5] その他の制限: 特になし。C風のプログラムでも構いません。
238237:2007/06/08(金) 17:26:39
とりあえずこのように書いてみたのですが、後ろの単語になるほど遅くなります。
もっと良いやりかたがあったらおねがいします。

#include <cstring>
#include <iostream>
#include <fstream>
#include <string>

using namespace std;
#define DICT "web2"

int main(int argc, char **argv)
{
    if (argc == 1) return 1;
    size_t wlen = strlen(argv[1]);
    ifstream dict(DICT);
    if (!dict) return 2;
    string s;
    while (getline(dict, s)) {
        int n = strncasecmp(s.c_str(), argv[1], wlen);
        if (n == 0) cout << s << endl;
        else if (n > 0) break;
    }
    return 0;
}
239211:2007/06/08(金) 19:21:58
>>217
#include <stdio.h>
int main(void)
{
printf("(´・ω・)<d");
return 0;
}
240デフォルトの名無しさん:2007/06/08(金) 21:39:49
[1] 授業単元:基本プログラミング
[2] 問題文(含コード&リンク):
関数f(x)は次式で与えられる。
f(x)=x+x*x/4+x*x*x/9+……+xのn乗/n*n+……
上式右辺の無限級数は、第n項(xのn乗/n*n)の絶対値が最初に0.000001より小さく
なる項までの和で打ち切っても近似的には問題ないものとする。
x=0.1, 0.2, 0.3, 0.4, …, 0,9, 1におけるf(x)の値を計算して表示するプログ
ラムをつくれ。
[実行例]
f(0.1)=0.202618
f(0.2)=0.411004
f(0.3)=0.626129
f(0.4)=0.849283


f(0.9)=2.19971
f(1)=2.64393

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C++
[4] 期限:6月10日まで
[5] その他の制限:
よろしくお願いします。
241デフォルトの名無しさん:2007/06/08(金) 21:57:25




[1] 授業単元: プログラミング

[2] 問題文(含コード&リンク):
各要素が整数の2つの10次元ベクトルをキーボードから入力し,2つのベクトルの和
及び内積をサブルーチンで求めて表示せよ. ベクトルは配列で表現せよ

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
242デフォルトの名無しさん:2007/06/08(金) 21:57:49
[1] 授業単元: コンピュータ・C言語
[2] 問題文:
ファイルからデータを読み込み、pointが85以上、gpa<2,0のデータだけを表示しなさい。

続いて、(1)ファイルの内容を全て表示し、次に上記の条件に合致するデータだけを別ファイルに書き出し
さらにこのファイルを読み込んで表示せよ。

最後に、point、gpaの平均を計算して同じファイルのデータ後に書き出し、そのファイル内容を読み込み表示せよ。
(つまり2.3,4を表示)
x-file.tex↓

1 alice 48 3.6
2 bob 88 3.2
3 charlie 69 1.8
4 dick 100 3.9
5 bomb 3 0.4
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ: Visual Studio 2005またはgcc
 [3.3] 言語: C++
[4] 期限: 6/11 08:40まで
[5] その他の制限: for loop、配列のどちらを使ってもよい。ただし配列ならばdefineを使って実行したほうがよい。
一問が多すぎるのですがどうかよろしくお願いします。
243デフォルトの名無しさん:2007/06/08(金) 22:00:58
すいません(つまり2.3.4を表示)は関係ありませんでした・・・・
あとdefineで定義とはN Mを3とか5に定義して使えということです。
244デフォルトの名無しさん:2007/06/08(金) 22:10:49
>>237
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4184.c
色々と考えてみたが、俺の実力じゃ今のところこんなものしか作れん。
あと書いたソースはC言語。
245デフォルトの名無しさん:2007/06/08(金) 22:11:42
>>240
やってみたけど、出力される内容が実行例の内容と違う。
関数f(x)の定義間違ってない?

#include<stdio.h>

double f(double x){
    double x_n=1.0, dx, ret=0.0; // x_n -> x^n : dx -> x^n / n^2 : ret -> f(x)
    int n;
    for(n=1;;n++){
        x_n*=x;
        dx=x_n/(n*n);
        ret+=dx;
        if(dx<0.000001) break;
    }
    return ret;
}

int main(void){
    int i;
    for(i=1;i<=10;i++)
        printf("f(%g)=%f\n", i/10.0, f(i/10.0));
    return 0;
}
246デフォルトの名無しさん:2007/06/08(金) 22:11:59
>>237 >>244の補足
web2_out.txt に検索結果を出力するようにしてあるっす。不要なら消しておくべし。
247231:2007/06/08(金) 22:35:17
>>232-235
ありがとうございます。

一応、教えてもらったとおりにすれば実行できたのですが、d_method()を一般化してD[][]を求めるにはどのようなソースを組めばよいのでしょうか?
248237:2007/06/08(金) 22:41:37
>>244,246
有難うございます。
>>238のプログラムでは引数としてzを与えた時に
real 0m0.657s, user 0m0.530s, sys 0m0.040s
でした。
>>244では
real 0m0.165s, user 0m0.140s, sys 0m0.040s
のように性能が改善されました。
もしかしてC++が遅いだけでは?と思い、>>238のプログラムを
全く同じアルゴリズムでCで書き直したら
real 0m0.142s, user 0m0.120s, sys 0m0.020s
のようになりました。
249237:2007/06/08(金) 22:42:24
↓がそのCのプログラムです。
もっといい方法がありましたら、お教えください。

#include <stdio.h>
#include <string.h>
#define DICT "web2"
int main(int argc, char **argv)
{
    FILE *fp;
    size_t wlen;
    char buff[4096];

    if (argc == 1) return 1;
    wlen = strlen(argv[1]);
    if ((fp = fopen(DICT, "r")) == NULL) return 2;
    while (fgets(buff, sizeof buff, fp)) {
        int n = strncasecmp(buff, argv[1], wlen);
        if (n == 0) fputs(buff, stdout);
        else if (n > 0) break;
    }
    return 0;
}
250デフォルトの名無しさん:2007/06/08(金) 22:57:48
>>241
#include <stdio.h>

#define N 10

int main(void){
    double vector1[N], vector2[N], sum = 0;
    int i;

    printf("Input vector1 : "); for(i = 0; i < N; i++) scanf("%lf", &vector1[i]);
    printf("Input vector2 : "); for(i = 0; i < N; i++) scanf("%lf", &vector2[i]);

    i = 0;
    printf("addition : (");
    while(1){
        printf("%g", vector1[i] + vector2[i]);
        if(i >= N) break;
        printf(", ");
        i++;
    }
    printf(")\n");

    for(i = 0; i < N; i++) sum += vector1[i]*vector2[i];
    printf("dot product : %g\n", sum);

    return 0;
}
251デフォルトの名無しさん:2007/06/08(金) 23:00:16
>>249
「真ん中を比較して、どんどん半分にする」
という方法が定石だと思うのだけど、どう実現して良いやら。
252デフォルトの名無しさん:2007/06/09(土) 00:32:21
[1] 授業単元:情報工学実験T
[2] 問題文(含コード&リンク):
組クラスを作成しなさい。組クラスは教員と学生からなる。
教員は1人で学生は最大40人とする。
学籍番号で検索する機能を付ける事。
学生には、名前、住所、学籍番号(文字列型)という属性があり、
教員には名前、住所、教員番号(整数型)という属性があるとする。
教員と学生の共通部分をまとめたクラスを定義し、
それを継承する形で教員クラスと学生クラスを定義せよ。
 それぞれの属性には、getter、setter、表示関数を定義せよ。
 継承した教員クラスで、名前を表示する関数では、「○○教授」、
「○○助教授」などのように役職名を添えて表示する関数として、上書き定義せよ。
これらの機能が正しく動くことを確認するmain関数(適当なサンプル)もあわせて作ること。
[3] 環境
 [3.1] OS: (Windows/Linux/等々)Windows
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)VC
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)C++
[4] 期限: 2007年6月11日
どうかよろしくお願いします
253デフォルトの名無しさん:2007/06/09(土) 00:37:46
>>237
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4185.c

>>244と比べてほとんど改良した点はないが、>>244に不適切な部分があると思ったんで
ちと改造。これ以上は俺の実力じゃ無理ぽ。

余談だが、1つのファイルにしちゃうより、頭文字別にファイルを分ける方が
もっと膨大なデータになったときには処理に差が出るでしょうね。
こうなると、管理体制から問われるね。
254デフォルトの名無しさん:2007/06/09(土) 00:42:54
イニシャルの先頭の場所をあらかじめ求めておけばおk
単語が一つ増えただけで書き直しになるけど
255デフォルトの名無しさん:2007/06/09(土) 00:45:37

初めまして。

【質問テンプレ】
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
 テキストファイルに保存された改行で区切られた整数(縦に並んだ整数)を読み込んで、
その平均値と標準偏差を計算し、結果をファイルに保存することのできるプログラムを作成せよ。

[3] 環境
 [3.1] OS:Windows xp
 [3.2] コンパイラ名とバージョン: Microsoft Visual Studio .NET 2003
 [3.3] 言語: C言語
[4] 期限:2007年06月13日 17:00まで
[5] その他の制限:
 結果のファイル名が「あなたの名前.txt」になるようにすること。
 結果ファイルの先頭行に「あなたの学籍番号、クラス番号、名前」が記されるような、プログラムにすること。
 データ数は最大1000個まで計算できるようにすること。

僕の能力では解けませんでした。よろしくお願いします。
256デフォルトの名無しさん:2007/06/09(土) 00:46:44
>>254
日本語でおk。無駄口叩いて知ったかぶっているとボロ出すからw
257237:2007/06/09(土) 00:50:24
>>253-254 有難うございます。
アルゴリズムを改造せずに姑息な最適化を施したら
real 0m0.072s, user 0m0.060s, sys 0m0.030s ぐらいにはなりました。
>>254の方法も試してみます。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DICT "web2"
int main(int argc, char **argv) {
    FILE *fp;
    int n, wlen, fsize;
    char *dict, *p, *q;
    if (argc == 1) return 1;
    wlen = strlen(argv[1]);
    if ((fp = fopen(DICT, "rb")) == NULL) return 2;
    fseek(fp, 0, SEEK_END); fsize = ftell(fp); fseek(fp, 0, SEEK_SET);
    dict = malloc(fsize);
    fread(dict, 1, fsize, fp);
    fclose(fp);
    for (p = dict; fsize > 0 && (q = memchr(p, '\n', fsize));
            fsize -= (q - p + 1), p = q + 1)
    {
        n = strncasecmp(p, argv[1], wlen);
        if (n == 0) fwrite(p, 1, q - p + 1, stdout);
        else if (n > 0) break;
    }
    return 0;
}
258デフォルトの名無しさん:2007/06/09(土) 00:51:12
>>255
>改行で区切られた整数(縦に並んだ整数)
改行で区切られてるのに横に並んでる?
入力ファイルのフォーマットをもう少し詳しく
259デフォルトの名無しさん:2007/06/09(土) 00:54:05
どこに横に並んでるって書いてあるんだw
おまいの頭の中をもう少し詳しく
260デフォルトの名無しさん:2007/06/09(土) 00:55:02
>>259
ほんとだ、縦だった
脳内変換してた
スマソ>>255
261デフォルトの名無しさん:2007/06/09(土) 00:59:46
>>237
これで早くなってるんじゃないかな?
#include <stdio.h>
#include <string.h>
#define DICT "web2"
#define DIVNUM 50 // 適当な数
int main(int argc, char **argv) {
    FILE *fp;
    size_t wlen, filesize, pos, pos_prev;
    char buff[4096];

    if (argc == 1) return 1;
    wlen = strlen(argv[1]);
    if ((fp = fopen(DICT, "r")) == NULL) return 2;
    fseek(fp, 0L, SEEK_END);
    filesize=ftell(fp);
    fseek(fp, 0L, SEEK_SET);
    for(pos=pos_prev=0;pos<filesize;pos_prev=pos,pos+=filesize/DIVNUM+1) { // +1 で無限ループ回避
        fseek(fp, pos, SEEK_SET);
        fgets(buff, sizeof(buff), fp);
        if(fgets(buff, sizeof(buff), fp)==NULL) break;
        if(strncasecmp(buff, argv[1], wlen)>=0) break;
    }
    fseek(fp, pos_prev, SEEK_SET);
    while (fgets(buff, sizeof buff, fp)) {
        int n = strncasecmp(buff, argv[1], wlen);
        if (n == 0) fputs(buff, stdout);
        else if (n > 0) break;
    }
    fclose(fp);
    return 0;
}
262デフォルトの名無しさん:2007/06/09(土) 01:05:49
>>256
オフセットの位置をあらかじめ・・・でわかる?
263デフォルトの名無しさん:2007/06/09(土) 01:06:47
っつか、 strncasecmp って標準ライブラリじゃない?俺んとこじゃこれが使えねぇ orz
264デフォルトの名無しさん:2007/06/09(土) 01:07:50
>>262
だからそういう取り扱いがすでに不適切だって言ってんだが?
汎用性を無視した固有のやり方は、ちょっと環境が変わればそれに応じた対処をするのに
ものすごく無駄な手間が掛かるぞ?何か運営したことのない素人かい?
265デフォルトの名無しさん:2007/06/09(土) 01:10:19
266237:2007/06/09(土) 01:10:29
>>261
素晴らしい!!
real 0m0.020s
user 0m0.030s
sys 0m0.010s
でした。ここまで速ければ文句は無いでしょう。
>>263
VC++では
#ifdef _MSC_VER
#define strncasecmp strnicmp
#endif
とでもしてください。
267デフォルトの名無しさん:2007/06/09(土) 01:10:51
>>264
ちゃんと書き直しになるって書いてあるだろ
268デフォルトの名無しさん:2007/06/09(土) 01:13:37
>>261
引数をazとかにしたら検索してくれないアルよ
269237:2007/06/09(土) 01:14:54
>>268
ほんとだ。微妙なバグがあるようですね……
270デフォルトの名無しさん:2007/06/09(土) 01:15:50
>>261
賠償しるニダ
271デフォルトの名無しさん:2007/06/09(土) 01:24:37
スマソ
fseek(fp, pos_prev, SEEK_SET);

fseek(fp, pos_prev, SEEK_SET);
fgets(buff, sizeof(buff), fp);
272デフォルトの名無しさん:2007/06/09(土) 01:27:26
273デフォルトの名無しさん:2007/06/09(土) 01:36:22
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4187.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: cygwin
 [3.3] 言語: C
[4] 期限: 2007/6/10 23:00まで
[5] その他の制限:
AI_move関数部分を変更して下さい。
よろしくお願いします。
274デフォルトの名無しさん:2007/06/09(土) 01:38:52
>>272
ぷっ遅w
275デフォルトの名無しさん:2007/06/09(土) 01:40:20
>>274 < いい加減うぜぇよこいつ。最近でしゃばっている馬鹿か?
276237:2007/06/09(土) 01:42:29
>>271
azが検索できるようになりました。

>>272
real 0m0.525s
user 0m0.450s
sys 0m0.040s
でした。
277デフォルトの名無しさん:2007/06/09(土) 01:45:46
>>255
読み込むファイルはリダイレクトで与えてね
#include <stdio.h>
#include <math.h>

int main(void){
    double x_sum=0.0, x2_sum=0.0;
    int x, num;
    FILE *fp_out, *fp_in=stdin;

    for(num=0;num<1000;num++){
        if(fscanf(fp_in, "%d", &x)!=1) break;
        x_sum+=x;
        x2_sum+=x*x;
    }
    fp_out=fopen("あなたの名前.txt", "w");
    if(fp_out==NULL) return 1;
    fprintf(fp_out, "あなたの学籍番号、クラス番号、名前\n");
    if(num>0) fprintf(fp_out, "平均値:%f\n", x_sum/num);
    if(num>2) fprintf(fp_out, "標準偏差:%f\n", sqrt( (x2_sum-x_sum*x_sum/num) / (num-1) ));
    fclose(fp_out);

    return 0;
}
278デフォルトの名無しさん:2007/06/09(土) 01:47:35
fgetc使った方が速いか?そんな気がしてきた。
279>>261=>>271:2007/06/09(土) 01:59:27
>>237
ごめ。もう一回 >>261 の訂正
fseek(fp, pos_prev, SEEK_SET);

fseek(fp, pos_prev, SEEK_SET);
if(pos_prev) fgets(buff, sizeof(buff), fp);
280デフォルトの名無しさん:2007/06/09(土) 02:05:44
>>278
IOを伴う関数は出来る限り呼び出しが少ないほうがいいと思うよ
281デフォルトの名無しさん:2007/06/09(土) 02:10:45
>>280 検証してからものを言え
#include <stdio.h>
#include <time.h>

int main(void) {
FILE *fp=fopen("web2","r");
clock_t s,e;
char c,buf[256];

s=clock();
while( fgetc(fp) != EOF );
e=clock();
printf("fgetc %d ms \n",e-s);

rewind(fp);

s=clock();
while( fscanf(fp,"%s",buf) != EOF );
e=clock();
printf("fscanf %d ms \n",e-s);

return 0;
}
282デフォルトの名無しさん:2007/06/09(土) 02:20:32
標準入出力はバッファリングされるからfgetc()でもfscanf()でも変わらないと思ったらあにはからんや、
cygwinは標準入出力関数の呼出しごとにオーバヘッドがあるらしくfgetc()は鈍足だった。
283デフォルトの名無しさん:2007/06/09(土) 02:21:09
>>281
fgetc と fscanf とを比較してたのか…orz
確かに fscanf の方が遅いね
284237:2007/06/09(土) 02:36:09
>>279
有難うございます。
頑張りましたが>>261さんのコードには勝てませんでした。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4189.txt
285デフォルトの名無しさん:2007/06/09(土) 02:53:57
[1] 授業単元:C言語
[2] 問題文:3行3列の行列A、Bと4行4列の行列Cの各要素を入力ファイルから読み込み、
  出力ファイルに書き込んで出力せよ。各要素の型は実数型とする。
  A 1 2 3
4 5 6
7 8 9
B 5 -2 2
2 3 1
1 2 2
C 1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:?Visual studio.2003
 [3.3] 言語: C
[4] 期限: ([2007年6月10日11:00まで]
[5] その他の制限:ファイルポインタの宣言 FILE *fp
fopen関数
         fclose関数
         ファイルからの読み込み fscanf
ファイルへの書き込み fprintf
です。お願いします。

286デフォルトの名無しさん:2007/06/09(土) 03:27:01
急に静かになったな。誰か >>285 をやってやって。俺は >>237 で疲れた。
287デフォルトの名無しさん:2007/06/09(土) 03:53:17
>>275
いつもゴミソース書いてごめんなさい
288デフォルトの名無しさん:2007/06/09(土) 04:00:00
おいっ、エロゲメーカー所属のトーマスさんよぉ、あんたもたまにはクソースでも書いてくれや?
289デフォルトの名無しさん:2007/06/09(土) 04:09:58
>>237
>>261 をちょっと改良して2分探索にした
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4190.c

>>285 は入力/出力ファイルの形式がわからん
単にファイルコピーするだけとも読めるが…
いいかげんな推測に基づくコード↓
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4191.c
290289:2007/06/09(土) 04:14:37
DICTのファイル名変えたの戻し忘れてた
よしなに

あと、下のはエラーチェック一切していない
291237:2007/06/09(土) 05:01:55
>>289
有難うございます。速いですね……
自分も>>284で2分探索にしましたが、これより大分遅かったです。

相当姑息な手を使って>>284よりはかなり速くなりましたが、
それでも>>289さんのより若干遅いです。一括とは言え、下手にファイル全部
読み込まないほうが良いようですね。
mmap()でも使えば別かも知れませんが。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4192.txt

# getc()を1回呼ぶだけでファイル全部読んだことにしているところが
# 姑息なところですが、規格で保障された動作ではない気もします。
292デフォルトの名無しさん:2007/06/09(土) 05:13:54
>>289を勝手に改造してもちっと無駄を省いて速くなった?
if(strncasecmp(buff, argv[1], wlen)>=0) end=pos; ↓
if(strncasecmp(buff, argv[1], wlen)>=0) break;
293デフォルトの名無しさん:2007/06/09(土) 05:43:09
>>261
全然検証もクソもしてないが、各先頭文字が同じ文字列数が同数と仮定して
forループの前のSEEK位置の初期化時に当たりつけて、
fseek(fp, (arg[1]<'A'?arg[1]-'a':arg[1]-'A')*(filesize/26), SEEK_SET);
ぐらいから前方、または後方に探す方が早くないか?

後ろの方の単語の検索が遅くなる度合いを、演算1行とif分岐1回で
平均化出来ると思うんだけど、微妙かな?

演算1回だからfilesize/26で良いと思うが、filesize>>5のが早いかも?
294デフォルトの名無しさん:2007/06/09(土) 05:53:08
大ざっぱにアドレスを飛ばしてサーチかけてんだし、実際のところ
どこからどこまでに何が入っているかなんてわかっていない状態からやってんだし
本当に検索を速くするってなら、適当に単語ファイルを分けて管理する方が良いだろ。
295デフォルトの名無しさん:2007/06/09(土) 06:03:54
っつか、確かにZやアルファベットの後ろ半分だったらファイルの後ろの方からって
場合わけをするのもありか。
296デフォルトの名無しさん:2007/06/09(土) 06:07:37
>>261みたいなfgets()の使い方は小生の四角い頭では思いつけんな

このスレ頭良いやつ多すぎ
297デフォルトの名無しさん:2007/06/09(土) 06:16:25
お前が頭悪すぎなだけw
298289:2007/06/09(土) 06:18:10
>>291
read_dictをmmapで実装すると相当速くなるね
289と比べてみたがどちらも0.001秒とかなので
どっちが速いのかよくわからん

>>292
それは速くなることもあるけど平均的には遅くなりますね

>>293
後ろの方検索するときは効果ありそう
問題文にある辞書でも相当バラツキがあるが、線形検索よりは速くなるだろう
299デフォルトの名無しさん:2007/06/09(土) 06:21:56
>>298
> それは速くなることもあるけど平均的には遅くなりますね
???、探す範囲が見つかったら、それ以降はサーチせんで良いんでは?
速くなるならないは、実行時の単なる誤差でしょ。実際のところ、変更前と後では
扱うデータが大きくないから、人間が感じる範囲内ではほとんど差はない。
300デフォルトの名無しさん:2007/06/09(土) 06:28:37
>>294
辞書ファイルにまで手を入れるんだったら、
先頭にバイナリでハッシュテーブルでも入れとく方が格段に早い。

でも趣旨と全然違うんだよネ・・・。
301296:2007/06/09(土) 06:31:39
>>297
(´・ω・`)ショボーン
302デフォルトの名無しさん:2007/06/09(土) 06:43:09
>>299
このifの条件が成立した段階でstartとposの間に求める単語が
あることはわかっているが、startはもっと後ろにずらせるかもしれない
breakしていないのはそのため
たまたまそれ以上ずらせなかった場合は292のほうが速くなるでしょう
303255です。:2007/06/09(土) 11:20:04
>>277

ご解答ありがとうございます。
304デフォルトの名無しさん:2007/06/09(土) 12:30:55
>fgets(buff, sizeof(buff), fp);
>if(fgets(buff, sizeof(buff), fp)==NULL) break;

なんで>>261って一行読み捨ててるの?
305デフォルトの名無しさん:2007/06/09(土) 12:35:54
>>289
入出力ファイルの形式は.txtです。よろしくおねがいします。
306デフォルトの名無しさん:2007/06/09(土) 13:00:07
>>305
そうじゃなくて、入出力するtxtの中身を聴いてるんでしょ
数字の並びをどういう風に整形するのかってこと
307デフォルトの名無しさん:2007/06/09(土) 13:06:08
馬鹿は何をやっても駄目でしゅ(^▽^)
308デフォルトの名無しさん:2007/06/09(土) 13:18:38
>>304
ファイルポインタのシーク場所を適当に飛ばしてるから、
単語の途中を指してる可能性が高い。
ていうか自分でifの前にputs(buff);入れて実行してみろよ。
309デフォルトの名無しさん:2007/06/09(土) 13:19:42
入力ファイルの数字の並びはあたえられてなくて、出力ファイルに行列として出力されればいいっていう感じなんです……
俺の馬鹿さかげんではほんと手がでません。よろしくおねがいします。
310デフォルトの名無しさん:2007/06/09(土) 13:46:41
>>309
>>289のプログラムのどの辺が気に入らない?
311デフォルトの名無しさん:2007/06/09(土) 13:52:52
>>310さん
error C2143: 構文エラー : '{' が '<' の前にありません。
error C2059: 構文エラー : '<'
ってでちゃうんです…
312デフォルトの名無しさん:2007/06/09(土) 14:03:59
>>311
うちはコピペでコンパイル通るが。

手で書き写したなら、写し間違いの可能性がある。
>error C2143: 構文エラー : '{' が '<' の前にありません。
が出てる行と前後の行を確かめてみ。

書き間違いが無いなら、ファイルの拡張子をチェック。

それでもダメなら、ファイルをアップロードしてくれ。
313デフォルトの名無しさん:2007/06/09(土) 14:08:16
] 授業単元:プログラミング実習
2] 問題文(含コード&リンク): 2教科のテストの点数を入力し、その2つの点数に
任意の点数を加算する関数を、ポインタを使って定義し、以下のように出力するコー
ドを提出しなさい。
例)2教科分の点数を入力してください。
  78
  65
  加算する点数を入力してください。
  12
  12点加算したので
  科目1は90点になりました。
  科目2は77点になりました。


[3] 環境
 [3.1] OSLinux
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:C
[4] 期限:6月11日17時まで
[5] その他の制限: 配列を関数までならいました。ポインタは初めてです
とにかく初心者です。
よろしくお願いします(><)
314デフォルトの名無しさん:2007/06/09(土) 14:27:10
>>313
#include <stdio.h>
void func(int *arg1, int arg2){if(arg1)*arg1+=arg2;}
int main(){
int point1,point2,up;
printf("2教科分の点数を入力してください。\n");
if(scanf("%d\n", &point1)!=1){printf("だめー\n"); return 1;}
if(scanf("%d\n", &point2)!=1){printf("だめー\n"); return 1;}
printf("加算する点数を入力してください。\n");
if(scanf("%d\n", &up)!=1){puts("だめー\n"); return 1;}
func(&point1, up);
func(&point2, up);
printf("%d点加点したので\n科目1は%d点になりました。\n科目2は%d点になりました。\n",up,point1,point2);
return 0;
}
315デフォルトの名無しさん:2007/06/09(土) 14:34:52
ごめ。
>>314のscanf、\n要らない。
×:"%d\n"
○:"%d"
316デフォルトの名無しさん:2007/06/09(土) 14:34:53
>>312さん
'fopen' の宣言を確認してください。
'fscanf' の宣言を確認してください。
って出るようになったのですが、ここからどうすればいいですか?
317デフォルトの名無しさん:2007/06/09(土) 14:37:06
>>316
警告なら気にしないー

古い形式とか言われるだけでしょ。
318デフォルトの名無しさん:2007/06/09(土) 14:38:28
>>316
その警告はVisualStudioなら出る。
あとは入力ファイル「inp」を作って実行するだけ。
319デフォルトの名無しさん:2007/06/09(土) 14:38:50
>>316
っつか、ちゃんとソースをそのまま使ってるのか?ヘッダはちゃんとincludeしてるのかと
320デフォルトの名無しさん:2007/06/09(土) 14:52:43
このスレの問題解いて勉強してるのですが、
>>314さんのコードを自分の環境で実行すると

>2教科分の点数を入力してください
>50
>60
>30
>加算する点数を入力してください。
>40
>30点加点したので
>科目1は80点になりました。

みたいな出力になるのですが、これってなんででしょうか?
自分で考えてもコードは合ってる気がするのです><;
321320:2007/06/09(土) 14:56:18
科目1は〜の後の行に
>科目2は90点になりました。
っていう最後の一行コピペし忘れましたorz
322デフォルトの名無しさん:2007/06/09(土) 14:58:22
316の書き込みをしたものです。みなさんありがとうございます。
今度は入力ファイルについての質問なんですが、入力ファイルってどこに作成すればいいんですか。
323デフォルトの名無しさん:2007/06/09(土) 15:02:29
>>320
ごめん。
314だが>>315
3つあるscanfの\nを削除してくれ。
324デフォルトの名無しさん:2007/06/09(土) 15:06:41
>>322
カレントのフォルダ。
カレントのフォルダは実行の仕方によって違う。
VS上から実行してるなら、ソースファイルがあるフォルダ。
コマンドプロンプト上からなら、実行時のフォルダ。
325デフォルトの名無しさん:2007/06/09(土) 15:07:43
>>323
なるほど、scanfって\n付けちゃダメなんですね。
リロードしてなかったので>>315を見てませんでした。
あ、決してケチ付けたかったわけじゃなくて、
純粋にどこが悪いか知りたかっただけなので気を悪くさせてしまったらすいません><
326デフォルトの名無しさん:2007/06/09(土) 15:14:31
>>322
実行プログラムと同じ場所。
>>324
カレントといった場合は意味が違ってくるよ。
327デフォルトの名無しさん:2007/06/09(土) 15:16:19
328デフォルトの名無しさん:2007/06/09(土) 15:23:20
>>313です!!
>314さん、そしてそれを解いて勉強してる320さん
ありがとうございました!!
329デフォルトの名無しさん:2007/06/09(土) 15:24:18
>>326
いや、カレントで合ってるハズ。
実行ファイルがC:\program\にあって、
コマンドプロンプト上でC:\に居る時に、
パス指定で実行した場合、
ファイル「inp」はC:\に無きゃダメ。

VS上からF5なりCtrl+F5なりで実行した場合、
カレントのフォルダはプロジェクトファイルがある場所。
330デフォルトの名無しさん:2007/06/09(土) 15:25:27
>>329
あっているあっていないではなく、カレントディレクトリの意味わかってますか?
実行するときにカレントディレクトリを実行プログラムの場所に移動させているって話だろ?
低学歴だってバレるから、これ以上知ったかな口はきかない方が良いよw
331デフォルトの名無しさん:2007/06/09(土) 15:26:18
プログラムの機能を変えずに高速化したいです。
とにかく消費時間の短縮を目指したいと思います。
どうぞ知恵をお貸しください。よろしくお願いします。
また、消費時間の短縮に繋がった改善点を簡単でけっこうですので
説明してくだされば幸いです。


[1] 授業単元: 情報処理
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4193.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: [2007年06月11日21:00まで]
[5] その他の制限:
1.画像のためのメモリはヒープ領域に動的に確保する。
2.結果画像が変わらない。
以下の制約を守っていただければ、どのように変更されても構いません。
332デフォルトの名無しさん:2007/06/09(土) 15:26:57
ttp://ew.hitachi-system.co.jp/w/E382ABE383ACE383B3E38388E38387E382A3E383ACE382AFE38388E383AA.html
ttp://yougo.ascii24.com/gh/04/000430.html
> 現在ユーザーが作業しているディレクトリ
であって、実行プログラムやファイルがある場所を指すんじゃないんだよw
333デフォルトの名無しさん:2007/06/09(土) 15:32:04
>>330
プログラム実行してもカレントは変わらないって・・・。
プログラム内でsystem("cd");を実行してみて試してみると良い。
Linux上ならsystem("pwd");かな。
334デフォルトの名無しさん:2007/06/09(土) 15:35:04
>>333
ヒント:カレントディレクトリからでも、他の場所にある実行プログラムのあるパス名を指定して
プログラムを実行できる。使用するファイルも指定はパス名を通して指定できる。
ゆえに、現在作業中のディレクトリに置かなくてもなんら問題なし。
335デフォルトの名無しさん:2007/06/09(土) 15:36:41
322の書き込みをしたものです。
Debug Assertion Failed!
Program;...
File:fscanf.c
ってでてしまうんですが・・・
336デフォルトの名無しさん:2007/06/09(土) 15:41:16
すいません。>>242お願いできませんでしょうか。
337デフォルトの名無しさん:2007/06/09(土) 15:55:49
>>334
>使用するファイルも指定はパス名を通して指定できる。
どんな環境だ?
少なくともVS2005、XPのコマンドプロンプト、bashとcshはそんなことしない。

もしかしてソースコード見てないんじゃないか?
> fp_in = fopen("inp", "r");
こうだぞ?

>>335
どうやって実行してる?
338デフォルトの名無しさん:2007/06/09(土) 16:04:40
>>337
自分の理解力の無い頭を露呈しなくて良いから、黙ってろガキw
カレントディレクトリの意味が書かれている参照ページを出しても理解できないとは、馬鹿じゃね?
現在作業中のディレクトリが必ずしも実行プログラムのある場所とは限らないだろw
とりあえず、実行プログラムと同じ場所においておけばなんら問題なし。
同じ場所でなくてもパス名の指定は可能なんだよ。お前、パスを通すとか理解してないだろ?w
コマンドプロンプトを使ってコンパイル、実行とかしたことないだろ?
UNIXも使ったことないだろ?w
339デフォルトの名無しさん:2007/06/09(土) 16:06:33
何か荒れてるようなので自粛しますね
340デフォルトの名無しさん:2007/06/09(土) 16:06:47
ttp://ew.hitachi-system.co.jp/w/E382ABE383ACE383B3E38388E38387E382A3E383ACE382AFE38388E383AA.html
ttp://yougo.ascii24.com/gh/04/000430.html
ttp://e-words.jp/w/E382ABE383ACE383B3E38388E38387E382A3E383ACE382AFE38388E383AA.html

>>333
> Linux上ならsystem("pwd");かな。
知ったかな知識を持ち出して何が言いたいんだろうね。
ttp://cns-guide.sfc.keio.ac.jp/1999/3/1/6.html
パス名の表示だろ?そんなの知ってるわ、大学でUNIX使ってたし
341デフォルトの名無しさん:2007/06/09(土) 16:11:27
カレントディレクトリなんて、時と場合によって違うことがあるんだし
その都度カレントディレクトリに実行プログラムと必要なファイルを移動なりコピーして
カレントディレクトリに置くか?俺はいちいちそんなことやらんね。カレントディレクトリにではなく
ファイルのある場所とか実行プログラムのある場所にカレントディレクトリを移動させるならわかるけど。
342デフォルトの名無しさん:2007/06/09(土) 16:30:35
そんなポリシーの問題はどうでもいい
343デフォルトの名無しさん:2007/06/09(土) 16:37:41
おまいらC/C++の問題に熱くなれよw
344デフォルトの名無しさん:2007/06/09(土) 16:42:06
>>338
>>341
だからVC++のメニューから実行した場合は、
実行ファイルがある場所がカレントじゃないんだよ・・・。

VC++ 2005のデフォルトの状態だと
slnファイルがC:\slnにあって、プロジェクト名がprojectの場合、
プロジェクトファイルはC:\sln\projectにあって、
実行ファイルはC:\sln\debugに出来るんだ。

「デバッグ開始」とか「デバッグなしで開始」で実行した場合、
C:\sln\debugの下にある実行ファイルが実行されるけど
カレントディレクトリはC:\sln\projectになるから、
fp_in = fopen("inp", "r"); でオープンするファイル"inp"は
C:\sln\projectに置いて置かないと見つからないんだよ。

俺、何か間違えたこと言ってるのか・・・?
345デフォルトの名無しさん:2007/06/09(土) 16:53:01
[1] 授業単元:c言語
[2] 問題文:0〜100の範囲で入力された複数の数値の中から、最大値と最小値を求めて表示するプログラムを作成せよ。
        入力された数値を記憶する配列の要素数は10とし、-1が入力された場合は入力の終わりと判定する。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
 [3.3] 言語: (C
[4] 期限: [無期限]
[5] その他の制限: <stdio.h> for while if 一次配列のみ 
アルファベット、記号を入力するとおかしい動作をするので改善したい、ソースを出来る限り簡潔にしたい。

#include <stdio.h>
int main(void)
{
int min,max,i,value[10];
min = 100;
max = 0;
i = 0;
printf("0〜100の数値を入力して下さい\n終了:-1\n");
while(value[i] != -1 && i < 10){
printf("%d番目の数値を入力:",i+1); scanf("%d",&value[i]);
if(value[i] <= 100 && 0 <= value[i]){
if(value[i] < min)
min = value[i];
if(value[i] > max)
max = value[i];
i++;
}
}
printf("最大値:%d 最小値:%d\n",max,min);
return 0;
}
346デフォルトの名無しさん:2007/06/09(土) 17:02:43
いろんな入力に対応しようとすると結構面倒じゃね?
簡単に対応するなら、入力を文字列として受け取ってatoiとかで変換とかかな?
347345:2007/06/09(土) 17:12:55
>>346
>いろんな入力に対応しようとすると結構面倒じゃね?
そうなんですか・・・
今の段階では自分には無理そうなのであきらめます

他に改善すべき点があればアドバイスお願いします
348デフォルトの名無しさん:2007/06/09(土) 17:16:40
>>347
valueを初期化していないままwhileの条件判定を行っている。
iが0〜10のループなのでforのほうがいいと個人的に思う。

349デフォルトの名無しさん:2007/06/09(土) 17:34:03
>>347
コーディングスタイルは好みもあるんであれだが書き直してみた。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4194.txt

このページ初心者のうちから読んでおくとだいぶ違うと思われ。
http://www.pro.or.jp/~fuji/mybooks/cdiag/

演算子とかカンマのとなりはスペースつけたほうがいいよ
i+j+k → i + j + k
i,j,k → i, j, k
350デフォルトの名無しさん:2007/06/09(土) 17:39:26
>アルファベット、記号を入力するとおかしい動作をするので改善
do{
 rewind(stdin);
 if(!scanf("%d", &value[i]))
  printf("数値でおk\n");
}while(-1);
351デフォルトの名無しさん:2007/06/09(土) 17:44:18
>>348
>>349
>>350
ありがとうございました
352デフォルトの名無しさん:2007/06/09(土) 17:48:24
つーかこの問題別に配列いらないよな
353デフォルトの名無しさん:2007/06/09(土) 18:08:12
初心者はとりあえずscanf()を馬鹿の一つ覚えでfgets() + sscanf()に
置き換えれば大分被害は減る。
それと、面倒でもこの手の入力関数の戻り値は見とけ。
354デフォルトの名無しさん:2007/06/09(土) 18:21:40
学校とか入門書でscanfを使いすぎなんだよな。
どーでもいいもん作るなら楽でいいが、少しまともにしようと思うだけで使いもんにならんよな。
355デフォルトの名無しさん:2007/06/09(土) 18:35:38
細かい説明をしている時間がないんだろ。限られた時間内で必要なところだけ教えるんだし。
データを取り込むインターフェースのほとんどは数字だけでなく
英数字の入力が可能なため、数値を扱う変数には文字が入らないように
一度文字列として入力データを受け継いで、文字列の中から適切に数字を取り込む
仕様にしようとか、初心者に説明してもちんぷんかんぷんかも?
356デフォルトの名無しさん:2007/06/09(土) 18:41:56
文字が入らないようにって言ったらおかしいか。文字データを%dや%lfといった
書式指定で取り込まないように、かな。まぁ、説明して理解させるのも面倒だろうし
数値だけ入力して取り込むことを条件にして、授業を進めると。俺もそうだった。
まぁ、俺が授業を受けたのは98年だからずいぶん前になるが。今じゃ普通に
int main(void)とか(int argc, char *argv[]) とかANSI、ISO準拠も考慮しているのかな?
357デフォルトの名無しさん:2007/06/09(土) 18:43:03
>>355
scanf()の仕様を初心者に正しく理解させることのほうが
ずっと難しいと思う
358デフォルトの名無しさん:2007/06/09(土) 18:43:45
>>357
いや、ライブラリについて細かくではなく、データを取り込む手段に関して。
359デフォルトの名無しさん:2007/06/09(土) 18:45:48
>>331
/* org にシーケンシャルアクセスする事でキャッシュヒット率を上げる */
/* 領域内外の計算を先にしておく */
void emboss(UCHAR ***ans, UCHAR ***org, int dx, int dy, int n_gyou, int n_retu){
    int g, r, g_max, r_max, val;
    int g_org=0, r_org=0, g_ans=0, r_ans=0;
    UCHAR *pans, *porg;
    memcpy(&ans[0][0][0], &org[0][0][0], sizeof(UCHAR) * n_retu * n_gyou * 3);
    g_max=n_gyou-abs(dy);
    r_max=n_retu-abs(dx);
    if(dy>0) g_org=dy;
    else g_ans=dy;
    if(dx>0) r_org=dx;
    else r_ans=dx;
    for(g=0;g<g_max;g++){
        pans=&ans[g+g_ans][r_ans][0];
        porg=&org[g+g_org][r_org][0];
        for(r=0;r<r_max*3;r++){
            val=*pans - *porg + 128;
            if(val > 255) *pans = 255; /* 画素値は0以上255以下 */
            else if(val < 0) *pans = 0;
            else *pans = val;
            pans++;
            porg++;
        }
    }
    for(g=n_gyou-dy;g<n_gyou;g++) memset(&ans[g][0][0], 128, sizeof(UCHAR)*n_retu*3);
    for(g=0;g<-dy;g++) memset(&ans[g][0][0], 128, sizeof(UCHAR)*n_retu*3);
    if(dx>0) r = n_retu - dx;
    else r = 0;
    for(g=0;g<n_gyou;g++) memset(&ans[g][r][0], 128, abs(dx)*3);
}
360デフォルトの名無しさん:2007/06/09(土) 18:50:17
カレントディレクトリさんが知ったかな浅はかな知識で話を進めるから退避。
361デフォルトの名無しさん:2007/06/09(土) 19:00:52
>>360
分かったから黙って出てけよ
362252:2007/06/09(土) 19:04:50
すいません誰か252解いてくれませんか
363デフォルトの名無しさん:2007/06/09(土) 19:36:54
[1] 授業単元:c言語
[2] 問題文:0〜100の範囲で入力された複数の数値の中から、最大値と最小値を求めて表示するプログラムを作成せよ。-1が入力された場合は入力の終わりと判定する。
       ポインタを使用し、最大値と最小値はmain関数以外の一つの関数の中で求める。入力された数値を記憶する配列の要素数は10とする。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
 [3.3] 言語: (C
[4] 期限: [無期限]
[5] その他の制限: <stdio.h> for while if 一次配列 自作関数 ポインタ

自分なりに頑張って作ってみましたが、ポインタさっぱりわけワカメです
もっとエレガントになりませんか?
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4195.txt
364デフォルトの名無しさん:2007/06/09(土) 19:56:34
>>363
問題点
1.いきなり -1 を入力すると…
2.100 より大きな数 又は -1より小さな数を入力すると…

まずはデバッグしてみては?
365デフォルトの名無しさん:2007/06/09(土) 20:01:28
>>362
しぃぷらぷらはめんどくさくてイヤなのですよ。
366デフォルトの名無しさん:2007/06/09(土) 20:05:19
[1] 授業単元: アルゴリズム論
[2] 問題文(含コード&リンク):
マージソートによるソーティングに対する非再帰的なプログラムを作りなさい。
ただし、データ数を2^kとする。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 金曜日までです。
[5] その他の制限: 特にないです。
よろしくお願いします。
367デフォルトの名無しさん:2007/06/09(土) 20:40:31
>>366
# include <stdlib.h>
# include <string.h>
void merge(int *a, int *b, int *out, int size)
{
  int *orig_out = out;
  int i = 0, j = 0;
  while(i < size || j < size)
    if(j >= size || i < size && a[i] < b[j])
      *out++ = a[i++];
    else
      *out++ = b[j++];
}
void mergesort(int *a, int k)
{
  int i;
  int *temp = malloc((1 << k) * sizeof(int));
  if(!temp) perror("malloc"), exit(1);
  for(i = 0; i < k; i++)
  {
    int n = 1 << i;
    int j;
    for(j = 0; j < 1 << k - i - 1; j++)
    {
      int *x = a + 2 * j * n;
      merge(x, x + n, temp, n);
      memcpy(x, temp, n * 2 * sizeof(int));
    }
  }
  free(temp);
}
368367:2007/06/09(土) 20:41:17
ごめん、
int *orig_out = out;
は消し忘れ。
369デフォルトの名無しさん:2007/06/09(土) 20:51:03
370デフォルトの名無しさん:2007/06/09(土) 21:19:26
>>362
getterとsetterって何するもんなの?
371デフォルトの名無しさん:2007/06/09(土) 21:26:12
372デフォルトの名無しさん:2007/06/09(土) 21:29:17
わろた
373デフォルトの名無しさん:2007/06/09(土) 21:58:25
[1] 授業単元:
[2] 問題文(含コード&リンク):
9×9の2次元配列を用意し座標に見立てる,ゴール座標を1ヵ所設定し,ゴール以外の座標には,ゴールからの距離の2乗を計算して入れる.
キーボードから座標を入力し,ゴール以外の場合は,配列に格納してあるゴールからの距離の2乗の値を表示する.
ゴールの座標が入力されたら,入力回数と,得点を表示する.得点は,持ち点を100点とし,入力ごとにゴールからの距離を減点していく.
ただし,最低点を0点とする(今回は正解するまで続ける.)
ただし,配列は,
int dist[9][9];
とする.(要素は81個しか持ってはいけない.)
なお,ゴールの座標は自由に決めてよい.

[実行結果]
座標を入力してください(X Y): 4 6
距離 20 です.(持ち点:80)

座標を入力してください(X Y): 9 7
距離 2 です.(持ち点:78)

座標を入力してください(X Y): 8 8
!!! 3 回目で大当たり!!!
得点は,78点です
[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン: 不明
 [3.3] 言語: C言語
[4] 期限: 6/13まで
[5] その他の制限: 制御構文はif、for、whileだけ breakは駄目だそうです
374デフォルトの名無しさん:2007/06/09(土) 21:59:34
>>370
学生の学籍番号を保持するメンバ変数と、その変数のsetterとgetter
Teacharクラスの役職を保持するメンバ変数と、その変数のsetterとgetter
とテキストにはあります
これで分かりますでしょうか?
375デフォルトの名無しさん:2007/06/09(土) 22:03:52
学籍番号の桁数とかは適当に設定?
376デフォルトの名無しさん:2007/06/09(土) 22:22:15
>>373
「距離の2乗」 を配列に入れるのに、
得点から引くのは 「距離」 なの?
377デフォルトの名無しさん:2007/06/09(土) 22:25:55
>>373
#include <stdio.h>
int main(void){
    int dist[9][9];
    int x, y, ans_x=3, ans_y=4, wrong_x=0;
    int score=100, try_count=1;

    for(y=0;y<9;y++)
        for(x=0;x<9;x++)
            dist[y][x]=(x-ans_x)*(x-ans_x)+(y-ans_y)*(y-ans_y);

    if(dist[0][wrong_x]==0) wrong_x++;
    x=wrong_x;
    while(dist[y][x]!=0){
        printf("座標を入力してください(X Y):");
        scanf("%d %d", &x, &y);
        if((x<0 || 9<=x) || (y<0 || 9<=y)){
            printf("範囲外です X:(0-8) Y:(0-8)\n");
            x=wrong_x;
            y=0;
        }else if(dist[y][x]>0){
            try_count++;
            score-=dist[y][x];
            if(score<0) score=0;
            printf("距離 %d です.(持ち点:%d)\n", dist[y][x], score);
        }
    }
    printf("!!! %d 回目で大当たり!!!\n", try_count);
    printf("得点は,%d点です\n", score);

    return 0;
}
378デフォルトの名無しさん:2007/06/09(土) 22:26:04
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4198.txt

まあいいや
距離2乗をひいといた
printfの中身とかは直す必要があるなら直してください
ゴール座標は1,2にしときました
379デフォルトの名無しさん:2007/06/09(土) 22:30:04
まさかうちの大学の課題が出てるとはおもわなんだ
380デフォルトの名無しさん:2007/06/09(土) 22:32:20
>>375
ええ、そうです。適当でかまいません
381デフォルトの名無しさん:2007/06/09(土) 22:33:57
>>379
いいえ、違います。うちの大学です。
382デフォルトの名無しさん:2007/06/09(土) 22:35:02
>>373
>>377 だが、回りくどい方法だったので >>378 を参考にして書き直した
#include <stdio.h>
int main(void){
    int dist[9][9];
    int x, y, ans_x=3, ans_y=4, is_goal=0;
    int score=100, try_count=1;

    for(y=0;y<9;y++)
        for(x=0;x<9;x++)
            dist[y][x]=(x-ans_x)*(x-ans_x)+(y-ans_y)*(y-ans_y);

    while(!is_goal){
        printf("座標を入力してください(X Y):");
        scanf("%d %d", &x, &y);
        if((x<0 || 9<=x) || (y<0 || 9<=y)){
            printf("範囲外です X:(0-8) Y:(0-8)\n");
        }else if(dist[y][x]>0){
            try_count++;
            score-=dist[y][x];
            if(score<0) score=0;
            printf("距離 %d です.(持ち点:%d)\n", dist[y][x], score);
        }else
            is_goal=1;
    }
    printf("!!! %d 回目で大当たり!!!\n", try_count);
    printf("得点は,%d点です\n", score);

    return 0;
}
383デフォルトの名無しさん:2007/06/09(土) 23:13:33
>>374
それでは誰もわからないとおもうよ。
setterとgetterが何のための関数なのかよくわからんし
showも別につけるみたいだし
384デフォルトの名無しさん:2007/06/09(土) 23:29:35
...わかれよ


>保持するメンバ変数と、その変数のsetterとgetter
これ以上何が知りたいんだw
385デフォルトの名無しさん:2007/06/09(土) 23:34:25
ごめん
386デフォルトの名無しさん:2007/06/10(日) 00:11:33
setter/getterってアクセサの事だろ
387デフォルトの名無しさん:2007/06/10(日) 00:19:20
>>362
できたケロ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4199.zip

めんどくせーからヘッダーに全部実装書いた。
388:2007/06/10(日) 00:23:42
[1] 授業単元:c++言語
[2] 問題文:
画面上の点という概念をあらわす、Pointという名前のクラスを作る定義を書いてください。
なお、Pointは次のメンバから構成されるクラス。
x(publicなメンバオブジェクト)点のx座標を格納するintの変数。
yx(publicなメンバオブジェクト)点のy座標を格納するintの変数。
そして次の関数から構成されるプログラムを書いてください。

main
動作:二個の点を読み込んで、それらの中点を出力。

ReadPoint
宣言:void ReadPoint(Point& rp);
動作:点を、rp.xとrp.yに読み込む。

PrintPoint
宣言:void PrintPoint(Point p);
動作:点を(p.x,p.y)という形で出力。

MiddlePoint
宣言:Point MiddlePoint(Point pa,Point pb);
動作:workという名前のPointクラスの変数を作り、(pa.x,pa.y)と(pb.x,pb.y)の中点のx座標をwork.xに、y座標をwork.yに代入してworkの内容を返します。
389デフォルトの名無しさん:2007/06/10(日) 00:40:31
[1] 授業単元:C/C++
[2] 問題文(含コード&リンク):
構造体とメンバ変数の関係で定数定義をしなさい
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:VC2005(MFC利用可)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([2007年06月13日まで]
[5] その他の制限:
.Net Frameworkの使用は禁止。

構文は間違ってるのですが、やりたいことはこういうことです。
インスタンスを生成せずにスタティックに利用するものを作るように言われています。
struct AAA{
const CString s = "abc";
const CString s1 = "ABC";
}
ご多忙のところ申し訳ありませんがよろしくお願いします。
390デフォルトの名無しさん:2007/06/10(日) 00:45:06
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
(問題1)下の表より国語80以上または英語20以下のものを行ごと表示しなさい
(問題2)国語または英語の平均を計算して表示しなさい

    国語  英語
1、A君 40  49
2、B君 88  69
3、C君 60  12 
4、D君100  88
5、E君 30  67
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:visual studio 2005
 [3.3] 言語: C
[4] 期限: 6/13
[5] その他の制限:for loopまたは配列を使ってやる
391デフォルトの名無しさん:2007/06/10(日) 01:22:22
>>390
ろだ 4200.txt
392デフォルトの名無しさん:2007/06/10(日) 01:25:41
>387

>  継承した教員クラスで、名前を表示する関数では、「○○教授」、
> 「○○助教授」などのように役職名を添えて表示する関数として、上書き定義せよ。
については?


...って >362 よ、"教授","助教授"ってどうやって判別すんだw
393デフォルトの名無しさん:2007/06/10(日) 01:26:37
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
以下のコマンドを実行可能な名簿管理システムを作成せよ。

1 メンバの追加
2 メンバの削除
3 メンバリストを名前順(アルファベット昇順)で表示
4 メンバリストのファイル出力
5 引数として"-f ファイルパス"を指定することによるメンバ初期データの読込
メンバ情報としては、最低限、名前と学生番号を持つこと。

[3] 環境
 [3.1] OS: TurboLinux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 6月12日18:00まで
[5] その他の制限: なし
394デフォルトの名無しさん:2007/06/10(日) 01:27:43
>>391トン
395392:2007/06/10(日) 01:34:52
>387 は
> class Professor : public Teacher {}
> class AssistantProfessor : public Teacher {}
ってことだったのね...
Teacher で全部やるのかとおもてたのでorz
396デフォルトの名無しさん:2007/06/10(日) 01:38:29
>>395
問題的にはTeacherでオーバーライドして、
適当に決めうちで「教授」とか出しておけば良いとオモタ。
397デフォルトの名無しさん:2007/06/10(日) 01:53:50
>388
ろだ 4201.txt
ReadPointの仕様がよくわからんので未使用
398デフォルトの名無しさん:2007/06/10(日) 02:15:36
>393
途中まで書いたけどやぱーりソートがめんどいからパス
399デフォルトの名無しさん:2007/06/10(日) 02:32:21
>>398
strcmpとかでバブルソートでいいんでね?
400デフォルトの名無しさん:2007/06/10(日) 02:37:35
[1] 授業単元: 計算機概論
[2] 問題文(含コード&リンク):
C言語では、以下のようなコードが許される

int a[10];
0[a]=1;

これが、何故なのか、
糖衣構文に留意して答えなさい。

寝てたので分かりません><
意味不明です。誰か教えてください

[3] 環境
 [3.1] OS:
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限: 6月11日10:00まで
[5] その他の制限: なし
401デフォルトの名無しさん:2007/06/10(日) 02:41:03
>>398
そうなんだけど書くのがめんどい
梅酒がまずくなる
BMはオレライブラリにあるけど、棚までCDとりにいくのがめんどい
402デフォルトの名無しさん:2007/06/10(日) 02:48:10
403デフォルトの名無しさん:2007/06/10(日) 02:49:30
ググッたけどわかりやすく説明してるページみつかんね・・・
[]は単なる演算子。a[0]も0[a]も同じ、程度しかいえないやOTL
404デフォルトの名無しさん:2007/06/10(日) 03:01:00
添字演算子が整数(オフセット値)とT型へのポインタをオペランドに取り
T型のオブジェクトを生成する演算子で、かつオペランドが可換

これだけの事だろ。そういう仕様なんだとしか言い様がない
つーかこんな課題に何の意味があるんだろうな
そんなトリッキーなコード、IOCCCぐらいでしかお目に掛からないだろ
405デフォルトの名無しさん:2007/06/10(日) 03:02:41
まぁ、仕様だからそうだろってことを課題にして、うちは他とはちょっと違った異質な授業をしてますよって
アピってんだろ。そういう勘違いって、痛々しいけどな・・・
406デフォルトの名無しさん:2007/06/10(日) 03:48:54
>>400
int array[10]; //int型配列 array の宣言
array[5] = 12; //嘘くせえ書き方
//↑の書き方は単なる↓の糖衣構文(シンタックスシュガー)
*(array+5) = 12; //これが本来の書き方
//足し算なので足す順番をひっくり返してもOK
*(5+array) = 12;
//読みづらければ糖衣構文を使ってもOK
5[array] = 12;
407388:2007/06/10(日) 04:21:09
すみません、どなたか388の問題を解いてくれませんか?
408デフォルトの名無しさん:2007/06/10(日) 04:30:12
>397
409デフォルトの名無しさん:2007/06/10(日) 04:34:01
>>407 かなりてきとう
#include <iostream>
using namespace std;
class Point { public: int x,y; };
void ReadPoint(Point& rp) { cin >> rp.x >> rp.y; };
void PrintPoint(Point p) { cout << "(" << p.x << "," << p.y << ")"; }
Point MiddlePoint(Point pa, Point pb)
{ Point work; work.x = (pa.x + pb.x) / 2; work.y = (pa.y + pb.y) / 2; }
int main(void)
{
Point pa, pb, pc;
ReadPoint(pa); ReadPoint(pb);
PirntPoint( MiddlePoint(pa, pb) );
return 0;
}
410デフォルトの名無しさん:2007/06/10(日) 04:45:19
>>407
#include<iostream>
class Point {
public:
int x;
int y;
};
void ReadPoint( Point &rp );
void PrintPoint( Point p );
Point MiddlePoint(Point pa,Point pb);
void ReadPoint( Point &rp ) {
std::cin >> rp.x;
std::cin >> rp.y;
}
void PrintPoint( Point p ) {
std::cout << "(" << p.x << "," << p.y << ")" << std::endl;
}
Point MiddlePoint( Point pa, Point pb ) {
Point work;
work.x = ( pa.x + pb.x ) / 2;
work.y = ( pa.y + pb.y ) / 2;
return work;
}
int main( void ) {
Point pt1,pt2,pt3;
ReadPoint( pt1 );
ReadPoint( pt2 );
pt3 = MiddlePoint( pt1, pt2 );
PrintPoint( pt3 );
return 0;
}
411デフォルトの名無しさん:2007/06/10(日) 06:15:35
412252:2007/06/10(日) 10:09:47
>>387
ありがとうございます、とても助かりました
413デフォルトの名無しさん:2007/06/10(日) 10:49:40
for(a=1;a<=100;a++);
{
printf("%d",a);
}
で1から100までの数字を表示してるんですが、これを20文字ごとに改行するにはどうすればいいでしょうか?
414デフォルトの名無しさん:2007/06/10(日) 10:56:46
>>413
int main(void) {
int a;
int letter = 0;
for(a = 1; a <= 100; a++) {
if (letter > 0 && letter % 20 == 0) {
printf("\n");
}
printf("%d", a);
letter++;
}
return 0;
}
415デフォルトの名無しさん:2007/06/10(日) 11:08:45
[1] 授業単元: 数値計算法
[2] 問題文(含コード&リンク): 次の積分の値を数値計算で求めるプログラムを作れ。
また、解析解、Mathematicaとの値についても比較論ぜよ。
さらに、積分精度を上げるためにはどうすれば良いか。
ttp://smokingblues.web.infoseek.co.jp/column/2003-04_suutikeisan/index.htm
積分の値は上記リンクの(2)の問題と同じです。
リンクのソースを使ってコンパイルしてもエラーがでてしまふ・・・

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:Visual C++
 [3.3] 言語: C++
[4] 期限: 6月18日まで
[5] その他の制限: 特になし
416デフォルトの名無しさん:2007/06/10(日) 11:17:47
0.7853981634
417デフォルトの名無しさん:2007/06/10(日) 11:39:37
キーボードから数値を入力して、その入力した数値に20を加えた値まで表示するにはどのような
プログラミングを組めばいいのですか
418デフォルトの名無しさん:2007/06/10(日) 11:43:43
その入力した数値に20を加えた値"まで"
の始点はどこですか?
419デフォルトの名無しさん:2007/06/10(日) 11:47:27
>>415
コンパイルはできたよ。
数学知らんから答えとかシラネ。
integralの引数double nは不要そうだからはずした。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4203.txt
420デフォルトの名無しさん:2007/06/10(日) 11:47:28
>>417
#include <stdio.h>

int main()
{
    int in, i;
    scanf("%d", &in);
    for (i=in ; i<=in+20 ; i++)
        printf("%d\n", i);

    return 0;
}
421デフォルトの名無しさん:2007/06/10(日) 11:54:48
>>419
うお。ありっしたー
422デフォルトの名無しさん:2007/06/10(日) 12:25:23
まあこういうスレだからしょうがないんだが、
>>421のような ありっしたー ってのは伸びないよな
自分で調べて、考えて、ってことをやらない奴は根本的に素養がない
423デフォルトの名無しさん:2007/06/10(日) 12:29:03
>>422
うお。ありっしたー
424366:2007/06/10(日) 12:30:33
>>367
助かりました。
月曜に学校に行って試してみようと思います。
本当にありがとうございました。
425デフォルトの名無しさん:2007/06/10(日) 12:47:23
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
(1) 0-255の範囲の乱数を20個生成して配列に格納し、これを大きい順に並べ替え、当初の配列の要素と並べ替え後の要素を比較して出力するプログラムを作成せよ。
2. 同様な並べ替え処理を(1)と別のアルゴリズムで実現せよ。
[3] 環境
 [3.1] OS: MacOSX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限: 月曜までにお願いします。
426デフォルトの名無しさん:2007/06/10(日) 13:02:56
>>425
比較って具体的にどうすればいいんだ?
427デフォルトの名無しさん:2007/06/10(日) 13:10:46
>>425
#include <stdio.h>
#include <stdlib.h>

int compare(const unsigned char *a, const unsigned char *b)
{
return *a - *b;
}


int main()
{
    unsigned char num[20];
    int i;

    puts("使用前");
    for (i=0 ; i<20 ; i++)
    {
        num[i]=rand();
        printf("%d\n", num[i]);
    }

    qsort(num, 20, sizeof(unsigned char), (int (*)(const void*, const void*))compare);

    puts("使用後");
    for (i=0 ; i<20 ; i++)
        printf("%d\n", num[i]);

    return 0;
}
428デフォルトの名無しさん:2007/06/10(日) 13:45:27
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
100人の生徒の遅刻回数が次のように記録されている.
int late[100] = (5, 2, 0, 12, ..., 3);
このとき,遅刻回数が多いワースト5位までを配列の添字を使い次のようにリストアップする.
31 14 0 19 45 ※0〜99までの数
なお,遅刻回数はint型に収まる程度の任意の自然数とし,
出力する順番は遅刻回数が多い順とする.
また,同じ遅刻回数の人間が5位と6位にまたがる場合も,出力するのは5人までとする.
例:24(14) 14(12) 60(10) 51(10) 80(9) 45(9) ... ※添字(回数) の出力は
24 14 60 51 80
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語: C
[4] 期限: 6/10 午後9時
429デフォルトの名無しさん:2007/06/10(日) 14:09:58
>>428
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int late[100];
int cmp(const void *a, const void *b)
{
    int aa = *((int *)a);
    int bb = *((int *)b);
    return late[aa] == late[bb] ? 0 : late[aa] < late[bb] ? 1 : -1;
}
int main(void)
{
    int i, idx[100];
    srand(time(0));
    for (i = 0; i < 100; ++i) {
        late[i] = rand();
        idx[i] = i;
    }
    qsort(idx, 100, sizeof(int), cmp);
    for (i = 0; i < 5; ++i)
        printf("%d(%d) ", idx[i], late[idx[i]]);
    putchar('\n');
    return 0;
}
430デフォルトの名無しさん:2007/06/10(日) 14:21:24
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;

void main()
{
vector<int> vLate;
int i;

for( i=0; i<100; i++ )
vLate.push_back(rand()%100);

sort( vLate.begin(), vLate.end() );

for( i=99; i>=95; i-- )
cout << vLate.at(i) << " ";
}
431デフォルトの名無しさん:2007/06/10(日) 14:22:06
>>430
>  [3.3] 言語: C
432430:2007/06/10(日) 14:27:03
すいませんでした
433デフォルトの名無しさん:2007/06/10(日) 15:05:41
>>427
ありがとうございます。
(2)のほうもできたらお願いします。
434428:2007/06/10(日) 15:25:15
>>429
素早い回答ありがとうございます.とても助かりました.
435デフォルトの名無しさん:2007/06/10(日) 16:25:57
>428 よ
>429 だと、出力がlate[]の添え字順にならない場合があるがよいのか?

例) 99(0) 1(0) 2(0) 3(0) 4(0)
436デフォルトの名無しさん:2007/06/10(日) 16:49:31
添え字順にしろとか書いてないし
出力例で思いっきり順番ひっくり返ってるし、いいんじゃねぇの?
437デフォルトの名無しさん:2007/06/10(日) 16:57:40
> 出力例で思いっきり順番ひっくり返ってるし
確かに〜♪
438デフォルトの名無しさん:2007/06/10(日) 17:47:11
>>3
#include <stdio.h>

int main(void)
{
int i,n,total;
total = 0;

printf("整数nを入力:"); scanf("%d",&n);
i = n;
while(i){
total += i;
i--;
}
printf("1〜%dの合計=%d\n",n,total);
return 0;
}
439208:2007/06/10(日) 17:47:19
誰かお願いしますwww
もうすぐ締め切られる!!!
440デフォルトの名無しさん:2007/06/10(日) 17:57:32
441デフォルトの名無しさん:2007/06/10(日) 18:00:09
誘導されました。ふたたびお願いします。。。。

キーボードから入力された10進数を、2進数として出力するプログラムをつくりなさい。
2進数への変換は、商が0になるまで10進数を2で割りl、あまりを逆の順番で並べる方法を用いる。
ただし、入力は正の整数であって最大値は16838とする
442デフォルトの名無しさん:2007/06/10(日) 18:00:56
443デフォルトの名無しさん:2007/06/10(日) 18:12:50
444デフォルトの名無しさん:2007/06/10(日) 18:15:04
445デフォルトの名無しさん:2007/06/10(日) 18:19:43
>>441
#include <stdio.h>
int main(void)
{
    int i;
    unsigned n = 0xffff;
    scanf("%ud", &n);
    if (n > 16838) return puts("( ´,_ゝ`)"), 123;
    for (i = 0xf; i >= 0; --i) putchar(n >> i & 1 ? '1' : '0');
    putchar('\n');
    return 0;
}
446デフォルトの名無しさん:2007/06/10(日) 18:19:47
>>441
#include <stdio.h>

#define BIN_MAX 16838
#define BIN_SIZE 16

int main(void)
{
int a,i,binary[BIN_SIZE];

printf("整数を入力(MAX 16838):"); scanf("%d",&a);
while(!(0 <= a && a <= BIN_MAX))
{
printf("エラー,整数を入力(MAX 16838):");scanf("%d",&a);
}

i=0;
while(a){
binary[i++] = a % 2;
a = a / 2;
}

while(i--) printf("%d", binary[i]);

printf("\n");
return 0;
}
447デフォルトの名無しさん:2007/06/10(日) 18:19:54
func(unsigned int n){
int num = n;
int tmp[20];
int i = 0;

for(i = 0 ; i<20 ; i++){
tmp[i] = n%2;
n = n/2;
if(n == 0)break;
}

for(j = i ; j>=0 ; j--)
printf("%d",tmp[j]);
}
448デフォルトの名無しさん:2007/06/10(日) 18:21:51
16838じゃなくて16383だと思うんだけどどうよ?
449デフォルトの名無しさん:2007/06/10(日) 18:27:32
>>441
テンプレに沿ってって言ったのに

#include <stdio>
#include <stdlib>
int main(void)
{
char *p,buf[20];
int a,b,n;
n=19;
while(1)
{
printf("16838までの整数を入力して>");
fgets(buf,10,stdin);
a=atoi(buf);
if((0<=a&&a<=16838) break;
printf("入力範囲外です\n");
}
buf[n]='\0';
while(a)
{
n--;
b=a%2;
buf[n]=(char)b+'0';
a/=2;
}
printf("%s",buf+n);
return 0;
}
450デフォルトの名無しさん:2007/06/10(日) 18:30:17
[1] 授業単元: プログラミングネットワーク
[2] 問題文(含コード&リンク):
以下を改良して、任意のWebサーバーの任意のファイルのヘッダ情報を取得するプログラムを作成せよ。
たとえばwww.yahoo.co.jp/news/みたいに指定できるようにする

http://www.uploda.net/cgi/uploader2/index.php?file_id=0000034663.c

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 6/12
[5] その他の制限: 特にないです。

どうかよろしくお願いしますm(__)m
451デフォルトの名無しさん:2007/06/10(日) 18:32:05
>>450
#include <stdio.h>
#include <math.h>
int main()
{
int y,i;
double x=-8.0;
printf(" 1 2 3 4 5 6 7\n");
printf(" 01234567890123456789012345678901234567890123456789012345678901234567890\n");

while(x<=8.0){
y=(int)pow(x,2);
printf("%+.1f",x);
for(i = 0; i <= y; i++)
putchar(' ');
putchar('*');
putchar('\n');
x+=1.0;
};


return 0;
}
452450:2007/06/10(日) 18:38:38
>>451
こんなに早く・・・どうもありがとうございましたm(__)m
助かりました。
453デフォルトの名無しさん:2007/06/10(日) 18:47:39
え?マジ?そうなの?
454デフォルトの名無しさん:2007/06/10(日) 18:48:45
これは間違ってるだろう・・常識的に考えて
↑のほうに全く同じ回答あるし
455デフォルトの名無しさん:2007/06/10(日) 18:50:59
自演失敗
456デフォルトの名無しさん:2007/06/10(日) 18:58:23
>>450
引数にURLで実行。
エラー処理は知らん。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4205.txt
457450 ◆QeWFJGRDFk :2007/06/10(日) 18:58:49
む・・・>>452は自分じゃないです。何となく酉つけました
というか>>451で頂いたのは間違ってるんでしょうか?

うpしたの消しちゃったのでもう一度上なおしました。
よろしくお願いしますm(__)m

http://www.uploda.net/cgi/uploader2/index.php?file_id=0000034665.c
458デフォルトの名無しさん:2007/06/10(日) 18:59:15
ここに技術的ことは全部書いてある。
http://x68000.q-e-d.net/~68user/net/c-http-1.html

だがCだとめんどくさくて、正直やる気になれない。
459450 ◆QeWFJGRDFk :2007/06/10(日) 19:01:19
>>456
ありがとうございました。エラー出たら自分でなんとかします
何度もスレ汚しすいませんでした。
460デフォルトの名無しさん:2007/06/10(日) 19:41:28
[1] 授業単元: プログラミング実習
[2] 問題文(含コード&リンク):
まずmallocを使ってバッファを確保しバッファへのポインタを返し、
またもう読み込むデータがないならNULL(EOFに到達したら)を返すfgetsのための関数を作る。
入力はいつもstdinからで100バイト程度の大きさとする。
main文では100行程度入力し、最後の行から最初の行に向かって出力させる。
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 6/13
[5] その他の制限: 特になし。

よろしくお願いします。
461デフォルトの名無しさん:2007/06/10(日) 19:57:38
>>460 題意が分かりにくいが、こんなもんでいいのかな
#include <stdio.h>
#include <stdlib.h>
void push(char **s, int *nc, int *sz, int c)
{
    if (*nc == *sz) *s = realloc(*s, *sz *= 2);
    (*s)[(*nc)++] = c;
}
char *getline(FILE *fp)
{
    char *s = malloc(1);
    int c, nc = 0, sz = 1;
    while ((c = getc(fp)) != EOF && c != '\n')
        push(&s, &nc, &sz, c);
    if (nc == 0 && c == EOF) return 0;
    if (c == '\n') push(&s, &nc, &sz, '\n');
    push(&s, &nc, &sz, 0);
    return s;
}
int main(void)
{
    char *s, **lines = malloc(sizeof(char*));
    int nc = 0, sz = 1;
    while (s = getline(stdin)) {
        if (nc == sz) lines = realloc(lines, sizeof(char*)*(sz*=2));
        lines[nc++] = s;
    }
    while (nc) fputs(lines[--nc], stdout);
    return 0;
}
462デフォルトの名無しさん:2007/06/10(日) 19:58:18
fgetsのための関数ってどういう意味だ
463デフォルトの名無しさん:2007/06/10(日) 19:58:44
>>460
「fgetsのための関数」は一体何をする関数?

程度っていうのはやっかいな指示だな
100バイト程度とか100行程度
      ~~~~~      ~~~~~

// エスパー回答の一部
char *fgets_no_tame_no_kansuu(void){
char buf[200], *ret=NULL;
int len;
fgets(buf, sizeof(buf), stdin);
len=strlen(buf);
if(len>0){
ret=malloc(strlen(buf)+1);
strcpy(ret, buf);
}
return ret;
}
464デフォルトの名無しさん:2007/06/10(日) 20:02:29
ここで質問された問題を解くのは自分の勉強にもなるな
465デフォルトの名無しさん:2007/06/10(日) 20:10:00
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): 下記値で一次元配列a[]を初期化し、その最大値と最小値を求める。
ただし最後の要素9999はデータの終わりを示す記号であり最大値にも最小値にもならない。

配列の初期化データ-->75,64,12,48,88,26,57,94,37,9999

(実行結果)
最大は94で、配列の8番目の要素である。

最小は12で、はいれつの3番目の要素である。
[3] 環境
 [3.1] OS: xp
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限: 今日まででお願いします。
466デフォルトの名無しさん:2007/06/10(日) 20:16:16
>>465
#include <stdio.h>

int main(void)
{
    int a[] = { 75,64,12,48,88,26,57,94,37,9999 };
    int i, imin = 0, imax = 0, vmin = 75, vmax = 75;
    for (i = 0; a[i] != 9999; i++) {
        if (a[i] < vmin) imin = i, vmin = a[i];
        if (a[i] > vmax) imax = i, vmax = a[i];
    }
    printf("最大は%dで、配列の%d番目の要素である。\n", vmax, imax+1);
    printf("最小は%dで、はいれつの%d番目の要素である。\n", vmin, imin+1);
    return 0;
}
467デフォルトの名無しさん:2007/06/10(日) 20:17:39
#include <stdio.h>

int main(void){
int i;
int a[10] = {75, 64, 12, 48, 88, 26, 57, 94, 37, 9999};
int max = a[0], max_num = 0;
int min = a[0], min_num = 0;

for(i=1; i<10; i++){
if(max < a[i]){
max = a[i];
max_num = i;
}
if(min > a[i]){
min = a[i];
min_num = i;
}
}

printf("最大は%dで、配列の%d番目の要素である。\n", max, max_num);
printf("最小は%dで、はいれつの%d番目の要素である。\n", min, min_num);

return 0;
}
468デフォルトの名無しさん:2007/06/10(日) 20:18:46
>>467
それだと9999が入る
469デフォルトの名無しさん:2007/06/10(日) 20:21:02
ついでに+1しないと順番がおかしい
470デフォルトの名無しさん:2007/06/10(日) 20:21:32
#include<stdio.h>
int main(void)
{
int data[10]={75,64,12,48,88,26,57,94,37,9999};
char i=0,max=0,min=0;
while(data[i] != 9999){
if(data[i]>data[max]) max=i;
if(data[i]<data[min]) min=i;
i++;
}
printf("最大は%dで、配列の%d番目の要素である。\n",data[max],max+1);
printf("最小は%dで、配列の%d番目の要素である。\n",data[min],min+1);
return 0;
}
471デフォルトの名無しさん:2007/06/10(日) 20:24:06
はいれつが平仮名になって無いぞ。
472デフォルトの名無しさん:2007/06/10(日) 20:25:18
はずかしす
473デフォルトの名無しさん:2007/06/10(日) 20:27:04
はいれつのなまえはa[]らしいぞ
474デフォルトの名無しさん:2007/06/10(日) 20:37:36
ええい、課題を出せ、課題を!!
475デフォルトの名無しさん:2007/06/10(日) 20:40:56
>>470,467,466
ありがとうございます。

これから課題立て続けに書きますけどよろしいでしょうか?
さっきみたいな基礎的な課題です。
476359:2007/06/10(日) 20:41:09
暇なら >>331 をやろうぜ
>>359 を超えるんだ
477デフォルトの名無しさん:2007/06/10(日) 20:43:31
どんどん来い

>>476
俺にはレベルたけぇYO!
478デフォルトの名無しさん:2007/06/10(日) 20:49:15
>>476
画像用意するのがマンドクセ
479465:2007/06/10(日) 20:49:20
下記の実行結果になるように。
下記値を配列a[3]、b[3]に代入して、相対する値の積をc[3]に代入して表示する。
a[0] a[1] a[2]
8 3 6

b[0] b[1] b[2]
2 5 7

c[0] c[1] c[2]
8*2 3*5 6*7

<実行結果>
8*2=16
3*5=15
6*7=42
480465:2007/06/10(日) 20:52:18
要素数が4でint型である配列の全要素を逆順に並べ替えるプログラム。
<実行結果>
a[0]=58
a[1]=32
a[2]=17
a[3]=46

a[0]=46
a[1]=17
a[2]=32
a[3]=58
481デフォルトの名無しさん:2007/06/10(日) 20:52:38
>>476もう超えた
482465:2007/06/10(日) 20:55:46
下記値を配列x[5]に代入して、各々の値と合計を表示するプログラム。
x[0] 〜〜〜x[4]
10 15 20 50 55

<実行結果>
x[0]=10 x[1]=15 x[2]=20 x[3]=50 x[4]=55 total=150
483デフォルトの名無しさん:2007/06/10(日) 20:56:02
[1] 授業単元: C++
[2] 問題文:
整列を行う関数テンプレートを作りなさい。整列方法は問わない。引数は、大小比較が出来るデータ型の配列とその要素数を入れるものとする。
データ型の異なる2種類以上の適当な配列に対して、適用せよ。参考として、int 型配列に対する選択法の関数を記載する。
void sentakuhou(int n, int *a)
{
  int w;
  int j,k;
  for(j=0;j<n-1;j++){
    for(k=j+1;k<n;k++){
      if(a[j]>a[k]){
        w=a[k];
        a[k]=a[j];
        a[j]=w;
      }
    }
  }
}
[3] 環境
 [3.1] OS:WindowsXP Pro
 [3.2] コンパイラ名とバージョン: VC++2005
 [3.3] 言語: C++
[4] 期限: 2007年6月13日
[5] その他の制限: C言語はとりあえず終っています、標準ライブラリは習っていません

よろしくお願いします
484465:2007/06/10(日) 21:00:04
月を整数値として読み込み、その季節を表示するプログラム。
※switch文を使用すること。
変数はint mon を使用すること。

<実行結果1>
今、何月ですか?:6
夏だよぉプールいきてぇ。

<実行結果2>
今、何月ですか?:2
冬じゃぼけカイロくれぇ。

<実行結果3>
今、何月ですか?:13
・・・あほ?
485デフォルトの名無しさん:2007/06/10(日) 21:03:24
なめとるな
486デフォルトの名無しさん:2007/06/10(日) 21:07:45
#include <stdio.h>

int main(void){
int a[3] = {8, 3, 6};
int b[3] = {2, 5, 7};
int c[3];
int i;

for(i=0; i<3; i++){
c[i] = a[i] * b[i];
printf("%d*%d=%d\n", a[i], b[i], c[i]);
}

return 0;
}
487デフォルトの名無しさん:2007/06/10(日) 21:10:03
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
長さ256以下の英数字,空白の並びからなる文字列を二つ入力し,それぞれをT1, T2とする.
T1が"ABC",T2が"AB"の場合のように,T2の先頭部分がT1の先頭部分に含まれるときは1を,
そうでないときは0を値として返す関数 int chkmatch(char *t1, char *t2);を作成しなさい.
プログラミングにあたっては,配列宣言を除き,すべてポインタを用いて処理すること.
文字列は256文字以下が入力されるものとし,文字列の長さに関するエラー処理をする必要はない.
計算の手順としては,文字列の先頭から一文字ずつ一致するかどうかを比較する.
T2にあたる文字列中の比較対象となった文字が'\0'であれば,T2はT1に包含されたものとして扱う.
これ以外で比較時に,一文字でも一致しない場合があれば包含されていないとして扱う.
この関数をもちいて,
2つの文字列を与えたとき,一つ目の文字列の中に二つ目の文字列が含まれている場合(この場合先頭が必ずしも一致していなくてもよいものとする)には "yes"を
さもなければ"no"を出力するプログラムを作成しなさい.
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年6月15日
[5] その他の制限: #include "stdio.h"のみで、他の標準ライブラリの関数を使う場合は自作すること。
488デフォルトの名無しさん:2007/06/10(日) 21:10:26
季節の定義は
春:3〜5月
夏:6〜8月
秋:9〜11月
冬:12〜2月
と仮定
switch(mon){
case 3: case 4: case 5: puts("春"); break;
case 6: case 7: case 8: puts("夏だよぉプールいきてぇ。"); break;
case 9: case 10: case 11: puts("秋"); break;
case 12: case 1: case 2: puts("冬じゃぼけカイロくれぇ。"); break;
default: puts("・・・あほ? ");
}



489デフォルトの名無しさん:2007/06/10(日) 21:12:07
今後の気候変動を考慮すべきだ
490デフォルトの名無しさん:2007/06/10(日) 21:12:09
[1] 授業単元:
[2] 問題文(含コード&リンク):
長さ256文字以下の英数字,空白の並びからなる文字列を二つ入力し,それぞれをT1, T2とする.
T1の中にT2が出現する場合に,その一番左に現れる文字列の先頭アドレスを値として返す関数 char *findstr(char *t1, char *t2);を作成しなさい.
ただし,T1の中にT2が出現しないときはNULLを値として返すものとする.
findstr()の中で,比較対象となるT1のなかの先頭文字を先頭から一文字ずつずらして
chkmatch()を呼び出すことにより要求を満たす関数を作成することができる.
この関数を用いて, 1)最初にT1を表示し,2)その次にT1の中でT2の文字列が出現するまでの文字をスペース(' ')として端末に出力し,
そのあとT2の文字列文だけ(’^’)を出力し、再度T2の文字列が出現するまでスペース(’ ’)を出力し..というプロセスを文末まで続けるプログラムを作成しなさい。
3a)このプロセスは、findstrを実行して文字列の先頭を検索し、そこまでスペースを出力する。3b)文字列の先頭が検出されたら、T2の文字列分だけ(’^’)を出力する。
3c)T2の文字列分だけポインタを進め、そこからfindstrを再実行する(3aにもどる)というプロセスを繰り返すことで完成する。4)T2がT1に出現しない場合はT1の文字数だけのスペースが表示されるようにすること.
プログラミングにあたっては,配列宣言を除き,すべてポインタを用いて処理すること.
文字列は60文字以下が入力されるものとし,文字列の長さに関するエラー処理をする必要はない.
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年06月13日まで)
[5] その他の制限: #include "stdio.h"のみで、他の標準ライブラリの関数を使う場合は自作すること。

この二つをお願いします。
491460:2007/06/10(日) 21:13:00
すいません、課題文が英語のため自分でもわかりにくいのですがweb翻訳に突っ込んだのを書きます。
fgetsを使うとき、クライアントプログラムは入力のためにバッファを準備しなければなりません。
mallocを使ってバッファを割り当てて、バッファにポインターを戻すfgetsのための関数を作成してください。読み込むデータがないとき(EOFになったら)、NULLを返してください。
行の長さは多くても100バイトであると仮定してください。また、入力が常にstdinからあると仮定してください。
最高100本の行を読み込むmain文を作成してください。逆順で行を出力してください。各々の行へのポインタを格納するために、多数のポインタ(array of pointers)を使用してください。
あなたはメモリをfreeする必要はありません。
バッファの長さとstdinが一定であるので、あなたは関数へバッファを渡す必要はないので、あなたの関数の型はchar *getline(void)でなければなりません。
あとコンパイラとは別にputtyというのを使っていて、それで入力ファイルをパイプし出力ファイルと比較するみたいです。

入力ファイルhttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4206.txt
出力ファイルhttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4207.txt
492デフォルトの名無しさん:2007/06/10(日) 21:13:10
#include <stdio.h>

int main(void){
int a[4] = {58, 32, 17, 46};
int i, temp;

for(i=0; i<2; i++){
temp = a[i];
a[i] = a[3-i];
a[3-i] = temp;
}

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

return 0;
}
493デフォルトの名無しさん:2007/06/10(日) 21:17:30
#include <stdio.h>

int main(void){
int sum=0, i, x[5] = {10, 15, 20, 50, 55};

for(i=0; i<5; i++){
printf("a[%d]=%d ", i, a[i]);
sum += a[i];
}
printf("total=%d", sum);

return 0;
}
494デフォルトの名無しさん:2007/06/10(日) 21:18:47
あまりにもつまらんからやめた
495デフォルトの名無しさん:2007/06/10(日) 21:22:19
あまりにもつまらんからはじめた
496デフォルトの名無しさん:2007/06/10(日) 21:23:29
>>490
とりあえずもう少し他人が読みやすい文章
ということについて考えたほうがいい
497デフォルトの名無しさん:2007/06/10(日) 21:24:56
志村ー縦々ー!!
498デフォルトの名無しさん:2007/06/10(日) 21:25:31
>487
#include <stdio.h>
int chkmatch(char *t1, char *t2)
{
    if(*t2==0) return 1;
    while(*t1 && *t2) if(*(t1++)!=*(t2++)) return 0;
    return 1;
}

int main(void)
{
    char t1[]="aaaaaaaabbbbbbbbccccccccd";
    char t2[]="bc";
    char *p;
    int f=0;
    for(p=t1; *p; ++p) if(chkmatch(p, t2)){ f=1; break; }
    printf("%s\n", (f)?"yes":"no");
    return 0;
}
499デフォルトの名無しさん:2007/06/10(日) 21:27:40
>>490 それ前スレから数えて3度目
#include <stdio.h>
#include <string.h>
int chkmatch(char *t1, char *t2) {
    while (*t1 && *t2 && *t1++ == *t2++) {}
    return !*t2;
}
char *findstr(char *t1, char *t2) {
    for (;*t1 && !chkmatch(t1, t2); ++t1) {}
    return *t1 ? t1 : 0;
}
#define NPUT(s,c,n) do { memset(s, c, n); fwrite(s, 1, n, stdout); } while (0)
int main(void)
{
    char T1[0x100], T2[0x100], tmp[0x100], *p, *q;
    int n;
    while (fgets(T1, sizeof T1, stdin) && fgets(T2, sizeof T2, stdin)) {
        if (p = strchr(T1, '\n')) *p = 0;
        if (p = strchr(T2, '\n')) *p = 0;
        puts(T1);
        for (p = T1, n = strlen(T2); q = findstr(p, T2); p = q + n) {
            NPUT(tmp, ' ', q - p);
            NPUT(tmp, '^', n);
        }
        n = T1 + strlen(T1) - p;
        NPUT(tmp, ' ', n);
        putchar('\n');
    }
    return 0;
}
500デフォルトの名無しさん:2007/06/10(日) 21:29:42
>490 は >487 の続きなんだな
501デフォルトの名無しさん:2007/06/10(日) 21:30:11
すみません、389をお願いします
502デフォルトの名無しさん:2007/06/10(日) 21:31:50
>>491
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *fgets_no_tame_no_kansuu(void){
    char buf[200]="", *ret=NULL;
    int len;
    fgets(buf, sizeof(buf), stdin);
    len=strlen(buf);
    if(len>0){
        ret=malloc(strlen(buf)+1);
        strcpy(ret, buf);
    }
    return ret;
}
int main(void){
    char *line_top[100], *ret;
    int i, line_num;
    for(line_num=0;line_num<100;line_num++){
        ret=fgets_no_tame_no_kansuu();
        if(ret==NULL) break;
        line_top[line_num]=ret;
    }
    for(i=line_num-1;i>=0;i--)
        printf("%s", line_top[i]);
    return 0;
}
503デフォルトの名無しさん:2007/06/10(日) 21:33:04
>>496
すみませんでした・・。問題そのままコピペしたもので・・。
このような表示のものを出したいのです

[b1007xxx@C*LPC* ~/pp7]% ./fstr
pen and pencils
pen
pen and pencils
^^^   ^^^
[b1007xxx@C*LPC* ~/pp7]% ./fstr
Government of the people by the people for the people
people
Government of the people by the people for the people
            ^^^^^^     ^^^^^^     ^^^^^^
最初に文を入力して、次にチェックする文を入れ、
結果では最初に入力した文を表示し、その下にチェックする文と
同じものに'^'を表示せよ、というものです。わかりずらくてすみませんでしたorz

504デフォルトの名無しさん:2007/06/10(日) 21:34:32
>>503
で、>>499で何か問題があるのか?
505デフォルトの名無しさん:2007/06/10(日) 21:35:24
>>504
更新してませんでしたーorz
>>499さんので問題なさそうです
506デフォルトの名無しさん:2007/06/10(日) 21:35:40
>>491
>>461でよかったと思うぞ
動かしてみたか?
507デフォルトの名無しさん:2007/06/10(日) 21:41:04
>>461はダメです。
508499:2007/06/10(日) 21:46:45
>>490 ちと修正
#include <stdio.h>
#include <string.h>
int chkmatch(char *t1, char *t2) {
    while (*t1 && *t2 && *t1++ == *t2++) {}
    return !*t2;
}
char *findstr(char *t1, char *t2) {
    for (;*t1 && !chkmatch(t1, t2); ++t1) {}
    return *t1 ? t1 : 0;
}
#define NPUT(s,c,n) do { memset(s, c, n); fwrite(s, 1, n, stdout); } while (0)
int main(void)
{
    char T1[0x100], T2[0x100], tmp[0x100], *p, *q;
    int n;
    while (fgets(T1, sizeof T1, stdin) && fgets(T2, sizeof T2, stdin)) {
        if (p = strchr(T1, '\n')) *p = 0;
        if (p = strchr(T2, '\n')) *p = 0;
        puts(T1);
        if ((n = strlen(T2)) > 0) {
            for (p = T1; q = strstr(p, T2); p = q + n) {
                NPUT(tmp, ' ', q - p);
                NPUT(tmp, '^', n);
            }
            n = T1 + strlen(T1) - p;
            NPUT(tmp, ' ', n);
        }
        putchar('\n');
    }
    return 0;
}
509デフォルトの名無しさん:2007/06/10(日) 21:48:10
>>507
ああ、getlineの引数がvoidじゃないんだな。
510デフォルトの名無しさん:2007/06/10(日) 22:05:36
なげーやつ、インデントも気にしているならうpロダ使えよ
511デフォルトの名無しさん:2007/06/10(日) 22:08:18
結構参考になるコードが載ってることがあるので
1レスに収まるのならオレは jane の過去ログに残っているほうがありがたい
512デフォルトの名無しさん:2007/06/10(日) 22:09:21
どっちみちそんなに長いのここに貼れないしな
513デフォルトの名無しさん:2007/06/10(日) 22:47:58
短くてもインデントは気にして
514デフォルトの名無しさん:2007/06/10(日) 22:56:27
問題に応じてついたレスをまとめたら?
515デフォルトの名無しさん:2007/06/10(日) 23:08:23
宿題ではないのですが、

ttp://www.cs.bme.hu/~bodon/en/apriori/
のプログラムを変えて、
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4208.txt
↑のようなもっと長いデータ読み込ませたいのですが、
どうすればいいでしょうか?

実行は
WinXP上でCygwin動かしてやってます
516デフォルトの名無しさん:2007/06/10(日) 23:09:34
>>389
#include <atlstr.h>
#include <iostream>

struct AAA {
    static const CString s;
    static const CString s1;
};
const CString AAA::s = "abc";
const CString AAA::s1 = "ABC";
int main()
{
    std::cout << AAA::s << std::endl;
    std::cout << AAA::s1 << std::endl;
}
517デフォルトの名無しさん:2007/06/10(日) 23:14:40
>>515
マルチ乙
518デフォルトの名無しさん:2007/06/10(日) 23:23:15
AA略
519デフォルトの名無しさん:2007/06/10(日) 23:42:13
キーボードから10進数を入力し、その数値の16進数と8進数を表示しー900を入力すると処理を終了する
プログラムはどのようなプログラムを組めばよろしいのでしょうか
520デフォルトの名無しさん:2007/06/10(日) 23:46:52
またお前か
521デフォルトの名無しさん:2007/06/10(日) 23:46:57
>>519
キーボードから10進数を入力し、その数値の16進数と8進数を表示しー900を入力すると処理を終了するプログラムを組めばいいと思います。
テンプレ読んでくださいね。
言語と環境くらいは書いてほしいです。
−900で終了って変わってますな。
522デフォルトの名無しさん:2007/06/10(日) 23:47:05
まずscanfを使って10進数を受け取り、それを適当な変数に格納する。
そのとき、ifを用いて-900なら終了、そうでないならプログラムを継続するようにし、
継続している場合は16進数と8進数を、printfを用いて表示してやればいい。
523デフォルトの名無しさん:2007/06/10(日) 23:54:09
[1] 授業単元: プログラミング実習
[2] 問題文(含コード&リンク):

main文は変えずにgetline関数内のfgetsで入力を得るのではなくをgetcharで入力を得るようにする。またmallocを使い最初、大きさを100とする。
読み込む行がバッファより大きくなったらreallocを使ってバッファを大きくする、またreallocする際大きさは倍にする(100で足りなければ200にする)。行が終わったら'\n'と'\0'という文字を加える。その後またreallocを使い読み込んだ行と同じ大きさに短くする
またgetlineより受け取ったバッファをfreeすること。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4210.txt

[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 6/13
[5] その他の制限: 特になし。

よろしくおねがいします。
524デフォルトの名無しさん:2007/06/10(日) 23:55:07
>>522
言語はCでOSはXPです
525デフォルトの名無しさん:2007/06/10(日) 23:57:33
>>524
テンプレ通りに書けっつう話だよ。
526デフォルトの名無しさん:2007/06/10(日) 23:57:49
お助けください。
プログラミング始めたばかりでよくわからないんです・・・。
どうかお願いします。
最大値を最小値を求める関数を作る問題なのですが、

#include <stdio.h>

// iとjのうち,大きいほうの数字を返す
double myMax(double i, double j){
// ここを作成する
}

// iとjのうち,小さいほうの数字を返す
double myMin(double i, double j){
// ここを作成する
}

void main(){
// myMax(), myMin()が正しく動くか調べる処理を書く
}
の形で作ってもらえませんか。出来れば理解したいので簡単なものにしてほしいです。
いきなり、ずうずうしいと思いますがどうかお願いします。

527デフォルトの名無しさん:2007/06/11(月) 00:00:55
でもテンプレは読めよ
528デフォルトの名無しさん:2007/06/11(月) 00:02:36
乞食なんだから、教えてくれてもええのに^ー^b
529526:2007/06/11(月) 00:04:43
>>526です。すみませんでした。
[1] 授業単元:授業演習
[2] 問題文(含コード&リンク):最大値,最小値を求める関数を作れ
#include <stdio.h>

// iとjのうち,大きいほうの数字を返す
double myMax(double i, double j){
// ここを作成する
}

// iとjのうち,小さいほうの数字を返す
double myMin(double i, double j){
// ここを作成する
}

void main(){
// myMax(), myMin()が正しく動くか調べる処理を書く
}
の形で
[3] 環境
 [3.1] OS: Windows XP
 [3.2] Microsoft Visual Studio .NET 2003
 [3.3] 言語:C++
[4] 期限:明日16時
[5] その他の制限:とくになし


530デフォルトの名無しさん:2007/06/11(月) 00:10:38
#include <stdio.h>

double myMax(double i, double j){
if(i-j>0) return i;
return j;
}

double myMin(double i, double j){
if(i-j>0) return j;
return i;
}

void main(){
double x, y;
double max, min;

printf("値を二つ入力してください。\n");
printf("x = ");
scanf("%lf", &x);
printf("y = ");
scanf("%lf", &y);

max = myMax(x, y);
min = myMin(x, y);

printf("max = %lf, min = %lf である。\n", max, min);

}
531デフォルトの名無しさん:2007/06/11(月) 00:14:35
>>522
誰かおねがいー
532526:2007/06/11(月) 00:16:05
>>530
ありがとうございます。これから理解できるよう勉強します。
ありがとうございました。失礼します。
533デフォルトの名無しさん:2007/06/11(月) 00:16:27
>>531
テンプレ読んで来いって言われたのがわかんないのか?
534デフォルトの名無しさん:2007/06/11(月) 00:17:07
>>522
#include <stdio.h>
int main(void)
{
    int n;
    while (scanf("%d", &n) == 1 && n != -900)
        printf("oct:%o hex:%x\n", n, n);
    return 0;
}
535デフォルトの名無しさん:2007/06/11(月) 00:18:13
>>532
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4211.txt
猿でもわかりそうな風に解説しといた
536デフォルトの名無しさん:2007/06/11(月) 00:22:44
>>534
死ね
537デフォルトの名無しさん:2007/06/11(月) 00:24:40
>>523
お前さん>>460か。条件を小出しにするのは感心せんな。
で、>>502のコードをほんの少し変えたんだな。
getline()は>>461を少しいじくるだけでいいだろ。
538デフォルトの名無しさん:2007/06/11(月) 00:34:29
テンプレ守れない奴に回答してる馬鹿は何なの
539デフォルトの名無しさん:2007/06/11(月) 00:38:26
回答したいヤツが回答して何が悪いのかわからん。
540デフォルトの名無しさん:2007/06/11(月) 00:39:47
> 気に入らない質問やその他や発言はスルーの方向で。
> 回答者の便宜のため、質問の際は以下を行うことを推奨します。
「推奨」だあくまで。
あとは勝手にやれ。
541デフォルトの名無しさん:2007/06/11(月) 00:56:01
>>538
>>536
>>533
>>527
>>525
↑こいつらうっとうしい、嫌ならこんなスレにこなきゃ良いだろ。馬鹿じゃね?こういうのって
引きこもりの基地外なんだろうね
542デフォルトの名無しさん:2007/06/11(月) 00:57:18
>>541
そんなあなたも仲間入り♪
543デフォルトの名無しさん:2007/06/11(月) 00:59:05
>>542
はぁ?テンプレ無視した課題でも俺はいちいちガミガミ文句言わずにレスするけど?w
なんかさぁ、世の中を勘違いしている基地外っているよな。ルール違反しているやつを
見つけて、気持ち悪くネチネチおめー悪いんだよ!みたいな司法の番人ぶっているやつ。
終いには、裁く権利もないのに、自分勝手なルールで裁きを始める奴w
そいつ、完全に周りから干されているよな・・・勘違い野郎だってw
544デフォルトの名無しさん:2007/06/11(月) 01:00:03
538 名前:デフォルトの名無しさん 投稿日:2007/06/11(月) 00:34:29
テンプレ守れない奴に回答してる馬鹿は何なの
↑さらにこれだろ、レスした奴を馬鹿にする奴。いちいちうぜーって。お前がレスすんなやw
545デフォルトの名無しさん:2007/06/11(月) 01:01:33
546デフォルトの名無しさん:2007/06/11(月) 01:07:12
>>545
乞食乙
547デフォルトの名無しさん:2007/06/11(月) 01:11:30
>>546
たぶん君、このスレ向いてないと思うよ。
質問者は丸投げするだけ
答えたい奴は勝手に答えるだけ
そういうスレだから。
548デフォルトの名無しさん:2007/06/11(月) 01:13:00
>>543-544
裁く権利もないのに、自分勝手なルールで裁きを始める奴乙
549デフォルトの名無しさん:2007/06/11(月) 01:13:06
>>547
(笑)
550デフォルトの名無しさん:2007/06/11(月) 01:14:21
> 気に入らない質問やその他や発言はスルーの方向で。
551デフォルトの名無しさん:2007/06/11(月) 01:14:49
>>547
たぶん君、このスレ向いてないと思うよ。
質問者は丸投げするだけ
答えたい奴は勝手に答えるだけ
そういうスレだから。
552デフォルトの名無しさん:2007/06/11(月) 01:19:21
>>551

質問者は自助努力をせずに丸投げがデフォのスレなんだから、
それを乞食と呼び不快に感じるような精神性の持ち主には向いてないよ、と
言ったのだが、分からなかったのかい?
質問者は丸投げとは言えテンプレを守ることが「推奨」されているが、
あくまで推奨だ。
テンプレを守らない質問者の態度が気に食わないのなら、えんえん粘着して
駄レスを積み重ねるような真似をせずに、スルーしたらどうかね。
答えたい奴が答えるかもしれないし、答えないかもしれない。
それは答えるやつの勝手だな。
553デフォルトの名無しさん:2007/06/11(月) 01:26:04
>>552
答える答えないは回答者の勝手なんだよな?
で、テンプレを使わなかった人が回答が突かずオロオロしてるところに
「テンプレ使え」とアドバイスすることがそこまでキレる理由なのか?
回答するしないも、テンプレ使う使わないも勝手だろ?
アドバイスするしないも勝手じゃね?ってかもうスルーしようよ。
554デフォルトの名無しさん:2007/06/11(月) 01:27:52
>>552
> そこまでキレる理由なのか?
俺は別にキレてないよ。>>541あたりのレスは俺じゃないし。

> 「テンプレ使え」とアドバイス
いや、それは構わんと思うよ。
>>536, 538は「アドバイス」なんてもんじゃないけどな。
555デフォルトの名無しさん:2007/06/11(月) 01:28:39
>>553
アドバイス?レスした他の人も含めてお前は 馬鹿 にしてんじゃんw
自分の発言や行動に責任を持てや、ガキw
なにこれ?

538 名前:デフォルトの名無しさん 投稿日:2007/06/11(月) 00:34:29
テンプレ守れない奴に回答してる馬鹿は何なの

536 名前:デフォルトの名無しさん 投稿日:2007/06/11(月) 00:22:44
>>534
死ね

556デフォルトの名無しさん:2007/06/11(月) 01:30:52
自分が気に食わないものを見ては、怒り狂って自分勝手な都合で他者を攻撃してくる奴っているよなw
良い解決策を教えてやるよ。嫌ならこんなスレに来るな、分かりやすいだろ?
別にお前みたいなクズをこのスレが雇っているわけでもないんだから、嫌ならいつでも辞めて良いよ?
どうせお前みたいな奴は、現実社会でも自分が気に入らないことを理由に会社に不満を言って
お前辞めろ?って解雇されてんだろw
557デフォルトの名無しさん:2007/06/11(月) 01:31:41
やべぇテンプレ守らん質問に自演レスすると釣れそう
558デフォルトの名無しさん:2007/06/11(月) 01:33:23
ま た 自 演 か
559自分で言ってて恥ずかしい奴w:2007/06/11(月) 01:34:29
553 名前:デフォルトの名無しさん 投稿日:2007/06/11(月) 01:26:04
>>552
答える答えないは回答者の勝手なんだよな?
で、テンプレを使わなかった人が回答が突かずオロオロしてるところに
「テンプレ使え」とアドバイスすることがそこまでキレる理由なのか?
回答するしないも、テンプレ使う使わないも勝手だろ?
アドバイスするしないも勝手じゃね?ってかもうスルーしようよ。

> 答える答えないは回答者の勝手なんだよな?
そうですが何か?w

> 回答するしないも、テンプレ使う使わないも勝手だろ?
勝手って何だよ、勝手ってw いかに自分勝手な奴か分かりやすい奴だなぁw
他人がレスするのも勝手だがお前に馬鹿にされる筋合いはねーよ
嫌ならお前が回答しなきゃ良いだけ、分かったか?

> アドバイスするしないも勝手じゃね?
他者を馬鹿にするのはアドバイスでもなんでもねーよw
560デフォルトの名無しさん:2007/06/11(月) 01:34:55
一万と二千年前から繰り返されてきたこと。
561デフォルトの名無しさん:2007/06/11(月) 01:37:56
[1] 授業単元:プログラミング2
[2] 問題文(含コード&リンク):2つの復素数を入力し、それらの積を表示するプログラムを作成せよ。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年6月11日23:00mmまで
[5] その他の制限:復素数は構造体により実現すること

どうか宜しくお願いいたします。
562デフォルトの名無しさん:2007/06/11(月) 01:44:47
ごちゃごちゃうるせーよ、テンプレ通りに書いてない奴が気に入らないならスルーすりゃ良いだろ
563デフォルトの名無しさん:2007/06/11(月) 01:53:27
携帯からも宿題依頼する人いたんだ
564デフォルトの名無しさん:2007/06/11(月) 01:57:47
質問する場所を探したのですが、どうもここ以外ないと思いまして、質問させてください


10進数を2進数に変換する問題なのですが、

S(符号)は1ビットで仮数の符号を表す
E(指数部)は4ビットで指数を表し負数は2の補数で表現
M(仮数部)は11ビットで仮数の絶対値を表す

基数は2とする
仮数の0,2進数の少数以下第一位が1になるように、正規化された形で表す
小数点はEとMの位置にする
0の表現はー0と+0の二通りがあり特別に指数部と仮数部をすべて0にする

問1.10進数の5.25を2進数で表現しなさい

という問題なのですが、答えは0001110101000000であっているのでしょうか
565デフォルトの名無しさん:2007/06/11(月) 02:14:52
この流れでテンプレ読まずに書き込むってのは狙っているとしか思えん
566デフォルトの名無しさん:2007/06/11(月) 02:29:09
567389:2007/06/11(月) 03:15:38
>>516
ありがとうございます!!
568デフォルトの名無しさん:2007/06/11(月) 03:28:27
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#define CX COMPLEX_T//#define Cx Complex//#define Ml Multiple//#define pt print//#define it input//#define sh show//#define rl real//#define im im//#define de dest
#define pf printf
#define rn return
#define NL NULL
#define EF EOF
typedef struct{double rl,im;}CX;
int mulCx(CX*de,CX*a,CX*b){if(de==NL||a==NL||b==NL)rn-1;de->rl=a->rl*b->rl-a->im*b->im;de->im=a->rl*b->im+a->im*b->rl;rn 0;}
int itCx(CX*de){char buf[255],*p;if(de==NL||pf("input complex ( format : [real](+|-)[imaginary]i ) : ")==EF||fgets(buf,sizeof(buf),stdin)==NL)rn-1;de->rl=atof(buf);
if((p=strchr(buf,'+'))==NL)if((p=strchr(buf,'-'))==NL)rn-1;de->im=atof(p);rn 0;}
int ptCx(CX*src){if(src==NL||pf("%g",src->rl)==EF||(src->im!=0&&pf("%s%gi",src->im>0?"+":"",src->im)==EF))rn-1;rn 0;}
int itMlCx(CX*a,CX*b){if(pf("a = ")==EF||itCx(a)!=0||pf("b = ")==EF||itCx(b)!=0)rn-1;rn 0;}
int shMlCx(CX*c,CX*a,CX*b){if(pf(" ( ")==EF||ptCx(a)!=0||pf(" ) * ( ")==EF||ptCx(b)!=0||pf(" ) = ")==EF||ptCx(c)!=0||pf("\n")==EF)rn-1;rn 0;}
int main(int argc,char*argv[]){CX a,b,c;if(itMlCx(&a,&b)!=0||mulCx(&c,&a,&b)!=0||shMlCx(&c,&a,&b)!=0){pf("error.\n");rn 1;}rn 0;}

今日が月曜だという理由だけで気が滅入る。
569デフォルトの名無しさん:2007/06/11(月) 06:13:47
おのれ……ゆるさん!
570デフォルトの名無しさん:2007/06/11(月) 06:50:16
571デフォルトの名無しさん:2007/06/11(月) 07:11:19
>>564
どなたか教えてください
572デフォルトの名無しさん:2007/06/11(月) 09:28:02
[1] 授業単元:C言語
[2] 問題文(含コード&リンク): 何か面白いプログラムを作成せよ(笑いを誘うものは評価が高い!)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: C
[4] 期限: 今日中(明日提出なので)
[5] その他の制限: ifとPADの授業後の課題。しかし制限は特に指定されていません


僕には面白いものを作成する自信がありません。どうか力を貸して下さい。
573デフォルトの名無しさん:2007/06/11(月) 09:33:43
574デフォルトの名無しさん:2007/06/11(月) 10:23:53
575572:2007/06/11(月) 10:35:26
>>574 
面白い占いありがとうございます^^
助かりました。
576デフォルトの名無しさん:2007/06/11(月) 10:59:51
[1] 授業単元:数値計算
[2] 問題文(含コード&リンク):
次の式をx=1.0として前進、中央、後退 の値をn=2,6,10の場合で出し、精度を比較せよ
(式)3(xのn乗)+4x+5
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:今週の火曜日まで
[5] その他の制限:
数値微分を使うらしいのですが、それ以外は分からない状況です。

これだけのヒントで分かる方いましたらよろしくお願いします。
577デフォルトの名無しさん:2007/06/11(月) 11:29:00
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
キーボードから入力された1行(空白で区切られた正整数並びの文字列)を項に分解して,i番目の項の整数値を配列要素d[i-1]に累算しながら格納するプログラムをつくりなさい。
ただし,配列dの要素数は10として宣言し,10項目より多い入力の場合は11項目以降を棄却しなさい。1行の入力には関数fgetsを用いなさい。
fgetsは改行文字も取り込む点に注意して,入力の終了は「改行のみの入力」で判定しなさい。
<入力例> 
空白文字で区切って正整数の並びを入力してください!
入力終了は何も入力せずに改行です
59 37 88 32 19 44 98 78 ↵ ……8項目の入力
21 35 57 ↵  ……3項目の入力
↵ ……入力終了
<出力例>
d[0] = 80
d[1] = 72
d[2] = 145
d[3] = 32
d[4] = 19
d[5] = 44
d[6] = 98
d[7] = 78
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:borland
 [3.3] 言語: C
[4] 期限:6月14日まで
よろしくお願いします。

578574:2007/06/11(月) 11:34:12
>>575
講義の内容から察すると、574は不適切な気がする。
出題者はこんなのを期待してるんじゃないかな?
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void)
{
int a;
srand(time(NULL));
printf("あなたの前世を占います。\nあなたの前世は・・・ ");
a=rand()%4;
if(a==0) printf("お笑い芸人です。");
else if(a==1) printf("名も無き風来坊です。");
else if(a==2) printf("サラリーマンです。");
else printf("平凡な主婦です");
return 0;
}
579デフォルトの名無しさん:2007/06/11(月) 11:47:49
[1] 授業単元:C++研究
[2] 問題文:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4218.txt
上記のプログラムと、その上記のプログラムを修正した、↓(修正プログラムの問題文)
値の決定を自分だけランダム値からキーボードからの入力値になるようプログラムを修正して、
ある値が出た場合のみポイントが復活する機能を追加しなさい
(ある値は,初期段階で設定できるものとする)。なお復活するポイント値はランダムとする。

2つのプログラムの作成をお願いします。

[3] 環境
 [3.1] OS:Windows xp
 [3.2] コンパイラ名とバージョン:Visual studio.2005
 [3.3] 言語: C++
[4] 期限: ([2007年6月20日11:00まで]
[5] その他の制限:特になし
よろしくお願いします
580デフォルトの名無しさん:2007/06/11(月) 11:50:14
[1] 授業単元:C++研究
[2] 問題文:
新しい型(設計図)として,下記の要素を含む「電車」型を設計しなさい(新しい型(設計図)は,main関数の外で記述すること)。
–次に,main関数で上記の型(設計図)の変数を1つ宣言(生成)し,その変数の要素に適当な初期値を格納しなさい。ただし,関数を用いること。
–最後に,main関数で上記で生成した変数の要素をすべてコマンドプロンプトに出力しなさい。ただし,関数を用いること。
•新しい型名:TRAIN
–要素1:車輪数・・・型,型名は考えること
–要素2:窓数・・・型,型名は考えること
–要素3:座席数・・・型,型名は考えること
–要素4:車内温度・・・型,型名は考えること

[3] 環境
 [3.1] OS:Windows xp
 [3.2] コンパイラ名とバージョン:Visual studio.2005
 [3.3] 言語: C++
[4] 期限: ([2007年6月17日11:00まで]
[5] その他の制限:特になし
よろしくお願いします
581デフォルトの名無しさん:2007/06/11(月) 12:00:15
[1] 授業単元:C++研究
[2] 問題文:

ボーリングのスコア計算をするプログラムを作成しなさい
(入力:スコア, 配列データ:スコア表, 出力:入力毎にスコア表を表示させる)

ttp://hmets.hp.infoseek.co.jp/boul.html
↑のように表を作成して表示するみたいです。10回戦目は3投、投げます
氏名の部分はいりません。

[3] 環境
 [3.1] OS:Windows xp
 [3.2] コンパイラ名とバージョン:Visual studio.2005
 [3.3] 言語: C++
[4] 期限: ([2007年6月20日11:00まで]
[5] その他の制限:特になし
よろしくお願いします
582デフォルトの名無しさん:2007/06/11(月) 13:42:04
[2] 問題文:入力した文字列をaから順に並べるプログラム
[3] 環境 [3.1] OS:WinXP [3.2] BorlandC++ [3.3] 言語:C++
[5] その他の制限:ヘッダファイルは<stdio.h>のみです。while、do、switchも使えないです。
例 acbd →abcdとなる

#include <stdio.h>
#define STR_MAX 256
#define EOS '\0'
int main(void)
{
char buf,str[STR_MAX];
int i,a;
printf("a〜zのアルファベットを入力して下さい\n");
for( i = 0 ; i < STR_MAX ; i++ ){ /* 配列に文字列を入力&ENDの判定 */
str[i] = getchar();
if( str[i] == EOF || str[i] == '\n' ){
str[i] = EOS;
break;
}
}
for( i-=1 ; 0 <= i ; i--){ /* アルファベットをソート */
for( a = i -1 ; 0 <= a ; a-- ){
if( str[i] < str[a]){
buf = str[i];
str[i] = str[a];
str[a] = buf;
}
}
}
printf("%s\n",str);
return 0;
}
583デフォルトの名無しさん:2007/06/11(月) 13:55:02
a=1e-10;

これってどういう意味ですか?
実行結果はどうなるの?
584デフォルトの名無しさん:2007/06/11(月) 14:20:39
>>564
> 仮数の0,2進数の少数以下第一位が1になるように
ってことは、0.1…… × 2^e
の形に正規化するってことかな。
だとすれば、5.25は0.10101(2進) × 2^4だから、
0010010101000000
になると思うよ。
585デフォルトの名無しさん:2007/06/11(月) 14:20:45
>>583
aに1×10^(-10)が代入される。
586デフォルトの名無しさん:2007/06/11(月) 14:37:27
>だとすれば、5.25は0.10101(2進) × 2^4だから、
>0010010101000000
何このバカ。
587デフォルトの名無しさん:2007/06/11(月) 15:22:36
>>584
きみやばいべ
588デフォルトの名無しさん:2007/06/11(月) 15:24:45
>>584
10.5乙
589584:2007/06/11(月) 15:28:27
テラハズカシス
590デフォルトの名無しさん:2007/06/11(月) 17:51:44
[1] 授業単元:プログラミング言語
[2] 問題文(含コード&リンク):
問題文と、指示が入ったテキストファイルです。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4219.txt

こちらが読み込みに再利用するファイルです。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4220.txt
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VisualStudio2005
 [3.3] 言語: C++
[4] 期限: 2007/6/16まで
[5] その他の制限:基本的に指定はありません。

よろしくお願いします。
591デフォルトの名無しさん:2007/06/11(月) 19:45:03
【質問テンプレ】
[1] 授業単元:Cプログラミング実習
[2] 問題文(含コード&リンク):
オリジナルプログラムの作成
下記要綱を満たしていればどんなプログラムでも問題ありません
@文は最低50以上(;で終わる文のみカウント)
A2次元配列、マクロを使用
Bif,while,for文の使用
C自作関数又は引数を使用。戻り値は問いません
Dヘッダファイルを使用
E誰が見ても分かりやすいプログラムにすること(/*説明*/)


[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:VB.NET2003
 [3.3] 言語: C
[4] 期限: 2007年6月15日
[5] その他の制限:ポインタ、リスト使用不可

初心者問題で気分悪くされたらもうしわけありません。宜しくお願いします。
592デフォルトの名無しさん:2007/06/11(月) 19:47:59
>>591
マルチ乙
593デフォルトの名無しさん:2007/06/11(月) 20:58:52
[1] 授業単元:情報実験第一
[2] 問題文(含コード&リンク):

オオカミとヤギを連れキャベツを持った農夫が川岸にいる。
川にはボートがあるが農夫の他には
動物一頭かキャベツ一個しか乗せられない。
農夫がいなければオオカミはヤギを襲うし、
ヤギはキャベツを食べてしまう。
すべてを無事に対岸に渡すにはどうしたらよいか?
(出展:wikipedia)

この問題を解くプログラムを作れ。
出力の形式は問わないが、他人が見て分かるような形にすること。
[3] 環境
 [3.1] OS: Unix
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007/6/13まで
[5] その他の制限:なし。

ぜひよろしければ、アルゴリズムを教えていただきたく思います。
コーディングなしでも、むしろそちらの方がありがたいです。
594デフォルトの名無しさん:2007/06/11(月) 21:05:42
>>582
バグ取りの依頼かい?コメントの前に全角スペースが入ってるからエラーが出るんだよ。
595デフォルトの名無しさん:2007/06/11(月) 21:15:01
>>593
こんなの見つけたけど参考になるかな?
ttp://www2.et.soft.iwate-pu.ac.jp/~g031b084/tubo/2004b/iskiso/answer/isen04.html
596デフォルトの名無しさん:2007/06/11(月) 21:18:31
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
任意の関数(変数x)をキーボードから入力し、
xの値を変化させた場合の結果を表として出力するプログラムを作成せよ。

[3] 環境
 [3.1] Windows
 [3.2] Microsoft Visual C++
 [3.3] C++
[4] 期限: 2007年06月12日09:00まで
[5] その他の制限: 特になし

よろしくお願いします。
文字列で入力させた後の分解・解析のやり方が特に分かんないです…
597デフォルトの名無しさん:2007/06/11(月) 21:20:03
[訂正]
[3.2] Microsoft Visual C++ 2003
598デフォルトの名無しさん:2007/06/11(月) 21:20:19
[1] 授業単元:C言語プログラミング実習
[2] 問題文(含コード&リンク):
ソース
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4221.txt
問題
このプログラムでは、1度結果を表示すると終了する。
その為、最後に「もう一度計算しますか」と表示して
“y”or“Y”を入力したら、再度データ入力に戻るよう変更する。
[3] 環境
 [3.1] OS: windowsXP
 [3.2] コンパイラ名とバージョン: visual studio 2005
 [3.3] 言語: C
[4] 期限: 明朝まで
[5] その他の制限: 制限ナシです。

よろしくお願いします
599デフォルトの名無しさん:2007/06/11(月) 21:22:25
どなたか解る方、説いていただけると助かります

[1] 授業単元: アルゴリズム
[2] 問題文(含コード&リンク):

"rand1000.dat"というファイル(http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4151.txt)がある.
次の手順で動作するプログラムinsert.cを作成し,その動作を確認せよ.

1.まずファイルから保存されているデータ数nを読み込み,その数だけデータを読み込み配列に格納する.
2.次に,格納された配列をディスプレイ上に表示する.
3.そして,データが保存された配列について挿入ソートを実行する関数 insertionsort()を呼び出し,配列データを整列する.
4.最後に,整列された配列をディスプレイ上に表示しプログラムを終了する.


[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Microsoft Visual Studio 2005
 [3.3] 言語: C
[4] 期限:6月12日の夜までにお願いします
[5] その他の制限:特になし
600575:2007/06/11(月) 21:38:15
>>578
たしかに、そちらの方が合ってますね。
二度もレス下さって本当にありがとうございます。
601デフォルトの名無しさん:2007/06/11(月) 21:44:21
合ってねぇよ
602デフォルトの名無しさん:2007/06/11(月) 22:03:04
[1] 授業単元:ユニット演習
[2] 問題文(含コード&リンク):

1.random(), srandom(seed) 関数を用いて2 数の足し算問題を出すプログラムを作成しなさい.
ただし,問題は実行ごとに変化するようにすること

2.任意個の整数データをキーボードから入力して,総和,平均値,最大値,最小値,分散および標
準偏差を求めるプログラムを作成しなさい.ただし,プログラム中のどこかでポインタと配列を用
いて作成し,ポインタを使用した部分にはコメントをつけて処理内容を説明すること.

[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限
来週の火曜辺りまで
[5] その他の制限
なし

よろしくお願いします
603デフォルトの名無しさん:2007/06/11(月) 22:37:09
>>602  1だけ

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
int a,b;
srand((unsigned)time(NULL));
a=rand(); b=rand();
printf("%d + %d = %d \n",a,b,a+b);
return 0;
}
604デフォルトの名無しさん:2007/06/11(月) 22:56:04
>>602 2だけ
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <math.h>
#define END_DATA (99999)
int main(void) {
  static  int datamax = 2;
  int *data;
  int *temp;
  int i,j;
  int sum,max,min;
  double  av,bunsan,hensa;
  data = (int*)malloc(sizeof(int)*datamax);
  sum = 0; min = 0x7FFFFFFF; max = -0x7FFFFFFF;
  av = bunsan = hensa = 0.0;
  for (i=0;;i++) {
    if (i>=datamax) {
      temp = (int*)malloc(sizeof(int)*datamax*2);
      memcpy(temp,data,sizeof(int)*datamax);
      free(data);
      data = temp;
      datamax *= 2;
    }
    scanf("%d",&data[i]);
    if (data[i]==END_DATA)  break;
    sum += data[i];
    if (data[i]<min) min = data[i];
    if (data[i]>max) max = data[i];
  }
続く
605デフォルトの名無しさん:2007/06/11(月) 23:00:45
606デフォルトの名無しさん:2007/06/11(月) 23:03:26
  av = (double)sum/i;
  for (j=0;j<i;j++) {
    bunsan += (data[j] - av)*(data[j] - av);
  }
  bunsan /= i;
  hensa = sqrt(bunsan);
  printf( "sum:%d  min:%d  max:%d\n"
      "av:%.4f  bunsan:%.4f  hensa:%.4f\n"
      ,sum,min,max
      ,av,bunsan,hensa);
  free(data);
  return 0;
}
607デフォルトの名無しさん:2007/06/11(月) 23:04:42
[1] 授業単元:プログラミングU
[2] 問題文(含コード&リンク):絶対値を求める関数および,2乗の数を求める関数を作成しなさい.main()で正しく動くかチェックすること.
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:Microsoft Visual Studio .NET 2003
 [3.3] 言語:C++
[4] 期限:水曜16時まで
[5] その他の制限:とくになし
よろしくお願いします。
608デフォルトの名無しさん:2007/06/11(月) 23:25:03
>>607
#include<iostream>
int myabs(int n){ return n<0?-n:n; }
int square(int n){ return n*n; }
int main(void){ std::cout << myabs(-2) << ' ' << myabs(0) << ' ' << myabs(2) << '\n' << square(-2) << ' ' << square(0) << ' ' << square(2) << std::endl; return 0; }
手抜きでよければ
609デフォルトの名無しさん:2007/06/11(月) 23:28:54
>>604
配列とコメント忘れてたな
int *data; /* 処理内容:データに使う */
int *temp; /* 処理内容:テンポラリに使う*/
char str[] = "ans\n";
 :
printf(ans);
こんなもんで。
610デフォルトの名無しさん:2007/06/11(月) 23:33:47
>>607
#include <iostream>
template<typename T> T absx(T n){ return n < 0 ? n * T(-1) : n;}
template<typename T> T square(T n){ return n * n; }
main(){
std::cout << absx(-10) << ", " << absx(-1.1) << ", " << absx(-3e-10) << std::endl;
std::cout << square(2) << ", " << square(-3.14) << ", " << square(0.4e8) << std::endl;
}

611607:2007/06/11(月) 23:35:16
>>608
ありがとうございます。
ですが、もう少し簡単に出来ませんか?4月から初めてまだあまり理解できないので・・・。
すみません。お願いします。
612デフォルトの名無しさん:2007/06/11(月) 23:43:26
>>611
4月からはじめてそれならもうあきらめたほうがいいよ
せめてどこが理解できないのかを書くべき
613デフォルトの名無しさん:2007/06/11(月) 23:54:02
うるせーカス
614デフォルトの名無しさん:2007/06/11(月) 23:54:13
>>612
昨日もそうだが、おめーはいちいちごちゃごちゃうるせーんだよ
宿題に関係ないレスしてんじゃねー、てめぇ〜みたいなクズに
いちいち他人を心配している余裕があると思ってんのかよ?
お前の今後の人生を考えて生きていけや、格差社会の底辺めが
615デフォルトの名無しさん:2007/06/11(月) 23:55:31
>>614
昨日は旅行行っててこのスレ書き込んでねーよ
616デフォルトの名無しさん:2007/06/11(月) 23:56:37
>>573
ありがとうございます。
617デフォルトの名無しさん:2007/06/11(月) 23:59:05
>>615
貧乏人が見栄はって強がってんじゃねーよw
こんな丸投げスレで何上からものを言う説教を始めてんだよ?w
嫌なら答えなくて良いんだよw
618デフォルトの名無しさん:2007/06/12(火) 00:01:38
>宿題に関係ないレスしてんじゃねー、
どっちもどっちだよ
619デフォルトの名無しさん:2007/06/12(火) 00:02:39
>>611
三項演算子で検索
620デフォルトの名無しさん:2007/06/12(火) 00:04:12
>>617
>こんな丸投げスレで何上からものを言う説教を始めてんだよ?w

>>614
>お前の今後の人生を考えて生きていけや、格差社会の底辺めが
621デフォルトの名無しさん:2007/06/12(火) 00:04:44
条件演算子のほうがふさわしいだろ
622619:2007/06/12(火) 00:05:06
>>621 なるほど
623デフォルトの名無しさん:2007/06/12(火) 00:08:18
>>611
int myabs(int n)
{
if(n < 0)
{
return -n;
}
else
{
return n;
}
}
これでどうだ
624デフォルトの名無しさん:2007/06/12(火) 00:10:16
わかりません><
625デフォルトの名無しさん:2007/06/12(火) 00:18:26
>>624 素?釣り?他人?
int myabs(int n)
{
int abs;/*絶対値を入れる変数*/
if(n < 0)
{
abs = -1 * n; /* nが0より小さいので-1をかけて正の数にする*/
}
else
{
abs = n;
}
return abs;/* nが0以上なのでそのままでOK*/
}
626デフォルトの名無しさん:2007/06/12(火) 00:20:09
コメント位置間違えた・・・OTL
627デフォルトの名無しさん:2007/06/12(火) 00:29:41
じゃもうこうだな。
int main(void) {
/* 僕には難しくて分かりませんでした */
return 0;
}
628デフォルトの名無しさん:2007/06/12(火) 00:33:46
>>627
やっと分かりました。どうもありがとうございました。
629デフォルトの名無しさん:2007/06/12(火) 00:34:45
>>627に負けた・・・orz
630デフォルトの名無しさん:2007/06/12(火) 00:35:59
>>599
#include <stdio.h>
#define N 2000
void insertionsort(int x[], int gap, int n){
    int i, j;
    for(i = gap; i < n; i++)
        for(j = i - gap; j >= 0; j -=gap){
            if(x[j] <= x[j + gap]) break;
            else{
                int temp = x[j]; x[j] = x[j + gap]; x[j + gap] = temp;
            }
        }
}
int main(void){
    FILE *fp = fopen("rand1000.dat", "r");
    int x[N], n, i;
    if(!fp) return -1;
    while(1){
        printf("n : "); scanf("%d", &n);
        if(n >= 1 && n <= N)
            break;
        printf("nは1以上%d以下で\n", N);
    }
    for(i = 0; i < n && fscanf(fp, "%d", &x[i]) == 1; i++) ;
    n = i;
    fclose(fp);
    for(i = 0; i < n; i++) printf("%d\n", x[i]);
    for(i = n/2; i > 0; i /= 2) insertionsort(x, i, n);
    for(i = 0; i < n; i++) printf("%d\n", x[i]);
    return 0;
}
631デフォルトの名無しさん:2007/06/12(火) 00:37:24
>>625
やさしいね
632デフォルトの名無しさん:2007/06/12(火) 00:51:58
>>598
#include <math.h>
#include <string.h>
#include <conio.h>

int main(void)
{
    int n, ch;
    double sum, xsum, av, sg, sd;
    char data[64];
    do{
        n = 1;
        sum = 0.0;

        /*中略*/

        printf("標準偏差 =%f\n", sd);
        ch = _getch();
    }while(ch == 'y' || ch == 'Y');
    return 0;
}
633デフォルトの名無しさん:2007/06/12(火) 01:23:22
宿題じゃないけど教えてください

【言語:コンパイラ】
C言語:gcc 3.4

【問題】

今日のあなたの運勢は##って感じで表示するプログラムを作成する、ただし

・##の部分はrandを使ってランダムに表示させる
・##は配列に格納し、表示させる時はポインタを使用する

【一応考えた(ミスだけど)】
#include<stdio.h>

int main (void)
{
  char unsei[] = { "大吉" , "吉" , "凶" };

  printf ("今日のあなたの運勢は\n");
  
  printf ("%cです!!\n", *unsei[rand() % 3]);

  return 0;
}

【エラー】
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4222.txt

俺の五行目の何がいけないんだと…orz
634デフォルトの名無しさん:2007/06/12(火) 01:31:41
突っ込みどころが多すぎるから↓君に任せた
635デフォルトの名無しさん:2007/06/12(火) 01:34:46
だが断る。
636デフォルトの名無しさん:2007/06/12(火) 01:37:16
>>633
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main (void)
{
char *unsei[] = { "大吉" , "吉" , "凶" };

srand((unsigned int)time(NULL));

printf ("今日のあなたの運勢は\n");
printf ("%sです!!\n", *(unsei + rand()%3));

return 0;
}
637デフォルトの名無しさん:2007/06/12(火) 01:40:01
>>633
ほいさっさ

#include<stdio.h> /*printf*/
#include<stdlib.h> /*rand*/
#include<time.h> /*time*/
int main (void)
{
const char * const unsei[3] = { "大吉" , "吉" , "凶" };

srand( time( NULL ) ); /*乱数の初期化*/

printf( "今日のあなたの運勢は\n" );
printf( "%sです!!\n", unsei[ rand( ) % 3 ] );

return 0;
}
638デフォルトの名無しさん:2007/06/12(火) 01:42:36
>>590
#include <stdio.h>
#include <string.h>
#define STUDENT_NUM 100
#define BUF_SIZE (127+1)
struct student{ int sex; char number[BUF_SIZE], lastname[BUF_SIZE], firstname[BUF_SIZE];};
void print_student(struct student x){ printf("%s\t%s\t%s\t%s\n", x.number, x.lastname, x.firstname, x.sex == 0 ? "男" : "女");}
int main(void){
    struct student x[STUDENT_NUM], temp;
    FILE *fp = fopen("studentdata.dat", "r");
    int i = 0, j;
    if(!fp) return -1;
    while(i < STUDENT_NUM){
        fscanf(fp, "%s%s%s%d", temp.number, temp.lastname, temp.firstname, &temp.sex);
        if(!strcmp(temp.number, "0") || feof(fp)) break;
        x[i] = temp;
        print_student(x[i++]);
    }
    fclose(fp);
    while(1){
        char *p;
        printf("Input search number : "); fgets(temp.number, BUF_SIZE, stdin); p = strchr(temp.number, '\n'); *p = '\0';
        if(!strcmp(temp.number, "10:04 2007/06/110")) break;
        for(j = 0; j < i; j++) if(!strcmp(temp.number, x[j].number)) break;
        if(j < i) print_student(x[j]);
        else printf("not found\n");
    }
    return 0;
}
639デフォルトの名無しさん:2007/06/12(火) 01:48:10
>>634-637
理解した

サンクス
640デフォルトの名無しさん:2007/06/12(火) 02:22:46
ボーリングめんどいな
641デフォルトの名無しさん:2007/06/12(火) 02:38:24
>>615のあまりにまとはずれなレスにワロタ
642デフォルトの名無しさん:2007/06/12(火) 03:34:52
[1] 授業単元:IT入門
[2] 問題文
半径1の円に外接する正2^n角形(n>=2)の周囲長と内接する正2^n角形(n>=2)の周囲長との差がε(マクロで1E-4に設定)未満となる最小のnを求め、
そのときの周囲長から円周率πを算出するプログラムを作れ。このとき円に内接する正2^n角形(n>=2)の一辺の長さの1/2を入力し円に内接する
正2^(n+1)角形の一辺の長さの1/2を算出する関数と円に外接する正2^n角形(n>=2)の一辺の長さの1/2を入力し円に外接する正2^(n+1)角形の
一辺の長さの1/2を算出する関数を使用せよ.
[3] 環境
 [3.1] OS: Linux
 [3.2] gcc versionは不明ですが最新版のはずです
 [3.3] 言語:C
[4] 期限: 2007年6月16日0:00まで
[5] その他の制限: 下のヒントを使ってください。
@単位円に内接する正n角形の周囲長は,2n sin(π/n), 単位円に内接する正n角形の周囲長は,
2n tan(π/n)であるが,このnを2^nに置き換えて求めてはいけない.高校時代の数学の知識を
使えばπを使わずに求めることができる.
A(1-Sqrt(1-s^2))/2は,s^2/(2(1+Sqrt(1-s^2)))として計算せよ.
(数値計算の精度が良くなる.各自実験してみよ.)
643デフォルトの名無しさん:2007/06/12(火) 07:48:55
>>632
ありがとうございました
644デフォルトの名無しさん:2007/06/12(火) 09:21:36
[1] 授業単元:複雑系演習
[2] 問題文(含コード&リンク)
次に説明する写像f(3) について,リターンマップを描け(横軸xn, 縦軸xn+3).
いまxn+1 = f(xn) だから,同様にxn+2 = f(xn+1),xn+3 = f(xn+2) が成り立つ.これらをまとめると,xn+3 = f(xn+2) = f(f(xn+1)) = f(f(f(xn))) と書ける.
この,xn からxn+3 を求める式xn+3 = f(f(f(xn))) を簡単のためにxn+3 = f(3)(xn) と書くことにする.これまではxn とxn+1 の間のリターンマップを書いてきたが,xn とxn+3 の間のリ
ターンマップをr = 3.8284 のときに書いてみよ

[3] 環境
 [3.1] OS: Windows
 [3.3] 言語:C
[4] 期限:火曜17時まで
[5] その他の制限:とくになし
よろしくお願いします。
645デフォルトの名無しさん:2007/06/12(火) 11:13:07
[1] 授業単元:C++研究
[2] 問題文:
多次元配列を用いて自分の時間割を作成しコマンドプロンプトへ出力しなさい。
なお,履修データはプログラムに直接記述してよい。
また,時限名,曜日名のタイトルも出力すること。

配列などはいれてませんが出力すると、下記urlのcout文のような表示にするようです。
枠や時間割りはすべては埋めてませんが、時間割の枠と全ての時間割り枠内に
科目名、担当の先生の名前、講義室の番号室の3つと
それプラス曜日名と時限名を多次元配列で出力表示します
[3] 環境
 [3.1] OS:Windows xp
 [3.2] コンパイラ名とバージョン:Visual studio.2005
 [3.3] 言語: C++
[4] 期限: ([2007年6月15日11:00まで]
[5] その他の制限:特になし
よろしくお願いします
646デフォルトの名無しさん:2007/06/12(火) 11:19:23
647デフォルトの名無しさん:2007/06/12(火) 11:29:36
>> 580 前スレで同じような問題があったので、それを使わせてもらいプログラムの方完成できました。

>>579 >>581の方続けて、よろしくお願いします。
648デフォルトの名無しさん:2007/06/12(火) 12:09:35
[1] 授業単元:C++研究
[2] 問題文:
前スレでプログラムを作ってもらったのですが、プログラムの表示方法が少し違いました
計算部分はあってると思うのですが。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4225.txt

問題文
下記@Aの銀行に「1億円」を預けた場合,何年と何ヶ月後にAの銀行の預金額を@の銀行の預金額が超えるか。
•@利率0.08%(複利)の銀行
•A利率0.09%(単利)の銀行
–反復文を用いて@A双方の毎月の預金額を表示し、Aの銀行の預金額を@の銀行の預金額が超えた時点で反復文を終了後,「@の銀行は●年と●ヶ月後にAの銀行の預金額を超える」と表示しなさい。
ここまではあっているのですが、下記の
–また,上記@の銀行に「1億円」,Aの銀行に「9999万円」を預けた場合,どちらが先に「1億200万円」になるか。前問と同様の処理を行い,最後に「○の銀行が●年と●ヶ月後に先に1億200万円貯まる」と表示しなさい。
前問と同様の処理は行われたと思うのですが、表示方法に難ありでした。
○の銀行が○年○ヵ月後にと言う部分は筆記で計算してみたところ
Aの銀行が1年と11ヶ月後に102000000円貯まる。と出力されるはずなんですが
しかし、二年一ヵ月後に1億200万たまると出力するので、@の銀行が1億200万貯まる歳月が出力されてると思います
修正しようにも関数の方はまだ習っていなくて修正できず@@

[3] 環境
 [3.1] OS:Windows xp
 [3.2] コンパイラ名とバージョン:Visual studio.2005
 [3.3] 言語: C++
[4] 期限: ([2007年6月15日11:00まで]
[5] その他の制限:特になし
よろしくお願いします
649デフォルトの名無しさん:2007/06/12(火) 12:20:25
>>644
問題文の意味がよくわからないけど、こんなもんかな?
r って何?
csv形式で出力するので適当にプロットして

#include<stdio.h>

double f(double x){
    return x*x-2;
}

double f_n(int num, double x){
    if(num<=0) return x;
    return f_n(num-1, f(x));
}

int main(void){
    double x;
    int i;

    for(i=0;i<=20;i++){
        x=i/10.0;
        printf("%f,%f,%f,%f\n", x, f_n(1, x), f_n(2, x), f_n(3, x));
    }
    return 0;
}
650デフォルトの名無しさん:2007/06/12(火) 12:53:46
[1] 授業単元:プログラミング
[2] 問題文:
まず,3×3の全マス目の初期状態を1〜6の並び番号付きでコンソールに表示する.
次に,キーボードからシフト回数を入力する.
入力された回数だけ,下記(@)〜(B)を繰り返し実行する.
(@) 1〜6の並びのうちの1つをランダムに選び,その並びのシフト方向(-1 または +1)をランダムに決定する.
(A) 上記(@)の並びに対し,決定した方向のシフトを実行する.
(B) シフトされた結果を表示する.なお,選択された並び番号及びシフト方向も併せて表示する.
その後,(@)へ.

<実行例>
 1 2 3
[1][1][1] 4
[2][2][2] 5
[3][3][3] 6

シフト回数は? 2 ← キーボードから2と入力
<シフト1回目> 3を-1動かす
 1 2 3
[1][1][2] 4
[2][2][3] 5
[3][3][1] 6
<シフト2回目> 5を1動かす
 1 2 3
[1][1][2] 4
[3][2][2] 5
[3][3][1] 6

[3]環境 OS:Linux コンパイラ:gcc 言語:C
[4]期限:6月14日 12時ごろまで
よろしくお願いします。
651デフォルトの名無しさん:2007/06/12(火) 13:02:48
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): 次々に入力される値を合計する処理である。
変数dtにデータを入力する処理を繰り返し行い、
入力終了後その合計sumと平均aveを出力する。
なお、入力データは正の整数とし、
入力するデータがなくなったら、
終わりの印として負の値を入力する。

平均の計算は、合計÷入力回数。
入力回数も変数を用意して数える。

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: visual studio2005
 [3.3] 言語: C
[4] 期限: 明日まで
[5] その他の制限: ヘッダーは#include<stdio.h>のみでお願いします
652デフォルトの名無しさん:2007/06/12(火) 13:57:23
653デフォルトの名無しさん:2007/06/12(火) 14:17:07
>642
図形を手で書いたのなんて何年ぶりだろ。
#include <stdio.h>
#include <math.h>
#define E 1E-4
double inscribed(double s)
{
   return sqrt(s * s / (2 * (1 + sqrt(1 - s * s))));
}
double circumscribed(double s)
{
   return (sqrt(s * s + 1) - 1) / s;
}
int main(void)
{
   double s1 = sqrt(2) / 2, s2 = 1.0;
   int i = 4;
   while(s2 - s1 > E) {
      s1 = inscribed(s1);
      s2 = circumscribed(s2);
      i *= 2;
   }
   printf("%.2f\n", s1 * i);
   return 0;
}
654デフォルトの名無しさん:2007/06/12(火) 14:18:32
3年ぶり
655デフォルトの名無しさん:2007/06/12(火) 14:38:39
>>645 申し訳ないです
見本プログラムのURLを貼っていたつもりが抜けていました。
すみませんでした
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4223.txt
656デフォルトの名無しさん:2007/06/12(火) 15:17:51
[1] 授業単元: C言語
[2] 二次元平面内の点の座標を, typedef で定義した構造体 point_t で表現する.また、構造体のメンバーは,
x座標の値は double型 とし,メンバー名は x y座標の値は double型 とし,メンバー名は y とする.
このとき、以下の機能をもつ関数を定義することにより,入力した二点間の距離を計算するプログラムを完成させなさい.
1点の座標の入力処理 2点間の距離を算出
1点の座標の入力処理を行う関数は, point_t InputPoint() とし,キーボードから入力した座標を戻り値として返す.
2点間の距離の2乗を計算する関数は, double Distance(point_t, point_t) とし, 2点の座標を引数で渡し,2点間の距離を戻り値として返す.
以下の雛形プログラムの指定部分のみを変更すること.
#include <stdio.h>
#include <math.h>
/* point_t型の構造体を宣言する */
typedef struct {
double x; double y;
} point_t;
/* プロトタイプ宣言 */
point_t InputPoint();
double Distance(point_t, point_t);
int main(void){
point_t p1,p2; double d;
p1=InputPoint(); p2=InputPoint();
d=Distance(p1,p2); printf("%lf\n",d);
return 0;
}
point_t InputPoint()
{
/* ここを作成する */
}
double Distance(point_t p, point_t q)
{
/* ここを作成する */
}
6571/2:2007/06/12(火) 15:28:39
内容:
[1] 授業単元: C言語 [2]Nの太さのLを表示するプログラム
出力結果は以下の様になります。
./letter
1
*
*
*
****
./letter
2
**
**
**
**
******
******
658デフォルトの名無しさん:2007/06/12(火) 15:30:27
>656
point_t InputPoint()
{
     point_t p;
     printf("input x:");
     scanf("%lf", &p.x);
     printf("input y:");
     scanf("%lf", &p.y);
     return p;
}
double Distance(point_t p, point_t q)
{
     return sqrt((p.x - q.x) * (p.x - q.x) + (p.y - q.y) * (p.y - q.y));
}
6592/2:2007/06/12(火) 15:33:08
縦線は、幅ユニットのnと高さ+2ユニットのnです。 (1個のユニットは1「*」によって表されます)
水平な線は、高さユニットのnと幅+2ユニットの2nです。 (1個のユニットは1「*」によって表されます)
660デフォルトの名無しさん:2007/06/12(火) 15:38:31
>657
#include <stdio.h>

int main(void)
{
int i, j, n;

scanf("%d", &n);

for(i=0; i<n+2; i++) {
for(j=0; j<n; j++) putchar('*');
putchar('\n');
}
for(i=0; i<n; i++) {
for(j=0; j<2*n+2; j++) putchar('*');
putchar('\n');
}

return 0;
}
661デフォルトの名無しさん:2007/06/12(火) 15:44:19
>651
#include <stdio.h>

int main(void)
{
int dt, sum = 0, count = 0;
double ave;
while(1) {
scanf("%d", &dt);
if(dt<0) break;
sum += dt;
count++;
}
ave = count ? (double)sum / count : 0;
printf("合計sum:%d 平均ave:%.1f\n", sum, ave);
return 0;
}
662デフォルトの名無しさん:2007/06/12(火) 17:07:00
>>652
ありがとうございました☆
663デフォルトの名無しさん:2007/06/12(火) 17:41:56
[1] 授業単元:プログラミング1
[2] 問題文(含コード&リンク):キ−ボ−ドから整数デ−タを入力し、その2乗和を求めるプログラムを作成。
デ−タの終わりは、^Zとする。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年06月12日11:00まで
[5] その他の制限: 配列まで習っています。

お願いいたします。
664デフォルトの名無しさん:2007/06/12(火) 17:43:06
>>663
すいません。
期限: 2007年06月12日23:00まで
でした。
665デフォルトの名無しさん:2007/06/12(火) 17:57:56
666デフォルトの名無しさん:2007/06/12(火) 17:59:52
>>638
ありがとうございました。
667デフォルトの名無しさん:2007/06/12(火) 18:01:59
>>665
ありがとうございました。
668デフォルトの名無しさん:2007/06/12(火) 20:33:38
[1] 授業単元
C++の研修でございます。データの圧縮!
[2] 問題文(含コード&リンク):
入力された値数の桁数を調べ入力された数値をパック(2桁を1桁にする)
処理を行い結果を表示するプログラムを作成しなさい。
1、入力データは文字列として扱う。
2、入力桁数は最大32桁。
3、入力された桁数が奇数桁の場合最後の数は0をいれる。
4、桁数オーバーの場合は「入力エラー」と表示
5、「END」「end」を入力したらプログラム終了
6、数字または上記以外の文字列が入力されたら「入力エラー」と表示。
3] 環境
Windowsxp
ボーランド5.5?最新のやつ
C++でいいはずです
[4] 期限
今日中に仕上げないとまずいw 無理ならあきらめます^^;
[5] その他の制限:
配列の基礎とかprintf scanf、条件分岐 演算子

問題例
(入力値)
1234567890
(表示結果)
12(18)
34(52)
56(86)
78(120)
ffffff90(-112)
669デフォルトの名無しさん:2007/06/12(火) 20:45:33
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):銀行に預金し、元金が2倍になるまでの年数
を求めなさい。ただし、年利(%)と元金(円)は入力し、利息は複利で計算
するものとする。
670デフォルトの名無しさん:2007/06/12(火) 20:57:50
>>663

#include <stdio.h>

int main (void)
{
int a;
while(1)
{
printf("数値を入力してください>>");
if(scanf("%d",&a)==EOF)
break;
printf("二乗和は%dです。\n",a*(a+1)*(2*a+1)/6);
}


return 0;
}
671デフォルトの名無しさん:2007/06/12(火) 21:07:23
>>670
ありがとうがおざいます。
672デフォルトの名無しさん:2007/06/12(火) 21:17:27
[1]C言語・グラフィック
[2]OpenGLをつかって
「クリックした全ての点を覚えておき,それらを一筆書きで結んだ折れ線を表示する.
 なおかつ,右クリックで不要な点を消去できる」
[3]WindowsXP、CigWin、C言語
[4]6月中
[5]リスト構造を使うこと

お願いします
673デフォルトの名無しさん:2007/06/12(火) 21:18:22
>>669

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

int main (void)
{
int motokin;
double i;
printf("元金と利率を入力してください。\n");
printf("元金>>");
scanf("%d",&motokin);
printf("利率>>");
scanf("%lf",&i);
printf("そのお金が2倍になるのには%f年掛かります",log(2)/log(1+i));
return 0;
}
674デフォルトの名無しさん:2007/06/12(火) 21:30:21
>>673
すいません、for文などの繰り返し文ではできないでしょうか?
675デフォルトの名無しさん:2007/06/12(火) 21:35:43
>>674
条件があるなら最初に書けカス
676デフォルトの名無しさん:2007/06/12(火) 21:40:44
[1] 授業単元: 情報工学実験
[2] 問題文(含コード&リンク):
岸Aと岸Bに挟まれて川が流れている。岸Aにボートが1艘つながれている。
岸Aに羊3匹と狼3匹がいて川を渡ろうとしている。
次のルールに従って6匹が全員無事に岸Bへと渡る手順を考える。
・ボートは1艘。はじめ岸Aにある。
・ボートの定員は2匹。1匹か2匹のとき対岸に移動できる(誰も乗っていない、3匹以上の移動はだめ)
・岸A、岸B、ボート上どの場所でも狼の数が羊の数より多くなってしまうと狼が羊を食べてしまう。(ボート上ってのはたぶん意味無いと思うが・・・)
・ボートに乗って対岸に渡ったとき、必ず1度ボートから降りる(ボート上に残ったままメンバーを入れ替えることはできない)。

問題「6匹全員無事に岸Bに渡る最小のステップの手順をすべて列挙し出力するプログラムを作成せよ」。
ただし、ボートを1回対岸へ移動させるごとに1ステップ数えるとする。

[3] 環境
 [3.1] OS: Mac(学校のがMacです)
 [3.2] コンパイラ名とバージョン: ごめんなさい分かりません。
 [3.3] 言語: C
[4] 期限: 今週の木曜日(6/14)まででお願いします。
[5] その他の制限:特にありません。

プログラミングというかアルゴリズム的な問題ですが・・・。はじめからまったく手付かずでどうしたらいいか分かりません。
どうかよろしくお願いします。
677デフォルトの名無しさん:2007/06/12(火) 21:45:42
[1]C言語
[2]
添字 0 1 2 3 4
 値 9 4 7 2 5
int型arrayの各要素は表のとおりである。キーボードから要素番号(添字)を読み込むとその要素の値を表示するプログラムを作成しなさい(arrayの各要素の値は初期化で設定)
[3]
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: visual studio 2006
[3.3] 言語: C
[4]6月14日まで

実行画面
実行結果例1
要素番号を入力:3
--------------------------
array[3]=2

実行結果例2
要素番号を入力:4
--------------------------
array[4]=5

678366:2007/06/12(火) 21:45:50
>>367さんに回答を頂いたのですが、まず、
LIBCMT.lib(crt0.obj) : error LNK2019: 未解決の外部シンボル _main が関数 ___tmain
CRTStartup で参照されました。
abcd.exe : fatal error LNK1120: 外部参照 1 が未解決です。
(abcdはファイル名です)
というエラーが表示されました。

また、今まで自分が見たプログラムは必ずmain関数があったのですが、
今回はmain関数がないですよね?
プログラム自体の性能は悪くても、動けば良いので、できれば、普通に
main関数と他の関数(他の関数を使わなくても大丈夫ならmain関数だけ)
で簡単に作って頂きたいと思うのですが…
せっかく使って下さったのに申し訳ないです。
679デフォルトの名無しさん:2007/06/12(火) 21:48:33
main関数ぐらい作れよカス
680デフォルトの名無しさん:2007/06/12(火) 21:52:28
>>677
どこかでエラーが出たらごめんね!

#include <stdio.h>

void main(void){
  int array[5] = { 9, 4, 7, 2, 5 };
  int num;

  printf("要素番号を入力:");
  scanf("%d", &num);

  printf("-----------------------\n");
  printf("array[%d] = %d\n", num, array[num]);
}
681デフォルトの名無しさん:2007/06/12(火) 21:58:02
>>677
#include <stdio.h>

int main (void)
{
int array[5] = {9, 4, 7, 2, 5};
int num;
printf("要素番号を入力:");
scanf("%d",&num);
printf("array[%d]=%d",num,array[num]);
return 0;
}
682デフォルトの名無しさん:2007/06/12(火) 21:58:48
思いっきり被っててワロタ
683デフォルトの名無しさん:2007/06/12(火) 22:02:32
>>677
#include <stdio.h>

int main()
{
int array[5]={9,4,7,2,5};
int i;
printf("要素番号を入力:");
scanf("%d",&i);
printf("-------------------------\n");
printf("array[%d]=%d\n",i,array[i]);
return 0;
}
684683:2007/06/12(火) 22:03:36
はいやってしまったサーセンwwww\(^o^)/
685デフォルトの名無しさん:2007/06/12(火) 22:05:11
>>680-684
おまいら結婚しろw
686675:2007/06/12(火) 22:16:49
>>674
ごめんなんか痛いニュースで当て逃げ動画見てたら
イラッときて何故かこんな所で八つ当たりしてしまった。
自分意味分からなさすぎて正直反省しまくっているorz
繰り返しだとこんな感じなのかな?

int main (void)
{
int motokin;
double i;
double sum=1;
int n=0;
printf("元金と利率を入力してください。\n");
printf("元金>>");
scanf("%d",&motokin);
printf("利率>>");
scanf("%lf",&i);
while(sum<2)
{
sum*=(1+i);
n++;
}
printf("元金が2倍になるには%d年掛かります。",n);
return 0;
}
687デフォルトの名無しさん:2007/06/12(火) 22:17:24
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
整数nをを入力し、整数nの数だけ値を読み込む。
読み込んだ値を小さい順に並び替え、並び替えた値の中央値を示すコードを書け。
(またnの数が奇数の場合は中央値を1つ、偶数の場合は2つを2つ表示せよ。)
(例)
整数n=3
561
156 中央値6

整数n=6
629257
225679 中央地56
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:cygwin gcc
 [3.3] 言語:C
[4] 期限:今晩中にお願いします。
[5] その他の制限:配列の問題なので配列を使っておねがいします。
688デフォルトの名無しさん:2007/06/12(火) 22:18:43
[1]C言語

[2]あるファイルを監視して、何か変更があるたびにそのファイル
の先頭から表示するようなwatchfileというプログラムを作成せよ

ヒント:
   for(;;){ /* 無限ループ */
      stat(argv[1],&sbuf);
      if(・・・・・){ /* ファイルの状態を検査して
                     変わっていれば */
         while ((n=read(fd,buf,1024))>0)
            write(1,buf,n); /* 1024バイト単位に、
          readバイト数がゼロになるまで読んで出力 */
      }
      sleep(10); /* 10秒待機 */
   }

[3]
[3.1]Linux
[3.2]ちょっとわかりませんgccとかつかってるとおもいます
[3.3]C

[4]6/13夕方まで

[5]制限は特にありません
689デフォルトの名無しさん:2007/06/12(火) 22:40:21
>>670
すいません!!
ソースを出力して^Zで終わろうとしたら強制的に終了されます。
どうにかならないでしょうか。
^Dも試しましたが同様に終了するだけでした。
690231:2007/06/12(火) 22:52:16
[1] 授業単元:計算機実習
[2] 問題文(含コード&リンク):
1)10000この整数(乱数で発生、1〜10000の範囲)をdata00.txtに保存する
2)このデータをファイルから読み込み、バブルソートでソートする。これらを別々のプログラムとして作る。
[3] 環境  [3.1] OS: WindowsXP
        [3.2] コンパイラ名とバージョン: Cresent?
         [3.3] 言語: C++
[5] その他の制限: 今回読み込み、書き込みを習ってる程度です
1)と2)を作ってるのですが、どうしても1しか出力しません。
1)
main()
{       FILE *file_p;
int K[10000];
int a,i;
randomize();
file_p=fopen("data00.txt","w");
for(i=0;i<10000;i++){
a=random(10000);
K[i]=a; }
for(i=0;i<10000;i++){
fprintf(file_p,"%d\n",K[i]);
printf("%d\n",K[i]); }
fclose(file_p);
getch();
exit(0); }
691231:2007/06/12(火) 22:52:56
2)
void pswap(int *x,int *y){
int work;
work=*x;
*x=*y;
*y=work; }
main()
{ FILE *fp;
int K[10000];
int a,i,j;
fp=fopen("data00.txt","r");
for(i=0;i<10000;i++){
fscanf(fp,"%d",&a);
K[i]=a; }
for(i=0;i<=9999;i++){
for(j=9999;j>=i+1;j--){
if(K[j]<K[j-1]){
pswap(&K[j],&K[j-1]); }
}
}
for(i=0;i<10000;i++){
printf("%d\n",K[i]); }
fclose(fp);
getch();
exit(0); }
692デフォルトの名無しさん:2007/06/12(火) 23:00:56
>>689
すまない、自分の環境ではbccとgccで今やったら正常に終わったけど、
強制的に終了ってのはCtrl+Zを押すとエラー終了するってこと?
693デフォルトの名無しさん:2007/06/12(火) 23:12:49
>>687
1,5,6の中央値が6の意味は分からんが一応できたぜ

#include <stdio.h>
#define N 100
int main(void) {
int array[N];
int num,i,j,temp;
printf("整数n=");
scanf("%d",&num);
for(i = 0; i < num; i++) scanf("%d",&array[i]);
for(i = 0; i <= num; i++) {
temp = i;
for(j = i; j < num; j++)
if(array[temp] > array[j]) temp = j;
j = array[i];
array[i] = array[temp];
array[temp] = j;
}
if(num%2==0) printf("%d%d\n", array[num/2-1], array[num/2]);
else printf("%d\n", array[num/2]);
return 0;
}
694デフォルトの名無しさん:2007/06/12(火) 23:14:50
>>692
コマンドプロンプトから実行じゃなくてアイコンダブルクリックで起動させて
画面が閉じちゃうんです...とかじゃない?
695デフォルトの名無しさん:2007/06/12(火) 23:16:35
>>690-691
俺の環境だと動いちゃったけど…
696デフォルトの名無しさん:2007/06/12(火) 23:17:48
[1] 授業単元: ネットワークプログラミング
[2] 問題文(含コード&リンク):
UDPでソケットを使ってサーバーからデータを受け取る
パケットを送るときにチェックサムを計算して一緒に送る
データを受信したときもデータが正しいか
チェックサムを計算してエラーがないか確認する
長いので以下に詳しい問題文をうpします
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4228.txt
↑拡張子をhtmlに直して見てください
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4229.c
↑書きかけのソースですがこんな感じになるのでしょうか
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:C
[4] 期限:6/18(月) 9:00
[5] その他の制限: サーバーが学内にあるのですぐに動作確認はできません
697デフォルトの名無しさん:2007/06/12(火) 23:17:59
698デフォルトの名無しさん:2007/06/12(火) 23:19:59
>693
それだと561って入力してもそれを一つの整数として受け取っちゃうからダメだろ
699231:2007/06/12(火) 23:20:37
>>695
なんでですか・・・・・orz
全然1しかでません
700デフォルトの名無しさん:2007/06/12(火) 23:25:04
1しか出ないって、
file00.txtは作成できてるんだよね?
んで、2のプログラムを走らせたら、出力されないってこと?
もっとまともな症状を書いてくれ
701デフォルトの名無しさん:2007/06/12(火) 23:25:50
&file00 = data00;
702デフォルトの名無しさん:2007/06/12(火) 23:27:46
data00.txtがないとか
消したとか
違うフォルダにあるとか言うなよ
703デフォルトの名無しさん:2007/06/12(火) 23:27:57
>698
特に指定は無かったので値の入力方法は
5,6,1(,で区切り)
5
6
1
(1個づつ入力)
とりあえず入力した整数nの文値を入れて並び替えて、中央値が出れば問題ないと思います。
704デフォルトの名無しさん:2007/06/12(火) 23:29:31
中央値は5じゃないのか?
1<5<6だろ?
6って最大値やん
705デフォルトの名無しさん:2007/06/12(火) 23:30:50
>>703
例見ろよ。,で区切ってもいないし、改行もされてないだろうが。
706デフォルトの名無しさん:2007/06/12(火) 23:33:07
半角スペースで区切ってるのか>>687
707231:2007/06/12(火) 23:34:07
出ました!
なぜか知りませんがもう1回このスレに貼ったのをやってみたらできました。
ご迷惑おかけしました。
708デフォルトの名無しさん:2007/06/12(火) 23:34:54
まあ若干間違ってるんだがあえて言うまい
君なら自力で修正できよう
709デフォルトの名無しさん:2007/06/12(火) 23:35:39
>>694
すいません ゴキブリと奮闘してました。
ctrl+zだと[1]+ Stoppedとでて結果が出力されません。
710デフォルトの名無しさん:2007/06/12(火) 23:37:08
とりあえずn個の整数を入力するから入力方法はなんでもいいのかと、素人の浅い考えですいません。
配列の仕組みよくわからないのでお任せします。
711デフォルトの名無しさん:2007/06/12(火) 23:40:20
>>709
すまんすまん、
>デ−タの終わりは、^Zとする。
この辺で脳内でCtrl+Zに変換されてた。
Windowsならこれで良いけどUNIXだとフォアグラウンド処理の停止だ。
でも、Ctrl+Dでも出来ない?
712デフォルトの名無しさん:2007/06/12(火) 23:41:25
>>687
561並び替えて156で中央値6?
5じゃねーの?
713デフォルトの名無しさん:2007/06/12(火) 23:42:12
あー何か俺のせいで揉めてるね orz

修正版

#include <stdio.h>
#define N 100
int main(void) {
int array[N];
int n,num,i,j,temp;
printf("整数n=");
scanf("%d %d",&n,&num);
for(i = 0; i < n; i++) {
array[i] = num % 10;
num /= 10;
}
for(i = 0; i <= n; i++) {
temp = i;
for(j = i; j < n; j++)
if(array[temp] > array[j]) temp = j;
j = array[i];
array[i] = array[temp];
array[temp] = j;
}
if(n%2==0) printf("%d%d\n", array[n/2-1], array[n/2]);
else printf("%d\n", array[n/2]);
return 0;
}
714デフォルトの名無しさん:2007/06/12(火) 23:43:24
>>709
よく見たらlinuxか
コマンドプロンプトじゃないね
715デフォルトの名無しさん:2007/06/12(火) 23:48:28
>>704
>>712
ご指摘どおり中央値5です。タイピングミスです。
716デフォルトの名無しさん:2007/06/12(火) 23:49:44
>>711
出力されるとき何もかえしてこないですね。
717デフォルトの名無しさん:2007/06/12(火) 23:52:22
>>716
原因がわかりました。
%dが文字化けして数値返してないだけでした。
ctrl+dでいけました
718デフォルトの名無しさん:2007/06/12(火) 23:53:38
>>716
ちょっと待って。
何も返して来ないって何を返して欲しいの?
それで終了なんでしょ?
719デフォルトの名無しさん:2007/06/12(火) 23:55:01
>>717
( ゚д゚ )ポカーン…
720デフォルトの名無しさん:2007/06/12(火) 23:56:38
>>676
これ、解あるか?
721デフォルトの名無しさん:2007/06/12(火) 23:59:24
ってかこれをc言語で実装させるって・・・
プロログとかでやれば綺麗なのができるのに
722デフォルトの名無しさん:2007/06/12(火) 23:59:26
>>720
似た問題を番組で見たことある
723デフォルトの名無しさん:2007/06/13(水) 00:01:18
>>630ありがとうございます。おかげで助かりました。
724デフォルトの名無しさん:2007/06/13(水) 00:01:41
>>720
つかアニメーションでも入れろと?
725デフォルトの名無しさん:2007/06/13(水) 00:02:09
なんか>>676のエロゲがあったな。
お父さんと娘だけだとお父さんが娘襲っちゃって
お母さんと息子だとお母さんが息子襲っちゃって
とかそんな内容の。
726デフォルトの名無しさん:2007/06/13(水) 00:03:54
>>676
アルゴリズムの問題といわれてもこれくらいだと全パターン検索したいな。
そこまでパターン数爆発するかな?
727720:2007/06/13(水) 00:06:36
一応、コード書いた上での疑問だが…。

BからAへ船が戻るとき、二人帰るパターンを除外しているのがまずいのかな・・・。
それを入れると無限ループになりそうだ…再帰の打ち切り条件を考えないと・・・。
728デフォルトの名無しさん:2007/06/13(水) 00:09:25
1度解をみつけてしまえば
ステップ回数をはかって
それをオーバーしたらアウトって削れるね
729デフォルトの名無しさん:2007/06/13(水) 00:13:53
>>727
過去の履歴にあるパターンと同じになったら終了とかかな?
730デフォルトの名無しさん:2007/06/13(水) 00:14:04
状態の数はたかだか32しかないから、
以前の状態を記憶していればいいと思う

岸A にいるオオカミの数 0-3
岸A にいる羊の数 0-3
船の位置 AorB

4*4*2=32
731720:2007/06/13(水) 00:21:21
一応、俺の考えた解法。(まだ解けてないけど)。
各ステップの終了時の状態がちょうど、二次元の表にできる。

    | 3/0  2/1  1/2  0/3  ← 狼の数 A岸/B岸
--------------------------
3/0 |  S    O    O    O
2/1 |  X    O    X    X
1/2 |  X    X    O    X
0/3 |  O    O    O    G

羊の数 A岸/B岸


上の表で、O の部分は羊が食われる心配がない。
S が初期状態、G が目指す状態。

A→Bに狼がN匹移動すると、表の上で現在位置が右にNマス動く。
B→Aなら逆にNマス左へ動く。

羊の場合は、狼がX軸方向なのに対して、Y軸方向に同様に動くことになる。

これを踏まえて表の上でXを踏まないようにGまで行けばいいんだけど。


>>729-730
やっぱり全部履歴をとるしかないか。
732デフォルトの名無しさん:2007/06/13(水) 00:31:54
>>731
再帰つかってるんだよね?
ステップをスタックタイプの変数に積んでいくとかで出来ないかな?
push(step1)→push(step2)→ダメ→pop(step2)→push(step2')→・・・
今までと同じパターンがあるかはスタック内全検索で。

いや、実際コーディングしてないのに横槍スマソ。
できるかどうかもわかんねwスルーしてくれ。
733720:2007/06/13(水) 00:33:08
あ、そうか、このマトリクス上にVisitフラグ立てちまえばいいんだ。
734デフォルトの名無しさん:2007/06/13(水) 00:35:10
>>733
確かに、そうだな。
単純なフラグじゃなくて船がどっちにいるかってのも一緒に要素として持たなきゃだめだな。
735デフォルトの名無しさん:2007/06/13(水) 01:12:03
とりあえず解は出た
開始→狼羊→羊→狼狼→狼→羊羊→狼羊→羊羊→狼→狼狼→狼→狼狼
この順で移動すればおk
あとはコーディングかぁ
736デフォルトの名無しさん:2007/06/13(水) 01:21:35
解一つじゃなくね?
737デフォルトの名無しさん:2007/06/13(水) 01:24:06
うん
738720:2007/06/13(水) 01:40:42
できました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4231.txt

解一つしか出ない。
出題文を見ると、複数あるような文章だけど、これじゃまだ見落としがあるのかな。
739デフォルトの名無しさん:2007/06/13(水) 01:56:39
735のパターン以外にも序盤を狼狼→狼で始めるパターンでもいけるから最低2パターンはあるね
740デフォルトの名無しさん:2007/06/13(水) 01:59:29
>>675
> カス
だからいちいちうるせーつってんだよボケが
気に入らないならスルーしろ、別にお前が答えなくてもここは困らんぞ
741デフォルトの名無しさん:2007/06/13(水) 02:02:49
>>739
一応4パターン発見。
全部11ステップ。
2ステップ目、10ステップ目に2パターンあって入れ替え可能で2×2の4パターンっぽい。
ソース上げるからちょっとまって。いまぐちゃぐちゃw
742720:2007/06/13(水) 02:04:23
>>738 のメインをこうすると 2つ解出た
int main(){
init_matrix();
AtoB(1,1,1);
init_matrix();
AtoB(2,0,1);
init_matrix();
AtoB(0,2,1);
return 0;
}

どっかのタイミングでVisitフラグクリアする必要があるみたいだな・・・
743デフォルトの名無しさん:2007/06/13(水) 02:17:02
>>741 と同じで全部で4パターン確認した
744720:2007/06/13(水) 02:17:17
うちもできたっぽい。
再帰から帰ってくるとこでvisitフラグをクリアしたら、
>>741さんの言うように4解出る用になりました。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4233.txt

これでいいのかな。
745デフォルトの名無しさん:2007/06/13(水) 02:22:07
>>741です。
いちおソース上げときます。再帰してるけど汚いw
スタックで手順保存したけど、スタックはもろグローバルwww

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4234.c
746デフォルトの名無しさん:2007/06/13(水) 02:25:24
羊と狼逆になってね?
747デフォルトの名無しさん:2007/06/13(水) 02:27:21
>>746
ほんとだorz
出力は少し見栄えよくと思って後から書いたからか・・・
しかもステップ数、−1とかいらねぇし・・・
748デフォルトの名無しさん:2007/06/13(水) 09:23:01
授業単元:C言語
環境:if文・for文・while文・do〜while文・switch〜case文
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:数値配列の操作
要素数5の配列に[0]から入力し、逆順に表示しなさい
実行画面
数値[0]==>78
数値[1]==>100
数値[2]==>65
数値[3]==>52
数値[4]==>89

数値[4]==>89
数値[3]==>52
数値[2]==>65
数値[1]==>100
数値[0]==>78
749デフォルトの名無しさん:2007/06/13(水) 09:35:18
>>740
全部のレスちゃんと読めカス。
750デフォルトの名無しさん:2007/06/13(水) 09:40:34
>>748

#include <stdio.h>

int main()
{
int array[5];
int i;
for(i=0;i<5;i++)
{
printf("数値[%d]==>",i);
scanf("%d",&array[i]);
}
putchar('\n');
for(i=4;i>=0;i--)
printf("数値[%d]==>%d\n",i,array[i]);
return 0;
}
751デフォルトの名無しさん:2007/06/13(水) 10:15:32
授業単元:C言語
環境:if文・for文・while文・do〜while文・switch〜case文
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:数値配列の操作
要素数10の配列に整数を入力し、負の値のみ表示しなさい
実行画面
数値[0]==>-10
数値[1]==>8
数値[2]==>-70
数値[3]==>30
数値[4]==>9
数値[4]==>-2
数値[3]==>51
数値[2]==>73
数値[1]==>-40
数値[0]==>100
負の値の一覧
-10 -70 -2 -40
752デフォルトの名無しさん:2007/06/13(水) 10:25:53
>>751
要素数が意味不明だけどタイプミスと解釈した。

#include <stdio.h>

int main()
{
int array[10];
int i;
for(i=0;i<10;i++)
{
printf("数値[%d]==>",i);
scanf("%d",&array[i]);
}
putchar('\n');
printf("負の値の一覧\n");
for(i=0;i<10;i++)
{
if(array[i]<0)
printf("%d ",array[i]);
}
return 0;
}
753デフォルトの名無しさん:2007/06/13(水) 10:37:03
実行例通りに作るべきだと思うんだな。間違ってても間違った奴の自己責任
#include<stdio.h>
int main(void)
{
    int i,v[10];
    for(i=0;i<10;i++){
        printf("数値[%d]==>",(i<5)? i:9-i);
        scanf("%d",&v[i]);
    }
    printf("負の値の一覧\n");
    for(i=0;i<10;i++){
        if(v[i]<0)printf("%d ",v[i]);
    }
    return 0;
}
754デフォルトの名無しさん:2007/06/13(水) 11:48:26
[1]C言語
以下のプログラムのバグを取り除きなさい。
#include

int main() {

struct date
{
int day;
int month;
int year;
char note[100];
}

struct date fun = 1, 4, 2000, "The opening of school";
struct date abe = 24, 9, 1954, "The Japanese Prime Minister's Birthday";

printf("Here are some interesting dates:\n");

printf("%d %d %d: %s\n", fun.day, school.month, school.year);
printf("%d %d %d: %s\n", abe.day, abe.month, abe.year);
}
./
Here are some interesting dates:
1 4 2000: The opening of school
24 9 1954: The Japanese Prime Minister's Birthday

よろしくおねがいします。
755デフォルトの名無しさん:2007/06/13(水) 11:53:49
2問目です
#include
#define MAX 4
typedef struct {
int day;int month;int year;
char note[100];
} stored_dates[MAX] = {1, 4, 2000, "the opening of school
",
24, 9, 1954, "the Japanese Prime Minister's Birthday",
23, 10, 1988, "the release of Super Mario Bros 3",
7, 1, 1989, "the death of the Showa Emperor", };
struct date *date_ptr;
int main() {int count, birthday, birthmonth, birthyear;
date_ptr = &stored_dates[0];
printf("Input your birthday (1-31)\n");
scanf("%d", &birthday);
printf("Input your birth month (1-12)\n");
scanf("%d", &birthmonth);
printf("Input your birth year (eg 1980)\n");
scanf("%d", &birthyear);
for (count = 0; count < MAX; count++)
{ if (birthday == date_ptr.day)
printf("You were born on the same day of the month as %s\n", *date_ptr.note);
if (birthmonth == *(date_ptr).month)
printf("You were born in the same month as %s\n", *date_ptr.note);
if (birthyear == *date_ptr -> year)
printf("You were born in the same year as %s\n", (*date_ptr) -> note);
date_ptr++;}}
756デフォルトの名無しさん:2007/06/13(水) 11:55:27
実行結果
./
Input your birthday (1-31)
1
Input your birth month (1-12)
4
Input your birth year (eg 1980)
1988
You were born on the same day of the month as the opening of school
You were born in the same month as the opening of school
You were born in the same year as the release of Super Mario Bros 3
[b1007xxx@C*LPC* ~/pp8]% ./dates2
Input your birthday (1-31)
29
Input your birth month (1-12)
9
Input your birth year (eg 1980)
1969
You were born in the same month as the Japanese Prime Minister's Birthday
757デフォルトの名無しさん:2007/06/13(水) 12:09:33
[1] 授業単元 プログラミング基礎
[2] 問題文 1〜40番目のフィボナッチ数列の下一桁の出現頻度を求めて以下の書式で表示するプログラムを作成せよ.
0 : **
1 : ******
2 : **
3 : ****
:
<中略>
:
9 : *****

※ヒント:ある整数値の下一桁は,その数を10で割った余りにより得ることができます

[3.1] Unix
[3.2] gcc
[3.3] c
[4] 6月15日 20時50分
[5] 配列を使って行う。
758デフォルトの名無しさん:2007/06/13(水) 12:21:22
>>754
#include <stdio.h>

int main() {

struct date
{
int day;
int month;
int year;
char note[100];
} ; // セミコロン追加

struct date fun = { 1, 4, 2000, "The opening of school"};
struct date abe = { 24, 9, 1954, "The Japanese Prime Minister's Birthday"};

printf("Here are some interesting dates:\n");

printf("%d %d %d: %s\n", fun.day, fun.month, fun.year); // school -> fun
printf("%d %d %d: %s\n", abe.day, abe.month, abe.year);

return 1;
}
759デフォルトの名無しさん:2007/06/13(水) 12:22:34
授業単元:C言語
環境:if文・for文・while文・do〜while文・switch〜case文
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:数値配列の操作
要素数10の配列に数字を入力し、平均を求め、平均以上のデータについて要素番号とデータを表示しなさい
実行画面
整数[0]==>100
整数[1]==>80
整数[2]==>60
整数[3]==>75
整数[4]==>89
整数[5]==>62
整数[6]==>71
整数[7]==>50
整数[8]==>49
整数[9]==>90
平均(72.6)以上のデータ
0:100
1:80
3:75
4:89
9:90

760デフォルトの名無しさん:2007/06/13(水) 12:38:55
授業単元:C言語
環境:if文・for文・while文・do〜while文・switch〜case文
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:数値配列の操作
整数配列array[10]に値を入力後、昇順にソースして表示しなさい
実行画面
整数入力[0]==>8
整数入力[1]==>22
整数入力[2]==>10
整数入力[3]==>37
整数入力[4]==>16
整数入力[5]==>63
整数入力[6]==>25
整数入力[7]==>33
整数入力[8]==>8
整数入力[9]==>19
***ソース後***
配列[0]:3
配列[1]:8
配列[2]:8
配列[3]:10
配列[4]:16
配列[5]:19
配列[6]:22
配列[7]:25
配列[8]:33
配列[9]:37


761デフォルトの名無しさん:2007/06/13(水) 12:42:09
>>759
#include<stdio.h>

int main()
{
int i;
int array[10];
int sum=0;
double ave;
for(i=0;i<10;i++){
printf("整数[%d]==>",i);
scanf("%d",&array[i]);
sum+=array[i];
}
ave=(double)sum/10;
printf("平均(%.1f)以上のデータ\n",ave);
for(i=0;i<10;i++){
if(array[i]>ave)
printf("%d:%d\n",i,array[i]);
}
return 0;
}
762デフォルトの名無しさん:2007/06/13(水) 12:42:43
>>757
#include <stdio.h>

int main(void){
    int F[40], count[10] = {0}, i, j;

    F[0] = 1;
    F[1] = 1;

    for(i = 2; i < 40; i++)
        F[i] = F[i-2] + F[i-1];

    for(i = 0; i < 40; i++)
        count[F[i]%10]++;

    for(i = 0; i < 10; i++){
        printf("%2d : ", i);
        for(j = 0; j < count[i]; j++)
            printf("*");
        printf("\n");
    }

    return 0;
}
763デフォルトの名無しさん:2007/06/13(水) 12:55:03
[1]C言語

[2]あるファイルを監視して、何か変更があるたびにそのファイル
の先頭から表示するようなwatchfileというプログラムを作成せよ

ヒント:
   for(;;){ /* 無限ループ */
      stat(argv[1],&sbuf);
      if(・・・・・){ /* ファイルの状態を検査して
                     変わっていれば */
         while ((n=read(fd,buf,1024))>0)
            write(1,buf,n); /* 1024バイト単位に、
          readバイト数がゼロになるまで読んで出力 */
      }
      sleep(10); /* 10秒待機 */
   }

[3]
[3.1]Linux
[3.2]すいませんよく分かりません
[3.3]C

[4]6/14

[5]制限は特にありません
おねがいします
764デフォルトの名無しさん:2007/06/13(水) 13:12:52
>>760
ソースはウスターソースをかければ良いですか?
765デフォルトの名無しさん:2007/06/13(水) 13:14:52
たるたるソースでおながいします。
766デフォルトの名無しさん:2007/06/13(水) 13:32:58
>>693
ちょっと遅いけど、ありがとうございます!
小さい順に並べるコードは自分でなんとかします。
767デフォルトの名無しさん:2007/06/13(水) 13:40:27
>>760
ソースと聞いて、キムチかつが食べたくなったニダ
揚げたてキムチかつと炊き立てご飯を要求するニダ
ついでにこれを受け取るニダ、拒否する事は許さないニダ
#include<stdio.h>
#define NUM_DATA 10
void swap(int *a,int *b)
{
    int temp;
    temp=*a;*a=*b;*b=temp;
}
int main(void)
{
    int i,j,data[NUM_DATA];
    for(i=0;i<NUM_DATA;i++){
        printf("整数[%d]==>",i);scanf("%d",&data[i]);
    }
    for(i=0;i<NUM_DATA-1;i++){
        for(j=NUM_DATA-1;j>i;j--){
            if(data[j]<data[j-1]) swap(&data[j],&data[j-1]);
        }
    }
    printf("***ソース後***\n");
    for(i=0;i<NUM_DATA;i++) printf("配列[%d]:%d\n",i,data[i]);
    return 0;
}
768デフォルトの名無しさん:2007/06/13(水) 13:45:50
ソースじゃなくてソートです
769デフォルトの名無しさん:2007/06/13(水) 13:50:23
[1] 授業単元: プログラミング技術
[2] 問題文(含コード&リンク):
人数nを読み込んだ後、配列に身長のデータを読み込んでいき、入力された
身長を10cmごとにわけたヒストグラムを作成するプログラムを作成せよ。
またヒストグラムは、指定された区間に対象がいくつ入っているかをカウントしたグラフです。
ヒストグラムの実行例は以下の通りになる。
n=18
:
(身長のデータを18人分読み込む)
:
150cm <= 160cm: ** 2名
160cm <= 170cm: **** 4名
170cm <= 180cm: ***** 5名
180cm <= 190cm: *** 3名
190cm <= 200cm: *** 3名
200cm <= 210cm: * 1名

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:環境CYGWIN コンパイラgcc
 [3.3] 言語:C言語
[4] 期限:今日中にお願いします。
770デフォルトの名無しさん:2007/06/13(水) 14:00:22
授業単元:C言語
環境:if文・for文・while文・do〜while文・switch〜case文
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:数値配列の操作
配列[8]に整数を入力し、以下のような表示をしなさい
実行画面
整数入力[0]==>4
整数入力[1]==>3
整数入力[2]==>8
整数入力[3]==>6
整数入力[4]==>1
整数入力[5]==>5
整数入力[6]==>2
整数入力[7]==>7
771デフォルトの名無しさん:2007/06/13(水) 14:03:14
760>ソートの間違いです
772デフォルトの名無しさん:2007/06/13(水) 14:03:38
もはやここまで来ると>>770が低脳どころか釣りにしか見えない。
773デフォルトの名無しさん:2007/06/13(水) 14:17:06
そんなことよりヤヤちゃんってかわいいよね
774デフォルトの名無しさん:2007/06/13(水) 14:19:42
[1]C言語
[2]
商品番号1〜6の商品の単価と売り上げ個数は表のとおりであった
商品番号をキーボードをキーボードから読み込むと、その商品の売り上げ金額(単価X個数)を表示するプログラムを作成しなさい
(単価、売り上げのそれぞれを、要素数6の配列データとして、表の値で初期化して用いる)


商品番号 1 2 3 4 5 6
単価 120 150 130 190 210 100
売上げ個 13 24 11 20 18 16

[3]
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: visual studio 2006
[3.3] 言語: C
[4]6月14日まで

実行画面
実行結果例1
商品番号を入力;4
-------------------------
商品番号[4]の売上げ
3800円

実行結果例2
商品番号を入力;1
---------------------
商品番号[1}の売上げ
1560円


775デフォルトの名無しさん:2007/06/13(水) 14:24:51
>>769
#include<stdio.h>
int main(void)
{
    int n,i,j,f[6]={0,0,0,0,0,0};
    double h;
    printf("n=");scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%lf",&h);
        if(h>150 && h<=210) f[(int)h/10-15]++;
    }
    for(i=0;i<6;i++){
        printf("%dcm <= %dcm:",150+i*10,160+i*10);
        for(j=0;j<f[i];j++) printf("*");
        printf(" %d名\n",f[i]);
    }
    return 0;
}
776デフォルトの名無しさん:2007/06/13(水) 14:42:01
何方か770お願いします
777デフォルトの名無しさん:2007/06/13(水) 14:55:33
[1] 授業単元: 基本プログラミング
[2] 問題文:整数を読み込み、値が正ならばその数を逆順に表示するプログラムを作成せよ。
なお、読み込んだ値が負の0以下ならエラーを表示すること。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: cygwin
 [3.3] 言語: C++
[4] 期限: 2007/6/13 24:00まで
[5] その他の制限: 特にありません
期限近づいて焦ってます・・・どなたかよろしくお願いします。
778デフォルトの名無しさん:2007/06/13(水) 14:57:14
>>774
#include <stdio.h>

int main(void){
    int i, search;
    int code[6] = {1, 2, 3, 4, 5, 6}, price[6] = {120, 150, 130, 190, 210, 100}, num[6] = {13, 24, 11, 20, 18, 16};

    printf("商品番号を入力;");
    scanf("%d", &search);

    for(i = 0; i < 6; i++)
        if(search == code[i])
            break;

    if(i >= 6)
        return -1;

    printf("商品番号[%d]の売上げ\n%d\n", code[i], price[i]*num[i]);

    return 0;
}
779デフォルトの名無しさん:2007/06/13(水) 15:02:36
>>777 整数利用
#include <iostream>

int main(){
    int n;

    std::cin >> n;

    if(n < 0)
        return -1;

    for(; n!=0; n = n/10)
        std::cou << n%10;
    std::cout << std::endl;

    return 0;
}
780デフォルトの名無しさん:2007/06/13(水) 15:02:50
[1] 授業単元: 基本プログラミング
[2] 問題文:一番上の数(奇数)を入力すると、*で逆三角形を表示するプログラムを作成せよ
実行例
*****
***
*
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: cygwin
 [3.3] 言語: C++
[4] 期限: 2007/6/13 24:00まで
[5] その他の制限:for文を使うこと
よろしくお願いします・・・
781デフォルトの名無しさん:2007/06/13(水) 15:03:30
>>774
#include <stdio.h>

typedef struct
{
int no; // 商品番号
int tanka; // 単価
int num; // 売り上げ個数
} _tNode;

void setNode( _tNode *node, int no, int tanka, int num )
{
node->no = no;
node->tanka = tanka;
node->num = num;
}

void showUriage( _tNode *node )
{
printf( "売り上げ:%d円\n", node->tanka*node->num );
}
続く
782デフォルトの名無しさん:2007/06/13(水) 15:04:59

void main()
{
_tNode node[6];

setNode( &node[0], 1, 120, 13 );
setNode( &node[1], 2, 150, 24 );
setNode( &node[2], 3, 130, 11 );
setNode( &node[3], 4, 190, 20 );
setNode( &node[4], 5, 210, 18 );
setNode( &node[5], 6, 100, 16 );

int i = 0;
printf( "表品番号?:" );
scanf( "%d", &i );

showUriage( &node[i-1] );
}
終わり
783デフォルトの名無しさん:2007/06/13(水) 15:07:19
どなたか770お願いします
784デフォルトの名無しさん:2007/06/13(水) 15:10:10
>>780

#include<stdio.h>

int main()
{
int n,k;
do{
printf("最上段の個数(奇数):");
scanf("%d",&n);
}while(n%2==0);
k=n;
while(n>0)
{
while(k-->0)
putchar('*');
putchar('\n');
k=--n;
}
return 0;
}
785デフォルトの名無しさん:2007/06/13(水) 15:15:08
[1] 授業単元: 基本プログラミング
[2] 問題文:一番上の数(奇数)を入力すると、*で逆三角形を表示するプログラムを作成せよ
実行例
*****
***
*
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: cygwin
 [3.3] 言語: C++
[4] 期限: 2007/6/13 24:00まで
[5] その他の制限:for文を使うこと
よろしくお願いします・・・
786デフォルトの名無しさん:2007/06/13(水) 15:16:21
何度もごめんなさい。

[1] 授業単元: 基本プログラミング
[2] 問題文:一番上の数(奇数)を入力すると、*で逆三角形を表示するプログラムを作成せよ
実行例
*****
***
*
ここでは空白が表示できないですが、逆ピラミッドになっています。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: cygwin
 [3.3] 言語: C++
[4] 期限: 2007/6/13 24:00まで
[5] その他の制限:for文を使うこと
よろしくお願いします・・・

787デフォルトの名無しさん:2007/06/13(水) 15:19:43
>>785
ごめんfor文とか二個ずつ減らすとかよく読んでなかったorz

#include<stdio.h>

int main()
{
int n,k;
do{
printf("最上段の個数(奇数):");
scanf("%d",&n);
}while(n%2==0);

for(;n>0;n-=2)
{
for(k=n;k>0;k--)
putchar('*');
putchar('\n');
}
return 0;
}
788デフォルトの名無しさん:2007/06/13(水) 15:24:35
>>787さん
ごめんなさい、ついでに言うと、逆ピラミッドは正三角形を逆にした感じで2列目以降空白を入れなければいけませんでした。
あと、言語はC++です
もしお時間あればよろしくお願いします
789デフォルトの名無しさん:2007/06/13(水) 15:32:03
>>788
いい加減ちょっと吊ってきます…orz

#include<iostream>

using namespace std;

int main()
{
int n,k;
do{
cout<<"最上段の個数(奇数):";
cin>>n;
}while(n%2==0);

for(;n>0;n-=2)
{
cout<<endl;
for(k=n;k>0;k--)
cout<<"*";
cout<<endl;
}
return 0;
}
790デフォルトの名無しさん:2007/06/13(水) 15:33:49
*****
***
*
こういうことかな?
791デフォルトの名無しさん:2007/06/13(水) 15:34:44
*****
 ***
  *
792デフォルトの名無しさん:2007/06/13(水) 15:35:50
>>785
#include <iostream>

int main()
{
    int i, j, n;

    std::cin >> n;
    if(n%2 == 0)
        return -1;

    for(i = n; i > 0; i -= 2){
        for(j = n - i; j > 0; j -= 2)
            std::cout << " ";
        for(j = 0; j < i; j++)
            std::cout << "*";
        std::cout << std::endl;
    }

    return 0;
}
793デフォルトの名無しさん:2007/06/13(水) 15:37:03
>>789
ごめんなさい、またしても修正しなければならないところがorz
行と行の間は空白なしで大丈夫ですが、列のはじめに空白を入れなければいけないんです。
1行目→空白なし
2行目→空白1個
3行目→空白2個
こんな感じで下にいくにつれてだんだん細くなればおkです。
FFのクリスタルみたいな感じでしょうか・・・
794デフォルトの名無しさん:2007/06/13(水) 15:41:05
FFのクリスタルなんてしらねーよ
795デフォルトの名無しさん:2007/06/13(水) 15:42:41
>>793に萌え
796デフォルトの名無しさん:2007/06/13(水) 15:47:21
>>793
PCの前で赤面しながらコードを書く自分…。

#include<iostream>

using namespace std;

int main()
{
int n,k,h=1,j;
do{
cout<<"最上段の個数(奇数):";
cin>>n;
}while(n%2==0);
for(;n>0;n-=2)
{
for(j=h-1;j>0;j--)
cout<<" ";
h++;
for(k=n;k>0;k--)

cout<<"*";
cout<<endl;
}
return 0;
}
797デフォルトの名無しさん:2007/06/13(水) 16:08:17
>>775
すごく感謝、期限がぎりぎりだったから更に感謝です。
798デフォルトの名無しさん:2007/06/13(水) 16:33:02
762さん ありがとうございます。助かりました。
799デフォルトの名無しさん:2007/06/13(水) 16:42:05
[1] 授業単元: プログラミング2
[2] 問題文(含コード&リンク):以下のテキストファイルを読み込んで、空白以外の文字を表示する。
  テキストファイル
  アメニモマケズ カゼニモマケズ
  ユキニモ ナツノ アツサニモマケヌ
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: visual studio 2005
 [3.3] 言語: C
[4] 期限: 2007年6月14日まで
[5] その他の制限: 特になし

やってみたのですが、どうしても 空白が出力で出てしまいます。
すみませんがお願いします
800デフォルトの名無しさん:2007/06/13(水) 16:49:13
>>579 - >>581 よろしくお願いします。
801デフォルトの名無しさん:2007/06/13(水) 16:49:31
>>799
そのテキストはシフトジスで空白というのは全角空白のことで良いか
802デフォルトの名無しさん:2007/06/13(水) 16:53:28
ダメです><
803デフォルトの名無しさん:2007/06/13(水) 16:55:02
>>801
シフトジスで全角空白でOKです
804デフォルトの名無しさん:2007/06/13(水) 16:59:46
>>801
シフトジスで全角空白でOKです
805デフォルトの名無しさん:2007/06/13(水) 17:26:57
[1] C
[2] ファイルから読み込んだテキストをchar配列として保持し
  ユーザーにコマンドプロンプト上で入力させた数字(一桁のみ)のバイト数だけ行ごとに表示せよ
  行の表示の前後に'|'を表示し、行の上下列には表示バイト数の'-'を表示させ、見やすくまとめること
  
  (他は出来たのですが、わからないこと-問題文ではないです)
  例えば"あいうえお"の文字列を5バイト分表示したい場合などの時、あい まではいいのですが
  日本語の半分の値+'|'の値がまざった文字が最後に一文字表示されてしまいます
  最初は、表示桁数が奇数の場合は表示する最後の一文字が半角かどうかを判定していたのですが
  そのような処理では半角が混ざった時など("aあい"を4バイト表示など)には対応できませんでした
  
[3] 環境
 [3.1] XP
 [3.2] visual studio 2005
 [3.3] C
[4] 期限: 6/15 10:00
[5] 特にないと思います

半角・全角混ざったchar配列の場合の時に、上記問題を解決できる方法はありませんでしょうか
説明がややこしくなってしまった上、前質問があるようですが、よろしくお願いします
806デフォルトの名無しさん:2007/06/13(水) 17:31:58
大昔にそういう処理をやってた気が・・・
漢字の1バイト目は取っておいて2バイト目と同時に出し、
最後1バイト目だけだったときはかわりにスペースを出せばいいかな。
807デフォルトの名無しさん:2007/06/13(水) 20:00:39
>>799
これ、VS2005でなければwchar_t使うのが楽だと思うが
VS2005だとVSのバグでうまくいかないっぽいな
808デフォルトの名無しさん:2007/06/13(水) 20:08:22
いいえ、どうみてもお前の力量不足です。
本当にありがとうございました。
809デフォルトの名無しさん:2007/06/13(水) 20:12:54
#include <stdio.h>
#include <wchar.h>
#include <locale.h>

int main(void)
{
    wint_t c;
    setlocale(LC_CTYPE, "");
    while ((c = getwchar()) != WEOF)
        if (c != L' ') putwchar(c);
    return 0;
}
うちではVS2005でこのコードが正しく動作しないよ。
VS2003では動作するけど。
810デフォルトの名無しさん:2007/06/13(水) 20:22:57
>807
SP1でも解決されてないよな
やる気ないのかMS
811デフォルトの名無しさん:2007/06/13(水) 20:25:21
結論はJavaでコーディングする方向で
812デフォルトの名無しさん:2007/06/13(水) 20:36:40
[1] 授業単元:アルゴリズム
[2] 問題文:10l、8l、3lの水があり、10lの容器に水が一杯入っている。この3つの容器を用いて、8l容器に4lの水を取り出す最小の手順を求めよ。水を移すときは、移す側の水が空になるか、移される側が一杯になるかのいづれかの時とする。

[3] 環境
 [3.1] OS: Windows
 [3.2] cygwin
 [3.3] 言語:C
[4] 期限: 6月15日 10時
[5] その他の制限:制限は特にありません

手順は思いつくんですが、C言語でどう表現したらよいかわかりません。
非常に申し訳ありませんが宜しくお願いします

813デフォルトの名無しさん:2007/06/13(水) 20:40:20
>>645 お願いします
814デフォルトの名無しさん:2007/06/13(水) 21:15:07
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
配列の要素数を超えてメモリにアクセスするとどうなるかを以下のプログラムで確認する。
表示した結果より、なぜそうなるのか説明せよ。
(プログラム中に/**/などで説明も入ること。)
#include <stdio.h>

int main(void){
int a[2][3] = {{0,1,2} , {3,4,5}};
int i, j;
i=0;
for(j=0; j<6; j++){
printf("%x - a[%d][%d] = %d\n", &a[i][j], i, j, a[i][j]);
}
return 0;
}
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Linux gcc
 [3.3] 言語: C
[4] 期限: 今日中にお願いします!!
815デフォルトの名無しさん:2007/06/13(水) 21:27:54
何これ、意味が分からない…。
816デフォルトの名無しさん:2007/06/13(水) 21:34:37
iは飾りかw
817デフォルトの名無しさん:2007/06/13(水) 21:37:35
>>812
今日も面白そうな問題があるな。考えてみよ。
818デフォルトの名無しさん:2007/06/13(水) 21:41:24
>>814
あぁ、%xの後はマイナスじゃないのか…。
@構造体と違って配列は連続したアドレスに読み込まれる。
Aアドレス上の並びはa[0][0],a[0][1],a[0][2],a[1][0],a[1][1]…という順になっている。
B要素数を超えたa[0][3]はa[1][0]の地点を指している。
Ca[0][3]としてa[1][0]の値が出力される。
こんな感じなのかな?
ていうか自分もプログラミング習い始めだから若干不安。
時間ギリっぽいから書いたけどちゃんと詳しい人からレスがあったらそちらを参考にしてほしい…。
819デフォルトの名無しさん:2007/06/13(水) 21:41:28
>>814
//ていぎ されていない a[0][3], a[0][4], a[0][5] を さんしょう している。
//なにが おきるか しょりけい しだいの おたのしみ。

とかってコメントを追加しろってことか?
820デフォルトの名無しさん:2007/06/13(水) 21:43:47
>>812
レイトン教授に頼もう
821デフォルトの名無しさん:2007/06/13(水) 21:46:23
>>814
jが3以上のとき、つまりa[0][3]〜a[0][5]は、配列範囲外のアクセスになるので
本来は違法。だが、Cには配列の添え字の範囲をチェックするような機能は
無いので、単純にオフセットを計算して当該アドレスをアクセスしようとする。

一方、a[0][0]〜a[0][2]とa[1][0]〜a[1][2]をメモリ上で連続して割り付ける
処理系が多く(そうでないのは俺は見たことが無い)、その場合は
a[0][3]のアドレスが、計算上はa[1][0]に一致することになる。
よって、本来違法な手段によって、結果的にはa[1][0]〜a[1][2]にアクセス
してしまっているわけだ。
822デフォルトの名無しさん:2007/06/13(水) 21:47:08
配列の添え字は宣言時の数を超えてもコンパイル時にはエラー出ないからね。
このプログラムの実行結果の「22cca0」とかはメモリ上の格納場所、対応アドレスを示してるのか?
で入れる配列a[〜][〜]の格納値は〜ですって表示になってんの?
どういう仕組みなのかよくわからない。
823デフォルトの名無しさん:2007/06/13(水) 21:48:32
>>822
> このプログラムの実行結果の「22cca0」とかはメモリ上の格納場所、対応アドレスを
> 示してるのか?

そうなんだが、Cの規格からいうとこれも良くない。%xではなく%pを使うべきだな。
824デフォルトの名無しさん:2007/06/13(水) 21:51:51
みなさん、ありがとうございます。
十分参考になった上仕組みもわかりました。
そうですかC言語では添え字の範囲をチェックすることはなく、本当は違反だけどコンパイラが通ってしまうから
アクセス出来ないハズの場所を参照しているとこういうわけですね。
825デフォルトの名無しさん:2007/06/13(水) 21:55:35
違うよ
826818:2007/06/13(水) 21:59:44
>>821
横からだけどC言語って添え字の範囲をチェックする機能無いんですね。
>>814のコンパイルが通った時ひどくビックリしてしまった。
こういうのがアリな場合もあるんだ…。
827デフォルトの名無しさん:2007/06/13(水) 22:01:18
>>823
%xが非推奨で%pが推奨されるのって何か理由があるですか?
828デフォルトの名無しさん:2007/06/13(水) 22:01:32
>>809
ありがとうございます。2003で試してみてから、2005で試してみます。
829デフォルトの名無しさん:2007/06/13(水) 22:04:24
>>827
%xはunsigned intな引数を仮定している。%pはポインタ用。

printf()族のような可変長引数関数は、引数のサイズが分からないので、
ユーザが正しいサイズの引数を渡してくれることを信じて動作するし、
そうしなかった場合の挙動は未定義だ。
早い話が、sizeof(void*) != sizeof(unsigned int)な処理系では、
おかしなことになる。
830デフォルトの名無しさん:2007/06/13(水) 22:26:24
>>829
なるほど、参考になったです。
ありがとう><
831デフォルトの名無しさん:2007/06/13(水) 22:28:16
[1]情報技術実習(プログラミング)
[2]条件分岐を使って2つの数字の四則計算が可能なプログラムを記述せよ
[3]
 [3.1]windowsXP
 [3.2]bcc32
 [3.3]C
[4]明日朝提出
[5]この前if,else ifを習いました
命令文はscanfとprintfまでしか習っていません
数値はfloat型に指定されています

よろしくお願いします
832デフォルトの名無しさん:2007/06/13(水) 22:32:12
>>831
驚いた
俺が高一のときに出された問題とまったく一緒だ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4236.txt
833デフォルトの名無しさん:2007/06/13(水) 22:38:11
っつか、数値を入力してから演算する分岐にしたら?あと、0での除算はエラーだぞ
834 ◆lIN/ESgxWw :2007/06/13(水) 22:40:23
アップローダーのNo.4237に問題文をアップさせてもらったので、
よろしくお願いします。
835デフォルトの名無しさん:2007/06/13(水) 22:43:33
>>833
ちょっと修正してくる
836デフォルトの名無しさん:2007/06/13(水) 22:44:03
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
与えられた3つの整数値a,b,cを使って定義された二次方程式
a*x*x + b*x + c ==0
の解のうち、絶対値が大きい方の絶対値を表示するプログラムを示せ。
(a≠0と仮定してよい。)
[3] 環境
 [3.1] OS:Mac OS X
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:明日提出
[5] その他の制限: まだ演算と型について習ったところです。

習い始めでいきなりつまずいてしまいました…orz
よろしくお願いします。
837デフォルトの名無しさん:2007/06/13(水) 22:52:34
>>831
#include <stdio.h>
int main()
{
double a,b;
int x;
while(1){
printf("a=");scanf("%lf",&a);
printf("b=");scanf("%lf",&b);
printf("1:加算 2:減算 3:乗算 4:除算\n");
printf("計算方法を入力してください>>");
scanf("%d",&x);
if(x==1)
printf("a+b=%f\n",a+b);
else if(x==2)
printf("a-b=%f\n",a-b);
else if(x==3)
printf("a*b=%f\n",a*b);
else if(x==4)
{
if(b==0){printf("0での除算は行えません。\n");
return -1;}
printf("a/b=%f\n",a/b);
}
else printf("数値入力は1〜4で行ってください。\n");
}
return 0;
}


838デフォルトの名無しさん:2007/06/13(水) 22:52:40
>>831
#include<stdio.h>
int main(void)
{
    double v1,v2,va;
    char c;
    printf("数式を例のように入力してください、例12.3+5.2\n");
    scanf("%lf%c%lf",&v1,&c,&v2);
    if(c=='+') va=v1+v2;
    else if(c=='-') va=v1-v2;
    else if(c=='*') va=v1*v2;
    else if(c=='/') {
        if(v2==0){
            printf("0で除算できません。");
            return 1;
        }
        else va=v1/v2;
    }else {
        printf("無効な演算子です。");
        return 1;
    }
    printf("結果:%f",va);
    return 0;
}
839デフォルトの名無しさん:2007/06/13(水) 22:53:14
>>812 長いし、工夫も無いけど。
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <time.h>
int main(void) {
  int bucket[3][2] = {{10,10},{8,0},{3,0}};
  int bucket1[20][3][2],bucket2[20][3][2];
  int min = 9999;
  int from,to,aki,hist1[20][2],hist2[20][2],i,j; 
  srand(time(NULL));
  for(i=0 ; i<1000 ; i++) {
    bucket[0][1] = 10; bucket[1][1] = bucket[2][1] = 0;
    for(j=0 ; j<20 ; j++) {
      if (j>min) { j=9999; break; }
      while(1) {
        from = (rand()>>7)%3;
        if (bucket[from][1])  break;
      }
      while(1) {
        if ((to=(rand()>>7)%3)==from) continue;
        aki = bucket[to][0] - bucket[to][1];
        if (aki) break;
      }
840デフォルトの名無しさん:2007/06/13(水) 22:53:52
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi
の50

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 明日の10:00まで
[5] その他の制限: 特にナシ

841デフォルトの名無しさん:2007/06/13(水) 22:55:35
>>839 の続き
      hist1[j][0] = from; hist1[j][1] = to;
      if (aki>=bucket[from][1]) {
        bucket[to][1] += bucket[from][1];
        bucket[from][1] = 0;
      } else {
        bucket[from][1] -= aki;
        bucket[to][1] =  bucket[to][0];
      }
      memcpy(bucket1[j],bucket,sizeof(int)*3*2);
      if (bucket[1][1]==4) break;
    }
    j++;
    if ((j>20)||(j>min))  continue;
    min = j;
    memcpy(hist2,hist1,sizeof(int)*min*2);
    memcpy(bucket2,bucket1,sizeof(int)*min*3*2);
  }
  if (min>=20) { printf("not found\n"); return 1; }
  for (i=0;i<min;i++)
    printf  ( "%d -> %d    %d:%d  %d:%d  %d:%d\n"
        , hist2[i][0],hist2[i][1]
        , bucket2[i][0][0],bucket2[i][0][1]
        , bucket2[i][1][0],bucket2[i][1][1]
        , bucket2[i][2][0],bucket2[i][2][1]
        );
  return 0;
}
842デフォルトの名無しさん:2007/06/13(水) 22:55:44
↑よろしくお願いします^^
843デフォルトの名無しさん:2007/06/13(水) 22:56:46
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi
の50

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 明日の10:00まで
[5] その他の制限: 特にナシ

よろしくお願いいたします^^
844デフォルトの名無しさん:2007/06/13(水) 22:58:16
50ってどこやねん
845デフォルトの名無しさん:2007/06/13(水) 23:01:12
>>841
最後の方は
if (min>20) { printf("not found\n"); return 1; }
の間違い。
846デフォルトの名無しさん:2007/06/13(水) 23:02:22
炉だのC/C++の宿題を片付けます 89代目の50と言う意味だと思う。
847デフォルトの名無しさん:2007/06/13(水) 23:05:40
>>844 スレッド全体表示をクリックしていただければ、番号表示されるはずです^^
848デフォルトの名無しさん:2007/06/13(水) 23:06:52
>>846 C/C++の宿題を片付けます 89代目の50って意味ッス

なんかわかりずらくてスミマセン
849デフォルトの名無しさん:2007/06/13(水) 23:15:35
850デフォルトの名無しさん:2007/06/13(水) 23:16:41
[1]C言語
[2]
各月(1〜12月)の日数(例えば、1月は30日間など)を保存する配列monthを用意して、各要素をこの日数で初期化する。
この配列monthを利用して、キーボードから月(1〜12)を読み込むと、1月1日からその月の末日までの日数を表示するプログラムを作成しなさい。(2月は28日間とする)

[3]
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: visual studio 2006
[3.3] 言語: C
[4]6月14日まで

実行画面

実行結果例1
月(1−12)を入力=3
--------------------------
3月31日までは90日間です

実行結果例2
月(1−12)を入力=12
-----------------------------
12月31日までは365日間です
851デフォルトの名無しさん:2007/06/13(水) 23:19:37
>>812
アルゴリズムを考えていたら先を越されてしまった。
とりあえずまとめてみた。理屈はこれでいけるはず。

http://www.acat.jp/acat/upload/up/675.pdf
852デフォルトの名無しさん:2007/06/13(水) 23:19:52
>>836
#include <stdio.h>
#include<math.h>

int main()
{
int a,b,c;
double answer,answer1,answer2;
printf("a=");scanf("%d",&a);
printf("b=");scanf("%d",&b);
printf("c=");scanf("%d",&c);
printf("%f\n",-sqrt(b*b-4*a*c));
answer1=(sqrt(b*b-4*a*c)-b)/(2*a);
if(answer1<0)answer1=-answer1;
answer2=(-sqrt(b*b-4*a*c)-b)/(2*a);
if(answer2<0)answer2=-answer2;

printf("%dx^2+%dx+%dの解のうち絶対値の大きなものの絶対値は、\n",a,(b>0)?b:-b,(c>0)?c:-c);
printf("x=%fです。\n",(answer1>answer2)?answer1:answer2);
return 0;
}
853デフォルトの名無しさん:2007/06/13(水) 23:23:08
あ、被った。しかもD<0を忘れた…。
しかし書いた後でだけどsqrtは大丈夫なのかな…?
854デフォルトの名無しさん:2007/06/13(水) 23:36:35
>850
#include <stdio.h>

int main(void)
{
int month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int i, n, day = 0;

do {
printf("月(1−12)を入力=");
scanf("%d", &n);
} while(n<1 || n>12);

for(i=0; i<n; i++) day += month[i];

printf("%d月%d日までは%d日間です\n", n, month[n-1], day);

return 0;
}
855デフォルトの名無しさん:2007/06/13(水) 23:38:27
>>854
ありがとうございます
856デフォルトの名無しさん:2007/06/13(水) 23:38:54
>>832
>>837
遅くなりましたがありがとうございました

>>837
ちょっと習った範囲を出ています…
return -1ってのは正常終了しなかった時に使うのですか?
857デフォルトの名無しさん:2007/06/13(水) 23:42:33
main()から-1でreturnするのは推奨できん。
エラーを示したい時は1〜127の範囲の小さい正の整数を使うか、
EXIT_FAILUREを使うとよい。
858デフォルトの名無しさん:2007/06/13(水) 23:44:07
>>857
ちんぷんかんぷんです
return xでxが0以外の数字なら、それは正常終了できなかったことをしめす、でFA?
859デフォルトの名無しさん:2007/06/13(水) 23:49:14
860デフォルトの名無しさん:2007/06/13(水) 23:49:29
>>857
へぇ、今まで自分もエラーは一括して-1返してた。
ていうかそもそもmainの正常終了異常終了って何かが拾って処理してるんですか?
861デフォルトの名無しさん:2007/06/13(水) 23:52:55
>>860
(ものにもよるが)OSが拾ってる。
862デフォルトの名無しさん:2007/06/13(水) 23:53:19
>843
bR、右下だとは思うんだが、右上だったり左下だったり、もうメチャクチャだな。
863831:2007/06/13(水) 23:54:34
結局のところ、>>832のプログラムに修正を加えれば完成しますね

else if(enzanshi==4)
{
printf("一番目の数字を入力してください\n");
scanf("%f",&a);
printf("二番目の数字を入力してください\n");
scanf("%f",&b);

if(b==0)
{
System.out.println("0は不正な値です。プログラムを終了します。本当にありがとうございました。");
return 1;
ans = a / b;

printf("計算結果は%fです",ans);
}

これで正常に作動するはず
864デフォルトの名無しさん:2007/06/13(水) 23:54:52
>>860
$statusとかERRORLEVELとか。Cからsystemで呼んだ場合はそのプログラムとか。
865デフォルトの名無しさん:2007/06/13(水) 23:58:37
>>858
まーEXIT_FAILURE/EXIT_SUCCESS以外は処理系依存の話になっちゃうんだが、
Cの故郷のUnixでは、0がプロセスの正常終了を意味し、1〜127が
異常終了を示すような慣習になってて、プロセスを起動するシェルも、
それに沿った仕様になってる。んで、MS-DOSやWindowsなんかも一応それを
真似ている。127とかいう制限は無いけれどもな。
Unixでそうなるのは、シグナルで殺された場合のシグナル値とのビット和を
一緒に扱ったりしているからだ。

>>860
その辺は処理系依存だけど、一般には親プロセスで、普通はシェルだな。
Windowsだと、コマンドプロンプトから起動したプロセスの終了コードは
%errorlevel%という変数に入ってて、バッチや何かで使われることが多い。
866デフォルトの名無しさん:2007/06/14(木) 00:00:24
>>863
突っ込み所満載だな
867860:2007/06/14(木) 00:03:26
>>861,864-865
ありがとうございます。
今までmainの返却値って気にしてなくて、
プログラミングの本で関数なんかの失敗時に-1返すのが多いから
何となくmainも正常以外は-1で良いかくらいのノリ(?)でした><
868デフォルトの名無しさん:2007/06/14(木) 00:04:56
>843
typedef struct {
   point_t tL;
   point_t bR;
} rect_t;

void NormalizeRect(rect_t *r) {
   if(r->tL.x > r->bR.x) {
      double temp = r->tL.x;
      r->tL.x = r->bR.x;
      r->bR.x = temp;
   }
   if(r->tL.y < r->bR.y) {
      double temp = r->tL.y;
      r->tL.y = r->bR.y;
      r->bR.y = temp;
   }
}
869デフォルトの名無しさん:2007/06/14(木) 00:06:25
>>849
>>852
回答ありがとうございました。

>>853
sqrtは習ってないので分かりませんorz
できれば使わない解答も書いていただければ非常にありがたいのですが…。
870デフォルトの名無しさん:2007/06/14(木) 00:06:43
>>862 ええ。もう、メチャクチャです・・・OTL
871デフォルトの名無しさん:2007/06/14(木) 00:09:41
>>863のSystem.out.printlnって何?
ググったらJava関連のばっかり出てきたけどC言語でこういうのあるの?
自分もそれほどCに詳しくはないけど初めて見た。
っていうか>>831の書き込みからすごく初歩な人かとオモテタ。
872デフォルトの名無しさん:2007/06/14(木) 00:13:10
>>865
>%errorlevel%という変数に入ってて、バッチや何かで使われることが多い。
これははじめて知った
ROMってて良かったぁ
873デフォルトの名無しさん:2007/06/14(木) 00:14:04
>>871
ごめんなさい…
System.out.printlnはjavaで使用する命令です…混同してしまいました

>>866
突っ込んでください
874デフォルトの名無しさん:2007/06/14(木) 00:17:02
最終的にはこうなりました
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4242.txt
これで大丈夫ですかね?
875デフォルトの名無しさん:2007/06/14(木) 00:20:45
if(b==0)
{
printf("0は不正な数値です。1以上の数値を入力してください。プログラムを終了します。");
return 1;
}
}

でいいぜ
876デフォルトの名無しさん:2007/06/14(木) 00:21:46
いつの間にか四則演算以外のがくっついててワラタw
しかしswitch文使いたいね。
877デフォルトの名無しさん:2007/06/14(木) 00:22:27
>>868 ありがとうございました。。。^^
878デフォルトの名無しさん:2007/06/14(木) 00:24:43
> printf("入力された数値は不正です。1〜4の範囲で入力してください。プログラムを終了します。");
おいおい……
879デフォルトの名無しさん:2007/06/14(木) 00:24:52
>>875
分かりました、修正しておきます

>>876
switchはまだ習っていないのです…
yes or no判断で無いならswitchのが断然楽ですね
880デフォルトの名無しさん:2007/06/14(木) 00:25:34
>>868 本当に助かりました ><
881デフォルトの名無しさん:2007/06/14(木) 00:29:02
>>873
if(b==0) ってところも笑うところだな
if(!b)だろ普通
882デフォルトの名無しさん:2007/06/14(木) 00:31:19
習い始めなら分からんでもないがな
883デフォルトの名無しさん:2007/06/14(木) 00:31:52
>>881
いいえ、そこは0と比較すべきところであって、無理に論理否定を使うべきところではありません。
884デフォルトの名無しさん:2007/06/14(木) 00:33:00
>>881
別にどっちでもいいがb==0の方がわかりやすいな
885デフォルトの名無しさん:2007/06/14(木) 00:33:41
>>883
>>884
じゃあb==0でいいよ
886デフォルトの名無しさん:2007/06/14(木) 00:34:31
os : xp
コンパイラ : 不明

getchar();で入力された英字の他に改行コードも一緒にラインバッファに保存され
次の入力で改行コードが返されてしまう問題で、ラインバッファに保存されてる改行コードをクリアする方法
はありませんか?

for(i=0;i<10;i++){

ch = getchar();

printf("%c\n",ch);

ch = 改行コードをクリア

}

こんな感じで
とりあえず今は下のような感じで対処してるのですが、他に方法があったらお願いします
ちなみに入力関数はgetchar();のみしか使用できません

for(i=0;i<10;i++){

ch = getchar();

printf("%c\n",ch);

ch2 = getchar();

}

887831:2007/06/14(木) 00:37:15
たびたびすみません
もうひとつの宿題がありまして、そっちは終わらせたのですが、大体何点ぐらいか採点していただきたいのです。
100点満点でお願いします

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4243.txt
888デフォルトの名無しさん:2007/06/14(木) 00:39:17
>>887
そのレベルなら100点
889デフォルトの名無しさん:2007/06/14(木) 00:40:33
>>887
変数名がローマ字 -10点
890デフォルトの名無しさん:2007/06/14(木) 00:41:40
>>887
引数がないならANSI、ISO準拠だと int main(void) とするのが適切。
891デフォルトの名無しさん:2007/06/14(木) 00:42:27
>>886
それでおk
892デフォルトの名無しさん:2007/06/14(木) 00:42:32
>>889
減点理由が意味分からん

あとできるだけdouble型使った方がいいよ
理由は自分で調べてくれ
893デフォルトの名無しさん:2007/06/14(木) 00:43:23
>>888
ありがとうございます!

>>889
直しますwwww

>>890
引数ってのはint mainの引数ですか?
894デフォルトの名無しさん:2007/06/14(木) 00:44:21
>>892
なぜか問題文に「float型で」とあるのです…
895デフォルトの名無しさん:2007/06/14(木) 00:46:39
>>893
実引数 main(仮引数)
896デフォルトの名無しさん:2007/06/14(木) 00:46:52
厳しく言うと
scanf使ってるからバグの誘致はあるだろうし
面積は%fです のあとに \nの改行コードが欲しい。
変数名はローマ字よりheightのような英語であるべき

更に言うと、インデント。  その方法もありだろうけど、
if {...} else if {...} のつながりが、イマイチわかりづらくて一瞬迷う。

こんなところ
897デフォルトの名無しさん:2007/06/14(木) 00:49:32
>>895
分かりました、ありがとうございました

>>896
scanf以外の入力関数を習っていません…
改行コードは完全に見落としでした。ありがとうございます
変数名は先ほども指摘されましたので、英単語の勉強もかねて出来るだけ英語にします

インデントですか…
どういう形にすればいいですかね?
898デフォルトの名無しさん:2007/06/14(木) 00:50:21
>>886
/* 改行まで読み捨てる */
while ((ch = getchar()) != EOF && ch != '\n') {}
899デフォルトの名無しさん:2007/06/14(木) 00:52:15
>>869
#include<stdio.h>

int main()
{
int a,b,c;
double answer,answer1,answer2,D;
double xn;
    int i,n;

    n=10;
    xn=0;
printf("a=");scanf("%d",&a);
printf("b=");scanf("%d",&b);
printf("c=");scanf("%d",&c);
D=b*b-4*a*c;
do {
          xn+=1;
      } while (xn*xn<D);
for (i=0;i<n;i++) {
          xn=(xn+D/xn)/2;
}

if(D>=0){
answer1=(-b+xn)/(2*a);
if(answer1<0)
answer1=-answer1;
answer2=(-b-xn)/(2*a);
if(answer2<0)
answer2=-answer2;

900899:2007/06/14(木) 00:53:47
続き

if(answer1>=answer2)
answer=answer1;
else answer=answer2;
printf("a=%d,b=%d,c=%dにおける方程式ax*x+bx+cの2解のうち絶対値の大きなものは、\n",a,b,c);
printf("%fです。\n",answer);
}
else printf("方程式は虚数解となります。\n");

return 0;
}

sqrt使わないで二次方程式の解を求めるのって何気に凄く大変…?
あと関数使って良いか分からなかったからmainが長くて分かりづらいorz
901デフォルトの名無しさん:2007/06/14(木) 00:55:59
このスレ的に、int main(中身なし)はタブーだよw
902デフォルトの名無しさん:2007/06/14(木) 00:56:37
>>897
インデントには色々なやり方があるから一概にこれとは言えない。
人によって見やすい見難いがでるため、いろんなソースを読んだりして自分にあったものを選べばいいと思う。
もし会社なんぞに入れば大抵、そこのコーディング規約があるからそれに従えばOK。

プログラムは習うものというより、調べるものとでも思ったほうがいい。
興味があるならいろいろ調べてなぜscanfがよろしくないといわれるのか考えてみるのもいいと思う。
903デフォルトの名無しさん:2007/06/14(木) 00:58:23
>>892
joteとかkateとかがちょっとわかりにくかったから減点。
teihenとかjoteiとかkateiだったら-8点くらい。
904デフォルトの名無しさん:2007/06/14(木) 01:00:53
エラーの return 1; って必要か?
必要ないような気がするけど
905デフォルトの名無しさん:2007/06/14(木) 01:03:30
>>904
それは質問?それとも指摘?独り言?
終了コードを使いたいと思うことって無い?
906デフォルトの名無しさん:2007/06/14(木) 01:03:33
>>904
異常終了を1、正常終了を0ってしたかったんだろうね。
確かに気にするような部分じゃないと思う。
907デフォルトの名無しさん:2007/06/14(木) 01:06:34
>>903
kateはアメリカ人の女の子の名前みたいに読めてしまうな
908デフォルトの名無しさん:2007/06/14(木) 01:07:56
まぁ上でreturnを覚えたばっかりだから使ってみたんだろう。
909デフォルトの名無しさん:2007/06/14(木) 01:08:18
>>903
jotei これが女帝に見えた
910366:2007/06/14(木) 01:08:48
申し訳ないですが、どなたか>>678(>>366)をお願いできませんか?
911デフォルトの名無しさん:2007/06/14(木) 01:09:41
>>910
今忙しいんだ
後にしろ
912デフォルトの名無しさん:2007/06/14(木) 01:11:53
913デフォルトの名無しさん:2007/06/14(木) 01:13:54
>>910
>>367じゃないけど、これにmain関数くっつけてみた?
動作確認してないけど↓みたいな感じになるかな?

int main(void){
int i;
int a[10]={/*好きなものいれて};
printf("before\n");
for(i = 0;i<10;i++){
printf("%d:[%d]\n",i,a[i]);
}
mergsort(a,10);
printf("after\n");
for(i = 0;i<10;i++){
printf("%d:[%d]\n",i,a[i]);
}
}
914デフォルトの名無しさん:2007/06/14(木) 01:16:24
C言語的に、int型の値を返すライブラリにreturn int型の値;の指定がないのはなんとも歯がゆいというか
お尻の穴がギョウチュウでムズムズする感じがする
915デフォルトの名無しさん:2007/06/14(木) 02:09:47
916デフォルトの名無しさん:2007/06/14(木) 02:14:51
[1] 授業単元: C/C++講座(S)
[2] 問題文(含コード&リンク):
参照仮引数にする必要があるケース、および仮引数を参照にした方が良いケース、
それぞれについて思いつく限り、コードを書き、それが必要となる理由や良い理由をできる限り詳しく述べよ。
また、戻り値を参照にする利点についても考え、コードと理由を併せて提出せよ。

[3] 環境
 [3.1] OS: WindowsかLinuxどちらでも
 [3.2] コンパイラ名とバージョン: gcc 3.4、bcc
 [3.3] 言語: C++
[4] 期限: 2007/06/18 12:50迄
[5] その他の制限: 制限は設けられませんでしたが、あまり高度なことは理解できないと思います。
917デフォルトの名無しさん:2007/06/14(木) 02:21:11
>>916
もう少し具体的にならない?思いつく限りとかあまりにも抽象的すぎるかと・・・
今までこんな課題がありましたとかでもいいから。
あと、理由とかもあったほうがいいの?そこは自分?
918デフォルトの名無しさん:2007/06/14(木) 02:25:24
めちゃくちゃ抽象的で俺も困っているんですが、これが初めての課題です。
講義では参照を使う例として、入出力ストリームが紹介されました。

コードさえあれば理由は自分でも考えますが、
わからなかったときに備えて添えていただけると俺が喜びます。
でも自分でも考えたいので、
別々のtxtファイルにして、zipにしてもらえたりすると泣いて喜びます。
919デフォルトの名無しさん:2007/06/14(木) 02:29:59
>>916
class DummyInterface {
public:
virtual void dummy_method ( ) = 0;
};

void function ( DummyInterface dummy ) {
:
}

920デフォルトの名無しさん:2007/06/14(木) 02:32:58
[1] 授業単元: コンピュータプログラミング
[2] 問題文(含コード&リンク):
じゃんけんを5回して先に3勝したほうを勝者とする。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: borland c++ 5.5.1
 [3.3] 言語: C
[4] 期限: 今日中
[5] その他の制限:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int com(){
int com;
srand((unsigned int)time(NULL));
com=rand() % 3;
return com;
}
int you(){
int you;
do{
printf("グーなら0、チョキーなら1、パーなら2を入力してください。");scanf("%d",&you);
if (!(you==0 || you==1 || you==2))
printf("0か1か2を入力してください\n");
}while(!(you==0 && you==1 && you==2));
return you;
}
921>920続き:2007/06/14(木) 02:33:41
int whowin(int you,int com){
if ((you==0 && com==1) || (you==1 && com==2) || (you==2 && com==0)) {
return 0;
}
else if ((you==0 && com==2) || (you==1 && com==0) || (you==2 && com==1)) {
return 1;
}
else return 2;
}
int main(){
int w=0,l=0;
while(w<3 && l<3){
printf("あなた %d vs CPU %d\n",&you,&com);
if(whowin(you,com)==0){
printf("あなたの勝ちです。\n");
w++;
}
else if(whowin(you,com)==1){
printf("あなたの負けです\n");
l++;
}
else printf("あいこなのでもう一度!\n");
}
if(w==3){
printf("あなたの3勝です。あなたの勝ちです。");
}
else printf("CPUの3勝です。あなたの負けです。");
return 0;
}

見たことないエラーが出て動いてくれません。
根本的なこと間違えてそうですが、どうか教えてください。
922デフォルトの名無しさん:2007/06/14(木) 02:38:17
main関数の中身をよくみろタコ
923デフォルトの名無しさん:2007/06/14(木) 02:38:48
>>920
int com(){
int com;
int you(){
int you;

っつか、function名と変数名が被ってるYO! 当然、こういうのは識別子として使うのはエラー。
924デフォルトの名無しさん:2007/06/14(木) 02:40:46
汚いし基本が理解できてないプログラム書くな
925デフォルトの名無しさん:2007/06/14(木) 02:42:35
スコープってものについてよく調べたほうがいいよ
926デフォルトの名無しさん:2007/06/14(木) 02:54:32
>>920
自力で直したい?
それとも全部コード書いてほしい?
927デフォルトの名無しさん:2007/06/14(木) 03:00:21
>922-926
ありがとうございます
スコープを調べてみて、もう少し自力でがんばってみます
928デフォルトの名無しさん:2007/06/14(木) 03:03:14
突っ込みどころ多すぎだが、一番の問題点は
>whowin(you,com)
だな。
youとcomは関数だからintを受け取る関数にはyou()とcom()で渡さないと。
929デフォルトの名無しさん:2007/06/14(木) 03:03:31
930デフォルトの名無しさん:2007/06/14(木) 07:30:52
>>839
if (bucket[1][1]==4) break; が嘘くさい気がするんだけど、どうなんだろう
931デフォルトの名無しさん:2007/06/14(木) 09:27:48
932デフォルトの名無しさん:2007/06/14(木) 09:29:01
しまった……8lの容器に4lか……
すごい欝
933デフォルトの名無しさん:2007/06/14(木) 09:47:52
[1] 授業単元: 画像処理
[2] 問題文(含コード&リンク):
  (1) ニューラルネットワークを用いた学習アルゴリズムに従って、
    主成分分析をするプログラムをつくりなさい。
(2) (1)で出た結果を使って画像の情報量を圧縮をするプログラムをつくりなさい。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C++
[4] 期限: [2007年6月15日まで] (時刻の指定なし)
[5] その他の制限:
つくりかけのソースがここにあるのですが(元の画像つきです、コンパイルは通ります)
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4247.zip
学習自体はうまくいっている(結果の値をそのまま使って復元すると元に戻っている)思うのですが、
量子化を施すと、面影はあるのですがぐちゃぐちゃの画像が出てきて思うように復元することができません。
(プログラムをそのまま実行してみればわかるかと思います)
ここからどのようにすれば、元の画像と遜色なく復元できるのでしょうか。

どなたかご教授のほどをよろしくお願いいたします。
934デフォルトの名無しさん:2007/06/14(木) 09:53:39
920は関数の戻り値とかその辺の概念について理解しないと進まないぞ
935デフォルトの名無しさん:2007/06/14(木) 10:21:05
>923
お前はいったい何を言ってるんだ
936デフォルトの名無しさん:2007/06/14(木) 11:02:33
>>645 >>655>>581

よろしくお願いします
937デフォルトの名無しさん:2007/06/14(木) 11:28:03
>>577
よろしくお願いします。
938デフォルトの名無しさん:2007/06/14(木) 11:48:29
>>936 >>937
よろしくお願いします。
939デフォルトの名無しさん:2007/06/14(木) 11:51:29
>>938 よろしくっす
940デフォルトの名無しさん:2007/06/14(木) 12:20:52
授業単元:C言語
環境:if文・for文・while文・do〜while文・switch〜case文
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:数値配列の操作
キーボードより複数件の整数(0〜49)を入力し、データの範囲ごとに配列に
件数を集計して出力しなさい
ルール:件数集計のグループ
0〜9
10〜19
20〜29
30〜39
40〜49
入力データのグループチェック二以下のようなif文は使用しない
if(n>=0&&n<=9)
実行画面
整数入力==>3
整数入力==>15
整数入力==>43
整数入力==>8
整数入力==>38
整数入力==>7
整数入力==>49
整数入力==>18
整数入力==>^Z
* * *結果* * *
配列[0]:3件(0〜9)
配列[1]:2件(10〜19)
配列[2]:0件(20〜29)
配列[3]:1件(30〜39)
配列[4]:2件(40〜49)
941940の続き:2007/06/14(木) 12:38:46
授業単元:C言語
環境:if文・for文・while文・do〜while文・switch〜case文
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:数値配列の操作
配列[8]に整数を入力し、以下のような表示をしなさい
実行画面
整数入力[0]==>4
整数入力[1]==>3
整数入力[2]==>8
整数入力[3]==>6
整数入力[4]==>1
整数入力[5]==>5
整数入力[6]==>2
整数入力[7]==>7
942デフォルトの名無しさん:2007/06/14(木) 12:46:19
>>933 正直、何やってるのかわかりませぬ
943デフォルトの名無しさん:2007/06/14(木) 13:04:46
>>933
調べてみてもlena.pgmが元々エロ画像であることくらいしかわからん
944デフォルトの名無しさん:2007/06/14(木) 13:36:09
>>936-939の流れが意味不明でワロタ
945デフォルトの名無しさん:2007/06/14(木) 13:45:20
[1]授業単元:プログラミング
[2]問題文:下記の補足課題のプログラムを下記の<仕様>のとおりに改変してください。
<仕様>
次のような関数rank_dispを用意し,活用する.
・機能: 引数で与えられた点数より成績評価(S, A, B, C, D)を行う.評価結果をコンソールに表示する.
・引数: 点数データ(0〜100の範囲の整数値)
・戻り値: 無し

※グローバル変数は使わないこと.
-----------------------------------------------------
<補足課題>
ある科目の成績は,点数に応じて下記のように定まるとする.

・90点以上: S
・80点以上90点未満: A
・70点以上80点未満: B
・60点以上70点未満: C
・60点未満: D

1つの整数のデータがキーボードから入力されると,対応する成績評価結果(S,A,B,C,Dのいずれか)がコンソールに出力されるプログラムを作成せよ.
なお,キーボードからの入力前に,「点数を入力して下さい」などといったようなメッセージが出力されるようにすること.
<実行例>
点数 = ? 73

B
-----------------------------------------------------
[3]環境 OS:Linux、コンパイラ:すみません、ちょっと分からなくて。言語:C
[4]期限:14時50分まで
よろしくお願いします。
946デフォルトの名無しさん:2007/06/14(木) 13:55:18
944>まぁ〜釣りだと思うぜw
947デフォルトの名無しさん:2007/06/14(木) 13:56:25
>>940
#include<stdio.h>

int main()
{
int x,i,array[5]={0};

while(1){
printf("整数入力==>");
if(scanf("%d",&x)==EOF)
break;;
if(x<49){
switch(x/10)
{
case 0 : array[0]++;break;
case 1 : array[1]++;break;
case 2 : array[2]++;break;
case 3 : array[3]++;break;
case 4 : array[4]++;break;
}
}
}
printf(" * *結果* * * \n");
for(i=0;i<5;i++)
printf("配列[%d]:%d件(%d〜%d)\n",i,array[i],i*10,(i+1)*10-1);
return 0;

}
948デフォルトの名無しさん:2007/06/14(木) 13:59:13
breakの後のセミコロンタイプミスなので消してくだしあ><
949デフォルトの名無しさん:2007/06/14(木) 14:05:56
別にエラーにはならんだろ
950デフォルトの名無しさん:2007/06/14(木) 14:08:37
ならないから消し忘れたんだけど消した方が良いでしょ?
951デフォルトの名無しさん:2007/06/14(木) 14:10:48
>>945

#include<stdio.h>

void rank(char *c,int score)
{
if(score<60)
*c='D';
else if(score>=60&&score<70)
*c='C';
else if(score>=70&&score<80)
*c='B';
else if(score>=80&&score<90)
*c='A';
else if(score>=90)
*c='S';

}

void disp(char c)
{
printf("%c\n",c);
printf("----------------------------\n");
}
952951:2007/06/14(木) 14:12:11
続き

int main()
{
int score;
char c;
printf("点数を入力してください。\n");
printf("点数=");
scanf("%d",&score);
putchar('\n');
rank(&c,score);
disp(c);
return 0;
}
953デフォルトの名無しさん:2007/06/14(木) 14:26:02
>>951
>>952
ありがとうございました!!!
954デフォルトの名無しさん:2007/06/14(木) 14:28:46
[1] 授業単元:while文
[2] 問題文:2~1000までの値を入力し、入力された値を2で繰り返し1になるまで割り、その途中経過と回数を表示するプログラム
 [3.1] WindowsXP
 [3.2] BorlandC++
 [3.3] C++
[5] その他の制限:while文使用、
例:値を入力してください:10
  10÷2=5
  5÷2=2
  2÷2=1

  回数:3回
955デフォルトの名無しさん:2007/06/14(木) 14:31:39
>>953
なんか微妙に条件付け忘れた。
まだ見てたらmain関数を以下のように変更してほしい。

int main()
{
int score=999;
char c;
while(score>100){
printf("点数を入力してください。\n");
printf("点数>>");
scanf("%d",&score);
if(score>100)printf("点数は0〜100の範囲で入力してください。\n");
}
putchar('\n');
rank(&c,score);
disp(c);
return 0;
}
956デフォルトの名無しさん:2007/06/14(木) 14:37:15
>>954
int main(void)
{
int s,c=0;
printf("数を入力:"); scanf("%d",&s);
while(s > 1){
printf("%d / 2 = %d\n",s,s/2);
c++;
}
printf("回数:%d回\n",c);
return 0;
}
957デフォルトの名無しさん:2007/06/14(木) 14:39:21
>>954

#include<iostream>

using namespace std;

int main()
{
int x,n=0;
cout<<"値を入力してください:";
cin>>x;
while(x>1)
{
cout<<x<<"/2="<<x/2<<endl;
n++;
x/=2;
}

cout<<"\n回数"<<n<<endl;
return 0;
}
958修正:2007/06/14(木) 14:39:58
>>954
int main(void)
{
int s,c=0;
printf("数を入力:"); scanf("%d",&s);
while(s > 1){
printf("%d / 2 = %d\n",s,s/=2);
c++;
}
printf("回数:%d回\n",c);
return 0;
}
959デフォルトの名無しさん:2007/06/14(木) 14:41:59
>>958 >>956 君は実にプップだな
960デフォルトの名無しさん:2007/06/14(木) 14:50:45
連続で申し訳ないのですが、アップローダーのNo.4249に
問題を載せさせてもらいましたので、またよろしくお願いします。
961デフォルトの名無しさん:2007/06/14(木) 15:02:19
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
ちょっwwwwwwwwwwwwwおまっwwwwwwwww
962デフォルトの名無しさん:2007/06/14(木) 15:09:27
どこかで見た問題だな
963デフォルトの名無しさん:2007/06/14(木) 15:23:46
次スレ立てました
C/C++の宿題を片付けます 90代目
http://pc11.2ch.net/test/read.cgi/tech/1181802185/
964デフォルトの名無しさん:2007/06/14(木) 15:23:59
[1] 授業単元:プログラム
[2] 問題文:入力された値が素数か判定するプログラム
 [3.1] OS:WindowsXP
 [3.2] BorlandC++
 [3.3] C++
[5] その他の制限:<stdio.h>しか使えないです
965問題♀16歳:2007/06/14(木) 15:24:44
実数を1つ入力して、小数点以下第一位を四捨五入して結果を表示する。
ただし、if文を使用すること。
966デフォルトの名無しさん:2007/06/14(木) 15:27:43
>>965 ただしif文は使用していないとのこと
#include <stdio.h>
int main(void) {
double x;
printf("Input > ");
scanf("%lf",&x);
printf("%.0lf \n",x);
return 0;
}
967問題♂16歳:2007/06/14(木) 15:28:16
問題♀16歳とオマンコして受精する方法
968デフォルトの名無しさん:2007/06/14(木) 15:28:33
969問題♀16歳:2007/06/14(木) 15:30:53
>>966
if文だっちゃ!!!でもありがとうございまず。
970デフォルトの名無しさん:2007/06/14(木) 15:31:52
>>969
それ答えになってないって。21歳の(ry
971問題♀13歳:2007/06/14(木) 15:38:34
>>970
21歳の童貞乙
972デフォルトの名無しさん:2007/06/14(木) 15:39:30
>>964

#include<iostream>

using namespace std;

int main()
{
int x,n=2;
cout <<"判定する数値を入力してください:";
cin>>x;
while(n<x)
{
if(x%n==0){
cout<<"その数値は素数ではありません"<<endl;
return 0;
}
n++;
}
cout<<"その数値は素数です。"<<endl;
return 0;
}
973デフォルトの名無しさん:2007/06/14(木) 15:40:55
あれ、C++だからiostreamで書いたら制限がstdio.hだった><
まぁcoutとcinをそれぞれ置き換えてください。
974デフォルトの名無しさん:2007/06/14(木) 15:41:45
>>964
#include <iostream.h>

int main()
{
    int i, n, flag = 1;

    cin >> n;
    if(n%2 == 0)
        flag = 0;
    else
        for(int i = 3; i*i <= n; i += 2)
            if(n%i == 0){
                flag = 0
                break;
            }

    if(flag) cout << "prime" << endl;
    else cout << "not prime" << endl;

    return 0;
}
975デフォルトの名無しさん:2007/06/14(木) 15:43:00
>>974
2 is not prime?
97629歳♀:2007/06/14(木) 15:50:45
はやくおしえろカス
977デフォルトの名無しさん:2007/06/14(木) 15:51:52
>>964
#include <stdio.h>

int main(void)
{
    int i, n, flag = 1;

    scanf("%d", &n);

    if(n < 2)
        return 1;
    else if(n == 2)
        ;
    else if(n%2 == 0)
        flag = 0;
    else
        for(i = 3; i*i <= n; i += 2)
            if(n%i == 0){
                flag = 0;
                break;
            }

    if(flag)
        printf("prime\n");
    else
        printf("not prime\n");

    return 0;
}
978デフォルトの名無しさん:2007/06/14(木) 16:02:20
>>965
#include <stdio.h>

int main(void)
{
    float n;
    long int m;

    scanf("%f", &n);
    if((long int)(n*10)%10 >= 5)
        m = (long int)n + 1;
    else
        m = (long int)n;
    printf("%ld\n", m);

    return 0;
}
979デフォルトの名無しさん:2007/06/14(木) 18:54:00
>>839
>>851
>>859
>>931
ありがとうございます、参考になりました。
おかげで間に合いそうです
980デフォルトの名無しさん:2007/06/14(木) 19:03:41
[1]C言語
[2]
3x3の計9つの整数をキーボードから読み込み、その値が100以上であれば1を、100未満であれば0を表示するプログラムを作成せよ

120 50 70 1 0 0
90 150 110 → 0 1 1
40 100 20 0 1 0
[3]
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: visual studio 2005
[3.3] 言語: C

981デフォルトの名無しさん:2007/06/14(木) 19:04:41
実行画面

1行目の
 1列目=120 
 2列目=50
 3列目=70
2行目の
 1列目=90
 2列目=150
 3列目=110
3行目の
 1列目=40
 2列目=100
 3列目=20
----------------------
元のデータ
120 50 70
90 150 110
40 100 20
変換後のデータ
1 0 0
0 1 1
0 1 0
 
よろしくお願いします
982デフォルトの名無しさん:2007/06/14(木) 19:19:34
>>981
#include <stdio.h>
int main()
{
int array[3][3];
int i,j;
for(i=0;i<3;i++){
printf("%d行目の\n",i+1);
for(j=0;j<3;j++){
printf("%d列目=",j+1);
scanf("%d",&array[i][j]);
}}
printf("-----------------------\n");
printf("元のデータ\n");
for(i=0;i<3;i++){
for(j=0;j<3;j++)
printf("%d ",array[i][j]);
putchar('\n');
}
printf("変換後のデータ\n");
for(i=0;i<3;i++){
for(j=0;j<3;j++)
if(array[i][j]>=100)
printf("1 ");
else printf("0 ");
putchar('\n');
}
return 0;
}


983デフォルトの名無しさん:2007/06/14(木) 19:40:11
>>645 >>655>>581

よろしくお願いします
984デフォルトの名無しさん:2007/06/14(木) 19:47:48
まだ後六日もあんじゃん
985デフォルトの名無しさん:2007/06/14(木) 19:59:11
>>983 >>936>>813

よろしくお願いします
986デフォルトの名無しさん:2007/06/14(木) 20:01:42
これはひどい
987デフォルトの名無しさん:2007/06/14(木) 20:29:23
>>985
めんどくせ
988デフォルトの名無しさん:2007/06/14(木) 20:34:19
C++はCに比べて結構面倒くさいからなぁ
989デフォルトの名無しさん:2007/06/14(木) 20:37:37
ウソ付け。
C++の方が多機能で楽だ。
990デフォルトの名無しさん:2007/06/14(木) 20:47:43
らくらくふぉんはしんぷるがうりです
991デフォルトの名無しさん:2007/06/14(木) 20:47:58
何て言うか、面倒くさいわりにやりがいが無いプログラムだから。
992デフォルトの名無しさん:2007/06/14(木) 21:41:16
xyzzyの罫線モードで時間割書いて、
fstreamで読み込んで表示するのが一番楽だ。
993デフォルトの名無しさん:2007/06/14(木) 22:22:26
>>645
C++に挑戦したが途中で挫けた。後は自分でガンバレ
#include<iostream>
#include<iomanip>
#include<string>
using namespace std;
struct subject{
string info[3];
};
const int WEEK_DAY=5;
const int LAST_SUBJECT=5;
int main(void){
subject time_table[WEEK_DAY][LAST_SUBJECT]={
{{"C言語研究1", "山田太郎", "E303"}, {"", "", ""}},
{{"Java", "田中次郎", "E404"}},
};
string subject_info[]={"1限", "2限", "3限", "4限", "5限"};
for(int subject=0;subject<LAST_SUBJECT;subject++){
for(int a=0;a<3;a++){
if(a==1) cout << "| " << subject_info[subject] << " |";
else cout << "| |";
for(int week_day=0;week_day<WEEK_DAY;week_day++)
cout << "|" << setw(10) << time_table[week_day][subject].info[a] << "|";
cout << endl;
}
cout << "|--------|";
for(int week_day=0;week_day<WEEK_DAY;week_day++)
cout << "|----------|";
cout << endl;
}
return 0;
}
994デフォルトの名無しさん:2007/06/14(木) 23:49:47
>>676ですが、回答して下さった方々ありがとうございました。
理解するのにちょっと時間かかりそうですががんばります!
995デフォルトの名無しさん:2007/06/14(木) 23:57:46
まあここで質問しなきゃ出来ないような奴は将来目に見えてるな
996デフォルトの名無しさん:2007/06/14(木) 23:59:45
たしかに8割くらいはどうしようもない質問だけど
2割くらいは自分も考えさせられる質問が出るから一概に馬鹿に出来なくて困る。
997デフォルトの名無しさん:2007/06/15(金) 00:02:07
将来プログラマになると決まったわけじゃないしいいんじゃない?
ただ自分で考える力がないのはどこ行ってもダメだろうけど
998デフォルトの名無しさん:2007/06/15(金) 00:07:07
人を馬鹿にして優越感に浸るのは、心が寂しい証拠ですよ。
仕事で心が寂しくなってませんか?仕事と2chをやめて
出家すれば、きっとも豊かな心と人間的な生活が取りもどせますよ。
999デフォルトの名無しさん:2007/06/15(金) 00:08:59
そうかーがっかい♪
1000デフォルトの名無しさん:2007/06/15(金) 00:09:37
1000なら高級言語は二度と使わない
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。