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

このエントリーをはてなブックマークに追加
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++の宿題を片付けます 94代目
http://pc11.2ch.net/test/read.cgi/tech/1185452895/
2デフォルトの名無しさん:2007/08/24(金) 19:45:41
いちおつ
3デフォルトの名無しさん:2007/08/24(金) 20:31:24
これが2なら今年こそ34年目にして初めて彼女ができる
4デフォルトの名無しさん:2007/08/24(金) 21:26:28
>>3
また来年
5デフォルトの名無しさん:2007/08/24(金) 22:51:48
ちょっと質問。
std::istreamから区切り文字のある場所を発見するのに
std::find(first, last, '&');
ってやると、戻り値がfirstと一致してしまうんだけど、
こういう使い方って駄目なの?
6デフォルトの名無しさん:2007/08/24(金) 23:41:36
>>3
96代目が待っている。どんどん問題を解いてスレ消化
7デフォルトの名無しさん:2007/08/25(土) 02:57:20
          ____
        /      \
       / ─    ─ \
     /   (●)  (●)  \ >>3さん2GETできなかった気分はどう?
     |  :::::: (__人__)  :::::: |
      \.    `ー'´    /ヽ
      (ヽ、      / ̄)  |
       | ``ー――‐''|  ヽ、. |
       ゝ ノ      ヽ  ノ  |
8デフォルトの名無しさん:2007/08/25(土) 12:41:11
しつこい粘着は嫌われる
9デフォルトの名無しさん:2007/08/25(土) 17:56:06
しつこくない粘着は好かれる
10デフォルトの名無しさん:2007/08/25(土) 23:05:14
だよね〜 きれいにはがれないとむかつくよね〜
11デフォルトの名無しさん:2007/08/25(土) 23:06:10
はがれて欲しい時はサクッとはがれてほしいし
はがれては困る時にははがれてほしくない

人間ってゼイタクだよな
12デフォルトの名無しさん:2007/08/26(日) 00:05:59
>>5
firstとlastの型は何?
13デフォルトの名無しさん:2007/08/26(日) 03:28:22
ゼイタクだから今の経済は回ってるんだよな
14デフォルトの名無しさん:2007/08/26(日) 14:36:25
1] 授業単元:C言語
[2] 問題文:
月(1〜12)と日(1〜31)をキーボードから入力し、入力された日付を表示する
プログラムを作成しなさい。

条件@:月の入力については1〜12で範囲チェックを行い。範囲外の入力
だった場合は、エラーメッセージを表示して再入力させること
条件A:日の入力については1〜31で範囲チェックを行い。範囲外の入力
だった場合は、エラーメッセージを表示して再入力させること
[3] 環境
 [3.1] OS:windows
 [3.2] コンパイラ名とバージョン: (VS 2005)
 [3.3] 言語: C
[4] 期限: (2007年9月1日まで)
[5] その他の制限:

実行結果
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━
┃月を入力:15 (15の部分はキーボードからの入力)
┃月の入力は「1以上12以下」にしてください
┃月を入力:8 (8の部分はキーボードからの入力)
┃日を入力:46 (46の部分はキーボードからの入力)
┃日の入力は「1以上31以下」にしてください
┃日を入力:25 (25の部分はキーボードからの入力)
┃入力された日付は「8月25日」です
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━

↑みたいな感じでよろしくお願いします<(_ _*)>
 説明下手ですいません^^;
15デフォルトの名無しさん:2007/08/26(日) 14:53:21
>>14
#include <stdio.h>
int main(void) {
int m,d;
do{
printf("月を入力:");
scanf("%d",&m);
if( m<1 || m>12 ) printf("月の入力は「1以上12以下」にしてください\n");
else break;
}while( 1 );

do{
printf("日を入力:");
scanf("%d",&d);
if( d<1 || d>31 ) printf("日の入力は「1以上31以下」にしてください\n");
else break;
}while( 1 );
printf("入力された日付は「%d月%d日」です\n",m,d);
return 0;
}
16デフォルトの名無しさん:2007/08/26(日) 15:54:08
14です。

素早い返信ありがとうございます^^

またよろしくお願いします(*- -)(*_ _)ペコリ
17デフォルトの名無しさん:2007/08/27(月) 04:40:10
前スレ967ですが
[1] 授業単元: C
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4866.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語: c
[4] 期限: 2007年8月25日
お願いします。
18デフォルトの名無しさん:2007/08/27(月) 05:19:07
>>17
#include <stdio.h>
#include <string.h>
main(){char b1[10],b2[10];scanf("%s %s",b1,b2);if(strcmp(b1,b2)<1)printf("%s %s",b1,b2);else printf("%s %s",b2,b1);}

#include <stdio.h>
#include <string.h>
main(){char b1[10],b2[10];scanf("%s %s",b1,b2);if(strcmp(b1,b2)<1){strcat(b1,b2);printf("%s",b1);}else{strcat(b2,b1);printf("%s",b2);}}

#include <stdio.h>
#include <stdlib.h>
main(){char b1[10];scanf("%s",b1);printf("%d %lf",atoi(b1),atof(b1));}
19デフォルトの名無しさん:2007/08/27(月) 23:44:53
20デフォルトの名無しさん:2007/08/28(火) 10:47:50
[1] 授業単元: C
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4871.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語: c
[4] 期限: 2007年8月30日
21デフォルトの名無しさん:2007/08/28(火) 11:04:38
>>20

#include <stdio.h>

void exch_order(int *pa, int *pb) {
if(*pa>*pb)
{
int tmp=*pa;
*pa=*pb;
*pb=tmp;
}
}

int main(void) {
int a,b;
printf("Input > ");
scanf("%d %d",&a,&b);
exch_order(&a, &b);
printf("%d %d\n",a,b);
return 0;
}
22デフォルトの名無しさん:2007/08/28(火) 11:55:23
>>20 2 きんもぉ〜☆なクソース♪
#include <stdio.h>
#include <string.h>
#include <ctype.h>

#define MAX 256
#define swap(type,x,y) do{type tmp=x; x=y; y=tmp;}while(0);

int main(void) {
char str[MAX];
size_t i,str_len;
printf("Input > ");
for(i=0; i<sizeof str/ sizeof str[0] -1; i++) {
str[i]=getchar();
if( !isprint(str[i]) ) break;
}
str[i]='\0';
str_len=strlen(str)-1;
for(i=0; i<=str_len/2; i++)
swap(char,str[i],str[str_len-i]);
printf("%s \n",str);
return 0;
}
23デフォルトの名無しさん:2007/08/28(火) 13:03:00
>>21,22
ありがとうございました。
24デフォルトの名無しさん:2007/08/28(火) 14:24:29
>>21
>20の1は、こういうことではないのか?
>整数a,bを入力とし、以下の関数を定義して、小大の順に出力するプログラムを作成せよ。区切りは空白とする。
入力:整数
出力対象:以下の関数
出力条件:小大の順に
関数を小大の順に出力ってのがどういうことかはわかりませんが。
25デフォルトの名無しさん:2007/08/28(火) 14:25:43
しかし、京大にもまとに文章を書けない指導教官がいるんだなぁ……
26デフォルトの名無しさん:2007/08/28(火) 15:52:35
っつか
> void exch_order(int *pa, int *pb)
> ポインタ引数を用い、大小関係により、 *pa と *pb を入れ替えて格納する。

入れ替えて格納する機能だけで十分でしょ。前文には「以下の関数を定義して」とあるんだし。
以下に該当する関数が、表示するところまでは条件に入ってない。
27デフォルトの名無しさん:2007/08/28(火) 17:20:57
xy平面の図形の問題なのですが、
二点(xs,ys)-(xe,ye)で与えられる線分が、長方形の領域(左下コーナー(xmin,ymin)、右上コーナー(xmax,ymax))
と交わるかどうか判定したいのですが、良い方法はありますか?
細かく場合分けして、判定したら出来そうなのですが、
何か物凄くいい方法で、数行で書けるような判定方法があればうれしいのですが。
Cで書いています。
よろしく
28デフォルトの名無しさん:2007/08/28(火) 18:21:07
月を入力したら、1日からその月の最後の日までを
日 月 火・・・
   1 2・・・
・・・
と表示するプログラムを教えてください。
29デフォルトの名無しさん:2007/08/28(火) 18:25:41
>>28
カレンダーを見た事は有りますか?
年も指定しないと無理なんですよ。
30デフォルトの名無しさん:2007/08/28(火) 19:09:32
>>29
日本語を見たことありますか?
書かれたまんまのことを答えれば良いのですよ。
31デフォルトの名無しさん:2007/08/28(火) 19:23:57
つまり、実際の曜日に関わらず月の下に1と書けば宜しいか。
32デフォルトの名無しさん:2007/08/28(火) 19:34:52
>>31 たぶん、>>28の内容からしたらそうアルよ。難しく考えないで、答えるアルよ。
けど、テンプレに則ってないんで無視しチャイナ。
33デフォルトの名無しさん:2007/08/28(火) 20:33:59
[1] 授業単元: C
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4873.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語: c
[4] 期限: 2007年8月30日
再々ですがお願いします
34デフォルトの名無しさん:2007/08/28(火) 20:41:32
int *pstr でいいんすか?
35デフォルトの名無しさん:2007/08/28(火) 20:47:08
>>33
#include<ctype.h>
int mystrlen(int*pstr){
  char*pstr_=(char*)pstr;
  int count = 0;
  for(;*pstr_;++pstr_)
    if(isspace(*pstr_)) ++count;
  return count;
}
void mystrcpy(int*pstr,int*pans){
  char*pstr_=(char*)pstr;
  char*pans_=(char*)pans;
  do if(!isdigit(*pans_))*pstr_++ = *pans_;
  while(*pans++);
}
36デフォルトの名無しさん:2007/08/28(火) 21:52:09
[1] 授業単元:C言語
[2] 問題文:
二次座標平面において,ランダムに4〜5個ほど点が与えられる.
そのような複数の点の最近傍を通る円の方程式を求めよ.
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:C
[4] 期限:[2007年08月31日24:00まで]
[5] その他の制限:計算速度が速い方が好ましい.
今現在最急降下法で作ってみたのですがうまく動きません。
よろしくお願いします。
37ジャレ:2007/08/28(火) 22:05:11
1] 授業単元:プログラミング
[2] 問題文: pgmファイルを読み込み、幅(width)、高さ(height)、色調(val)を
を表示する。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:visual C++
 [3.3] 言語:C
[4] 期限:[2007年08月29日12:00まで]
[5] 自分の実力のなさでグローバル変数を使用しないと上手くいきませんでした・・。
  ですので、グローバル変数は使わない方向でお願い致します。
  読み込んだ後フーリエ変換させる必要があるので、pgmの読み込み部分は
  関数化してくだい。では、よろしくお願い致します!!
38デフォルトの名無しさん:2007/08/28(火) 23:16:32
>>36
回帰直線(最小二乗法)のように数式で表現できるはずだから、それを晒してくれれば…
39デフォルトの名無しさん:2007/08/28(火) 23:18:52
>>27
>>1 の質問テンプレ

それと線分の交差って高校の数学でやらなかったっけ?
もう忘れてしまったけど
40デフォルトの名無しさん:2007/08/29(水) 00:42:22
>>36
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4875.c
クラメルじゃ遅いかな

入力例
4 (点の個数)
1.0 0.0 (各座標)
0.0 1.0
-1.0 0.0
0.0 -0.5

点の個数が3未満のときと全ての点が一直線上にあるときは答えが出ない
41デフォルトの名無しさん:2007/08/29(水) 02:24:44
>>37
できてるところまでうp!
42デフォルトの名無しさん:2007/08/29(水) 07:31:35
[1] 授業単元:C
[2] 問題文(含コード&リンク):
テーマ:ユーザ関数の作成
再帰関数を使って、Xのn乗を求めるプログラムを作成しなさい
プロトタイプ宣言:int power(int x, int n);
実行画面
文字列入力==>2
文字列入力==0
値:1

文字列入力==>2
文字列入力==>3
値:8

文字列入力==>6
文字列入力==>4
値:1296
[3] 環境
 [3.1] OS: (Windows/Linux/等々) XP
 [3.2] コンパイラ名とバージョン: ボーランド
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
43デフォルトの名無しさん:2007/08/29(水) 08:19:00
[1] 授業単元: C
[2] 問題文(含コード&リンク): 50行以上のプログラムをつくりなさい。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VS2005
 [3.3] 言語: C
[4] 期限: 2007年8月31日
[5] その他の制限: C言語検定3級まで習いましたので、その範囲でお願いします。
44デフォルトの名無しさん:2007/08/29(水) 09:55:36
>>42
#include<stdio.h>
int result;
int power(int x,int n){
if(n==0)
return 0;
result*=x;
n<0?n++:n--;
return power(x,n);
}
int main(void){
for(;;){
int x,n;
result=1;
printf("文字列入力==");
scanf("%d",&x);
printf("文字列入力==");
scanf("%d",&n);
power(x,n);
printf("値:%s%s%d\n",result<0?"-":"",n<0&&(result<-1||result>1)?"1/":"",result<0?-result:result);
}
return 0;
}
45デフォルトの名無しさん:2007/08/29(水) 10:18:59
[1] 授業単元: C
[2] 問題文(含コード&リンク):非負整数の不定長配列 arr[] 中で、指定データ data が出現する回数を返却するプログラムを関数
arr_occur_ct() を用い作成せよ。終端番兵は、EOA(-1) とする。反復変数を用いず、ポインタのアドレス演算を用いる。
int arr_occur_ct(int *arr, int data)
システム上では、入力の先頭をdata、それ以降はarrとする。入力の終了はEOA(-1)とする。
入力例 0 2 0 0 7 0 7 1 0 -1
出力例 4
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語: C
[4] 期限: 2007年8月30日

46デフォルトの名無しさん:2007/08/29(水) 10:25:03
unsigned arr_occur_ct(unsigned const * array, unsigned data)
{
if (array == NULL || data == EOA) return 0;
unsigned count = 0;
for (unsinged ic = 0; array[ic] != EOA; ++ic) {
if (array[ic] == data) ++count;
}
return count;
}
47デフォルトの名無しさん:2007/08/29(水) 10:26:34
仕様を勝手に変えるのは最悪
48デフォルトの名無しさん:2007/08/29(水) 10:34:40
問題が悪いな、非負整数の不定長配列と言いつつint *なんだから。
とは言え、>46は性質が悪すぎる。
49デフォルトの名無しさん:2007/08/29(水) 10:48:37
>>46
ソース全部書いて貰えるとうれしいのですが
50デフォルトの名無しさん:2007/08/29(水) 11:26:02
// >>45
// >46を参考に。
#include <stdio.h>
#include <stdlib.h>
#define EOA (-1)
int arr_occur_ct(int const * array, int data)
{
if (array == NULL || data == EOA) return 0;
unsigned count = 0;
for (const int * p = array; * p != EOA; ++p) {
if (* p == data) ++count;
}
return count;
}
int main()
{
int data = EOA;
scanf("%d", & data);
if (data == EOA) return 0;
unsigned cnt = 0;
int * arr = NULL;
do {
int val = EOA;
scanf("%d", & val);
arr = realloc(arr, (cnt + 1) * sizeof(* arr));
arr[cnt] = val;
} while (arr[cnt++] != EOA);
printf("%d\n", arr_occur_ct(arr, data));
return 0;
}
51デフォルトの名無しさん:2007/08/29(水) 11:41:22
数字一つごとにreallocって凄いな
52デフォルトの名無しさん:2007/08/29(水) 11:42:39
realloc()が毎回API叩く仕様だったら泣けるね。
53デフォルトの名無しさん:2007/08/29(水) 12:03:42
何個か一括して要求したらいいのに。
54デフォルトの名無しさん:2007/08/29(水) 12:25:57
[1] 授業単元:C
[2] 問題文(含コード&リンク):
問題1
テーマ:文字配列の操作
文字型の配列変数mojiに設定されている文字数を数えなさい
char moji[] = "ABCDEFG";
実行画面
文字数:7

問題2
テーマ:ユーザ関数の作成
問題1をもとに文字数を返すユーザ関数を作成しなさい
プロトタイプ宣言:int MyLen(char *s);
char moji[]="ABCDEFG";
実行画面
文字数:7
[3] 環境
 [3.1] OS: (Windows/Linux/等々) XP
 [3.2] コンパイラ名とバージョン: ボーランド
[4] 期限:
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

55デフォルトの名無しさん:2007/08/29(水) 12:33:33
[1] 授業単元:C
[2] 問題文(含コード&リンク): 検索する文字列を入力し、その一を返すユーザ関数を作成しなさい
プロトタイプ宣言:char *MojiSearch(char *m,char *s);
引数1:検索対象文字列
引数2:検索文字列
戻り値:あった場合(一致した文字列を先頭アドレス)
    なかった場合(NULL)
char moji[] = "ABCDEFGHJABFGHSKL";

結果
検索文字列==>HS
検索位置:HSKL

[3] 環境
 [3.1] OS: (Windows/Linux/等々) XP
 [3.2] コンパイラ名とバージョン: ボーランド
[4] 期限:
[5] その他の制限:
何方かお願いします

56デフォルトの名無しさん:2007/08/29(水) 12:54:04
>>54
strlenでググれ。
それだけで解決するから。
57【4200円(定額)】:2007/08/29(水) 13:06:24
>>56
#include <stdio.h>
#include <string.h>
char *MojiSearch(char *m,char *s){
 int i = 0;
 int j = 0;
 int result = 0;
 while(i < strlen(m)-strlen(s)+1){
  for(j=0;j<strlen(s);j++){
   if(m[i+j] == s[j]){
   result++;
  }
  else{
   result = 0;
  break;
  }
 }
 if(result != 0)
  break;
  i++;
 }
 if(result == 0)
  return NULL;
 else
  return &m[i];
}
58デフォルトの名無しさん:2007/08/29(水) 13:08:03
悪い見本のようなコードだな
59デフォルトの名無しさん:2007/08/29(水) 13:16:55
>>58
BM法でやれとか書いてないからいいんじゃないかな。
いかにもって感じで。
60デフォルトの名無しさん:2007/08/29(水) 13:18:42
>>55
char *Mystrstr(const char *m, const char *s)
{
char *cp = (char *)m;
if(*s == '\0')
return cp;

while(*cp != '\0')
{
char *tp = cp;
char *pp = (char *)s;
while(*tp == *pp)
{
if(*pp =='\0')
return cp;
tp++;
pp++;
}
if(*pp == '\0')
return cp;
cp++;
}
return NULL;
}
61デフォルトの名無しさん:2007/08/29(水) 14:00:56
>>37のやつ、真面目にやろうとすると、コメント行読み飛ばしたり、
区切り文字判別したりしなきゃならないのか。

・改行が出現するまでを1行とする
・1行は70文字未満
・区切り文字は空白、タブ、改行の三種類

効率よく単語毎に切り出せるプログラムってどうやって作るの?
62デフォルトの名無しさん:2007/08/29(水) 14:03:26
[1] 授業単元: C
[2] 問題文(含コード&リンク): 自作プログラム作成
1.ステップは最低50文
2.1次元配列or2次元配列を使用
3.if文,while文,for文使用
4.自作関数使用
5.♯define使用
6.ヘッダファイル化
7.必ずプロンプトで誰が見てもわかる対応型プログラムにする
[3] 環境
 [3.1] OS:Windows
 [3.2] VS2005
 [3.3] 言語: C
[4] 期限: ([2007年8月31日AM8:00まで]

お願いします。
63デフォルトの名無しさん:2007/08/29(水) 14:05:28
>>62
その条件を満たせばどんなプログラムでもいいってこと?
64デフォルトの名無しさん:2007/08/29(水) 14:21:41
>必ずプロンプトで誰が見てもわかる対応型プログラム
物凄く難しくね?
6562:2007/08/29(水) 14:31:50
>>63
どんなプログラムでも良いです。
66デフォルトの名無しさん:2007/08/29(水) 14:55:26
対応型じゃなくて対話型?
67デフォルトの名無しさん:2007/08/29(水) 15:02:22
>>64
>>66
問題文には対応型と書いてあったのですが、よくわからないので7番目の条件はどうでも良いです。
すいません。
68デフォルトの名無しさん:2007/08/29(水) 15:07:36
7.がどうでもいいのなら無意味なコードを書き連ねて完成だなw
69デフォルトの名無しさん:2007/08/29(水) 15:18:35
>>62
2〜5の条件にある文は既に習ったんだろうけど
それぞれを学んだ時の題材として作ったのはどんなプログラム?
70デフォルトの名無しさん:2007/08/29(水) 15:21:16
>>62なんでも良いなら、以前宿題スレであった問題に
つけた俺の答えを送ろう
「数値を螺旋状に表示するプログラム」
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4877.txt
71デフォルトの名無しさん:2007/08/29(水) 16:34:41
>>69
入力した数値が処理された数値として出力されるようなプログラムですかね。
平均を出したりとか。

あと、例としてはカレンダーをつくってみてはどうか?と書いてありました。
7233:2007/08/29(水) 20:52:18
>>35
ソース全部を書いて貰えるとうれしいのです
後、2もお願いできませんか
73ジャレ:2007/08/29(水) 22:51:12
>>61
ファイルタイプの判別、コメントを飛ばしが必要です。
1] 授業単元:プログラミング
[2] 問題文: pgmファイルを読み込み、幅(width)、高さ(height)、色調(val)を
を表示する。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:visual C++
 [3.3] 言語:C
[5] 作成途中で、バグもありますが仕様はこんな感じになっています。

http://www8.uploader.jp/user/loaiza21/images/loaiza21_uljp00001.txt
74デフォルトの名無しさん:2007/08/30(木) 00:23:52
>>61
pgmにはバイナリとアスキーがあって、どちらもヘッダ部(コメント含む)を読んだら後は、前者はfread()、
後者は本体部分が70文字以上の長い行のデータが多いことを鑑みてfscanf()で取り出せばいい。
問題はヘッダ部で、途中で改行されると読めないツールや逆に改行がないと読めないツールもあって、
どう解釈するかが微妙。
75デフォルトの名無しさん:2007/08/30(木) 00:27:16
なんだ、>73を見る限りヘッダだけ読めば本体読む必要ないじゃん。
しかし、depthを色調と言われてもぴんとこないなぁ。
76デフォルトの名無しさん:2007/08/30(木) 01:47:49
[1] 授業単元: C
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4878.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語: c
[4] 期限: 2007年8月30日
77デフォルトの名無しさん:2007/08/30(木) 02:29:00
[1] 授業単元:C言語
[2] 問題文: int型の配列に設定されている値の中の最大値と最小値
を求めて出力するプログラム

条件1:int型配列のサイズは10とし、
あらかじめ初期リストによって値が設定されているものとする。
条件2:アルゴリズムは繰り返しで処理すること。
※初期化リストは{10,7,3,15,12,1,18,21,25,14}と設定されているものとする。

[3] 環境
 [3.1] OS:windows
 [3.2] コンパイラ名とバージョン: (VS 2005)
 [3.3] 言語: C
[4] 期限: (2007年9月1日まで)
[5] その他の制限:
よろしくお願いします<(_ _*)>
78デフォルトの名無しさん:2007/08/30(木) 02:40:39
79デフォルトの名無しさん:2007/08/30(木) 03:13:12
>>76
#include <string.h> #include <stdlib.h> #include <stdio.h> #define EOA 0.0
void arr_cycle(int *arr, int len){ int *temp = malloc((sizeof(int))*len); memcpy(temp,arr,((sizeof(int))*len));
memcpy(arr+1,temp,((sizeof(int))*(len-1))); memcpy(arr,temp+len-1,((sizeof(int))));
free(temp);}
int arr_positive(double *arr1, double *arr2)
{double *temp;int i;
for(temp = arr1,i = 0; *temp != EOA; temp++){
if(*temp > 0.0){arr2[i] = *temp;i++;
}
}
arr2[i] = EOA;
return i;
}
int main()
{
int ary[] = {1,2,3,4,5,6};
int i,positive;
double arr1[] = {1.2, -0.8, 2.3, 3.4, -1.1, EOA};
double arr2[sizeof(arr1)/sizeof(double)] = {0};
double *temp;
arr_cycle(ary,6);
for(i = 0; i < 6; i++)
printf("%d ",ary[i]);
putchar('\n');
positive = arr_positive(arr1,arr2);
for(temp = arr2; *temp != EOA; temp++)
printf("%lf ",*temp);
putchar('\n');
return 0;
}
80デフォルトの名無しさん:2007/08/30(木) 03:25:38
>>77
#include <stdio.h>
#define N 10
void bubble_sort(int sort[], int elements)
{
int i,j,temp;
for(i=0; i < elements-1; i++){
for(j=i+1; j < elements; j++){
if(sort[i] > sort[j]){
temp = sort[i];
sort[i] = sort[j];
sort[j] = temp;
}

}
}
}
int main()
{
int ary[N] ={10,7,3,15,12,1,18,21,25,14};
bubble_sort(ary, N);
printf("MAX %d MIN %d \n",ary[9],ary[0]);
return 0;
}
81デフォルトの名無しさん:2007/08/30(木) 03:45:09
>>33
#include <stdio.h> #include <ctype.h> #define EOA -1
int mystrlen(int *pstr); int usepointersum(int *ary); void mystrcpy(char *pstr,char *pans);
int main()
{ char ary1[] = "Kyoto"; char ary2[] = "Kyoto Univ"; int iary[] ={ 1,3,5,7,9,2,10,4,8,6,EOA};
char ary3[] = "m04d12t5"; char ary4[20] ={'\0'}; int i;
printf("%s\t%d\n",ary1,mystrlen(ary1)); printf("%s\t%d\n",ary2,mystrlen(ary2));
for(i = 0; i < sizeof(iary)/sizeof(int);i++) printf("%d ",iary[i]);
putchar('\n'); printf("%d \n",usepointersum(iary)); printf("%s \n",ary3);
mystrcpy(ary3,ary4); for(i = 0; ary4[i] != '\0';i++) putchar(ary4[i]);
putchar('\n'); return 0; }
int mystrlen(int *pstr)
{ char *temp=NULL; int num = 0; int i = 0; for(temp = (char *)pstr; *temp!='\0';temp++){
if(*temp > ' '){ num++; } } return num; } int usepointersum(int *ary) {
int sum = 0; int *temp; for(temp = ary; *temp != EOA;temp++) sum += *temp;
return sum; }
void mystrcpy(char *pstr,char *pans)
{
char *tstr;
int i,j=0;
for(tstr = pstr; *tstr != '\0'; tstr++)
if(!(isdigit(*tstr))){
pans[j] = *tstr;
j++;
}
pans[j]='\0';
}
82デフォルトの名無しさん:2007/08/30(木) 04:32:39
1] 授業単元:C++
[2] 問題文(含コード&リンク):メインプログラムを参考に3次元配列を動的に確保する関数を作成せよ。
ただし、関数宣言は”void func(***)”を仕様する
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4882.txt
[3] Visual Studio 2005
 [3.1] OS:Windows
 [3.2] VC
 [3.3] 言語: C++
[4] 期限: 無期限
[5] その他の制限: 特にありません

よろしくお願いします
83デフォルトの名無しさん:2007/08/30(木) 12:08:13
授業単元: C
[2] 問題文(含コード&リンク):
テーマ:文字列配列の操作
問題1:文字列を入力して偶数番目の要素と奇数番目の要素を別の配列に格納し、文字列として表示しなさい
実行画面
文字列入力==>ABC123def
偶数要素:AC2df
奇数要素:B13e

問題2:文字列と削除文字列を入力し文字列中から削除文字を排除しなさい
実行画面
文字列入力(m1)==>ABCDEFAABCDABC
削除文字==>A
結果文字列(m2):BCDEFBCDBC
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:ボーランド
 [3.3] 言語: C
[4] 期限:
[5] その他の制限:
84デフォルトの名無しさん:2007/08/30(木) 12:18:53
授業単元: C
[2] 問題文(含コード&リンク):
テーマ:ポインタの利用
問題1: ポインタ変数を利用して、2つの合計を求めなさい
int a=10,b=5,g;
int *pa,*pb;
実行画面
g:15

問題2:ポインタ変数を利用して、文字型の配列変数mojiの値を実行画面のように表示させなさい
char moji[]="ABCD";
char *mp;
実行画面
A
B
C
D

問題3:文字列を入力し、文字列中の数字のみを別の配列に格納し表示しなさい
実行画面
文字列入力==>AB1CDE23FG4
数字文字列:1234
実行画面

実行画面
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:ボーランド
 [3.3] 言語: C
[4] 期限:
[5] その他の制限:
85デフォルトの名無しさん:2007/08/30(木) 12:27:03
こんな問題もできないのか
86デフォルトの名無しさん:2007/08/30(木) 12:27:56
授業単元: C
[2] 問題文(含コード&リンク):
テーマ:文字列配列の操作
問題1:2値を小さい順に表示するユーザ関数を作成しなさい
プロトタイプ宣言:void SortDisp(int dt1,int dt2);
実行画面
数値1入力==>10
数値2入力==>15
数値1:10
数値2:15

数値1入力==>15
数値2入力==>10
数値1:10
数値2:15

問題2:2値の合計を返すユーザ関数を作成しなさい
プロトタイプ宣言:int Add(int aa,int bb);
実行画面
変数a入力==>3
実数b入力==>8
合計:11
数値1入力==>15
数値2入力==>
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:ボーランド
 [3.3] 言語: C
[4] 期限:
[5] その他の制限:
87デフォルトの名無しさん:2007/08/30(木) 12:41:05
>>74
仕様に忠実にするなら
P5 100 100 255

P5
#hoge hoge
100 100
255

どちらも読めなきゃだめだよなあ。
88デフォルトの名無しさん:2007/08/30(木) 13:33:48
課題というより依頼みたいなものもここでいいのでしょうか?
89デフォルトの名無しさん:2007/08/30(木) 13:46:07
宿題・課題のみです。
90デフォルトの名無しさん:2007/08/30(木) 13:50:48
あるC++のプログラムをC言語のプログラムに書き変えてほしいのですが
該当スレなどはありませんか?
91デフォルトの名無しさん:2007/08/30(木) 14:01:05
何方か83 84お願いします
92デフォルトの名無しさん:2007/08/30(木) 14:12:40
>>83の問題1
#include <stdio.h>
#define MAX_NUM 128

int main()
{
char str[MAX_NUM], even[MAX_NUM/2], odd[MAX_NUM/2];
int i, j, k;
printf("文字列入力==>");
scanf("%s", str);

for(i=0, j=0, k=0; str[i]; i++)
{
if(i%2) {odd[j] = str[i];j++;}
else {even[k] = str[i];k++;}
}
odd[j] = even[k] = '\0';

printf("偶数要素:%s\n", even);
printf("奇数要素:%s\n", odd);

return 0;
}
93デフォルトの名無しさん:2007/08/30(木) 14:20:22
>>83の問題2
#include <stdio.h>
#define MAX_NUM 128

int main()
{
char m1[MAX_NUM], m2[MAX_NUM], delchr;
int i, j;
printf("文字列入力(m1)==>");
scanf("%s", m1);
fflush(stdin);
printf("削除文字==>");
delchr = (char)getchar();
for(i=0, j=0; m1[i]; i++)
{
if(m1[i] != delchr) {m2[j] = m1[i]; j++;}
}
m2[j] = '\0';
printf("結果文字列(m2):%s", m2);
return 0;
}
94デフォルトの名無しさん:2007/08/30(木) 14:23:07
>>84の問題1
#include <stdio.h>
int main()
{
int a=10, b=5, g;
int *pa, *pb;
pa = &a;
pb = &b;
g = *pa + *pb;
printf("g:%d", g);
return 0;
}

95デフォルトの名無しさん:2007/08/30(木) 14:24:32
>>84の問題2
#include <stdio.h>

int main()
{
char moji[]="ABCD";
char *mp;
mp = moji;
while(*mp) putchar(*mp++);
return 0;
}
96デフォルトの名無しさん:2007/08/30(木) 14:28:06
>>84の問題3
#include <stdio.h>
#include <ctype.h>
#define MAX_NUM 128
int main()
{
char moji[MAX_NUM], digit[MAX_NUM];
int i, j;
printf("文字列入力==>");
scanf("%s", moji);

for(i=0, j=0; moji[i]; i++)
{
if(!isdigit(moji[i]) == 0) {digit[j] = moji[i]; j++;}
}
digit[j] = '\0';
printf("数字文字列:%s", digit);

return 0;
}
97デフォルトの名無しさん:2007/08/30(木) 14:28:18
何方か86お願いします
98デフォルトの名無しさん:2007/08/30(木) 14:32:18
>>86の問題1
void SortDisp(int dt1,int dt2)
{
printf("数値1:%d\n数値2:%d\n", dt1<dt2 ? dt1 : dt2, dt1<dt2 ? dt2 : dt1);
}

>>86の問題2
int Add(int aa,int bb)
{
return aa+bb;
}
99デフォルトの名無しさん:2007/08/30(木) 14:59:04
[1] 授業単元: ランダム関数
[2] 問題文(含コード&リンク):20〜100までのランダムな値を表示
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:BorlandC++
 [3.3] 言語:C++
10076:2007/08/30(木) 14:59:28
問題1、2、共にこれを参照と言ってました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4884.c
あと>>33の2もお願いできませんか?
101デフォルトの名無しさん:2007/08/30(木) 15:14:23
[1] 授業単元: C
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4885.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語: c
[4] 期限: 2007年8月31日
102デフォルトの名無しさん:2007/08/30(木) 15:22:46
>>76
あとから、これ参照してとか言うなカス
作った関数意味ねーだろうが
あと>>33の2も答え出てるだろうが
10382:2007/08/30(木) 15:23:50
何方か82お願いします
104デフォルトの名無しさん:2007/08/30(木) 15:26:58
[1] 授業単元:確率統計
[2] 問題文(含コード&リンク):
指定ファイルを読み込んで、
平均値と標準偏差を標準出力するプログラムを作成せよ。

(指定ファイル)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4886.txt
このファイルの2列目の要素のみ(0.0732421875 0.0693359375 ・・・)の
平均値等を出せばいいようで、他の列の数値は無視して大丈夫だそうです。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 9月1日
[5] その他の制限:制限はありません。
よろしくおねがいします。
105デフォルトの名無しさん:2007/08/30(木) 15:30:08
>>99
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(time(NULL));
printf("%d", rand()%81 + 20);
return 0;
}
106デフォルトの名無しさん:2007/08/30(木) 15:45:54
[1] 授業単元: 配列
[2] 2次元配列の中に1~100までの連続した数字を格納し、表示させる
 [3.1] WinXP
 [3.2] Borland
 [3.3] C++
[5] 1 2 3 4 5 6 7 8 910
11121314151617181920
21222324252627282930
…こんな感じで100まで表示させたいのです。
107デフォルトの名無しさん:2007/08/30(木) 15:56:27
#include <stdio.h>

int main(void)
{
int array[100], i;

for (i = 1; i <= 100; i++)
array[i-1] = i;
for (i = 0; i < 100; i++) {
printf("%2d", array[i]);
if (array[i] % 10 == 0)
putchar('\n');
}
}
108デフォルトの名無しさん:2007/08/30(木) 15:59:20
#include <stdio.h>

int main(void)
{
int num[10][10], i, j;

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

return(0);
}
109デフォルトの名無しさん:2007/08/30(木) 16:05:47
>>101
3番めこんなのでどうでしょう?
/*
xの昇順階乗を計算する。
fact_pow(10,3) = 10*11*12 = 1320
fact_pow(0,3) = 0*1*2 = 0
fact_pow(3,0) = 1;
fact_pow(-3,3) = -3*-2*-1 = -6
*/
#include <stdio.h>
#include <stdlib.h>
int fact_pow(int x,int p);
int main(void) {
int x, p;

printf("整数[x]を入力してください:");
scanf("%d",&x);
printf("整数[p]を入力してください:");
scanf("%d",&p);
printf("%d^[%d] = %d\n",x,p,fact_pow(x,p));
return 0;
}
int fact_pow(int x,int p) {
int value = 1;
int i;
if(p == 0)
return 1;
for(i = 0; i < p; i++)
value *= (x + i);
return value;
}
110デフォルトの名無しさん:2007/08/30(木) 16:12:55
[1] 授業単元: 乱数
[2] 1~25までの数字をランダムで25個表示させる。その際同じ値がでないようにする。
 [3.1] WinXP
 [3.2] Borland
 [3.3] C++
よろしくお願いします
111デフォルトの名無しさん:2007/08/30(木) 16:24:11
112デフォルトの名無しさん:2007/08/30(木) 16:24:20
>>110
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int num[25];
int i, index, tmp;

for(i=0; i<25; i++) num[i] = i+1;

srand(time(NULL));
for(i=0; i<25; i++)
{
index = rand() % (i + 1);
tmp = num[i];
num[i] = num[index];
num[index] = tmp;
}

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

return 0;
}
113デフォルトの名無しさん:2007/08/30(木) 16:47:21
>>110
#include <iostream>
#include <cstdlib>
#include <ctime>
const int N = 25;
int main()
{

int rnd[N] = {0};
int i,r,r1,r2,temp;
srand((unsigned)time(NULL));
for(i = 0; i < N; i++)
rnd[i] = i + 1;
r = rand();
for(i = 0; i < r; i++){
r1 =rand()%N;
r2 =rand()%N;
temp = rnd[r1];
rnd[r1] = rnd[r2];
rnd[r2] = temp;
}
for(i = 0; i < N; i++)
std::cout << rnd[i] << ' ';
std::cout << '\n';
return 0;
}
114デフォルトの名無しさん:2007/08/30(木) 17:06:12
>>110
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <deque>
using namespace std;
int main(void)
{
const int NUM = 25; //定数宣言
srand((unsigned)time(NULL)); //乱数初期化
//配列qiの宣言と初期化
deque<int> qi;
for(int i = 0; i != NUM; i++)
{
qi.push_back(i+1); //1〜NUMまでの数値を並べる
}
//乱数を使って数値をランダムに取り出す
for(int i = NUM; i != 0; i--)
{
int n = rand() % i; //0〜(i-1)までの乱数を取り出す
cout << qi.at(n) << endl; // n番目の数値を表示
qi.erase(qi.begin()+n); // n番目の数値を配列から削除
}
return 0;
}
115104:2007/08/30(木) 17:23:00
>>111
お早い回答ありがとうございます!!
おかげで助かりました!
116111:2007/08/30(木) 17:48:33
久々ありがとうレスをもらった
「どういたしまして」
117デフォルトの名無しさん:2007/08/30(木) 20:08:54
>>116
回答をしてもらったわけではない部外者だが、他の回答者として
自分よりお早く回答してくれてありがとうございました!
おかげで自分が回答せずに済みました!
118デフォルトの名無しさん:2007/08/30(木) 20:19:47
>>114
このスレでGNUスタイルのコードは初めて見た気がする
119デフォルトの名無しさん:2007/08/30(木) 20:48:25
残念だが C++ の標準スタイルでは引数がないなら
int main() で良いんだよ。CはISO準拠だとint main(void)ってなるが
120デフォルトの名無しさん:2007/08/30(木) 23:05:03
>>73 こんなもんでおk?後々P5 を読む気が無いコードだけど…
#include<stdio.h>

FILE *comment_remove(const char *filename){ // P5 の時はデータ領域が不正になります
FILE *fp_src, *fp_work;
int moji, is_comment=0;

if((fp_src=fopen(filename, "r"))==NULL) return NULL;
if((fp_work=tmpfile())!=NULL){
while((moji=fgetc(fp_src))!=EOF){
if(moji=='#') is_comment=1;
if(moji=='\n') is_comment=0;
if(!is_comment) fputc(moji, fp_work);
}
fseek(fp_work, 0L, SEEK_SET);
}
fclose(fp_src);
return fp_work;
}

int pgm_info(const char *filename, char *pformat, int *pwidth, int *pheight, int *pdepth){
FILE *fp;
char buf[3+1];
int width, height, depth;

fp=comment_remove(filename);
if(fp!=NULL){
if(fscanf(fp, "%3s%d%d%d", buf, &width, &height, &depth)==4) sprintf(pformat, "%s", buf),*pwidth=width,*pheight=height,*pdepth=depth;
fclose(fp);
}
return 0;
}
121デフォルトの名無しさん:2007/08/30(木) 23:12:07
>>73
>>120 の訂正と使い方 (関数 pgm_info の返り値で成否を判定できるようにした)
int pgm_info(const char *filename, char *pformat, int *pwidth, int *pheight, int *pdepth){
FILE *fp;
char buf[3+1];
int width, height, depth, ret=0;

fp=comment_remove(filename);
if(fp!=NULL){
if(fscanf(fp, "%3s%d%d%d", buf, &width, &height, &depth)==4){
sprintf(pformat, "%s", buf),*pwidth=width,*pheight=height,*pdepth=depth,ret=1;
}
fclose(fp);
}
return ret;
}

int main(void){
char format[3+1];
int width, height, depth;
pgm_info("a.pgm", format, &width, &height, &depth);
printf("format : %s\nwidth : %d\nheight : %d\ndepth : %d\n", format, width, height, depth);
return 0;
}
122デフォルトの名無しさん:2007/08/30(木) 23:29:58
>>109
ありがとうございます。
1,2の方もお願いできませんか
123デフォルトの名無しさん:2007/08/30(木) 23:54:22
>>109
1はyの範囲に制限を付けないと難しいのではないかな。
例えば1900年以降でよいとか、前提はないの?
124123:2007/08/30(木) 23:57:24
失礼、
>>109さんではなく>>101さんあてです
125デフォルトの名無しさん:2007/08/31(金) 00:24:33
>>124
問題を確認しましたが101で書いたことしか載ってませんでした。
126デフォルトの名無しさん:2007/08/31(金) 00:56:07
76の1で
void arr_cycle(int *arr, int len)
{
int i, temp;
temp = a[len-1];
for(i=len-1;i>0;i--) arr[i] = arr[i-1];
a[0] = temp:
}
でソースをかいてくれませんか
127デフォルトの名無しさん:2007/08/31(金) 01:10:34
>>126
日本語でOk
128デフォルトの名無しさん:2007/08/31(金) 02:01:56
>>101
日付チェックはしてない。グレゴリオ暦が使われた年以降。
int leap(int y)
{
return (y%4==0)?(y%100==0)?(y%400==0)?1:0:1:0;
}
int days(int y,int m,int d)
{
int dom[2][12]=
{{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,30,31,31,30,31,30,31}};
int day=0,i,j;
j=leap(y);
for(i=0;i<m-1;i++) day+=dom[j][i];
day+=d;
return day;
}
main()
{
int y,m,d;
scanf("%d %d %d",&y,&m,&d);
printf("days=%d\n",days(y,m,d));
}
129デフォルトの名無しさん:2007/08/31(金) 07:51:47
>>101
#include<stdio.h>
int f(int y,int m,int d){
if(m<3)
y--,m+=12;
return y*365+y/4-y/100+y/400+(m+1)*306/10+d-428;
}
int leap(int y){
return f(y,3,1)-f(y,2,29);
}
int days(int y,int m,int d){
return f(y,m,d)-f(y,1,0);
}
int main(void){
int ymd;
printf("yyyymmdd="); scanf("%d",&ymd); printf("leap=%d\ndays=%d\n",leap(ymd/10000),days(ymd/10000,ymd%10000/100,ymd%100));
return 0;
}

#include<stdio.h>
#define PI 3.1415926535897932384626433832795
double rad(double s){
return s*PI/180;
}
double deg(double r){
return r*180/PI;
}
int main(void){
double s;
printf("s="); scanf("%lf",&s); printf("rad(s)=%.9f\ndeg(rad(s))=%.9f\n",rad(s),deg(rad(s)));
return 0;
}
130デフォルトの名無しさん:2007/08/31(金) 09:41:06
>>73 バイナリフォーマットにも対応できるように作りなおしてみた
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
int pgm_get_word(FILE *fp, char buf[], int buf_size){
int i=0, moji;
while(i<buf_size-1 && (moji=getc(fp))!=EOF){
if(isspace(moji)){ if(i>0) break; }
else if(moji=='#'){
fscanf(fp, "%*[^\n]");
if(i>0) break;
}else{ buf[i++]=moji; }
}
buf[i]='\0';
if(i>=buf_size-1) while((moji=getc(fp))!=EOF && !isspace(moji)) ;
return (i>0);
}
int pgm_info(const char *filename, char *pformat, int *pwidth, int *pheight, int *pdepth){
FILE *fp;
char format[3+1], width[10+1], height[10+1], depth[4+1];
int ret=0;
fp=fopen(filename, "rb");
if(fp!=NULL){
if(pgm_get_word(fp, format, sizeof(format)) && pgm_get_word(fp, width, sizeof(width)) &&
pgm_get_word(fp, height, sizeof(height)) && pgm_get_word(fp, depth, sizeof(depth)) ){
sprintf(pformat, "%s", format); *pwidth=atoi(width); *pheight=atoi(height); *pdepth=atoi(depth);
ret=1;
}
fclose(fp);
}
return ret;
}
131デフォルトの名無しさん:2007/08/31(金) 11:01:58
これを76の1のようにずらしたいのですが
#include <stdio.h>

void arr_cycle(int arr[], int len)
{
int i, temp;
temp = arr[len-1];
for(i=len-1;i>0;--i)
arr[i] = arr[i-1];
arr[0] = temp;
}
int main(void) {
int i;
int n;
int data[10];

scanf("%d", &n);
for(i = 0;i < n;i++)
scanf("%d",&data[i]);

arr_cycle(&data[i], n);
for(i=0;i<n;i++)
printf("%d ",data[i]);

return 0;
}
132デフォルトの名無しさん:2007/08/31(金) 11:46:32
[1] 授業単元: c言語
[2] 非負整数の不定長配列 arr[] 中で、全てのデータが閾値 thre 以上かどうかの真偽値(0または1)を返却する関数 arr_thre_all() を作成する。終端番兵は、EOA(-1) とする。反復変数を用いず、ポインタのアドレス演算を用いる。
システム上では、入力の先頭をthre、それ以降はarrとする。入力の終了はEOA(-1)とする。全て閾値以上の場合は 1 、そうでない場合は 0 を出力するプログラムを作れ。
入力例:1 2 3 4 1 -1
出力例:1
 [3.1] WinXP
 [3.2] bcc
 [3.3] C
[4]8/31
133デフォルトの名無しさん:2007/08/31(金) 12:02:54
>>131
arr_cycle(data,n);
134デフォルトの名無しさん:2007/08/31(金) 12:39:47
>>131
ありがとうございます。
135デフォルトの名無しさん:2007/08/31(金) 12:48:51
[1] 授業単元:
[2] 問題文:1~10までの数字を2回入力し1番目と2番目までの入力された値を足し算して表示させる
 [3.1] WinXp
 [3.2] Borland
 [3.3] C++
[5] その他の制限:2番目に入力される値は1番目よりも小さくなるようにする。
8 4 と入力されたら
8+7+6+5+4と計算され、30と表示される感じです
136デフォルトの名無しさん:2007/08/31(金) 12:52:11
>>33の2ですが
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4888.txt
和がうまく求めたいのですが、どうすればいいのでしょうか?
137デフォルトの名無しさん:2007/08/31(金) 13:00:10
>>136
> int iary[] ={0};
これだとそもそも一個しか入力できないわけだが。
入力ロジックは兎も角、積算ロジックはぱっと見良さそうだよ。
138デフォルトの名無しさん:2007/08/31(金) 13:30:57
サイズの問題以外にも配列にEOAを入れないのはまずいだろ。
139136:2007/08/31(金) 14:29:34
どのように入力を変えればよいのでしょうか?
140デフォルトの名無しさん:2007/08/31(金) 14:46:34
int iary[数値] ={0};
ってやればいいんじゃない?
141デフォルトの名無しさん:2007/08/31(金) 14:55:26
入力の終了条件を-1が入力されたらにする。
142136:2007/08/31(金) 15:04:55
ちょっとよくわからないので書いてくれませんか?
143デフォルトの名無しさん:2007/08/31(金) 15:23:51
>>136のソース見て、usepointersumなんて言う情けない関数名
を見て、「あれ、どっかで俺、こんな関数名の入ったソースを張ったぞ」
と思って見返したら>>81>>33に向けて張ったソースの一部じゃねぇか
どおりで<ctype.h>が意味無くincludeされてるわ。
ファイルそのものUpしてあげる
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4889.txt
それで、いったい何をしたいのか、事細かく質問しなよ
何が分からないのかがわからないの?まぁ、良いや。
ついでに>>33よ、まるで自分が書いたようにソースファイルをupしちゃだめだよ
144136:2007/08/31(金) 15:31:29
>>143
すいませんでした。
ソースから数値を読み取るんじゃなくて、コンパイラから入力したいのですが
145デフォルトの名無しさん:2007/08/31(金) 15:36:13
>>144
もう我慢ならねえ!!!!
コマンドラインから受け取るようにしろよ、この穀つぶしが!!!!!!!
146143:2007/08/31(金) 16:06:11
「コンパイラから入力したいのですが」の意味が俺にはわからない。
147デフォルトの名無しさん:2007/08/31(金) 16:30:45
コンパイラが対話式とみた
148デフォルトの名無しさん:2007/08/31(金) 16:48:30
コンパイルオプションで -Dxxx=yyy とか付けるんじゃない?
149デフォルトの名無しさん:2007/08/31(金) 17:41:01
統合開発環境で、デバッグ時に、引数を与えたいが、やり方がわからない。
こうなんじゃないか?
150デフォルトの名無しさん:2007/08/31(金) 19:59:35
最近のコンパイラは賢いな。ESP機能がある。
151デフォルトの名無しさん:2007/09/01(土) 01:14:10
>>132
#include <stdio.h>
#define EOA -1
#define ARRMAX 1024
int arr_thre_all(int* arr, int thre){
while(*arr != EOA) if(*(arr++) < thre) return 0;
return 1;}
int main(void){
int i; int arr[ARRMAX]; unsigned int thre;
scanf("%d", &thre);
for(i = 0; i != ARRMAX; i++){
scanf("%d", &arr[i]);
if(arr[i] == EOA) break;}
i = arr_thre_all(arr, thre);
printf("%d\n", i);
return 0;}
152デフォルトの名無しさん:2007/09/01(土) 02:18:00
#include <stdio.h>
int main(){
int u,l;
while(1){scanf("%d",&u);if(u<11 && u>0){break;}}
while(1){scanf("%d",&l);if(l<u && l>0){break;}}
//printf("%d +%s%d = %d\n", u, (u-l>2)?" ... + ":" ", l, ( u + l )*( u - l + 1 ) / 2);
printf("%u\n", ( u + l )*( u - l + 1 ) / 2);
return 0;}
153デフォルトの名無しさん:2007/09/01(土) 15:53:36
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
C#でクラスを用いてシューティングゲームを作れ。
スタート・中断・再開ボタン機能を必ず入れ、敵味方と弾は全てオブジェクトとする
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:Windows visual studio2005
 [3.3] 言語: C#
[4] 期限:9月4日
[5] その他の制限: なし

C#は駄目でしょうか。
C#のソース付きのゲームとかがあればそれを参考にやれるんですが・・・
154デフォルトの名無しさん:2007/09/01(土) 15:54:59
C/C++のみです。C#は他言語です。
155デフォルトの名無しさん:2007/09/01(土) 16:30:32
C#のソース付きのゲームのサンプルってテトリスぐらいしかしらんな〜
156デフォルトの名無しさん:2007/09/01(土) 19:03:05
>>153
夏休み中に何をしていたんだ
157デフォルトの名無しさん:2007/09/01(土) 19:14:24
>>153
ガンシューにしてみたら?
158デフォルトの名無しさん:2007/09/01(土) 19:58:00
1対1のガンマンシューティングなんてどうだ?
159デフォルトの名無しさん:2007/09/01(土) 20:50:01
[1] 授業単元:C言語
[2] 問題文: 文字列に含まれるすべての文字を、1つ後のASCUコードをもつ文字に置き換えるプログラムを作成する。
       例:Nurupo → Ovsvqp
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ: bcc
 [3.3] 言語: C
[4] 期限: 9月4日
[5] その他の制限: 特にありません。 よろしくお願いします。
160デフォルトの名無しさん:2007/09/01(土) 21:07:52
>>159
#include <stdio.h>
#define MAX_LENGTH 512
int main(void)
{
char str[MAX_LENGTH] = "Nurupo", buf[MAX_LENGTH];
int i;
for(i=0; str[i]; i++) buf[i] = str[i] + 1;
buf[i] = '\0';

printf("%s → %s", str, buf);
return 0;
}
161デフォルトの名無しさん:2007/09/01(土) 21:08:52
ああ、置き換えるのか・・・仕様とは違うなorz
162デフォルトの名無しさん:2007/09/01(土) 21:16:12
do *p+=1; while(*++p);
適当に置き換えておいてくれ
163デフォルトの名無しさん:2007/09/01(土) 22:39:03
アスキーコード最後の文字はどうするん?
164デフォルトの名無しさん:2007/09/01(土) 22:45:54
何も考えずに1つ後のASCUコードをもつ文字にするんだろ
165デフォルトの名無しさん:2007/09/01(土) 22:56:37
[1] 授業単元:C言語
[2] 問題文: 長方形の縦と横の長さ(double型)を引数として受け取り、その長方形の面積(double型)を
       返す関数Xを作り、mainから呼び出して動作を確認するプログラムの作成
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Windows visual studio2005
 [3.3] 言語: C
[4] 期限: 9月3日 21時
[5] その他の制限: なし
166デフォルトの名無しさん:2007/09/01(土) 23:02:06
#include <stdio.h>

double X(double width, double hight)
{
return width * hight;
}

int main(void)
{
printf("%g", X(10.0, 8.0));
return 0;
}
167デフォルトの名無しさん:2007/09/01(土) 23:50:03
>>155
テトリスでもいいんで教えてもらえないでしょうか。要領さえ分かれば何とかなるんで
>>156
全然違う事の勉強です。
168デフォルトの名無しさん:2007/09/02(日) 00:11:21
>>162
これって1文字目が\0だとPC爆発しないか?
169デフォルトの名無しさん:2007/09/02(日) 00:21:51
しないよ
170デフォルトの名無しさん:2007/09/02(日) 05:25:19
>>167
http://school.topposystem.co.jp/SampleCode/PictureList.asp
のフリーサンプル集のどっかにあったよ。
っていうか、俺もサンプルとして見たかったからダウンしたので
それをupしますね
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4891.zip
171デフォルトの名無しさん:2007/09/02(日) 20:09:48
>>160
お早い回答ありがとうございます!!
おかげで助かりました!

>>162
どこを置き換えればいいかもおしえていただけると助かるのですが
おしえていただけないでしょうか?
172デフォルトの名無しさん:2007/09/02(日) 20:53:33
>>171
void replaceFollower(char * foo)
{
for (unsigned ic = 0; foo[ic] != '\0'; ++ic) {
++foo[ic];
}
}
#include <stdio.h>
int main()
{
char str[] = "Nurupo";
printf("%s\n", str);
replaceFollower(str);
printf("%s\n", str);
return 0;
}
17336:2007/09/02(日) 22:49:56
>>36です.
遅くなりましたが,答えてくださった方ありがとうございます.
無事に課題提出を行うことができました.
実は>>36で書いた課題にはオプション問題がありまして,
自分には全く分からなかったので手を出さなかったのですが….
どのように解答するか気になるので,
もし分かる方がいたらよろしくお願いします.
[1] 授業単元:C言語
[2] 問題文:
二次座標平面において,ランダムに4〜5個ほど点が与えられる.
そのような複数の点の最近傍を通る円の方程式を求めよ.
ただし,中心座標(x_0,y_0)は
(1)一番低いy座標よりも下にある.
(2)一番低いx座標よりも左にある.または,一番高いx座標よりも右にある.
{if((x_0<=xmin||x_0<=xmax)&&y_0<=ymin) true;}
を満たすものとする.
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:C
[4] 期限:期限なし
[5] その他の制限:計算速度が速い方が好ましい.
174デフォルトの名無しさん:2007/09/02(日) 22:55:35
>>173
最近傍の評価はどうするの?
円と点 n の距離を Dn と置く時
Σ(Dn)
Σ((Dn)^2)
とかそういうのが無いと解けないっぽ
17536:2007/09/02(日) 23:28:37
>>174
評価関数は各自で任意に設定すると言われているのですが….
今回は
Σ(Dn^2)
の最小二乗法でお願いします.
176デフォルトの名無しさん:2007/09/03(月) 00:47:20
[1] 授業単元:C言語
[2] 問題文: 整数aと自然数nを入力してaのn乗を求める。入力は正しく行われるものとする。
[3] 環境
 [3.1] OS:Win
 [3.2] コンパイラ:Win visual studio2005
 [3.3] 言語: C
[4] 期限: 9月5日
[5] その他の制限: --nを使うところまではわかるのですが、どうも上手くできません。
           お力を貸していただけると助かります。


177デフォルトの名無しさん:2007/09/03(月) 01:04:59
int factorial(int a,int n){
long int buf=a;
while(n!=0){
buf *=a;
n--;
}
return buf;
}
ただし少しnを大きくしただけでオーバーフローする
178デフォルトの名無しさん:2007/09/03(月) 07:13:30
[1] 授業単元:C言語
[2] 問題文:掛け算の九九の表をファイルprod99.txtに書き込むプログラムを作成する。
 [3.1] OS:Windows
 [3.2] コンパイラ:Windows visual studio2005
 [3.3] 言語: C
[4] 期限: 9月5日 12時
[5] その他の制限: 特にありません
179デフォルトの名無しさん:2007/09/03(月) 08:34:13
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
仕事は「納期 T、作業時間 W、ペナルティ C」の
三つの情報で特徴付けられるとする。

N 個の仕事が与えられる。これらの仕事を適当に並び替えて
「納期から遅れた時間×ペナルティ」の総和を最小にせよ。
なお、開始の時刻は 0 とする。

入力:
一行目は仕事の総数 N (正の整数、N ≦ 50 としてよい)
二行目から n+1 行目までは仕事の情報 T W C (すべて正の整数)

出力:
最小の「納期から遅れた時間×ペナルティ」の総和。

例:
(入力)
2
1 2 3
1 1 1
(出力)
5
(1番目の仕事をやってから2番目の仕事をやる。両方納期には遅れるが
 ペナルティ 5。逆にすると2番目の仕事は納期に間に合うがペナルティ 6)
[3] 環境:特に指定なし(OS環境問わず、C/C++どちらでも可)
[4] 期限:9月10日
[5] その他の制限:特になし
180デフォルトの名無しさん:2007/09/03(月) 08:40:41
>>173
付帯条件がよくわからんのだけど、つまり円の右上だけ(or 左上だけ)で
他の点に近い円を描けってことでよいのかね?
181デフォルトの名無しさん:2007/09/03(月) 08:43:42
>>178
#include <stdio.h>
int main() {
  int i, j;
  FILE *fp = fopen("prod99.txt", "w");
  for (i = 1; i <= 9; ++i) {
    for (j = 1; j <= 9; ++j) {
      fprintf(fp, "%2d ", i*j);
    }
    fprintf(fp, "\n");
  }
  fclose(fp);
}
182デフォルトの名無しさん:2007/09/03(月) 08:45:10
>>178
#include <stdio.h>
int main(void){
FILE *file;
if(({file=fopen("prod99.txt","r"))==NULL){
fputs("エディタを開いて、ファイル名 prod99.txt に以下を書き込んでください\n"
" 1 2 3 4 5 6 7 8 9\n"
" 1 1 2 3 4 5 6 7 8 9\n"
" 2 2 4 6 81012141618\n"
" 3 3 6 9121518212427\n"
" 4 4 812162024283236\n"
" 5 51015202530354045\n"
" 6 61218243036424854\n"
" 7 71421283542495663\n"
" 8 81624324048566472\n"
" 9 91827364554637281\n",stderr);
return 1;
}
fputs( " 1 2 3 4 5 6 7 8 9\n"
" 1 1 2 3 4 5 6 7 8 9\n"
" 2 2 4 6 81012141618\n"
" 3 3 6 9121518212427\n"
" 4 4 812162024283236\n"
" 5 51015202530354045\n"
" 6 61218243036424854\n"
" 7 71421283542495663\n"
" 8 81624324048566472\n"
" 9 91827364554637281\n",file);
fclose(file);
return 0;
}
183182:2007/09/03(月) 09:01:27
if(({file=fopen("prod99.txt","r"))==NULL){

if(({file=fopen("prod99.txt","w"))==NULL){
184デフォルトの名無しさん:2007/09/03(月) 09:11:13
{
185デフォルトの名無しさん:2007/09/03(月) 12:02:13
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): 逆ポーランド記法に変換してから計算する四則演算の電卓プログラムを作れ
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語: c
[4] 期限: 2007年9月4日

よろしくおねがいします。
186 ◆kRtmRcQ9ak :2007/09/03(月) 12:41:26
[1] 授業単元: コンピュータプログラミング
[2] 問題文: 名前&身長&体重の入力&ファイルに記録&読み出し&BMI計算(BMI=体重kg/(身長m)^2)&身長順に並び替え
[3] 環境
 [3.1] windows
 [3.2] コンパイラ名とバージョン:C++Compiler5.5
 [3.3] 言語: C
[4] 期限:2007 9/5まで
[5] その他の制限:無し。

よろしくお願いします。
187デフォルトの名無しさん:2007/09/03(月) 13:35:05
>>185
エラーチェックはしていない
二桁以上の数が入力される場合にも対応していない

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4893.c
188billy:2007/09/03(月) 14:58:50
構造体に入っている値を32個ずつ別のテキストファイルに出力したいのですが、どうしたらいいのですか?
189デフォルトの名無しさん:2007/09/03(月) 16:00:11
>>188
スレ違い
190デフォルトの名無しさん:2007/09/03(月) 16:19:38
〔1〕C言語
〔2〕問題(下記)
#include<stdio.h>
void main()
{
int ia;

printf("整数を入力してください:");
scanf("%d",&ia);
if(○○)
printf("偶数です");
else
printf(”奇数です”);
}

上記に示したのは、入力した整数が偶数か奇数かを判断するプログラムである。
if(○○)の○○を埋めよ。
〔3〕WinXP

9月4日〆

よろしくお願い致します。
191デフォルトの名無しさん:2007/09/03(月) 16:23:52
>>190
(ia+191)%2
192デフォルトの名無しさん:2007/09/03(月) 16:35:44
>>191
協力感謝です。
有難うございました!
193デフォルトの名無しさん:2007/09/03(月) 17:47:42
[1] 授業単元:C言語
[2] 問題:引数として渡された2つの整数の小さい方の値を返す関数である。
      〔  〕のを埋めて関数を完成させよ。

〔  〕imin(int ia,int ib)
{
if(ia<ib)
〔  〕
else
〔 〕
}

[3] 環境
 [3.1] OS:WindowsXP
 [3.3] 言語:C++
[4] 期限: 9月4日まで
[5] その他の制限: なし

葬式で1週間授業休んだらおいてかれた\(^o^)/
194デフォルトの名無しさん:2007/09/03(月) 17:52:28
>>193
〔int〕imin(int ia,int ib)
{
if(ia<ib)
〔return ia;〕
else
〔return ib;〕
}
195デフォルトの名無しさん:2007/09/03(月) 17:54:22
〔/*  〕imin(int ia,int ib)
{
if(ia<ib)
〔;  〕
else
〔*/int imin(int ia,int ib){return ia<ib?ia:ib;〕
}
196デフォルトの名無しさん:2007/09/03(月) 17:55:12
197デフォルトの名無しさん:2007/09/03(月) 17:55:22
>195の勝ち。
198デフォルトの名無しさん:2007/09/03(月) 17:56:07
>>195
この発想はなかったわ
199デフォルトの名無しさん:2007/09/03(月) 20:52:39
[1] 授業単元:パターン認識
[2] 問題:
問題の概要はhttp://www.uploda.org/uporg1000429.txtにかきました
問題は、入力データを正規分布のデータで評価し確率をもとめてほしいのです。
長くなりましたがお願いします。
計算がめんどうだったらlogで出してくれてもいいです。
[3] 環境
 [3.1] OS:LINUX
 [3.3] 言語:C
[4] 期限: いつでもいいです。
20036:2007/09/03(月) 21:35:18
>>180
そうです,右上または左上となる円を描くイメージです.
もしお時間ありましたらよろしくお願いします.
201デフォルトの名無しさん:2007/09/03(月) 21:49:05
>>199
「正規分布のデータで『評価』」ってなに?
アップローダにあるほうもグダグダかかれてて
結局問題でやるべきことがよくわからないんだが。
202デフォルトの名無しさん:2007/09/03(月) 22:01:08
評価するっていうのは平均と分散からできる分布のグラフ
(横軸が数値で、縦軸が度数(ここでは確率))において
入力データと数値を見比べて一致したところの確率を出すことを評価するっていうんです。

1つのデータが9次元なんです。
9次元の入力データから9次元の平均をひいたものを2乗して
9次元の分散でわる。そうすると9個の値がでますからそれをたせばexpの中身になって
expの前にある変数とexpをかけると確率が出せるわけです。

それがfです。
すいませんfの式がここでかけなくて。
203デフォルトの名無しさん:2007/09/03(月) 22:07:30
>>202
平均分散が与えられた多次元正規分布の式に、与えられた
20個のデータを突っ込んだときの値を出せと言っている?

『評価』は estimate じゃなくて evaluate だということ?
204デフォルトの名無しさん:2007/09/03(月) 22:12:00
そうです。まさしくそうです
205デフォルトの名無しさん:2007/09/03(月) 22:19:08
しかしこの正規分布で出した確率があまりに小さくなってあってるかどうかもわからないまま
他のアルゴリズムに用いないといけないから困る。
206デフォルトの名無しさん:2007/09/03(月) 22:32:06
>>204
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4894.c

205 のいうとおり、値があまりに小さくなったがこれでいいのかね。
207デフォルトの名無しさん:2007/09/03(月) 22:35:07
値いくらになりました?
logで表示してくれるとありがたいです。

検算させていただきます。
208デフォルトの名無しさん:2007/09/03(月) 22:37:44
>>173
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4895.c

ファイル point.dat に次のように記述し、実行ファイルを実行する
4
1.0 0.0
0.0 1.0
-0.5 0.0
0.0 -1.0
209デフォルトの名無しさん:2007/09/03(月) 22:50:46
>>208
目的関数の性質が悪そうなんだけど、単純な降下法でうまくいくの?
210208:2007/09/04(火) 07:23:05
>>209
多分うまくいかない
局所解にはまってしまうと思う
でも、数学はもう解けない頭になってしまった
(仕事ならやるけどね)
211デフォルトの名無しさん:2007/09/04(火) 07:45:43
数式で表すと、適当な平行移動と反転をして
 min. Σ| (x-x_i)^2 + (y-y_i)^2 - r^2 |
 s.t. x ≧ 0, y ≧ 0, r ≧ 0
を解く、という問題に落ちるんだけど、この目的関数は
凸でないし、滑らかでもないので非常に面倒な問題になるはず。

ただ、関数が綺麗だから逐次二次緩和くらいで十分解けそう。
とても実装する気にはならないけど。
212デフォルトの名無しさん:2007/09/04(火) 15:02:44
[1] 授業単元: ランダム関数
[2] 問題文(含コード&リンク): トランプをランダムで表示させる
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Borland
 [3.3] 言語:C++
表示が○○(マーク)の○(数字)と表示させたいのです
213デフォルトの名無しさん:2007/09/04(火) 15:58:55
>>212
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
enum {MK_HEART, MK_DIAMOND, MK_CLOVER, MK_SPADE};
int mark, num;
srand(time(NULL));
mark = rand() % 4;
num = rand() % 13 + 1;
switch(mark)
{
case MK_HEART:printf("ハート");break;
case MK_DIAMOND:printf("ダイヤ");break;
case MK_CLOVER:printf("クローバー");break;
case MK_SPADE:printf("スペード");break;
}
if(1 < num && num < 11) printf("%d", num);
else
{
switch(num)
{
case 11:putchar('J');break;
case 12:putchar('Q');break;
case 13:putchar('K');break;
case 1:putchar('A');break;
}
}
return 0;
}
214デフォルトの名無しさん:2007/09/04(火) 21:20:09
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3967.txt
以前提出した物:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4897.txt
[3] 環境
 [3.1] OS: Windows/Linux
 [3.2] コンパイラ名とバージョン: MicrosoftFramework/gcc
 [3.3] 言語: C
[4] 期限:なるべく早く
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
以前もこのスレで質問し、教えていただいたものを用いて形にし、
提出はしたのですが結果がおかしく再提出を求められました
フィボナッチ数(fib)の値がおかしいのですが、
提出した物の最後の print(b3); printf("\n");を直前のfor文の中に入れて確認したところ、
8+13の結果(fib(8))が21でなく121になってしまっているため以降の全ての値がおかしくなっているようです。
おそらくpaddがおかしいのだと思うのですが、いろいろ変えてみても上手くいきません
おかしい箇所の指摘や改善方法のご教授をお願いします
215デフォルトの名無しさん:2007/09/04(火) 21:25:30
MMXでも使ってんのかと思った
216デフォルトの名無しさん:2007/09/04(火) 21:26:26
[1] 授業単元:C言語
[2] 問題文:文字列を入力し、その文字列を縦に並べて表示するプログラムの作成。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名:Windows visual studio2005
 [3.3] 言語: C
[4] 期限: 9月5日 21時
[5] その他の制限: ないです。
          よろしくお願いします。


217デフォルトの名無しさん:2007/09/04(火) 21:29:45
>>216
#include <stdio.h>

int main(void)
{
char buf[512], *p = buf;
scanf("%s", buf);

while(*p)
{
printf("%c\n", *p);
p++;
}

return 0;
}
218デフォルトの名無しさん:2007/09/04(火) 21:37:52
>>216
2バイト文字対応は不要?
219デフォルトの名無しさん:2007/09/04(火) 21:50:15
海栗に書き換えればいいだけ
220214:2007/09/04(火) 22:13:01
自己解決しました。
スレ汚しすみませんでした。
221デフォルトの名無しさん:2007/09/04(火) 23:04:34
授業単元:C
問題文(含コード&リンク):
テーマ:文字配列の操作
1問目:キーボードより表示開始文字と表示終了文字を入力開始〜終了までの文字を表示しなさい
char moji[]="ABCDEF〜XYZ"; /*大文字26文字*/
実行画面
moji:ABCDEF〜XYZ
開始位置==>B
終了位置==>F
表示:BCDEF

moji:ABCDEF〜XYZ
開始位置==>D
終了位置==>D
表示:D

moji:ABCDEF〜XYZ
開始位置==>E
終了位置==>B
表示:EF〜XYZAB
環境:
OS:WindowsXP
コンパイラ名とバージョン:ボーランド
言語:C 
期限:
222デフォルトの名無しさん:2007/09/04(火) 23:06:43
授業単元:C
問題文(含コード&リンク):
テーマ:文字配列の操作
問題2:文字列と検索文字、置換文字を入力し文字列中の検索文字を置換文字に置き換え
なさい

実行画面
文字列(m1)入力==>ABCDEFAABCDABC
削除文字==>A
置換文字==>*
結果文字列(m1):*BCDEF**BCD*BC

環境:
OS:WindowsXP
コンパイラ名とバージョン:ボーランド
言語:C 
期限:
223デフォルトの名無しさん:2007/09/04(火) 23:20:30
>>211
#include <stdio.h>
#include <ctype.h>

int main(void)
{
char moji[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; /*大文字26文字*/
char start, end, *p;

printf("moji:%s\n", moji);
printf("開始位置==>");
scanf("%c", &start);
fflush(stdin);
printf("終了位置==>");
scanf("%c", &end);
fflush(stdin);

if(!isalpha((int)start) || !isalpha(end)) return 1;
start = (char)toupper(start);
end = (char)toupper(end);

p = moji + start - 'A';
for(;;)
{
putchar(*p);
if(*p == end) break;
if(*(++p) == '\0') p = moji;
}
return 0;
}
224デフォルトの名無しさん:2007/09/04(火) 23:24:39
>>222
#include <stdio.h>
#include <ctype.h>

int main(void)
{
char m1[512];
char del, rplc, *p = m1;

printf("文字列(m1)入力==>");
scanf("%s", m1);
fflush(stdin);

printf("削除文字==>");
scanf("%c", &del);
fflush(stdin);

printf("置換文字==>");
scanf("%c", &rplc);
fflush(stdin);

for(; *p; p++)
{
if(*p == del)
{
*p = rplc;
}
}

printf("結果文字列(m1):%s", m1);
return 0;
}
225デフォルトの名無しさん:2007/09/05(水) 00:32:04
[1] 授業単元:C言語
[2] 問題文: 文字(char型)を引数として受け取り、その文字が英小文字ならば大文字に、英大文字なら小文字に変換して返す関数toulを作り、
       mainから呼び出して動作を確認するプログラムの作成する。ただし、引数はスペース、英字、数字のみとし、スペースや字数はそのまま変更しない。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Windows visual studio2005
 [3.3] 言語: C
[4] 期限: 9月6日 22時
[5] その他の制限: なし


226デフォルトの名無しさん:2007/09/05(水) 00:46:54
>>225
mainは省略
動作確認も省略

char toul(char buf){
int dif='A'-'a';
if(buf >= 'a' && buf <='z'){
return char + dif;
}else if(buf >= 'A' && buf <='Z'){
return char - dif;
}
227デフォルトの名無しさん:2007/09/05(水) 00:50:15
>>225
#include <stdio.h>
#include <ctype.h>

char toul(char ch)
{
if(isupper(ch))
return tolower(ch);
else if(islower(ch))
return toupper(ch);
else
return ch;
}

int main(void)
{
printf("'%c' → '%c'\n", 'a', toul('a'));
printf("'%c' → '%c'\n", 'B', toul('B'));
printf("'%c' → '%c'\n", ' ', toul(' '));
printf("'%c' → '%c'\n", '2', toul('2'));
return 0;
}
228デフォルトの名無しさん:2007/09/05(水) 01:24:23
授業単元:C
問題文(含コード&リンク):
文字列と削除文字列を入力し文字列中から削除文字を排除しなさい
実行画面
文字配列入力(m1)==>ABCDEFAABCDABC
排除文字==>A
結果文字列(m2):BCDEFBCDBC

環境:
OS:WindowsXP
コンパイラ名とバージョン:ボーランド
言語:C 
期限:

229デフォルトの名無しさん:2007/09/05(水) 02:51:26
>>228
#include <stdio.h>
#include <string.h>

#define MAX 256

int main(void)
{
char str[MAX],ch;
size_t sz_str,i;
printf("文字配列入力(m1)==>");
fgets(str,sizeof(str)/sizeof(str[0]),stdin);
sz_str=strlen(str);
printf("排除文字==>");
ch=getchar();

for(i=0; i<sz_str; i++) {
if(str[i]!=ch) putchar(str[i]);
}

return 0;
}
230デフォルトの名無しさん:2007/09/05(水) 07:31:01
授業単元:C
問題文(含コード&リンク):

問題1:テーマ:標準関数の利用
文字型の配列変数m1[20]、m2[10]に文字列を入力し、m1側にm2の文字列を連結させなさい
使用する標準関数:strcat()
実行画面
実数m1入力==>ABC
実数m2入力==>DEFGHIJ
結果m1:ABCDEFGHIJ

問題2:文字列1と文字列2を入力し比較を行い、結果を表示しなさい
使用する標準関数:strcmp()
実行画面
文字列1入力==>ABC
文字列2入力==>ABC
結果:2つの文字列は同じです。

文字列1入力==>ABC
文字列2入力==>DEF
結果:2つの文字列は違います
環境:
OS:WindowsXP
コンパイラ名とバージョン:ボーランド
言語:C 
期限:

231デフォルトの名無しさん:2007/09/05(水) 08:02:32
>>229 はちと改善した方が良いかな・・・自己レス。
232デフォルトの名無しさん:2007/09/05(水) 08:06:40
>>231
入力の改行文字を取り除いていない。
233デフォルトの名無しさん:2007/09/05(水) 08:18:57
>>232 それは無問題。なんなら改行する前にEOFを入れておけば良い。
234デフォルトの名無しさん:2007/09/05(水) 08:42:13
何この馬鹿。
235デフォルトの名無しさん:2007/09/05(水) 08:47:47
>>234
いや、バカは知ったかのお前。何が問題かが分かってないな。
MAXで指定した以上の文字列を入力した場合の問題だよ、アホ。
失せろ、初心者。なんか、去年このスレで世話になったのか知らんが
今年はおかしな知ったか無知初心者が回答者に紛れ込んで大嘘ついて恥さらしをしているよな・・・
失せろガキ
236自信過剰のアホの極み発言:2007/09/05(水) 08:48:41
232 名前:デフォルトの名無しさん 投稿日:2007/09/05(水) 08:06:40
>>231
入力の改行文字を取り除いていない。
入力の改行文字を取り除いていない。
入力の改行文字を取り除いていない。
入力の改行文字を取り除いていない。
入力の改行文字を取り除いていない。
237デフォルトの名無しさん:2007/09/05(水) 08:49:57
>>234 >>232
うわっ、なんだお前ら、きめぇ。何様?アホ丸出しw
238デフォルトの名無しさん:2007/09/05(水) 08:51:53
>>234 ( ´,_ゝ`)プ (ゝc_,´・)プププッ (◆*ノ、っ'`*)ップ  (●´っ`)ブッ:;.:.. (*Ф3Ф).:∵ぶっ ブハァッ(_Д_)・:∴・
お前笑えるw
239デフォルトの名無しさん:2007/09/05(水) 08:57:29
>>234
おいっリアル馬鹿、何か言えよ?知ったか君よぉ(プッ
240デフォルトの名無しさん:2007/09/05(水) 09:10:01
>>234
調子ぶっこいて恥さらしをするくらいなら >>230 にでも答えてやれよ、知ったか初心者w
241デフォルトの名無しさん:2007/09/05(水) 11:11:56
>>230
問題2
#include<stdio.h>
#include<string.h>

int main(void)
{
char T_T[256], orz[256];
int ml,o,lm =0;

printf("文字列1入力==>");
fgets(T_T, sizeof(T_T), stdin);
printf("文字列2入力==>");
fgets(orz, sizeof(orz), stdin);

ml=strcmp(T_T, orz);
if( ml^0^lm ) printf("結果:2つの文字列は違います\n");
else printf("結果:2つの文字列は同じです。\n");

return 0;
}
242デフォルトの名無しさん:2007/09/05(水) 12:28:42
授業単元:C
問題文(含コード&リンク):

問題:ポインタで操作しなさい
char moji[] ="ABCDEF〜XYZ"; /*最大文字26文字*/
char *pc;
pc=moji;

結果
moji:ABCDEF〜XYZ
開始位置==>B
終了位置==>F
表示:BCDEF

moji:ABCEF〜XYZ
開始位置==>D
終了位置==>D
表示:D

moji:ABCDEF〜XYZ
開始位置==>E
終了位置==>B
表示:EF〜XYZAB
環境:
OS:WindowsXP
コンパイラ名とバージョン:ボーランド
言語:C 
期限:

243デフォルトの名無しさん:2007/09/05(水) 12:47:08
>>242
// 実験してないからバグるかも
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void print(char* s, char* e)
{
printf("表示:");
for( ; s <= e ; s++ ) putchar(*s);
puts("");
}
int main(void)
{
char moji[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char *pc = moji, *pcstart, *pcend, start, end;

while(1) {
printf("moji:%s\n開始位置==>", moji); scanf("%c", &start);
printf("終了位置==>"); scanf("%c", &end);
pcstart = strchr(moji, start);
pcend = strchr(moji, end);
if( pcstart == NULL || pcend == NULL ) break;
if( pcstart <= pcend ) print(pcstart, pcend);
else print(pcend, pcstart);
}
return 0;
}
244デフォルトの名無しさん:2007/09/05(水) 14:34:14
[1] 授業単元: コンピュータ基礎
[2] 問題文(含コード&リンク):
http://proxy.f3.ymdb.yahoofs.jp/bc/468e498f_1f09/bc/%a5%de%a5%a4%a5%c9%a5%ad%a5%e5%a5%e1%a5%f3%a5%c8/img3008.jpg?bc.Ok3GBENNLjNP1
[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン: ボーランド
 [3.3] 言語: C言語
[4] 期限: 9月20日12時
[5] その他の制限: 関数、ポインタ、構造体を用いる
245デフォルトの名無しさん:2007/09/05(水) 15:57:55
>>244
問題が読めない
『bcvrf.yahoo.com というサーバが見つかりませんでした。』だって…
問題文がテキストなら>>1のろだに上げてよ
246デフォルトの名無しさん:2007/09/05(水) 16:25:01
[1] 授業単元: ランダム関数
[2] 問題文(含コード&リンク): トランプをランダムで表示させる
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Borland
 [3.3] 言語:C++
212の発展で今度は5枚表示させたいのです。
ハート6ダイアAクラブ4スペード5クラブ4 みたいな感じです
247デフォルトの名無しさん:2007/09/05(水) 16:40:18
同じカードが出てもいいんなら、5回繰り返せばいいだけじゃん。
248デフォルトの名無しさん:2007/09/05(水) 17:05:33
ジョーカーを考慮に入れなくて良いの?
249デフォルトの名無しさん:2007/09/05(水) 18:22:41
さあ、 >>212 は何回問題を小出しにしてくるかなぁ?
250デフォルトの名無しさん:2007/09/05(水) 18:25:08
>>246
Cだけど。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int myrand(void) { return (int)(rand() / (RAND_MAX + 1.0) * 52); }

int main(void)
{
   char *suit[4] = {"スペード", "ハート", "クラブ", "ダイア"};
   char *num[13] = {"A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3", "2"};
   int i;

   srand(time(NULL));
   for(i=0; i<5; i++) {
      int temp = myrand();
      printf("%s%s ", suit[temp/13], num[temp%13]);
   }

   return 0;
}
251デフォルトの名無しさん:2007/09/05(水) 20:20:36
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):簡単な機能をもったアドレス帳の作成
[3] 環境
 [3.1] OS:Linux
 [3.3] 言語:C言語
[4] 期限:2007年9月5日24時まで
[5] その他の制限:
実行結果
アドレス管理です。今日は何をしますか?
入力:1 表示:2 終了:0
<入力の場合>
氏名をローマ字で入力してください
satou
電話番号を入力してください
090-0000-0000
メールアドレスを入力してください
aaaa@aaa.com
メモ、備考があれば入力してください、なければEnterを押してください
memo
作業を続けますか?
入力:1 表示:2 終了:0
<表示の場合>
****アドレス一覧****
[no1]
name satou
tel 090-0000-0000
mail aaaa@aaa.com
memo memo
[2]
name・・・

見にくくてすいません、宜しくお願いします
252251:2007/09/05(水) 20:21:39
ちなみに終了の場合は

お疲れ様でした、終了します。

の一文でプログラムを終了させるようにしたいです。
長くなりましたがお願いします。
253デフォルトの名無しさん:2007/09/05(水) 21:59:40
[1] 授業単元:C言語
[2] 問題文: 0とは異なる二つの実数(double型)を入力し、それらの和差積商を求めるプログラム
[3] 環境
 [3.1] OS:Win
 [3.2] コンパイラ:Win visual studio2005
 [3.3] 言語: C
[4] 期限: 9月7日
[5] その他の制限: なし
254デフォルトの名無しさん:2007/09/05(水) 22:02:22
235 名前:デフォルトの名無しさん[sage] 投稿日:2007/09/05(水) 08:47:47
236 名前:自信過剰のアホの極み発言[] 投稿日:2007/09/05(水) 08:48:41
237 名前:デフォルトの名無しさん[sage] 投稿日:2007/09/05(水) 08:49:57
238 名前:デフォルトの名無しさん[sage] 投稿日:2007/09/05(水) 08:51:53
239 名前:デフォルトの名無しさん[sage] 投稿日:2007/09/05(水) 08:57:29
240 名前:デフォルトの名無しさん[sage] 投稿日:2007/09/05(水) 09:10:01
--
なるほど、5回連続書き込みで規制が入ったのか。
255デフォルトの名無しさん:2007/09/05(水) 22:04:08
>>254
回数を数えると、6回のようだが・・・
256デフォルトの名無しさん:2007/09/05(水) 22:05:04
しかもここで間が開いているようだが?
238 名前:デフォルトの名無しさん[sage] 投稿日:2007/09/05(水) 08:51:53
239 名前:デフォルトの名無しさん[sage] 投稿日:2007/09/05(水) 08:57:29
257デフォルトの名無しさん:2007/09/05(水) 22:18:41
5回連続書き込みで規制が入って、6回目まで間が空いたと言いたいのだろ。
その5回目も規制後かも知らんが。
258244:2007/09/06(木) 00:26:11
[1] 授業単元: コンピュータ基礎
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4899.zip
[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン: ボーランド
 [3.3] 言語: C言語
[4] 期限: 9月20日12時
[5] その他の制限: 関数、ポインタ、構造体を用いる
259たなか:2007/09/06(木) 00:32:25
【質問テンプレ】
[1] 授業単元: 数理計画法
[2] 問題文(含コード&リンク): シンプレックス法をC言語で作る
[3] 環境
 [3.1] OS: (Windows/Linux/等々) Windows
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限: 9月6日 9時
[5] その他の制限: ないです。
260デフォルトの名無しさん:2007/09/06(木) 07:17:48
授業単元:C
問題文(含コード&リンク):
テーマ:標準関数の利用
文字列と検索文字列を入力し、文字列中の検索文字の検索文字列と一致する位置を表示しなさい
使用する標準関数:strncmp(),strlen()
実行画面
文字列入力==>ABCDEABCAABCDEFABC
検索文字列入力==>ABC
一致場所:0
一致場所:5
一致場所:9
一致場所:15
OS:WindowsXP
コンパイラ名とバージョン:ボーランド
言語:C 
期限:




問題:
261デフォルトの名無しさん:2007/09/06(木) 07:28:07
>>260
strstr()使っちゃいけないの?
262デフォルトの名無しさん:2007/09/06(木) 09:18:04
strstr()は使っちゃ駄目みたいです
263デフォルトの名無しさん:2007/09/06(木) 09:20:20
使っちゃいけないなら自分でほぼ同じ関数を定義しとけば一発だな
264デフォルトの名無しさん:2007/09/06(木) 09:22:37
>>260
ちょ〜〜〜っと入力受付のところできんもぉ〜☆なソースかもしれんがw

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4901.c
265デフォルトの名無しさん:2007/09/06(木) 09:29:03
配列のサイズをMAXで定義してるのに、sizeof使ってsize_tで求める意味がわからん。
266デフォルトの名無しさん:2007/09/06(木) 09:29:50
>>264 に要らんもんが入ってたっけ。
上の方にある↓の部分を消しておいて
> printf("%d / %d \n",str_sz,search_sz);
267デフォルトの名無しさん:2007/09/06(木) 09:32:28
>>265
お前みたいな理解力のない奴に意味を説明しても分からんだろうけど
今年になってからよく知らない初心者が要らぬ発言をしているみたいでうざいんだが?
黙ってろよ、分からないなら。お前みたいな固有の環境でしかプログラムを作らない奴には
一生分からない。
配列の要素の数をMAXで指定しているだけであって、実際のところはMAXでなくても
指定が可能だろ。そのときにも対処できるようにしてあるんだよ。
まぁ、そういうときはMAXを変えれば良いんだが、それでも 理屈 からして
配列の要素の数をああいう形で導くのが適切。大学くらい出ろよ、低学歴
268デフォルトの名無しさん:2007/09/06(木) 09:34:26
例えば
char str[MAX]="\0",search[MAX]="\0",ch;
ここのMAXの部分をMAX以外で指定した場合に対処できるだろ?
そうする必要があるのかって言う必要性については一個人の主観でしかないから
理屈からして筋が通るんであればそれに対して要らぬ指摘をするなよ、バカ初心者
269昨日もいたクソガキ:2007/09/06(木) 09:35:27
232 名前:デフォルトの名無しさん 投稿日:2007/09/05(水) 08:06:40
>>231
入力の改行文字を取り除いていない。

234 名前:デフォルトの名無しさん 投稿日:2007/09/05(水) 08:42:13
何この馬鹿。

265 名前:デフォルトの名無しさん 投稿日:2007/09/06(木) 09:29:03
配列のサイズをMAXで定義してるのに、sizeof使ってsize_tで求める意味がわからん。
270デフォルトの名無しさん:2007/09/06(木) 09:36:40
>>265 お前に理解力がないだけじゃん。分からないなら黙ってろよw
あっ、俺は上の人とは別の人だから、同じ人が連続投稿していると思わないでねw
271デフォルトの名無しさん:2007/09/06(木) 09:48:49
みなさんすみません
できました

#define STRMAX (1024)
void test(int ofs, char *s, char *c, int clen){
char t;
if(s[ofs]=='\0') return;
t=s[ofs+clen];
s[ofs+clen]='\0';
if(strcmp(s+ofs,c)==0)
printf("matched at %d\n", ofs);
s[ofs+clen]=t;
test(ofs+1, s, c, clen);
return;
}
int main(void){
char s[STRMAX], c[STRMAX];
printf("input str:"); scanf("%s",s);
printf("check str:"); scanf("%s",c);
test(0, s, c, strlen(c));
}

>>260じゃないけど。
272デフォルトの名無しさん:2007/09/06(木) 09:55:54
最近size_t覚えて嬉しくってはしゃいでるのはわかるけど、もうちょっと使いどころ考えろよw
MAXと同じ数値を無駄な計算で出すんじゃなくて、文字列の長さを入れて条件判定部や引数に
strlen()使わないようにするとかさ。
273デフォルトの名無しさん:2007/09/06(木) 09:58:16
>>261 = >>263 = >>265 だろ。バレてんぞ。出来もしないくせにグダグダとダメなの?
って問題の趣旨を理解する頭もないアホ
274デフォルトの名無しさん:2007/09/06(木) 10:07:45
意味がわからないっていうのは、無意味で無駄な計算乙って意味の婉曲な皮肉だったんだが。
大学いける見込みもない引きこもりには理解できなかったかなw
275デフォルトの名無しさん:2007/09/06(木) 10:22:10
>>271
ここまで悪意の塊なのはみたことがない
276デフォルトの名無しさん:2007/09/06(木) 10:23:34
授業単元:C
問題文(含コード&リンク):
テーマ:ユーザー関数の作成
問題:2値を小さい順に表示するユーザー関数を作成しなさい
プロトタイプ宣言:void SortDisp(int dt1,int dt2);
実行画面
数値1入力==>10
数値2入力==>15
数値1:10
数値2:15

数値1入力==>10
数値2入力==>15
数値1:10
数値2:15

OS:WindowsXP
コンパイラ名とバージョン:ボーランド
言語:C 
期限:
277デフォルトの名無しさん:2007/09/06(木) 10:46:15
>>276
なんというか、命名もキモいし、動作説明もキモいな…

void SortDisp(int dt1, int dt2);
void SortDisp(int dt1, int dt2){
printf("数値1:%d\n数値2:%d\n", dt1<dt2?dt1:dt2, dt1<dt2?dt2:dt1);
}
278デフォルトの名無しさん:2007/09/06(木) 10:53:23
>>276
なんか前に解いた気がするぞwww
279デフォルトの名無しさん:2007/09/06(木) 12:12:56
授業単元:C
問題文(含コード&リンク):
問題1:文字列1と文字列2を入力し比較を行い、結果を表示しなさい
使用する標準関数:strcmp()
実行画面
文字列1==>ABC
文字列2==>ABC
結果:2つの文字列は同じです

文字列1==>ABC
文字列2==>DEF 
結果:2つの文字列は違います

問題2:文字列を入力し、文字列中の英字と数字の文字数をカウントしなさい
使用する標準関数:isdigit()
実行画面
文字列入力==>AB123CDEF45G
英字:7
数字:5

問題3:文字列を入力し、英字とそれ以外を格納する配列に振り分けなさい
使用する標準関数:isalpha()など
実行画面
文字列入力==>A12H&jfTy8uz3#
英字:AHjfTyuZ
その他:12&83
OS:WindowsXP
コンパイラ名とバージョン:ボーランド
言語:C 
期限:

280デフォルトの名無しさん:2007/09/06(木) 12:25:46
授業単元:C
問題文(含コード&リンク): 配列データの平均を求めるユーザ関数を作成しなさい
プロトタイプ宣言:double Average(int *p);
引数:数字が格納された配列アドレス
戻り値:平均

実行画面
整数[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
整数[2]==>60
整数[3]==>75
整数[4]==>89
整数[5]==>64
整数[6]==>-1
平均:78.0
281デフォルトの名無しさん:2007/09/06(木) 13:50:57
実行画面の形式が全部同じで良いね^^
282デフォルトの名無しさん:2007/09/06(木) 15:23:21
[1] 授業単元: c++
[2] 問題文(含コード&リンク):
  ウィンドウに、
  ・「正解は?」と表示したラベル、
  ・入力用のテキストボックス、
  ・回答用のボタン、
  ・「正解」or「残念」と表示するラベル
  を作成する。
  ある文字列が入力されて一致した場合は「正解」と表示する。
  なお、正解の文字列や各種コントロールの配置は任意とする
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: c++
[4] 期限: 2007年9月7日

ウィンドウズプログラムのGUIがよくわかりません。
よろしくお願いします。
283デフォルトの名無しさん:2007/09/06(木) 19:11:48
たぶん、>>280 はエスパーじゃないと作れないと思う。
284デフォルトの名無しさん:2007/09/06(木) 19:38:19
>283
比較的エスパーレベルが低くても対応は出来そうだけどな。
285デフォルトの名無しさん:2007/09/06(木) 19:40:21
>> 280
配列が最大10個、-1が出てきたら終了とすると、こんな感じ。
表示するところが必要なら適当に作って。
あと、コンパイルはしてないので、動くかはわかりません。

double Average(int *p){
double sum = 0;
int i;
for( i=0 ; i<10 ; i++ ){
if( p[i] != -1 ) break;
sum += p[i];
}
if( i==0 )return 0.0;

return ( sum / i );
}
286デフォルトの名無しさん:2007/09/06(木) 19:59:28
>>274
> 無意味で無駄な計算乙
すでに理屈と説明がされているのだが、それについて理解できないお前が
勝手に無意味とか無駄にしているだけ、だから知ったか初心者は口を出さずに
間違っていないことに対して口を出すなって言ってんだよ。
お前みたいな浅はかな考えの未熟者はいつまでたってもまともなソースの記述は出来ない。
下手に手間を惜しむ奴は、横着がバグの横行の原因となる
とにかくお前みたいな低学歴は黙ってろ、うぜぇ
お前の場合主観ばかりで何の説明にもなってないだろ。
287相当な思い込み勘違いのアホ:2007/09/06(木) 20:02:52
272 名前:デフォルトの名無しさん 投稿日:2007/09/06(木) 09:55:54
最近size_t覚えて嬉しくってはしゃいでるのはわかるけど、もうちょっと使いどころ考えろよw
↑最近ってなんだよ?もうかなり前から知っているしどこをどう見たら
うれしくてはしゃいでいるように見える????気持ち悪い。これもお前の思い込みか
お前がキャッキャ言いながらはしゃいでsize_tを使ってんだろw

MAXと同じ数値を無駄な計算で出すんじゃなくて、文字列の長さを入れて条件判定部や引数に
↑説明したことを理解していない証拠

strlen()使わないようにするとかさ。
>>260の問題読めてますか?w
> 使用する標準関数:strncmp(),strlen()
288デフォルトの名無しさん:2007/09/06(木) 20:05:06
> 文字列の長さを入れて条件判定部や引数に
これはバカだな。文字列の長さの条件って、まだ入力されていない
文字列の長さなんて算出できねーよ。そもそも文字列の長さじゃなくて
size_tには配列の要素数の算出がされているんだが?
文字の終端を意味するNULL文字を入れた文字列の長さだったら
文字列を格納した配列の要素数じゃなくてstrlenを使うだろw
初心者は黙ってなさい。
289デフォルトの名無しさん:2007/09/06(木) 20:17:12
あと、fgetsを使えだの言い出すかもしれんが、MAXで指定した以上の文字を入力した
場合のトラブルは、そう過去ではないすぐ上に問題として出ているはず。
だから入力された文字列の最後までgetchar()で読み込み、その中で文字列を入れるのに
指定した配列に格納できる範囲内で入力を受け付けている仕組みが理解できなかったか。
だからわざわざ きんもぉ〜☆ なソースだといっておいたのにw
その辺の問題解決が出来ているなら示してくれんかね?
俺、専門でプログラミングやってないんでw

とにかく、目的の処理が果たせている以上、つまらぬ言いがかりをせずに
お前がソースを書いて、物申す自分でも出来るぞって証拠を示せ。
まぁ口出しするだけで、あの関数は使っちゃダメなのか?とか実装すりゃ良いとか
口先だけで終わって実際にソースが書けないようじゃ話にならないけどなw
あとな、この世には多種様々な考えの人間がいるんだよ。自分と意見が合わない奴なんて
この世にどんだけいると思ってんだ?しかし、それはおまえ自身の理解力がないが故に
不適切なものを信じてしまい、適切なものを無視してしまうんだよ。
幸い、俺は聞く耳は持っているんで、あしからず。
さぁ、あんたのソースを示せ!論より証拠って言うだろ?
290デフォルトの名無しさん:2007/09/06(木) 20:37:02
うざい
291デフォルトの名無しさん:2007/09/06(木) 20:50:42
バカにつける薬はないなw
292デフォルトの名無しさん:2007/09/06(木) 21:07:25
>for(i=0; i<=strlen(str)-strlen(search); i++) {
> if( !strncmp(&str[i],search,strlen(search)) )
> printf("一致場所:%d\n",i);
> }
何回strlen()呼び出しゃ気が済むんだよw
>条件判定部や引数に strlen()使わないようにするとかさ
ってのは、この無駄なstrlenの呼び出しをやめろってことだろ。
293デフォルトの名無しさん:2007/09/06(木) 21:54:33
普段ROMってるんだけど、回答に対して分からないところがあったら聞いてもいい?
294デフォルトの名無しさん:2007/09/06(木) 21:57:16
聞いてはいけない理由は無いと思う
295デフォルトの名無しさん:2007/09/06(木) 22:02:47
どうぞどうぞ
296デフォルトの名無しさん:2007/09/06(木) 22:08:44
>>293
聞き方次第では回答にケチ付けやがったと思われてウザイ目にあうのでそのへんを考慮しておいた方がいいかも
それとここが宿題スレってことも念頭において
297デフォルトの名無しさん:2007/09/06(木) 22:16:58
そうそう、最近頭悪いのが常駐しているから。
298デフォルトの名無しさん:2007/09/06(木) 22:34:06
[1] 授業単元:C言語
[2] 問題文: 0とは異なる二つの実数(double型)を入力し、それらの和差積商を求めるプログラム
[3] 環境
 [3.1] OS:Win
 [3.2] コンパイラ:Win visual studio2005
 [3.3] 言語: C
[4] 期限: 9月7日
[5] その他の制限: どうしてもわかんないんですけど、教えてもらえませんか?
299デフォルトの名無しさん:2007/09/06(木) 22:35:29
どうしてもわからないんじゃなくて
何も勉強しようとすらしないからわからないんだよ
300デフォルトの名無しさん:2007/09/06(木) 22:36:53
>>298
#include<stdio.h>
int main(void)
{
double x, y;

scanf("%lf %lf", &x, &y);
printf("%g + %g = %g\n", x, y, x+y);
printf("%g - %g = %g\n", x, y, x-y);
printf("%g * %g = %g\n", x, y, x*y);
printf("%g / %g = %g\n", x, y, x/y);
return 0;
}
301デフォルトの名無しさん:2007/09/07(金) 01:11:28
>>293
質問なら良いかもしれんが、どこぞの知ったか無知初心者みたいに
なんでそうするんだよ?だのなんで自分が思う通りにしなかったの?
みたいな言いがかりをつけると、下手すりゃ自分の理解力のなさを露呈して
逆に答えてもらえない可能性あり。とりあえず最近、知ったかの詰まらんちゃちを入れる
上級者ぶっている初心者が一匹いるみたいで・・・
302293:2007/09/07(金) 01:19:03
>>294-297,>>301
分かった。ありがとう。
303デフォルトの名無しさん:2007/09/07(金) 07:26:05
>285
条件逆
304デフォルトの名無しさん:2007/09/07(金) 09:26:27
305304:2007/09/07(金) 09:28:13
up_x = 2, up_y = 1に直しといて……
306デフォルトの名無しさん:2007/09/07(金) 17:54:52
[1] 授業単元:C言語
[2] 問題文:グラフを作成するプログラムを作成せよ。
      例えば、プログラムを実行すると、0〜10分間時間が計測され
      その間に、使用者が↑キーを押すと1、↓キーなら2、→キーなら3、
      ←キーなら4という数値が入力される。
      10分経過後、横軸は時間(秒)、縦軸は使用者が入力した数値
      の棒グラフを出力するというようなプログラムです。
      お願いします!!
[3] 環境
 [3.1] OS:Win
 [3.2] コンパイラ:Win visual studio2003
 [3.3] 言語: C
[4] 期限: できるだけ早めでお願いします。
307デフォルトの名無しさん:2007/09/07(金) 21:15:57
>>304
ないない、エロゲヲタなんてこのスレにはほとんどおらんやろw
まぁ俺ならサイドポケットだが
308デフォルトの名無しさん:2007/09/08(土) 01:29:45
>>306
コンソールベース?
ウインドウベース?

マルチスレッド?
ポーリング?
309デフォルトの名無しさん:2007/09/08(土) 02:45:39
>>306
↑を押したら1
↓を押したら2
・・・は理解できた.

↑を1秒押した”後に”↓を2秒押したらどうなる?
↑を1秒押した”後に”↓を2秒押した後に→を3秒押したらどうなる?
↑を1秒押した”後に”↓を2秒押した後に→を3秒押した後に・・・ならどうなる?

あと,「できるだけ早め」って言うけど,コレって無期限ってことだから.
310デフォルトの名無しさん:2007/09/08(土) 03:21:20
ん?C言語ってリアルタイミングにインプッティングをゲッティングしてカウンティングできないの?
311デフォルトの名無しさん:2007/09/08(土) 04:06:01
>>310
C言語で定められた標準関数の範囲では無理
kbhit とか ReadConsoleInput とかでできるけどね
312デフォルトの名無しさん:2007/09/08(土) 08:09:54
>>310
そうそう、日本語だけではあんたの文章を理解できないのと似たようなもんだ。
313デフォルトの名無しさん:2007/09/08(土) 08:40:11
すべてにing系ww
314306:2007/09/08(土) 10:01:20
>>308
そのあたりの指定はないのでやりやすい方でお願いします。
>>309
↑を1秒押しつづけたら、1の数値が1秒間入力されつづけ
そのあとに、すぐ↓を2秒押した場合は2の数値を2秒間入力し続ける。
キーをおしつづけた時間だけその数値を入力しつづけるといった形です。
質問の答えになってますか??勘違いしてたらごめんなさい・・
あと期限ですが、来週中でお願います!!
315デフォルトの名無しさん:2007/09/08(土) 12:06:58
>>314
よーく読み返してみろ・・・

> ↑を1秒押しつづけたら、1の数値が1秒間入力されつづけ 
> そのあとに、すぐ↓を2秒押した場合は2の数値を2秒間入力し続ける

何の説明にもなってないぞ
316デフォルトの名無しさん:2007/09/08(土) 13:19:25
↑キーを押すと1とかはどうでもよくて、
押した時から離した時の時間を積算すればいいんじゃないの?

というか、グラフを作成するプログラムならなんでもいいのか、例えば〜のプログラムを作るのか、どっちなの?
317デフォルトの名無しさん:2007/09/08(土) 14:07:56
↑キーと↓キーが同時に検出できたらどうなるんだろうね
318デフォルトの名無しさん:2007/09/08(土) 14:22:55
[1] 授業単元: コンピュータープログラミング
[2] 問題文(含コード&リンク):

下のデータをマージソートを使ってp[i]/w[i]を大きい順にソートし、それを元にアイテムに並べ替えよ』
item 1 2 3 4 5 6 7 8 9 10
p[i] 12 15 22 88 43 55 23 91 15 78
w[i] 3 4 7 41 32 18 12 64 7 33

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語: C
[4] 期限: 9月9日2400まで
[5] その他の制限: 特に無し

宜しくお願いします。
319デフォルトの名無しさん:2007/09/08(土) 15:15:56
>>318
すまんが俺の悪い頭ではその問題文は理解できん。
320デフォルトの名無しさん:2007/09/08(土) 16:01:16
>>319
例えばですね、
itemの5項目目はp[5]=43,w[5]=18になります。
でp[5]/w[5]=43/18となります。
このような値を大きい順に並べ替えるようなプログラムを作る問題です。
説明が足らずすいませんでした。
321デフォルトの名無しさん:2007/09/08(土) 16:05:21
ずれてるぞ
322デフォルトの名無しさん:2007/09/08(土) 16:13:07
マージ程度ならググッたほうがはやそうだが・・・
p[i]/w[i]入れる配列作って放り込めばいいんじゃないか
323デフォルトの名無しさん:2007/09/08(土) 16:19:29
答えは5 8 7 9 4 10 6 3 2 1 って表示させればいいの?
324デフォルトの名無しさん:2007/09/08(土) 16:22:56
p[i]/w[i]入れる配列作らないと毎回比較の際に割り算を計算するはめになるな
325デフォルトの名無しさん:2007/09/08(土) 16:45:06
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):

課題9
ファイルun.txtから文字を読み込み、大文字と小文字を区別しないでアルファベット
26文字の出現頻度をカウントし度数分布表を作るプログラムを作れ。
un.txtは大文字と小文字のアルファベットが縦に26文字書いてある自分で作った
ファイル。


[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C++
できれば、早めにお願いします.....
326デフォルトの名無しさん:2007/09/08(土) 17:00:42
>318
表示するのはアイテムだけ。
#include <stdio.h>
typedef struct {
    double div;
    int item;
} st;
void mergesort(st *p, st *temp, int left, int right)
{
    int i, j, k, mid = (left + right) / 2;
    if(left >= right) return;
    mergesort(p, temp, left, mid);
    mergesort(p, temp, mid + 1, right);
    for(i=left; i<=mid; i++) temp[i] = p[i];
    for(j=right; i<=right; i++, j--) temp[i] = p[j];
    i = left;
    j = right;
    for(k=left; k<=right; k++) p[k] = temp[i].div < temp[j].div ? temp[i++] : temp[j--];
}
int main(void)
{
    int i, p[10] = {12,15,22,88,43,55,23,91,15,78}, w[10] = {3,4,7,41,32,18,12,64,7,33};
    st data[10], temp[10];
    for(i=0; i<10; i++) {
        data[i].item = i + 1;
        data[i].div = (double)p[i] / w[i];
    }
    mergesort(data, temp, 0, 9);
    for(i=0; i<10; i++) printf("%d ", data[i].item);
    return 0;
}
327デフォルトの名無しさん:2007/09/08(土) 17:02:56
>>325
CかC++か判らないから、とりあえずCで。
#include <stdio.h>
#include <ctype.h>

int main(void)
{
int ch, i, alpha[26] = {0};
FILE *fp;

fp = fopen("un.txt", "r");
if(fp==NULL) return 0;

while((ch=fgetc(fp))!=EOF) {
if(islower(ch)) alpha[ch-'a']++;
else if(isupper(ch)) alpha[ch-'A']++;
}

for(i=0; i<26; i++) printf("%c:%d\n", 'a'+i, alpha[i]);

return 0;
}
328デフォルトの名無しさん:2007/09/08(土) 17:04:18
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
ある自然数nを引数として受け取り、その自然数nが素数かどうか判定し素数の時は
1、でないときは0を値として返す関数prime()を作成する。そして、その関数を
利用して、ある自然数をキーボートから入力すると1からその自然数までの素数を列
挙し、その素数の統計を出力するプログラムを作れ。

実行例
自然数を入れろ
30
1〜30までの素数は、
2,3,5,7,11,13,17,19,23,29
個数は十個です。


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

お願いします。。
329デフォルトの名無しさん:2007/09/08(土) 17:14:19
授業単元がC言語で言語がC++だと、どっちにしていいかわかんないんだけど。
330デフォルトの名無しさん:2007/09/08(土) 17:15:53
>>327さん
本当に助かりました。ありがとうございます。
331デフォルトの名無しさん:2007/09/08(土) 17:16:55
>>328
#include <iostream>

int prime(int num)
{
int div;
if(num < 2) return 0;
for(div=2; div<=num/2 && num%div!=0; div++);
return (div>num/2) ? 1 : 0;
}

int main()
{
int n, sum = 0;

std::cout << "自然数を入れろ" << std::endl;
std::cin >> n;

std::cout << "1〜" << n << "までの素数は、" << std::endl;
for(int i=1; i<=n; i++)
{
if(prime(i))
{
std::cout << (sum?",":"") << i;
sum++;
}
}
std::cout << "\n個数は" << sum << "個です。" << std::endl;


return 0;
}
332デフォルトの名無しさん:2007/09/08(土) 17:17:52
>>329 すみません C++でお願いします
333デフォルトの名無しさん:2007/09/08(土) 17:18:55
>>331
本当に感謝してます、単位取れます 本当にありがとうございます!
334デフォルトの名無しさん:2007/09/08(土) 17:22:26
>>332
gccでコンパルするのに、なぜC++なんだ?
335デフォルトの名無しさん:2007/09/08(土) 17:26:54
>>331
何度も申し訳ありません。。。。
Cでやると、どうなります。。。??
336デフォルトの名無しさん:2007/09/08(土) 17:29:51
>>335
#include <stdio.h>

int prime(int num)
{
int div;
if(num < 2) return 0;
for(div=2; div<=num/2 && num%div!=0; div++);
return (div>num/2) ? 1 : 0;
}

int main()
{
int n, sum = 0, i;

printf("自然数を入れろ");
scanf("%d", &n);

printf("1〜%dまでの素数は、\n", n);
for(i=1; i<=n; i++)
{
if(prime(i))
{
printf("%s%d", sum?",":"", i);
sum++;
}
}
printf("\n個数は%d個です。\n", sum);

return 0;
}
337デフォルトの名無しさん:2007/09/08(土) 17:36:44
>>336
本当に何度もすみません。
感謝の気持ちでいっぱいです。
本当にありがとうございます。プログラミングは本当に苦手です。。
338デフォルトの名無しさん:2007/09/08(土) 19:10:37
>>326
有難うございます!!
339デフォルトの名無しさん:2007/09/08(土) 22:13:12
計算機のプログラムを作りました

#include <stdio.h>
void main()
{
int a;
int b;
char operater;

printf("input number : ");
scanf("%d",&a);


do{

printf("input number : ");
scanf("%d",&b);
printf("input operater : ");
scanf("%c",&operater);
switch(operater){
case '+' : a = a + b; printf("%d\n",a); break;
case '-' : a = a - b; printf("%d\n",a); break;
case '*' : a = a * b; printf("%d\n",a); break;
case '/' : a = a / b; printf("%d\n",a); break;
default : printf("such an operater does not exist!\n"); break;
}
}while(1);
}
340339:2007/09/08(土) 22:16:47
しかし、以下のように演算子を入力する前にsuch an 〜 と表示されてしまいますなぜですか?

input number : 3
input number : 2
input operater : such an operater does not exist !input number :
341339:2007/09/08(土) 22:17:34
あげ
342デフォルトの名無しさん:2007/09/08(土) 22:46:39
>>339
scanf("%c",&operater);

scanf("%*[ \t\n]");
scanf("%c",&operater);
343デフォルトの名無しさん:2007/09/08(土) 22:53:20
>>339
rewind(stdin);

scanf("%c",&operator);
の前に追加

変数名にoperatorは…
344デフォルトの名無しさん:2007/09/08(土) 22:55:41
むしろ
>operater
に突っ込んではいけないのか
345339:2007/09/08(土) 23:02:54
すいません
どの方法をやっても結果が同じなのですが・・・
346デフォルトの名無しさん:2007/09/08(土) 23:05:05
>>345
コンパイラの名称は?
347デフォルトの名無しさん:2007/09/08(土) 23:07:15
>>345
コンパイルし直せば?
348339:2007/09/08(土) 23:46:37
Cygwinのgccです
349デフォルトの名無しさん:2007/09/09(日) 11:21:02
[1] 授業単元:
[2] 問題文(含コード&リンク):

入力された10以下の数に、左から1,2,3,4…をそれぞれかけて、それらの和をとるプログラムを作成せよ。

実行例
Input Number: 4 0 8 8 7 3 1 0 4
Sum: 156

この場合の計算方法
4×1 + 0×2 + 8×3 + 8×4 + 7×5 + 3×6 + 1×7 + 0×8 + 4×9
=156

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年9月10日0:00まで
[5] その他の制限: 特になし
どうぞよろしくお願いします
350デフォルトの名無しさん:2007/09/09(日) 11:52:06
#include <stdio.h>

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

printf("Input Number:");
for(i=1; i<10; i++) {
scanf("%d", &n);
sum += n * i;
}

printf("Sum : %d", sum);

return 0;
}
351349:2007/09/09(日) 12:10:48
素早いご回答、どうもありがとうございます
352306:2007/09/09(日) 15:50:45
たびたびすいません。
いろいろ考えた結果、↑が1、↓が2・・・というのは抜きにして
単純に、プログラムを実行したら0〜10分間時間を計測する。
その間に、使用者が↑キーを押した時、その押した時間とキーを離した時間を
最後に出力するというプログラムをつくっていただきたいです。どうかおねがいします!!
あと、いろいろめんどうなこといってすいません・・・
353デフォルトの名無しさん:2007/09/09(日) 16:18:45
>>352
もうお前自分でやれよ・・・
その例にしたって正確にはどう出力すればいいか判断できんよ。
354デフォルトの名無しさん:2007/09/09(日) 17:16:46
[1] 授業単元:
[2] 問題文(含コード&リンク): 44.1kHzサンプリング周波数で
               1kHzの正弦波を10秒間作るプログラム
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 期限無し、早期希望
[5] その他の制限: 無し
 よろしくお願いします
355デフォルトの名無しさん:2007/09/09(日) 17:43:38
>>354
おk
なにも出力しなくていいんだな?

void make_seigen_haaaaaaaaaaaaaa(int);

int main(){
  make_seigen_haaaaaaaaaaaaaa(44100);
}

void make_seigen_haaaaaaaaaaaaaa(int x){
  //後の人に任せる
  make_seigen_haaaaaaaaaaaaaa(x); //宇宙が消滅しても尚計算が必要だけど,そのうち作られるはず
}
356デフォルトの名無しさん:2007/09/09(日) 17:53:31
357デフォルトの名無しさん:2007/09/09(日) 18:49:10
354です
>>355
すみません。忘れてました。

波形をgnuplotで出力できるようにしてもらいたいです。
358デフォルトの名無しさん:2007/09/09(日) 18:50:01
>>354
#include<stdio.h>
#include<math.h>

int main(void){
double theta=0.0;
short value;
char *filename="[email protected]";
long i;
FILE *fp;

fp=fopen(filename, "wb");
if(fp==NULL) return 1;

for(i=0;i<44100*10;i++){
theta=i*2*M_PI*1000/44100;
value=30000*sin(theta);
fwrite(&value, sizeof(value), 1, fp);
}
fclose(fp);

return 0;
}
359デフォルトの名無しさん:2007/09/09(日) 18:55:17
>>357
>>358 を変更
fwrite(&value, sizeof(value), 1, fp);

fprintf(fp, "%d\n", value);
360デフォルトの名無しさん:2007/09/09(日) 19:05:07
>>355
>>358
>>359

ありがとうございます
361デフォルトの名無しさん:2007/09/09(日) 19:59:12
>>352
なんかグダグダなソースになってしもた orz
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4907.c
362デフォルトの名無しさん:2007/09/09(日) 21:44:33
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

int
main()
{
int sock0;
struct sockaddr_in addr;
struct sockaddr_in client;
int len;
int sock;

sock0 = socket(AF_INET, SOCK_STREAM, 0);

addr.sin_family = AF_INET;
addr.sin_port = htons(12345);
addr.sin_addr.s_addr = INADDR_ANY;

bind(sock0, (struct sockaddr *)&addr, sizeof(addr));

listen(sock0, 5);

363デフォルトの名無しさん:2007/09/09(日) 21:46:04
while (1) {
len = sizeof(client);
sock = accept(sock0, (struct sockaddr *)&client, &len);
write(sock, "HELLO", 5);

close(sock);
}

close(sock0);

return 0;
}
364デフォルトの名無しさん:2007/09/09(日) 21:48:41
このプログラムは複数のクライアントと接続するサーバプログラムらしいのですが
なぜ複数のクライアントと接続することができるんですか?
実際、このプログラムはどのように動作するんですか?

まず、listen(sock0, 5);で接続受付状態になって停止して
接続を受け付けたらwhile以下を実行するんですよね?
365デフォルトの名無しさん:2007/09/09(日) 21:54:44
とりあえず>>1を読め
366デフォルトの名無しさん:2007/09/10(月) 12:13:27
トゥエラーの定義で年と月を入力したときでるカレンダーをだしてください
367デフォルトの名無しさん:2007/09/10(月) 12:25:48
Zellerの公式か
368デフォルトの名無しさん:2007/09/10(月) 13:22:37
たぶんそうだと思います  ご協力お願い致します
369デフォルトの名無しさん:2007/09/10(月) 13:24:58
Zellerの公式って何かと調べたら一番上にでてきた

ttp://www.wdic.org/w/SCI/Zellerの公式
370デフォルトの名無しさん:2007/09/10(月) 14:09:32
[1] 授業単元: c言語
[2] 問題文(含コード&リンク):
西暦と月を入力するカレンダーを出力するプログラムを作成せよ.
閏年(うるうどし)にも対応すること.
西暦年が4で割り切れる年は閏年
ただし、西暦年が100で割り切れる年は平年
ただし、西暦年が400で割り切れる年は閏年
指定された年,月の一日(ついたち)の曜日を求めると良い.曜日を求めるには,Zellerの公式を使う.年も月も整数型の変数を用い,日の部分は1に置き換えること.
(年+年/4-年/100+年/400+(13*月+8)/5+日 )%7
1月と2月は前年の13月,14月として考える.
この式の答えと曜日の関係は以下の通り.
0:日曜日,1:月曜日,2:火曜日....,6:土曜日
色付け
printf("\033[31m%d",x);と記述すれば,変数xを赤で表示する.
printf("\033[34m%d",x);と記述すれば,変数xを青で表示する.
printf("\033[0m%d",x);と記述すれば,変数xを標準設定で表示する.
一度色指定すれば,次に色指定するまで設定が反映されることに注意する.
[3] 環境
 [3.1] OS: Linux
 [3.2] gcc 3.4
 [3.3] 言語: c言語
[4] 期限: 9月25日
[5] その他の制限:for文やdo while文などの基本的なものをできるだけ使ってほしいです

371デフォルトの名無しさん:2007/09/10(月) 14:46:15
>>370
#include <stdio.h>
#define COL_NORM (0)
#define COL_BLUE (1)
#define COL_RED (2)

static bool isCat( int year )
{
if( ! ( year % 400 ) )
return true;
if( ! ( year % 100 ) )
return false;
if( ! ( year % 4 ) )
return true;
return false;
}
static void color( int col )
{
// エスケープシーケンスがDOS窓では機能しないので殺してる
#if 0
switch( col ) {
case COL_RED: printf("\033[31m"); return;
case COL_BLUE: printf("\033[34m"); return;
default: printf("\033[0m"); return;
}
#endif
}
続く
372デフォルトの名無しさん:2007/09/10(月) 14:47:02
int main( void )
{
int year, mon;
int tbl[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int i, max, d;

while( 1 ) {
printf( "year:" );
scanf( "%d", &year );
printf( "mon:" );
scanf( "%d", &mon );
if( mon > 12 ) {
mon -= 12;
year++;
}
if( mon == 2 ) {
if( isCat( year ) )
max = 29;
else
max = 28;
}
else {
max = tbl[mon-1];
}
続く
373デフォルトの名無しさん:2007/09/10(月) 14:47:35
d = (year+year/4-year/100+year/400+(13*mon+8)/5+1)%7;
printf( "\n%d - %d\n", year, mon );
for(i=0;i<d;i++)
printf(" ");
for(i=1;i<=max;i++) {
d = (year+year/4-year/100+year/400+(13*mon+8)/5+i)%7;
switch(d) {
case 0: color(COL_RED); printf("%3d",i);break;
case 1: color(COL_NORM); printf("%3d",i);break;
case 6: color(COL_BLUE); printf("%3d\n",i);break;
default: printf("%3d",i);break;
}
}
printf( "\n\n" );
}
}
終わり
374デフォルトの名無しさん:2007/09/10(月) 14:48:43
我ながら汚ねぇコード...
375デフォルトの名無しさん:2007/09/10(月) 14:59:49
>>364
スレの趣旨とは異なるが...

間違い - listen() は単に接続待ちキューの設定を行うだけ(必須)
接続要求に対する応答は accept() で行う(接続要求が無い場合ここで停止している)
accept() が返すソケットIDが接続要求に対する通信ソケットとなる
376デフォルトの名無しさん:2007/09/10(月) 17:13:09

糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね

糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね

糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね

糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね

糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね

糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね

糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね

糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね

糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね

糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
377デフォルトの名無しさん:2007/09/10(月) 17:13:41

糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね

糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね

糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね

糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね

糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね

糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね

糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね

糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね

糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね

糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
378デフォルトの名無しさん:2007/09/10(月) 17:14:58

糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね

糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね

糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね

糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね

糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね

糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね

糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね

糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね

糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね

糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
379デフォルトの名無しさん:2007/09/10(月) 18:43:42
なんだかものすごく嫌なタイミングで荒されましたが、よろしくお願いします
[1] 授業単元:?
[2] 問題文(含コード&リンク):
-Declare 3 variables of string data type.
-Name the first variable FIRST, the second variable SECOND, and ALPHABET.
-Assign a string of characters to FIRST.
( The string should consist of the first 13 letters of the alphabet 'a' to 'm' )
-Assign a string of characters to SECOND.
( The string should consist of the first 13 letters of the alphabet 'n' to 'z' )
-Assign the first 13 characters and second 13 characters to the variable ALPHABET.
( alphabet=first+second; )
-Output the following on separate lines, as shown:
This is my fourth C++ program.
This string: abcdefghijklm + plus this string: nopqrstuvwxyz is the whole alphabet.
The alphabet is: abcdefghijklmnopqrstuvwxyz.
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: VC++
 [3.3] 言語: C++
[4] 期限: なるべく早くお願いします
[5] その他の制限: C言語未習。アメの大学で授業始まったばかりです。
380379:2007/09/10(月) 18:44:32
自分なりの解答は以下の通りですが、エラーが2つでました。
修正をお願いいたします。
#include <iostream>
#include <string>
using namespace std;
int name ()
{
string first;
first="abcdefghijklm";
string second;
second="nopqrstuvwxyz";
string alphabet;
alphabet=first+second;
cout << "This is my fourth C++ program." << endl;
cout << "This string: " << first << "+ plus this string: " << second << " is the whole alphabet." << endl;
cout << "The alphabet is: " << alphabet << endl;
return 0;
}
381デフォルトの名無しさん:2007/09/10(月) 18:48:52
>>380
コンパイル、実行も問題なしだった
ファイルはcppで保存した?
もしくはmain()の方に問題あるかも
382デフォルトの名無しさん:2007/09/10(月) 18:52:27
>>380
合ってると思うが。環境が悪いかもしれん
383デフォルトの名無しさん:2007/09/10(月) 18:54:53
>>380
もしかしてmain() 置いてないとか?
main()が無いなら関数名をname()じゃなくてmain()に.

#include <iostream>
#include <string>
using namespace std;
int main() //←ここ
{
string first;
first="abcdefghijklm";
string second;
second="nopqrstuvwxyz";
string alphabet;
alphabet=first+second;
cout << "This is my fourth C++ program." << endl;
cout << "This string: " << first << "+ plus this string: " << second << " is the whole alphabet." << endl;
cout << "The alphabet is: " << alphabet << endl;
return 0;
}
384379&380:2007/09/10(月) 19:08:25
皆さま本当に素早い解答ありがとうございました
ご指摘の通り int name () を int main () に修正したら、エラーが2から0になりました
他の授業の宿題もものすごく重なっていてちょっとパニック状態だったので涙が出るくらい感激しています。おさがわせしました
385デフォルトの名無しさん:2007/09/10(月) 20:09:42
>>370を面白そうだからやってみた
#include<stdio.h>
#include<conio.h>
int z(int y,int m,int d){
if(m<3) y--,m+=12;
return (y+y/4-y/100+y/400+(13*m+8)/5+d)%7;
}
int main(void){
while(1){
int y,m,d;
printf("\ny=",y); scanf("%d",&y);
printf("m=",m); scanf("%d",&m);
for(d=0;d<z(y,m,1);d++) printf("  ");
for(d=1;d<(z(y,m+1,1)-z(y,m,1)+7)%7+29;d++){
#if 1
if(z(y,m,d)%7==0) printf("\n"),textcolor(LIGHTRED);
else if(z(y,m,d)%7==6) textcolor(LIGHTBLUE);
else textcolor(WHITE);
cprintf("%3d",d);
#else
if(z(y,m,d)%7==0) printf("\n\033[31m%d",d);
else if(z(y,m,d)%7==6) printf("\033[34m%d",d);
else printf("\033[0m%d",d);
#endif
}
}
}
386デフォルトの名無しさん:2007/09/10(月) 22:05:26
[1] 授業単元:確率統計
[2] 問題文(含コード&リンク):

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4908.txt
指数関数の計算がおかしいことになっているようです。(「結果」(変数)が1となるのが)

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:Windows visual studio2005
 [3.3] 言語: C++
[4] 期限:できれば早くお願い致します。
[5] その他の制限: 悪い点、対処法を教えていただければと思います。
387386:2007/09/10(月) 22:15:49
インデントがぐちゃぐちゃで見づらくて申し訳御座いません。
修正版をアップ致しました。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4909.txt
388デフォルトの名無しさん:2007/09/10(月) 22:19:30
>>386
値がハンパなく1に近いからじゃないか
389デフォルトの名無しさん:2007/09/11(火) 00:02:12
>>386
元の数式が分からないことには答えようが無いよ
390デフォルトの名無しさん:2007/09/11(火) 00:23:27
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):メールを受信送信閲覧できるプログラムを書け。(できる人はメーリングリストや機能を増やしてもよい)
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:特に指定してないが自分はBorland C++ Compiler 5.5 無償ダウンロードを使っています
 [3.3] 言語:C
[4] 期限: [2007年9月24日まで]
[5] その他の制限: GUI環境で。できたプログラムはメール等で先生に送りテストは先生が行う
391デフォルトの名無しさん:2007/09/11(火) 00:30:07
>>386
悪い点:数式がゴチャゴチャしすぎで式が正しいかを確認出来ない。
対処法:同じ式や、あまりに長い式は適当に作った変数に突っ込んでおく。

とりあえず軽く修正してみた。出力が元と一緒なのは確認済み。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4911.txt
392デフォルトの名無しさん:2007/09/11(火) 00:54:46
【質問テンプレ】
[1] 授業単元:C言語
[2] 問題文:指数関数eのx乗の値をマクローリン展開式を用いて、xの値-3から3までを計算
      するプログラムを作成せよ。その結果をExcelファイルに出力しグラフを作りなさい。ただし、
      この時の刻み幅Δxは0.1以下で設定せよ。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C++
[4] 期限: 2007年9月24日まで
[5] その他の制限: 1.出力をfprintf(fp1,"%f %22.15e", x, exp(x) )などのようにして、xの値とeのx乗の値
          を同時に出力させると後で処理しやすい。
         2.出力ファイルをExcelファイルにするためには、拡張子を「***.xls」にすればよい。
です。お願いします。
393デフォルトの名無しさん:2007/09/11(火) 01:31:43
すいません。>>390の期限は9月17日でした
394デフォルトの名無しさん:2007/09/11(火) 04:33:34
ここ見てるとC言語が多いね。なんでC++じゃなくわざわざCなんだろ?
うちの大学は初めからC++だったけど
395デフォルトの名無しさん:2007/09/11(火) 04:57:07
>>394
情報系以外の学部からすれば、簡単なアルゴリズムやるだけならCだけで十分だから
逆にわざわざC++する必要ないって感じじゃないだろうか?
396デフォルトの名無しさん:2007/09/11(火) 05:03:47
>>395
そういえば別に情報学部以外の学部でもプログラミング勉強してたんだね
そのこと忘れてた
397デフォルトの名無しさん:2007/09/11(火) 08:36:58
科学技術計算にもC++のようなオブジェクト指向がある言語の方が有利だと思うが
398デフォルトの名無しさん:2007/09/11(火) 08:43:17
>>390
先生がどの環境でテストするかが問題であって
>>390 の環境ははっきりいってどうでもいい
GUIは環境依存だから作りなおしは面倒なんだぞ

まあ、俺には回答できない宿題なんだが口出しだけしてみた
399デフォルトの名無しさん:2007/09/11(火) 13:12:06
科学技術計算にFortranではなくCやC++を使う馬鹿はいない。
400デフォルトの名無しさん:2007/09/11(火) 14:13:28
>>394 うちの大学はjavaしかやらなかった
401デフォルトの名無しさん:2007/09/11(火) 14:14:57
>>390
1週間でメイラー作れとは厳しいね
ちゃんとできれば実務で使えるレベルだと思う

Socket 送受信、POP/SMTP プロトコルの処理だけでも真面目に書けば
1000ステップ位になりそうだから、ここで回答を期待するのは難しいかと

地道に頑張ってね
402デフォルトの名無しさん:2007/09/11(火) 14:23:28
>>401 地道に頑張ります。実はこれちょっと前に出された課題で忘れてた自分が悪いんです。本買ってきて
     作るというのはできるでしょうか?
403デフォルトの名無しさん:2007/09/11(火) 14:32:33
猫に劣る漏れが言うのも何だが、GUIは元より、送受信も何かしらのライブラリをつかうんじゃないの?
404デフォルトの名無しさん:2007/09/11(火) 14:38:49
情報系以外なら、それはそれで今更Cをやらせる意義が分からんが
シミュレーションで3Dグラフィックスぐりぐり動かしたり
機械の制御とかやらせたりするのかな?
405403:2007/09/11(火) 14:49:29
>>390
borland 5.5である必要ねーのか……。
VCとかでやる課題だぜ。
406デフォルトの名無しさん:2007/09/11(火) 15:00:34
>>390
Visual Cでやろう。
MAPIを使えば簡単にできる。
407デフォルトの名無しさん:2007/09/11(火) 15:13:20
Visual C++なら見たことあるけどVisual Cって?
408デフォルトの名無しさん:2007/09/11(火) 15:17:07
すまそ。寝ぼけてた
409デフォルトの名無しさん:2007/09/11(火) 15:37:58
>>392 fprintf 使うようなのでCで書いた。あとcsvフォーマットで出力した。
#include<stdio.h>
#include<stdlib.h>

double myexp(double x){
double ret=1.0, work=1.0;
int i;
for(i=1;i<=30;i++){
work*=x/i;
ret+=work;
}
return ret;
}

int main(void){
char *filename="output.csv";
FILE *fp;
double x;
int i;
fp=fopen(filename, "w");
if(fp==NULL){
fprintf(stderr, "\nError: %s file cannot open.\n", filename);
exit(1);
}
for(i=-30;i<=30;i++){
x=i/10.0;
fprintf(fp, "%f,%22.15e\n", x, myexp(x));
}
fclose(fp);

return 0;
}
410デフォルトの名無しさん:2007/09/11(火) 17:22:42
>>406 これのことでしょうか?
      ttp://support.microsoft.com/kb/304894/ja

いまいち使いかたがよくわかりません・・・
411デフォルトの名無しさん:2007/09/11(火) 18:20:24
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):身長は?という問いに対して自分の身長を入れるプログラムを作成せよ。
また、確認として最後にYと入力すると「入力を終了します」と表示され終了、Nが入力されるともう一度身長の入力するとこに戻りループする
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
 [3.3] 言語:C
[4] 期限: 今週まで
[5] その他の制限: 実行例

            あなたの身長は?:180cm
            これでよろしいですか?【Y・・・はい/N・・・いいえ】

            あなたの身長180cmです。入力を終了します。
412デフォルトの名無しさん:2007/09/11(火) 18:41:34
>>402
POP3(受信)に関して言えば使うコマンドは USER, PASS, LIST, RETR, DELE, QUIT くらいだろう
同様にSMTP(送信)は HELLO, MAIL FROM, RCPT TO, DATA, QUIT あたりかな
そんなに厚くない本で POP3/SMTP について書いてる本は有った方が良いかな
ネットでも十分だとは思うけど...

それより socket は大丈夫?
BC++で WinSock を使った事ないけどヘッダーとかあったっけ?(普通有るとは思うけど)
WinSock 入門みたいな本が一冊有れば良いと思うけど、こいつもネットでも十分
getaddrinfo(), socket(), connect(), recv(), send() くらいについて調べれば良いと思う

>>406 が言うようにVC++使って MAPI 使った方が楽かも知れないけど、宿題の趣旨が
socket の基礎とか各種プロトコルに対する理解度を求めるモノであれば題意に反する気もする
413デフォルトの名無しさん:2007/09/11(火) 18:48:18
>>411
#include <stdio.h>
main()
{
char buf[10];
int ch;
loop:
printf("bタ的身長是幾cm?:");
scanf("%s", buf);
printf("這個可以dウ?【Y・・・可/N・・・不可】\n");
ch = getchar();
if(ch != 'Y' && ch != 'y') goto loop;
printf("bタ的身長是%s。由於這個結束。\n", buf);
}
414デフォルトの名無しさん:2007/09/11(火) 18:56:26
>>413 ありがとうございます。最初のmain()のところはint main(void)ではなくてもいいんですか?
415デフォルトの名無しさん:2007/09/11(火) 19:00:19
>>414
判断できないなら気にする必要ないと思うよ。
416デフォルトの名無しさん:2007/09/11(火) 19:11:37
>>415 分かりました!ありがとうございます。中国語のとこを日本語に変えましたが結果が

            あなたの身長は?:180cm
            これでよろしいですか?【Y・・・はい/N・・・いいえ】
            あなたの身長は?:Y

            あなたの身長180cmです。入力を終了します。

というふうになります・・・
417デフォルトの名無しさん:2007/09/11(火) 19:25:58
>>409
ありがおうございます!
418デフォルトの名無しさん:2007/09/11(火) 19:26:46
>>416 maybe
ch = getchar();

while((ch = getchar())=='\n');
419417:2007/09/11(火) 19:27:37
>>409
すいません。打ち間違えました。
ありがとうございます!
420デフォルトの名無しさん:2007/09/11(火) 19:42:53
>>418 正常に動きました!ありがとうございますい!
421デフォルトの名無しさん:2007/09/11(火) 20:53:53
入力された文字列を逆順に表示する関数void strrev(char *s)を作成しなさい

#include <stdio.h>
void strrev(char *s);

void main(void)
{
char s[100];
printf("please input string -> ");
scanf("%s",s);
strrev(s);
}

void strrev(char *s)
{


char *p,q;

p=s;
while(*p!='\0')
p++;
ここれまではわかったのですがこの先がいまいちわかりません。
わかるかたいたらお願いします。

422デフォルトの名無しさん:2007/09/11(火) 20:56:50
while(s!=p--) putchar(*p);
423デフォルトの名無しさん:2007/09/11(火) 21:00:41
>>421
while(--p>s) q=*s,*s++=*p,*p=q;
424423:2007/09/11(火) 21:01:47
勘違いしてたorz
425421:2007/09/11(火) 21:01:55
>>422できました。
お早い回答ありがとうございました。
426デフォルトの名無しさん:2007/09/12(水) 00:00:08
[1] 授業単元: c
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4917.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年9月12日3:00まで
[5] その他の制限:実行例:
% ./a.out
4 3 8
9 5 1
2 7 6

よろしくお願いします
427デフォルトの名無しさん:2007/09/12(水) 00:38:20
>>426
無理
1を置ける場所は4箇所のみ
3x3魔方陣は例に出ているものの回転鏡像解しか存在しない
428デフォルトの名無しさん:2007/09/12(水) 01:55:21
>>427
また知ったかのお前か、いい加減うっとうしいんだよ、調べもしないで。
奇数魔方陣について調べてから出直せ。それから無理じゃないからw
429デフォルトの名無しさん:2007/09/12(水) 02:26:05
>>428
>>427の言うとおり、3x3の場合は1が置けるのは4箇所のみだから
どこにもおける訳ではないよ
出来るというんだったら例を挙げてみて
430デフォルトの名無しさん:2007/09/12(水) 02:45:10
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
問題1:文字列を入力し、英字とそれ以外を格納する配列に振り分けなさい
使用しする標準関数:isalpha()
実行結果
文字列入力==>A12H&jfTy8uZ3#
英字:AHjfTyuZ
その他:12&83#

問題2:文字列と削除文字列を入力し、文字列中から削除文字列を排除しなさい
使用する標準関数:strncmp(),strcpy(),strlen()
実行結果
文字列入力(m1)==>ABCDEFAABCDABC
削除文字列(m2)==>ABC
結果文字列(m1):DEFAD

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
 [3.3] 言語:C
[4] 期限: 明後日まで
[
431デフォルトの名無しさん:2007/09/12(水) 02:45:56
>>428に期待
432デフォルトの名無しさん:2007/09/12(水) 02:47:53
>>427の言うとおり
1をどこにでもおけるのが前提なら無理
1を真ん中に置いてとけるかっつーの
433デフォルトの名無しさん:2007/09/12(水) 02:53:30
苦し紛れにこんなの作ったりしてw

1 0 5
6 2 -2
-1 4 3
434デフォルトの名無しさん:2007/09/12(水) 03:40:33
>>426
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4918.c
各行、各列、対角線の合計の表示あり。この法則で1〜行*列までの数字を
行列に入れていく場合、対角線まで合計が一致するのは
>>426にあるパターンのみかな。後は言われているように、全部で4パターンってことになるかな?
435デフォルトの名無しさん:2007/09/12(水) 03:45:16
1を基準に、右上、右下、左上、左下に順番に入れて
3まで進んだら、4は上下左右どちらか。それらの法則は
おりはさっぱりなんで誰か解説プリーズ。
436デフォルトの名無しさん:2007/09/12(水) 05:12:52
>>430
void sep( char* in, char* alpha, char* other )
{
while( *in ) {
if( isalpha( *in ) ) { *alpha = *in; alpha++; }
else { *other = *in; other++; }
in++;
}
*alpha = *other = 0x00;
}
void del( char* in, char* del, char* out )
{
int i, in_len, d;
d = strlen( del ); i = strlen( in ) - d + 1;
while( i > 0 ) {
if( strncmp( in, del, d ) ) { *out = *in; out++; in++; i--; } // 美しくない、誰か直して
else { in+=d; i-=d; }
}
*out = 0x00;
if( strncmp( in, del, d ) ) strcpy( out, in );
}

437デフォルトの名無しさん:2007/09/12(水) 05:49:23
>>436
つstrstr
438デフォルトの名無しさん:2007/09/12(水) 06:44:59
>>436
美しいよぉ〜、美しいよぉ〜、綺麗だよぉ〜、素晴らしいよぉ〜
今君、すっごく輝いているよぉ〜、それじゃ、一枚脱いでみようか?
あと、mainをつけるともっと良くなるよぉ〜
439デフォルトの名無しさん:2007/09/12(水) 07:23:05
1] 授業単元:C言語
[2] 問題文(含コード&リンク):英文中の単語の出現度をカウントしなさい
英文中に含まれる単語数は10以下とする
ポインタ配列を使用する
char english[]="My name is Taro.Your name is Hanako.";

実行画面
My:1
name:2
is:2
Taro:1
Your:1
hanako:1

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
 [3.3] 言語:C
440デフォルトの名無しさん:2007/09/12(水) 09:16:08
>>439 無駄に発展問題にも対応しやすいようにしてみたw
#include<stdio.h>
#include<string.h>
#define WORD_KIND_MAX 10
int main(void){
char english[]="My name is Taro.Your name is Hanako.";
char *word[WORD_KIND_MAX], buf[100];
int i, word_kind=0, word_num[WORD_KIND_MAX];
FILE *fp;
fp=tmpfile();
fprintf(fp, "%s", english);
fseek(fp, 0L, SEEK_SET);
while(1){
if(fscanf(fp, "%[A-Za-z]", buf)==1){
for(i=0;i<word_kind;i++){
if(stricmp(word[i], buf)==0){
word_num[i]++;
break;
}
}
if(i>=word_kind && i<WORD_KIND_MAX){
word[word_kind]=strdup(buf);
word_num[word_kind]=1;
word_kind++;
}
}
else if(fscanf(fp, "%[^A-Za-z]", buf)!=1) break;
}
for(i=0;i<word_kind;i++) printf("%s:%d\n", word[i], word_num[i]);
fclose(fp);
return 0;
}
441デフォルトの名無しさん:2007/09/12(水) 09:32:13
文字列のstrの中に文字cが含まれている個数(含まれていなければ0とする)
を返す関数int str_src)char *s,int c)を空白部分に作成しなさい。
空白部分とはint str_src(char *s,int c)のしたのカッコです。
わかるかたいたらお願いいたします。


#include <stdio.h>
int str_src(char *,int);

void main()
{
char s[200],c[10];
printf("input string -> ");
scanf("%s",s);
printf("input find character ->");
scanf("%s",c);
printf("find %c is %\n",c[0] str_src(s,c[0]));

}
int str_src(char *s,int c)


{



}
442デフォルトの名無しさん:2007/09/12(水) 09:37:22
>>441
int str_src(char *s, int c)
{
int count;
for(count=0;(s=strchr(s,c))!=NULL;count++,s++);
return count;
}
443デフォルトの名無しさん:2007/09/12(水) 11:00:31
>>441
おかしなところを変えたが勝手に直してくれ

#include <stdio.h>
int str_src(char *,char);

int main(void)
{
char s[200],c;
printf("input string -> ");
scanf("%s",s);
printf("input find character ->");
scanf(" %c",&c);
printf("find %c is %i\n",c,str_src(s,c));
return 0;
}

int str_src(char *s,char c)
{
int count=0;
int i;
for(i=0; s[i]!='\0'; ++i)
if(s[i] == c) ++count;
return count;
}
444デフォルトの名無しさん:2007/09/12(水) 13:01:44
>>437
だって問題に strstr() は使って良いと書いてないから
StrStr() を書いたらイヤミって言われそうですし..
>>438
今はシャネルの5番だけなので脱げないの...ゴメンナサイ
main() も書けないボウヤには興味が無いの...ゴメンナサイ.
445デフォルトの名無しさん:2007/09/12(水) 13:10:32
>>444
そんな君に俺がアイラブユー
446デフォルトの名無しさん:2007/09/12(水) 21:53:09
なんかおまいらのやってる宿題ってそんな数十行でおわるコードばっかなのか?
つーかそんなのやっても役にたつんかなあ
447デフォルトの名無しさん:2007/09/12(水) 21:56:14
行数など意味を成さない
448デフォルトの名無しさん:2007/09/12(水) 21:59:46
>>446
>>439 を回答を見ずに解いてみて欲しい
それが簡単だったら >>390 を解いてみて
何行になったかうp!
449デフォルトの名無しさん:2007/09/12(水) 22:06:53
俺は>>446じゃないけど、
>>439>>390レベルの差大きすぎじゃね?
450446:2007/09/12(水) 22:16:44
446はまああれだが390は無理w
僕が間違っていました。
みなさん一緒に宿題がんばりましょう
451デフォルトの名無しさん:2007/09/12(水) 22:18:14
じゃあ間に >>306 入れて簡単な方から順に
>>439 >>306 >>390
でどうかな?

でも、回答者のセンスのおかげで
行数が少なくなっていることもあるということを
言いたかっただけで本当に解かなくてもいいんだ
452デフォルトの名無しさん:2007/09/12(水) 22:51:49
汎用性とかバグ出さないとか可読性とかそういうこと考えると行数増えるけど、
その場限りでバグも可読性も無視できるならずいぶん減る。
453デフォルトの名無しさん:2007/09/12(水) 22:54:37
七行プログラミング part5
http://pc11.2ch.net/test/read.cgi/tech/1142467359/
ここでも見ればおk
454デフォルトの名無しさん:2007/09/12(水) 22:55:54
>>451
日本語でおk
455デフォルトの名無しさん:2007/09/12(水) 23:05:00
>>454
日本人でおk
456デフォルトの名無しさん:2007/09/13(木) 00:04:54
>>390 メーラー作るのはいいとしてGUIをCで作るとはなんと酔狂なwwwwせめてC++でできないかな。俺は無理だけど
457デフォルトの名無しさん:2007/09/13(木) 01:39:59
Cでも十分に楽だろう。
458デフォルトの名無しさん:2007/09/13(木) 01:49:14
Windowsなのがダルイ
459デフォルトの名無しさん:2007/09/13(木) 01:50:14
GUIってならそれに応じたリソースが・・・Visual C++でそ。
460デフォルトの名無しさん:2007/09/13(木) 07:17:36
授業単元:C言語
問題文(含コード&リンク):2値を小さい順に表示するユーザ関数を作成しなさい
プロトタイプ宣言:boid SortDisp(int dt1,int dt2);
実行画面
数値1入力==>10
数値2入力==>15
数値:10
数値:15

数値1入力==>15
数値2入力==>10
数値1:10
数値2:15

環境
OS:WindowsXP
コンパイラ名とバージョン:Borland C++ Compiler 5.5
言語:C
461デフォルトの名無しさん:2007/09/13(木) 07:22:24
462デフォルトの名無しさん:2007/09/13(木) 07:26:50
授業単元:C言語
問題文(含コード&リンク):文字列を入力し、圧縮しながら他の文字列配列に格納しなさい
使用する主な標準関数:strlen()、sprintf()など

実行画面
入力文字列(m1)==>AAAAAAABBBCddEEEE####
圧縮(m2):@7A@3BC@2d@4E@5#
圧縮比:72.7%

環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:ボーランド
 [3.3] 言語:C
[4] 期限:
[5] その他の制限:

463デフォルトの名無しさん:2007/09/13(木) 07:29:02
461>それエラーがでたんですが
464デフォルトの名無しさん:2007/09/13(木) 07:39:44
>>463
だったらそれを書け。
465デフォルトの名無しさん:2007/09/13(木) 09:53:48
>>462
#include <stdio.h>
#include <string.h>
void comp_text( char* in, char* out )
{
char tmp[8];
char last = 0x00;
int count = 0;

*out = 0x00;
while( 1 ) {
if( *in != last ) {
switch( count ) {
case 0: tmp[0] = 0x00; break;
case 1: sprintf( tmp, "%c", last ); break;
default: sprintf( tmp, "@%d%c", count, last ); break;
}
strcat( out, tmp );
last = *in;
count = 1;
}
else {
count++;
}
if( last == 0x00 ) break;
in++;
}
}

466デフォルトの名無しさん:2007/09/13(木) 09:59:59
>>462
おまけの main()
void main( void )
{
char* in = "AAAAAAABBBCddEEEE#####";
char out[64];
comp_text( in, out );
printf( "in -> %s\n", in );
printf( "out-> %s\n", out );
printf( "rate = %.1lf\n", (double)strlen( out ) / (double)strlen( in ) * 100.0 );
}
問題文の(m1)は "#" が一個足らないよな(最後だけ一個多くするとかの仕様ではなく)
467デフォルトの名無しさん:2007/09/13(木) 10:02:45
>>462
その圧縮方法だと圧縮率が1以上になることあるなw
468デフォルトの名無しさん:2007/09/13(木) 10:27:40
>>465
"1111111111"
を圧縮すると…
469デフォルトの名無しさん:2007/09/13(木) 10:38:24
>>462 便乗
#include <stdio.h>
#include <string.h>

void comp_str(char *str, char *comp){
    int i, j, cnt, len = (int)strlen(str);
    for(i = j = 0; i < len; i++, j++){
        cnt = 1;
        while(str[i] == str[i + 1]) i++, cnt++;
        if(cnt == 1) comp[j] = str[i];
        else sprintf(comp + j, "@%d%c", cnt, str[i]), j += cnt/10 + 2;
    }
}

int main(void){
    char *str = "abcddddddddddddeeeeeeeeeeeeeeeefffff", comp[256];
    comp_str(str, comp);
    puts(comp);
    return 0;
}
470デフォルトの名無しさん:2007/09/13(木) 11:26:22
>j += cnt/10 + 2
20個だったらどうすんの?
471469:2007/09/13(木) 11:39:20
底が10のlogにしなきゃ駄目か……
ま、いいや
472465:2007/09/13(木) 11:41:05
>>468
@101 で良いんじゃねぇの?
473問題2の答え:2007/09/13(木) 12:16:41
授業単元:C言語
問題文(含コード&リンク):検索する文字列を入力し、その値を返すユーザ関数を作成しなさい
引数1:検索対象文字列
引数2:検索文字列
戻り値:あった場合(一致した文字列の先頭アドレス)
   なかった場合(NULL)
char moji[] ="ABCDEFGHJABFGHSKL"; */検索対象文字列*/

実行画面
検索文字列==>HS
検索位置:HSKL
環境
OS:WindowsXP
コンパイラ名とバージョン:Borland C++ Compiler 5.5
言語:C




474デフォルトの名無しさん:2007/09/13(木) 12:23:44
>>473
char *FindStr(const char *tgt, const chat *str)
{
return strstr(tgt, str);
}
475デフォルトの名無しさん:2007/09/13(木) 13:10:33
>>474
禿ワラw
476デフォルトの名無しさん:2007/09/13(木) 17:57:55
>>473
#include <stdio.h>
#include <string.h>

char *my_strstr(char *str, char *ptn){
    int i, j, str_len = (int)strlen(str), ptn_len = (int)strlen(ptn);
    for(i = 0; i < str_len - ptn_len; i++)
        if(!strncmp(str + i, ptn, ptn_len))
            return str + i;
    return NULL;
}

int main(void){
    char moji[] = "ABCDEFGHJABFGHSKL", ptn[] = "HS";
    puts(my_strstr(moji, ptn));
    return 0;
}
477デフォルトの名無しさん:2007/09/13(木) 18:09:28
#include <stdio.h>

char* mai_strstr(const char *tgt, const char *str)
{
if(str[0]=='H' && str[1]=='S')
return tgt+13;
return 0;
}

int main(void)
{
char moji[] ="ABCDEFGHJABFGHSKL"; /*検索対象文字列*/
char buf[256];
printf("検索文字列==>");
scanf("%s",buf);
printf("検索位置:%s\n",mai_strstr(moji,buf));
return 0;
}

実行画面
検索文字列==>HS
検索位置:HSKL
478デフォルトの名無しさん:2007/09/13(木) 18:36:27
>>476
strlen(), strncmp() 使うなら >>474 と同じじゃね?

char* StrStr( char* s1, char* s2 )
{
  char* p1 = s1;
  char* p2 = s2;
  while( *s1 ) {
    while( *p1 == *p2 ) {
       p1++;
       p2++;
       if( ! *p2 ) return s1;
       if( ! *p1 ) return NULL;
    }
    s1++;
    p1 = s1;
    p2 = s2;
  }
  return NULL;
}
479デフォルトの名無しさん:2007/09/13(木) 19:06:59
二つの整数を入力して、前者の値が後者の何%であるか求めるプログラムはどうやればいいですか?
480デフォルトの名無しさん:2007/09/13(木) 19:15:57
前者に100を掛けて後者で割る!!
481デフォルトの名無しさん:2007/09/13(木) 19:21:52
>>480
それだと小数点以下が切り捨てに...

とネタとも思える質問の回答に突っ込んでみた
482デフォルトの名無しさん:2007/09/13(木) 19:23:36
481
小数点以下については触れてないからね
483デフォルトの名無しさん:2007/09/13(木) 19:33:22
すみません。何%であるかを実数で表示です。

よろしくお願いします。
484デフォルトの名無しさん:2007/09/13(木) 19:39:09
前者に100.0を掛けて後者で割る!!
485デフォルトの名無しさん:2007/09/13(木) 19:40:32
(double)
486デフォルトの名無しさん:2007/09/13(木) 19:42:16
#include <stdio.h>
int main(void)
{
int na,nb;

puts("二つの整数を入力してください。");
printf("整数A:"); scanf("%d",&na);
printf("整数B:"); scanf("%d",&nb);
printf("Aの値はBの%f%です。\n",(double)na*100/nb);

return (0);
}
487デフォルトの名無しさん:2007/09/13(木) 20:05:34
#include <stdio.h>
#define N 128
static int table[N];
static void make_table(char *ptn){
    int i = 1;
    char *p, *q;
    table[0] = 0;
    if(*ptn == '\0') return;
    while(i < N){
        p = ptn + i, q = ptn;
        if(*p == '\0') break;
        while(*p == *q) p++, q++;
        table[i++] = q - ptn;
    }
}
char *my_strstr(char *str, char *ptn){
    char *p, *q;
    make_table(ptn);
    while(*str != '\0'){
        p = str, q = ptn;
        while(*p && *q && *p == *q) p++, q++;
        if(*p == '\0') break;
        if(*q == '\0') return str;
        str += table[q - ptn] + 1;
    }
    return NULL;
}
int main(void){
    char moji[] ="ABCDEFGHJABFGHSKL", ptn[N] = "HS";
    puts(my_strstr(moji, ptn));
    return 0;
}
488デフォルトの名無しさん:2007/09/13(木) 20:41:19
>>486
×printf("Aの値はBの%f%です。\n",(double)na*100/nb); 
○printf("Aの値はBの%f%です。\n",(double)na*100.0/(double)nb); 
489デフォルトの名無しさん:2007/09/13(木) 20:50:48
型の昇格があるから、一箇所doubleなら十分
490デフォルトの名無しさん:2007/09/13(木) 21:01:03
>>489
それ処理系依存じゃなかったっけ?
491デフォルトの名無しさん:2007/09/13(木) 21:07:41
そんなことはない。
少なくとも488が指摘した部分だってそのままで問題ない。
492デフォルトの名無しさん:2007/09/13(木) 21:17:35
%%ではないのかと
493デフォルトの名無しさん:2007/09/13(木) 22:16:12
>>492
論外
494デフォルトの名無しさん:2007/09/13(木) 22:25:57
printf("Aの値はBの%g%%です。\n", na * 100. / nb);
495デフォルトの名無しさん:2007/09/13(木) 22:44:51
%か%%のどっち?
496デフォルトの名無しさん:2007/09/13(木) 22:46:06
>>495
%%
497デフォルトの名無しさん:2007/09/13(木) 22:46:29
%%
498デフォルトの名無しさん:2007/09/13(木) 22:47:30
499デフォルトの名無しさん:2007/09/13(木) 23:05:31
    ***    *
    *  *   *
    ***  *
         *
        *  ***
       *   *  *
      *    ***
500デフォルトの名無しさん:2007/09/13(木) 23:13:39
o% Oシュワッチ
501デフォルトの名無しさん:2007/09/14(金) 12:48:18
>>467
あらゆる文字列を短く圧縮する方法は情報理論的にありえないから、おっけーなのでは?
問題は「ありがちな文字列が縮まらない」かどうか。
502デフォルトの名無しさん:2007/09/14(金) 15:06:16
int i,j;
int l1,l2,w,h;

printf("一辺(その1):");  scanf("%d",&l1);
printf("一辺(その2):");  scanf("%d",&l2);
if(l1 < l2){
l1 = h;  l2 = w;
}
else{
l1 = w; l2 = h;
}

for(i = 1; i <= h; i++){
for(j = 1; j <= w; j++)
putchar('*');
putchar('\n');
}

*を並べて長方形を表示するプログラムを作っています。
これは横長の長方形を出力するようにしてるのですが、
実行すると*が延々と並ぶのですが、何処が間違っているのでしょう?
503デフォルトの名無しさん:2007/09/14(金) 15:09:32
おそらく
l1 = h; l2 = w;
とかがミステリー。

h = l1, w = l2;
みたいに逆なのではないだろうか?

for文がとまらないのは、hとwに不定値が詰まっているからだろう
504デフォルトの名無しさん:2007/09/14(金) 15:17:54
暇だな。
メールでもやるかな。

いや、やめとこう。
505デフォルトの名無しさん:2007/09/14(金) 15:19:31
今そこを修正してみたんですけど、結果は一緒でした。

でもこれ以外に原因は無いと思うんですけどね…
506デフォルトの名無しさん:2007/09/14(金) 15:25:03
こんな具合なのではなかろうか
#include <stdio.h>

int main(void){
    int i, j, h, w, l1, l2;

scanf("%d%d", &l1, &l2);
    if(l1 < l2)
        h = l1, w = l2;
    else
        h = l2, w = l1;

    for(i = 1; i <= h; i++){
        for(j = 1; j <= w; j++)
            putchar('*');
        putchar('\n');
    }

    return 0;
}
507デフォルトの名無しさん:2007/09/14(金) 15:31:40
すみません。自分が作ったところとはどこが違うのでしょう?
if文のあたりですかね?
508デフォルトの名無しさん:2007/09/14(金) 15:33:09
if文のあたりだと思います。
l1 = h と h = l1 という様に、左辺と右辺が逆なのだと思います。
509デフォルトの名無しさん:2007/09/14(金) 15:34:27
なるほど。
今作り直してみたら同じ結果になりました。
どうもありがとうございました。
510デフォルトの名無しさん:2007/09/15(土) 00:37:54
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):1から10の数字をランダムで表示せよ。ただし一度出た数字は重複しないこと
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
 [3.3] 言語:C
[4] 期限: 2007年9月17日
[5] その他の制限:
511デフォルトの名無しさん:2007/09/15(土) 00:42:57
>>510 1個だけ出力でいいなら重複しようもない
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main(void){
srand(time(NULL));
printf("%d\n", (rand()%10)+1);

return 0;
}
512デフォルトの名無しさん:2007/09/15(土) 00:44:41
>>511 すいません。説明不足だったみたいです。1から10までの数字を全部重複しないようにランダムで表示します 
513デフォルトの名無しさん:2007/09/15(土) 00:56:39
>>510
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main(void){
int array[10], i, index, temp;

srand(time(NULL));
for(i=0;i<10;i++) array[i]=i+1;

for(i=0;i<10;i++){
index=rand()%10;
temp=array[i];
array[i]=array[index];
array[index]=temp;
}

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

return 0;
}
514デフォルトの名無しさん:2007/09/15(土) 01:02:37
>>513 ありがとうございます!
515デフォルトの名無しさん:2007/09/15(土) 07:24:51
確率偏ってるから間違いだろ。
516デフォルトの名無しさん:2007/09/15(土) 10:46:05
最近、知ったかの痛々しい初心者が紛れ込んでるなぁ〜w
確率w 偏ってるw 間違いw
517デフォルトの名無しさん:2007/09/15(土) 10:49:36
rand()%10 を rand()%(i+1)にすれば一様になるんだけどね。
518デフォルトの名無しさん:2007/09/15(土) 10:53:02
>>517
両方やって統計を取ってみて欲しい
>>513 の方が一様になると思う
コンパイラの rand 関数の実装にもよるけど
519デフォルトの名無しさん:2007/09/15(土) 11:00:21
>>518
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main(void){
int array[10], sum[10]={0}, i, j,index, temp;

srand(time(NULL));
for(j=0; j<10000; j++) {
for(i=0;i<10;i++) array[i]=i+1;

for(i=0;i<10;i++){
index=rand()%10;
temp=array[i];
array[i]=array[index];
array[index]=temp;
}
for(i=0; i<10; i++) sum[i]+=array[i];
//for(i=0;i<10;i++) printf("%d\n", array[i]);
}
for(i=0; i<10; i++) printf("%d\n", sum[i]);
return 0;
}

これを実行して見れ。
その後、rand()%(i+1)で実行して数値のばらつきを比較してみな
520デフォルトの名無しさん:2007/09/15(土) 11:08:54
やっぱり題意が分かっていない香具師が紛れ込んでいるなw
頼むから無意味なソース貼るなよ、スレ違い
521デフォルトの名無しさん:2007/09/15(土) 11:12:13
1から10までの系列の場合の数は 10! 個あるのに、>>513 のプログラムの自由度は
10の10乗しかない。
シャッフルで等確率に出すのはけっこうむずい。
>>517 はもっと出ない系列が増える。

あと、等確率とか乱数の質とか言っている場合は rand()%なんとか と
乱数の下位のビットを使わず、RAND_MAX で割って上位のビットを使うこと。
522デフォルトの名無しさん:2007/09/15(土) 11:12:53
>>519
確かに偏りがある

rand()%(i+1)
にするとその時点毎に一様になりそうなことは分かる

rand()%10
にすると偏るのはなぜ?
523デフォルトの名無しさん:2007/09/15(土) 11:13:41
>>512
> 1から10までの数字を全部重複しないようにランダムで表示します
要するに1〜10を並び替えているだけ。重複しないように発生させているんじゃなくて
単に1〜10を先頭の要素からランダムに選んだ要素と交換するのに一様とかあまり深く関わらんぞ。
524デフォルトの名無しさん:2007/09/15(土) 11:15:00
>>521
10^10 >> 10!
じゃないか?
525デフォルトの名無しさん:2007/09/15(土) 11:16:01
そうそう、強いて一様とか言うなら、例えば0〜1の間の乱数を10個発生させるとき
偏らないようにRAND_MAXを用いるとかって話なら分かるけどなw
526デフォルトの名無しさん:2007/09/15(土) 11:18:18
例えばよ、1〜10の中から5つ適当に数字を選べっていうなら、その5つが
常にある一定の範囲内の値しか出さないようなアルゴリズムなら偏りとか
話は分かるけど、全部を重複せずに出すのに偏りとかないからw
っつーか重複していないんだから偏れないってw
527デフォルトの名無しさん:2007/09/15(土) 11:22:30
横道に逸れているのは分かっているが、
なぜそうなるのか興味がある。
528デフォルトの名無しさん:2007/09/15(土) 11:32:28
10^10回の試行でシャッフルした結果が、各位置に対して数字の分布が均一になってないからとしか。
529デフォルトの名無しさん:2007/09/15(土) 11:41:56
rand()に依存している以上その辺は仕方がない。なんなら
srand()に入れるSEEDも工夫してみたら。
これである位置にある値が常に入っているとかでなければ問題はないっしょ。
530デフォルトの名無しさん:2007/09/15(土) 11:51:40
Numerical Recipes in C: The Art of Scientific Computing (William H. Press, Brian P. Flannery, Saul A. Teukolsky, William T. Vetterling; New York: Cambridge University Press, 1992 (2nd ed., p. 277)) では、次のようなコメントがなされている。

「1 と 10 の間の乱数を生成したいのであれば、常に

j = 1 + (int) (10.0 * rand() / (RAND_MAX + 1.0));

のように上位ビットを用いること。

j = 1 + (rand() % 10);

のような、下位のビットを用いるような方法は決してしないこと。」

531デフォルトの名無しさん:2007/09/15(土) 11:53:04
513の偏りはそういう問題じゃないんだけど
532513:2007/09/15(土) 12:17:40
>>513 の偏りについて計算してみた

array[0] について
1 が入る確率 0.100
2 が入る確率 0.129
3 が入る確率 0.120
4 が入る確率 0.112
5 が入る確率 0.104
6 が入る確率 0.098
7 が入る確率 0.092
8 が入る確率 0.087
9 が入る確率 0.082
10 が入る確率 0.077
533デフォルトの名無しさん:2007/09/15(土) 12:18:38
1から10の範囲の乱数を生成、
その番号が未使用なら採用、
使用済なら再度乱数生成に戻る。
10個取得したら終了する。
これで良いんじゃないの?
534513:2007/09/15(土) 12:21:13
検証コード
ratio[x][y] は x 回目のシャッフルが終わった時に数値 n が y 番目に入っている確率
但し ratio[0][0-9]=0.0, ratio[0][n-1]=1.0; とする
#include<stdio.h>
#define NUM_MAX 10
void disp_ratio(double ratio[], int n){
double sum=0.0;
int i;
for(i=0;i<n;i++){printf("%.3f ", ratio[i]);sum+=ratio[i];}
printf("sum=%.3f\n", sum);
}
int main(void){
double ratio[NUM_MAX+1][NUM_MAX];
int i, j, k, l;
for(l=0;l<NUM_MAX;l++){
for(i=0;i<NUM_MAX;i++) ratio[0][i]=0.0;
ratio[0][l]=1.0;
for(i=0;i<NUM_MAX;i++){
for(j=0;j<NUM_MAX;j++){
if(i==j){
ratio[i+1][j]=0.0;
for(k=0;k<NUM_MAX;k++) ratio[i+1][j]+=ratio[i][k]/NUM_MAX;
}else{
ratio[i+1][j]=ratio[i][j]*(NUM_MAX-1)/NUM_MAX+ratio[i][i]/NUM_MAX;
}
}
}
for(i=0;i<NUM_MAX+1;i++) disp_ratio(ratio[i], NUM_MAX);
printf("\n");
}
return 0;
}
535デフォルトの名無しさん:2007/09/15(土) 12:23:01
> その番号が未使用なら採用、
> 使用済なら再度乱数生成に戻る。
ここが非効率的

だったら、10個の配列をランダムにシャッフルして...ってやるかな
536デフォルトの名無しさん:2007/09/15(土) 12:24:48
>>533
そうそう。それなら全ての系列が等確率なのは自明。
ちなみに試行は平均 n log n 回。
537デフォルトの名無しさん:2007/09/15(土) 12:27:55
ran()%(i+1)を(int)(rand() / (RAND_MAX + 1.0) * (i+1))にすれば517ので十分
538デフォルトの名無しさん:2007/09/15(土) 12:34:42
だから既に生成された乱数かどうかを調べて採用だのやってたら
数が多くなったら時間が掛かるぞ。実際にやってみろ。
俺、それ数年前にやってみたけど、そのアルゴリズムを見せたら
モロに笑われたよw
539デフォルトの名無しさん:2007/09/15(土) 12:36:08
なんで i+1 にこだわるのか分からん。明らかにこれの方が偏るぞ。
540デフォルトの名無しさん:2007/09/15(土) 12:37:36
一部だけをランダムに取り出す場合なんかは有効なこともあるけどね。
541デフォルトの名無しさん:2007/09/15(土) 12:44:47
540は535と538にね
542デフォルトの名無しさん:2007/09/15(土) 12:50:28
どう有効なのやら
543デフォルトの名無しさん:2007/09/15(土) 12:58:37
>>539
偏らないよ
544デフォルトの名無しさん:2007/09/15(土) 13:02:36
>>535
10件程度の番号取得する宿題じゃ、効率よりもわかりやすい方が
依頼者や出題者wからは喜ばれるのではないかな。
さすがに1000件とかなら、もう少し考えるが。
545デフォルトの名無しさん:2007/09/15(土) 13:17:44
>>543
お前さすがにうざいわ。失せろ、知ったか初心者。
546デフォルトの名無しさん:2007/09/15(土) 13:18:54
>>532
何を基準にサンプルをとったわけ?それがはっきりしないと
その確率も曖昧というかナンセンス。
547デフォルトの名無しさん:2007/09/15(土) 13:21:50
>>534が見えないとか、盲目にもほどがあるw
548デフォルトの名無しさん:2007/09/15(土) 13:22:14
基準・・・w
549デフォルトの名無しさん:2007/09/15(土) 13:22:58
今北さんですか
550デフォルトの名無しさん:2007/09/15(土) 13:39:24
計算時間としては変わらないけど、i + 1 を利用すると試行回数が N - 1 で済むっぽいな。
長年の疑問が解けたかもしれない。
551デフォルトの名無しさん:2007/09/15(土) 13:41:43
i=0のときa[0]に1が入る確率は1

i=1のときa[0]に1が入る確率は、rand()%(1+1)が1のとき、つまり1/2
a[1]に1が入る確率は、rand()%(1+1)が0のとき、つまり1/2
2についても、同様にa[0]とa[1]にそれぞれ1/2の確率で入る。

i=2のときa[0]に1が入る確率はa[0]が1でrand()%(2+1)が1か2のとき、つまり1/2*2/3=1/3
a[1]に1が入る確率はa[1]が1でrand()%(2+1)が0か2のとき、つまり、1/2*2/3=1/3
a[2]に1が入る確率はa[0]が1でrand()%(2+1)が0のときと、a[1]が1でrand()%(2+1)が1のとき、
つまり1/2*1/3+1/2*1/3=1/3
以上より、a[0]からa[2]に1が入る確率はそれぞれ1/3。
1と2は同じ確率でa[0]とa[1]に入ってるから、2も同様にa[0]から[2]にそれぞれ1/3の確率ではいる。
3がa[0]に入る確率はrand()%(2+1)が0になったときなので1/3、a[1]、a[2]についてもそれぞれ
rand()%(2+1)が1,2になったときなので、同様に1/3になる。

以下iが増えても同様の計算で常に一様になる。
552デフォルトの名無しさん:2007/09/15(土) 13:47:12
具体的だけど周りくどい説明の予感。
もっと帰納的に説明できる話だろうに。
553デフォルトの名無しさん:2007/09/15(土) 13:48:02
帰納法だと理解できない人が多そうだったから。
554デフォルトの名無しさん:2007/09/15(土) 14:54:28
>>513 のコードは直感的には一様な結果になりそうだけど
実際には一様にはならず偏りができる

>>517 のコードは一瞬あれっ?と思うが
実際には一様にシャッフルすることができる

要するに >>517 やるじゃねーか
って話でおk?
555デフォルトの名無しさん:2007/09/15(土) 15:01:01
randの下位ビットって使わない方がいいんじゃなかったっけ?
556デフォルトの名無しさん:2007/09/15(土) 15:35:45
>>555
rand() の実装によるとしか・・・
少なくとも linux だと線形合同法は使われてないらしい
557デフォルトの名無しさん:2007/09/15(土) 16:32:40
[1] 授業単元:無し
[2] 問題文(含コード&リンク):下記
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 無期限

100個以下の整数データを読み込み、その平均値と標準偏差の自乗を求めるプログラムを考える。
全データ数をn,各データをx[i]とすると、平均値aと標準偏差の自乗σ^2(sigma2)は次の式で求まる
a=(1/n)Σx[i]
σ^2=(1/n)Σ(x[i]-a)^2

このプログラムは全部で3つのループから成っている。
しかし、ある工夫をするとaを求めるループ2とsigma2を求めるループ3は融合して1つのループにできる。
そのヒントは、σ^2の式の内部を展開して
σ^2=(1/n)Σ[x[i]^2-2ax[i]+a^2)
とすることである。この変更を加えたプログラムのループ2以降を記述せよ。変数の新たな宣言は禁止する
558557:2007/09/15(土) 16:33:25
#include <stdio.h>
void main()
{
int x[100],i,n;
float s,ss,a,sigma2;
scanf("%d",&n);
//ループ1
for(i=0;i<100;i++){
scanf("%d",&x[i]);
}
s=ss=0.0;
//ループ2
for(i=0;i<100;i++){
s+=x[i];
}

a=s/n;
//ループ3
for(i=0;i<100;i++){
ss+=(x[i] - a)*(x[i] - a);
}
sigma2=ss/n;
printf("%f %f\n",a,sigma2);
}

続きです。よろしくお願いします
559デフォルトの名無しさん:2007/09/15(土) 17:07:21
ループ回数はnじゃないの?
for(i=0; i<n; i++) {
s += x[i];
ss += x[i] * x[i];
}
a = s / n;
ss -= a * s;
sigma2 = ss / n;
560デフォルトの名無しさん:2007/09/15(土) 17:30:58
すみません再度お願いします。

[1] 授業単元:
[2] 問題文(含コード&リンク): 44.1kHzサンプリング周波数で
               1kHzの正弦波を10秒間作るプログラム
               gnuplotで波形を出力
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 期限無し、早期希望
[5] その他の制限: 関数を使用しない。 fopenなどは無しで。

 よろしくお願いします
561デフォルトの名無しさん:2007/09/15(土) 17:36:16
>>559
ss -= a * s; 

ss += ( - 2 * a * s + a * a * n );
じゃねぇの?
562デフォルトの名無しさん:2007/09/15(土) 17:37:04
a * n = s
563デフォルトの名無しさん:2007/09/15(土) 17:49:48
sigma2 = ss / n - a * a
564デフォルトの名無しさん:2007/09/15(土) 18:12:38
>>560
#include<stdio.h>
#include<math.h>

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

for(i=0;i<44100*10;i++){
theta=i*2*M_PI*1000/44100;
printf("%f\n", sin(theta));
}
return 0;
}
565デフォルトの名無しさん:2007/09/15(土) 18:57:01
そういえば「M_PI_2」ってどのコンパイラにも定義されてますか?
566デフォルトの名無しさん:2007/09/15(土) 18:59:47
>>565
ansiに規定がないからないのもあるよ。
# M_PIもね。
567561:2007/09/15(土) 20:16:31
>>562
駄目だ俺頭固い...そろそろ引退か...
568370のものです:2007/09/15(土) 23:37:28
すみません以前ここで宿題を片づけて貰ったのですがあまりに自分の習っていないことばかりを使用していたため再提出をくらいました;;。
そこで条件を少し加えてもう一度解いて貰えないでしょうか。お願いします。

【質問テンプレ】
[1] 授業単元: c言語
[2] 問題文(含コード&リンク): 西暦と月を入力すると,以下のようなカレンダーを出力するプログラムを作成せよ.
ヒント
閏年(うるうどし)にも対応すること.
西暦年が4で割り切れる年は閏年
ただし、西暦年が100で割り切れる年は平年
ただし、西暦年が400で割り切れる年は閏年
指定された年,月の一日(ついたち)の曜日を求めると良い.曜日を求めるには,Zellerの公式を使う.年も月も整数型の変数を用い,日の部分は1に置き換えること.
(年+年/4-年/100+年/400+(13*月+8)/5+日 )%7
1月と2月は前年の13月,14月として考える.
この式の答えと曜日の関係は以下の通り.
0:日曜日,1:月曜日,2:火曜日....,6:土曜日
色付け
printf("\033[31m%d",x);と記述すれば,変数xを赤で表示する.
printf("\033[34m%d",x);と記述すれば,変数xを青で表示する.
printf("\033[0m%d",x);と記述すれば,変数xを標準設定で表示する.
一度色指定すれば,次に色指定するまで設定が反映されることに注意する.
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: c
[4] 期限: 9月18日
[5] その他の制限: <stdio.h>のヘッドファイルのみの使用
          if,continue,break,do whileなどの繰り返しのを出来るだけ使用する。
.         初歩的な物のばかりを利用して大変だと思いますがよろしくお願いします。


569デフォルトの名無しさん:2007/09/15(土) 23:46:54
どこが自分の習っていない場所かはわかるの?
ここで回答を求めても、また再提出を食らうのがオチなんじゃ・・・
570デフォルトの名無しさん:2007/09/15(土) 23:57:19
>>371
> static bool
習ってないのはこの辺りか?
571デフォルトの名無しさん:2007/09/16(日) 00:00:47
vc express で printf がコンパイル通りません
#include <stdio> とかやってるのに何故でしょうか?

.\printf.cpp(15) : error C3861: 'printf': 識別子が見つかりませんでした
572デフォルトの名無しさん:2007/09/16(日) 00:03:40
>>571
つ、釣られないクマー


cstdio
stdio.h

と思ったけど、ダメだったクマー
573371:2007/09/16(日) 01:46:23
ここの礼儀として最低限の関数しか使ってないけどね
『main() 以外の関数を書いてはいけない』とかなら俺は知らね

>>570 が指摘した様に、staticとboolかなぁ
static は明示的にファイル内スコープを示しているだけなので無くてもOK
bool は int に直して return true → return 1, return false → return 0 に直せばOK
残るは switch くらいかなぁ
switch は if ... else if ... else に直せば良い
#define ... が駄目ってことなら #define 行を消して COL_RED とか書いてるところを () 内の数字に
書き換える(直値のマジックナンバーは悪い習慣になるのでお勧めしないけど)

このくらいの修正は自分でやってね
574デフォルトの名無しさん:2007/09/16(日) 01:48:39
#ifとかそのまんまコピペしたから怪しまれたんでしょね
575371:2007/09/16(日) 01:52:08
と書いたけど、君が提出したのは >>385 のコードだね
<conio.h> の textcolor() は確かに教わらないだろうし環境依存だから良くないかもしれないね
576デフォルトの名無しさん:2007/09/16(日) 01:54:46

チョンはさっさと糞アメリカに行けや

チョンはさっさと糞アメリカに行けや

チョンはさっさと糞アメリカに行けや

チョンはさっさと糞アメリカに行けや

チョンはさっさと糞アメリカに行けや
577デフォルトの名無しさん:2007/09/16(日) 01:55:46

チョンの分際でえらそうな口きくな

チョンの分際でえらそうな口きくな

チョンの分際でえらそうな口きくな

チョンの分際でえらそうな口きくな

チョンの分際でえらそうな口きくな
578デフォルトの名無しさん:2007/09/16(日) 02:11:00
>>575
568 読んでコーディングしてみた輩ですが、
なんで >>385 のコードを提出したと思ったのでしょうか
と単純に思ったので聞いてみる
579385:2007/09/16(日) 02:22:30
でしゃばってすみませんでした
しかも%7とか意味のないことやってるし…
580デフォルトの名無しさん:2007/09/16(日) 02:56:20
再提出してください><
581デフォルトの名無しさん:2007/09/16(日) 06:53:58
>>568
#include <stdio.h>

int zeller(int year, int month, int day){
    if(month <= 2) year--, month += 12;
    return (year + year/4 - year/100 + year/400 + (13*month + 8)/5 + day)%7;
}

int isleap(int year){
    if((year%4 == 0 && year%100 != 0) || year%400 == 0) return 1;
    return 0;
}

int main(void){
    int i, pos, year, month, days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

    scanf("%d%d", &year, &month);
    pos = zeller(year, month, 1);
    if(isleap(year)) days[1]++;

    printf("Sun Mon Tue Wed Thu Fri Sat\n");
    for(i = 0; i < pos; i++) printf(" ");
    for(i = 0; i < days[month - 1]; i++, pos = (pos + 1)%7){
        if(pos == 0) printf("\033[31m%3d ", i + 1);
        else if(pos == 6) printf("\033[34m%3d\n", i + 1);
        else printf("\033[0m%3d ", i + 1);
    }
    printf("\033[0m\n");

    return 0;
}
582デフォルトの名無しさん:2007/09/16(日) 07:01:02
あー
for(i = 0; i < pos; i++) printf(" ");
ではなく
for(i = 0; i < pos; i++) printf("    ");
だな
583デフォルトの名無しさん:2007/09/16(日) 07:58:16
return hoge;

if (hoge) return true else return false;
と書く人が多いね。こっちの方が読みやすいかな?
584デフォルトの名無しさん:2007/09/16(日) 08:04:08
いや、
return (year%4 == 0 && year%100 != 0) || year%400 == 0;
のがスマートかもね

いちいち関数にする必要がないな……
585デフォルトの名無しさん:2007/09/16(日) 08:14:10
>>584
可読性というか何やってるかを分かりやすく書くなら、

int isLeapYear(int year){
if( !(year % 400) ) return 1;
if( !(year % 100) ) return 0;
if( !(year % 4) ) return 1;
return 0;
}

こんな風に書いた方がいい気がする。
関数にする必要性は感じた方がいいと思うが。
586デフォルトの名無しさん:2007/09/16(日) 08:46:08
必要とか主観的なことはナンセンス。そうでなければならないという
必然性がないならどっちでも良いよ。少なくともその一行を
無理に複雑にしなくても良いだろ。考え方なんて人それぞれ。
最終的に必要な結果が得られれば問題なし。
まぁ、自分の定義したライブラリを登録しておいて、うるう年の判別には
そのライブラリを用いるというスタイルをとっているならそれでも良し。
587デフォルトの名無しさん:2007/09/16(日) 08:52:39
>>585
強いて欠点を言うなら、400で割り切れる、100で割り切れる年が
全体のどんだけぇ〜あるか。多くの場合、上から順に流すと
2つとも無駄な判別になる。果たしてそういうのが効率が良いかどうか。
だったら4で割れるものの中から100で割れるものと400で割れるものを
さらに判定したらどうだろうか?少なくとも奇数の年数だったらその時点で
無駄な判定はせずに済む。
588デフォルトの名無しさん:2007/09/16(日) 08:59:53
int isLeapYear(int year) {
if(year%4) return 0;
if(year%100) return 1;
if(year%400) return 0;
return 1;
}
こう書いた方がいいってことか
589デフォルトの名無しさん:2007/09/16(日) 09:04:32
370に合わせるとしたらこうなるんかな

int isLeapYear(int year)
{
if(year % 4 != 0)
{
return 0;
}

if(year % 100 != 0)
{
return 1;
}

if(year % 400 != 0)
{
return 0;
}

return 1;
}
590デフォルトの名無しさん:2007/09/16(日) 09:15:49
>>588
それ上手くいかなくね?
591デフォルトの名無しさん:2007/09/16(日) 09:33:14
400は100で割り切れる条件に入る。100で割り切れないという条件を使うか
400で割り切れるならという条件を先に入れるか・・・
592デフォルトの名無しさん:2007/09/16(日) 09:37:44
しかし、400で割り切れず100でも割り切れない年の方多いとなると
やはり、まず4で割り切れてという条件の下に
100で割り切れないもの、100で割り切れるというならば
その中でも400で割り切れるものという条件ならどうかな?
593デフォルトの名無しさん:2007/09/16(日) 09:41:53
int isLeapYear(int year)
{
if (year <= 1900 || year >= 2100) return -1;
return year % 4 != 0;
}
594デフォルトの名無しさん:2007/09/16(日) 09:43:55
>>593
何の判定だよwwww
595デフォルトの名無しさん:2007/09/16(日) 09:45:39
int isLeapYear(int year) {
if(year%4) return 0;    //4で割り切れない場合、0を返す
if(year%100) return 1;  //4で割り切れるけど、100で割り切れない場合1を返す
if(year%400) return 0;  //100で割り切れて400で割り切れない場合0を返す
return 1;          //400で割り切れたら1を返す
}
596デフォルトの名無しさん:2007/09/16(日) 09:49:10
>>594
見たまんまだろ。1901年から2099年に限定すれば4年に一度閏年だ。
597デフォルトの名無しさん:2007/09/16(日) 09:49:45
って、よくみたら逆になっているのかw
598デフォルトの名無しさん:2007/09/16(日) 10:56:26
>>595
っ isLeapYear(1900);
!!!

>>585 の書き方が好きだ
自分の書き方と同じだから
最適化のしすぎで読みにくいなんていやだ
うるう年の判定を何百万回するつもりかしらんけど
599デフォルトの名無しさん:2007/09/16(日) 11:05:51
>>598
お前馬鹿だろ
600598:2007/09/16(日) 11:10:47
確かに馬鹿だなorz
601デフォルトの名無しさん:2007/09/16(日) 11:18:20
その後しっぽりむふふ、といきたいところですな
602デフォルトの名無しさん:2007/09/16(日) 11:33:45
>>598
> 最適化のしすぎで読みにくいなんていやだ
読みにくいという自分規準が既におかしいと気づけ
603デフォルトの名無しさん:2007/09/16(日) 11:48:09
可読性は多人数がかかわるんなら大事だよ。
>>584とか理解できない奴がいる可能性も否定できないし。

ま、>>588が理解できない人間に対しては、どんなに可読性に気を使っても無駄だろうけど。
604571:2007/09/16(日) 11:53:03
#include "stdafx.h"
#include <stdio.h>

って入れ替えたら、うまく動きました。
ただ、知る人ぞ知る書式演算子 %n

int iLength = 0;

printf("hello%n\n", &iLength);
printf("%d", iLength);

でアサート吐かれるんだけど、何でだろ?
605デフォルトの名無しさん:2007/09/16(日) 11:55:59
printf_sを使えとかじゃないの?
606デフォルトの名無しさん:2007/09/16(日) 11:56:52
>>604
iLength=printf("hello");
printf("\n%d\n", iLength);
じゃダメ?
607デフォルトの名無しさん:2007/09/16(日) 12:36:31
>>604
gccだと普通に動くけどな。
608デフォルトの名無しさん:2007/09/16(日) 15:42:58
しかし、やたらと if if if って並ぶのも見やすいとは思えないんだがw
609デフォルトの名無しさん:2007/09/16(日) 16:15:03
授業単元:C
問題文(含コード&リンク):
テーマ:ファイル処理
問題2:ファイル"memo.txt"の中身を配列に格納してしなさい。
そのファイルの行数をcountとします。
その配列の中身と行数を表示しなさい。

"memo.txt"は
akasatana/23
ahajsjoi/21
12/4343
2/3sefs

とします。
610デフォルトの名無しさん:2007/09/16(日) 16:17:12
>>578
static, bool, switch, #define くらいに文句つける講師は居ないだろと思っただけだよ
問題にエスケープシーケンスによる色設定方法を書いてるのにそれを使わないなら怒るかなと
俺と >>385 以外に回答なかったと思うし

>>370
どっち出したの?
611デフォルトの名無しさん:2007/09/16(日) 16:26:39
>>610
具体的に何かに対してではなく 習っていない という点をお忘れなく。
612デフォルトの名無しさん:2007/09/16(日) 16:30:25
>>609
日本語でおk
613デフォルトの名無しさん:2007/09/16(日) 16:36:51
>>568
あるいは、講師にこの部分はどういう意味かと聞かれて説明できず
他人のを丸写しにしたのがバレたとかね。
614609:2007/09/16(日) 16:37:50
ファイルにかかれたいくつかのファイルを用いてプログラムで処理するんだけど
そのファイルの数も考慮にいれるファイルでありまして。
"memo.txt"に
data0913.dat
data0912.dat
data0911.dat
とかかれていて。その拡張子.datのファイル3個を配列に格納したいんですけど、
ちょっとわからなくて。
615デフォルトの名無しさん:2007/09/16(日) 16:41:12
>>609
#include<stdio.h>

int main(void){
char *filename="memo.txt";
FILE *fp;
int moji[1], last_moji='\0', count=0;

fp=fopen(filename, "r");
if(fp==NULL) return 1;
while((moji[0]=fgetc(fp))!=EOF){
if(moji[0]=='\n') count++;
printf("%c", moji[0]);
last_moji=moji[0];
}
fclose(fp);
if(last_moji!='\n') count++;
printf("\n行数 : %d\n", count);

return 0;
}
616デフォルトの名無しさん:2007/09/16(日) 16:46:42
>>610
『教えてない事を使うな』ってスタンスは講師としては良くないと思うんだけどね
『教えてない=パクリ』も短絡的すぎるし

>>613
その可能性は高いね
617609:2007/09/16(日) 16:57:02
>>615
作ってくれたのはありがたいんですけど、
表示じゃなくて
2次元配列の行ごとに格納する感じにしたいんだけどね
char matr[1][]="data0913.dat"
char matr[2][]="data0912.dat"
char matr[3][]="data0911.dat"
618609:2007/09/16(日) 17:06:28
すいません、できました。ありがとうございました。
619デフォルトの名無しさん:2007/09/16(日) 17:07:01
>>609
宿題じゃないことは分かったが、何がしたいのか箇条書きで整理してくれ
620デフォルトの名無しさん:2007/09/16(日) 17:09:53
>>618
>>609 ができるわけがないです
断言できます
今後できるようになる事も無いです

あきらめました。っていうなら納得です
621609:2007/09/16(日) 17:16:47
#include "stdio.h"
#include <stdlib.h>

#define STR_MAX 256

int main(){
FILE *fp;
int count=0,i;
char buf[STR_MAX][STR_MAX];

fp=fopen("memo.txt","r");
count=0;
for(i=0;i<STR_MAX;i++){
if(fgets(buf[i], STR_MAX, fp) == NULL){
break;
}
count++;
}
fclose(fp);
printf("行数カウント%d\n",count);
for(i=0;i<count;i++){
printf("%d:%s\n", i, buf[i]);
}
}
622デフォルトの名無しさん:2007/09/16(日) 17:57:59
実行してみた?
623デフォルトの名無しさん:2007/09/16(日) 18:05:50
教えていない事柄に関しては後日その事柄の説明をしてもらいます。
それに答えられたら加点 ってやればおk。

まぁ、そこまでやってくれる講師なんぞいないだろうけどね。
624デフォルトの名無しさん:2007/09/16(日) 22:12:27
茨城県の某高校でやった内容なのですが、よくわからないので教えて下さい
問題12 下の図の台形の面積を求めるプログラムを作成しなさい。
※図は省略します。
上底=12 下底=17 高さ=5
面積S float 上辺a int 下辺b int 高さh でプログラムを作成すること

C:\c>kadai12
台形の面積はXXXX
※XXXXは計算した値を表示

初歩的なことかもしれませんが、よろしくお願いします。
625デフォルトの名無しさん:2007/09/16(日) 22:17:06
>>624
#include<stdio.h>

int main(void){
int a=12, b=17, h=5;
float S;

S=(a+b)*h/2.0;
printf("台形の面積は %f\n", S);
return 0;
}
626デフォルトの名無しさん:2007/09/16(日) 22:17:14
>>624
#include <stdio.h>

int main(void)
{
int a = 12, b = 17, h = 5;
float S = (float)((a+b)*h) / 2.0F;
printf("台形の面積は%f", S);
return 0;
}
627624:2007/09/16(日) 23:08:26
>>625-626
携帯からの書き込みです
ありがとうございました
628デフォルトの名無しさん:2007/09/16(日) 23:14:09
#include <stdio.h>
int main(a=12,b=17,c=5){float S;S=(a+b)*h/2.0;printf("台形の面積は %f\n");}

どぞ。
629デフォルトの名無しさん:2007/09/16(日) 23:15:11
>>628
C言語でおk
630デフォルトの名無しさん:2007/09/16(日) 23:19:49
>>629
これでもコンパイルできるよ。
631デフォルトの名無しさん:2007/09/16(日) 23:21:06
>>630
コンパイラの名前とバージョンをplz
632デフォルトの名無しさん:2007/09/16(日) 23:22:32
ちなみに俺が書いた。
#include <stdio.h>
typedef int n;n t[64]={0};n a(n i,n&g){n s=g%8;g+=("1987"[i%4]-48)*(i>3?-1:1);
return !((!s||s==7)&&s+g%8==7);}n h(n x,n m){n i=0,r=1,g=x;if(t[x])return 1;
for(;i<8&&a(i,g);i++,g=x){for(;t[g]==3-m&&a(i,g)&&g>=0&&g<64;){if(t[g]==m){
while(g!=x)a((i+4)%8,g),t[g]=m;r=0;}}}if(!r)printf("%s:%d %d\n",m==1?"黒":"白"
,x%8+1,x/8+1);return r;}n d(){n s=0,d,i=0;for(;i<64;i++){printf("□\0○\0●"+(
d=t[i])*3);if(i%8==7)puts("");s=s?d&&s!=d?3:s:d;}return s!=3;}void main(){n x=
1,y,p,m=0,c=0,k=0,r=-1;t[35]=t[28]=1;t[27]=t[36]=2;while(!d()||x&&k!=r){puts(
"x y");scanf("%d %d",&x,&y);m=m?m:x?1:2;if(x&&(--x>7||--y>7||h(x+y*8,m)))
continue;if(d())break;k=r=(c++/2+x*8+y)%64;while(++k!=r&&h(k,3-m))if(k>64)k=0;
}x=y=c=0;for(;c<64;c++)if(p=t[c])p==1?x++:y++;printf("黒:%d 白:%d %s",x,y,x>y?
"黒の勝ち":x<y?"白の勝ち":"引き分け");}

オセロ。
633デフォルトの名無しさん:2007/09/17(月) 00:12:41
7行スレの住人か貴様はw
634デフォルトの名無しさん:2007/09/17(月) 00:19:00
2行目のn&gのところでコンパイルできなかった
適当に直してみたけど入力待ちから先に進まない
明日までに直しといてね
635デフォルトの名無しさん:2007/09/17(月) 00:19:21
>>630
できねーよハゲ
636デフォルトの名無しさん:2007/09/17(月) 00:25:59
>>634
> n&g
って明らかに参照渡しの仮引数だろ。
main()の戻り値型を省けばc++でコンパイルできたが。

>>632
void main() なんて書くな。
637デフォルトの名無しさん:2007/09/17(月) 00:29:25
>>636
俺が言いたかったのはどこのコンパイラ使ったのかってこと
638636:2007/09/17(月) 00:30:37
>>637
お前誰だ?
639デフォルトの名無しさん:2007/09/17(月) 00:31:22
>>638
634だよ
640デフォルトの名無しさん:2007/09/17(月) 00:37:17
>>634
ん?普通にコンパイルできないのか?
641デフォルトの名無しさん:2007/09/17(月) 00:41:12
面白いの BC++ でコンパイル通した(いろいろ間違いがあったけど)
main() の引数は好きに定義できるんだっけ?処理系依存?

#include <stdio.h> 
int main(float a=12.0,float b=17.0,float h=5.0)
{
  float S;

  printf( "%f,%f,%f\n", a,b,h);         // 引数を与えないと全部0
  S=(a+b)*h/2.0;
  printf("台形の面積は %f\n",S);
}

ただし、a,b,h の初期化は無効、通常の argc, argv (つまり実行系の引数)で上書きされるんだろうね
これも処理系依存だったりするのかなぁ
まぁ100%実用性のない書き方だからどうでも良いけど
642デフォルトの名無しさん:2007/09/17(月) 00:44:16
>>632
オセロとしておかしくねーか?
明らかに置ける場所におけない場合があるんだが。
643デフォルトの名無しさん:2007/09/17(月) 00:46:06
>>642
いまやってみた。
コンパイルは問題なさそうだが、オセロとしてはおかしいな。
644デフォルトの名無しさん:2007/09/17(月) 00:52:06
>>632
gccでコンパイルしようとすると2行目で止まる
g++でコンパイルしようとすると、mainはvoid返さねえよ氏ねとエラーでる。
645デフォルトの名無しさん:2007/09/17(月) 01:01:10
>>644
>g++でコンパイルしようとすると、mainはvoid返さねえよ氏ねとエラーでる。
mainはint返さなきゃいけねーよ氏ねだよな。
VC++なら通ったぞ。
646デフォルトの名無しさん:2007/09/17(月) 01:46:04
BC++ も通るけど、一件 warning
if(p=t[c])p==1?x++:y++;
p=t[c] は == の間違い?

動作確認は少しだけしたけど、最後までゲームをするの面倒
647デフォルトの名無しさん:2007/09/17(月) 01:46:08
[1] 授業単元:
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4922.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年9月18日22:00まで
[5] その他の制限:
なぜか僕のパソコンからは、問題文が文字化けしてしまっています。
もしもリンク先で文字化けが起こったときは、エンコード設定をお願いします。

迷惑をおかけしましてすみません。
648デフォルトの名無しさん:2007/09/17(月) 03:20:30

----【即会える出会い系サイト×優良出会い系サイト=毎日出会い!】-----------

優良出会い系サイトと即出会えるサイトを併用して使い、即会いライフを楽しんでいます。
これが面白いほど会える☆
俺の場合、出会い系サイト3つで女の子と週2〜3で出会えてます。
これ以外にもお気にの女の子とは週1で会ってます。

今回は皆さんにも出会いを楽しんでもらいたいので、俺が使っている
登録後一日以内に出会えたサイトを紹介するブログ始めました。
皆も休日にエンジョイしてください!

↓↓↓
【即出会えるサイト紹介ブログ】
http://deaigets.blog97.fc2.com/

--------------------------------------------------------------------
649デフォルトの名無しさん:2007/09/17(月) 03:39:58
>>647
書いてみた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4924.txt

日頃C++でSTL使い放題なんで単方向リストとか新鮮だわー
650デフォルトの名無しさん:2007/09/17(月) 04:11:46
>>647
649に遅れながら書いてみた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4925.txt

>>649のreverse()の発想までたどり着けなかったのが不甲斐ない
651デフォルトの名無しさん:2007/09/17(月) 04:26:56
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):1から10までにランダムで出した数をAさんとBさんに分ける。ランダムは重複しないこと
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:BCC5.5
 [3.3] 言語: C
[4] 期限: 2007年9月19日まで
[5] その他の制限:  実行例
               Aさん:
               1,4,5,9,10
               Bさん:
               2,3,8,7,6
652デフォルトの名無しさん:2007/09/17(月) 04:58:52
653デフォルトの名無しさん:2007/09/17(月) 05:11:35
654デフォルトの名無しさん:2007/09/17(月) 08:27:15
655632 = 628:2007/09/17(月) 08:46:49
俺の書いたやつで結構盛り上がってるね

>>633
七行スレの住人なんで。
巣に帰ります。
656647:2007/09/17(月) 09:10:40
皆さん、回答ありがとうございました。
これを参考に、もう一度頑張ってみます。
657デフォルトの名無しさん:2007/09/17(月) 14:22:12
[1] 授業単元: Programing concept
[2] 問題文(含コード&リンク):
-Declare a constant global variable of float data type
-Name it TAX_RATE
-Assign it a value of 0.07
-Output as shown
/* Enter January sales: 1101.55
Enter February sales: 2321.22
Enter March sales: 3313.12
Total sales for the first three months is $6735.89,
and the amount of sales tax is $471.51 /*
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Visuall C++
 [3.3] 言語: C++
[4] 期限: ASAPでお願いします
[5] その他の制限: 超初級です
658657:2007/09/17(月) 14:24:46
自分のプログラムは
#include <iostream>
using namespace std;

const float TAX_RATE=0.07;
float JANUARY_SALES;
float FEBRUARY_SALES;
float MARCH_SALES;

float main ()
{
float JANUARY_SALES;
cout << "Enter January sales: " << endl;
cin >> JANUARY_SALES;

float FEBRUARY_SALES;
cout << "Enter February sales: " << endl;
cin >> FEBRUARY_SALES;

float MARCH_SALES;
cout << "Enter March sales: " << endl;
cin >> MARCH_SALES;

cout << "Total sales for the first three months is $"
<< JANUARY_SALES+FEBRUARY_SALES+MARCH_SALES
<< ", " << endl;
cout << "and the amount of sales tax is $"
<< (JANUARY_SALES+FEBRUARY_SALES+MARCH_SALES)*TAX_RATE
<< endl;

return 0;
}
659657:2007/09/17(月) 14:30:08
連投失礼します
Enter January sales: //
1101.55 // どうやったらこの二行を一行にできますか?
Enter February sales:
2321.22
Enter March sales:
3313.12
Total sales for the first three months is $6735.89,
and the amount of sales tax is $471.512  // 小数点以下二桁にできません
よろしくお願い致します
660デフォルトの名無しさん:2007/09/17(月) 15:52:59
適当に直してみた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4930.txt

>どうやったらこの二行を・・
endlの動作は「改行した後バッファをフラッシュする」なので、
フラッシュだけしたいときや改行だけしたいときは別の方法を使ったほうがいい。

>小数点以下二桁に・・
精度を指定してあげればいい

あと、float main() は止めた方がいい
661デフォルトの名無しさん:2007/09/17(月) 17:59:41
>>657
main 関数の外にある三つのグローバル変数
float JANUARY_SALES;
float FEBRUARY_SALES;
float MARCH_SALES;
は使う予定がないなら削除したほうがいいと思う
662657:2007/09/17(月) 18:19:09
>>660 さん
ありがとうございました
ほとんど説明のない授業なので、非常に参考になります
精度指定も全く習っていなくて、色々調べたのですがいまいち使い方が分かりませんでした

>>661 さん
助言ありがとうございます
削除しました
663デフォルトの名無しさん:2007/09/17(月) 19:39:26
【質問テンプレ】 
[1] 授業単元:Cプログラミング
[2] 問題文: Boyer-Moore法を用いて文字探索プログラムを作成せよ。
ランダムに発生させた100個ほどの数字列の中から4文字程度の数列を探索するものとする。
何回その数列が出てきたかを調べ、20回以上実行して平均を求めよ。
[3] 環境 
 [3.1] OS: WindowsXP 
 [3.2] コンパイラ名とバージョン: Borland C++ Compiler 5.5  
 [3.3] 言語: C言語
[4] 期限: 2007年9月20日 
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) 
検索する方の文字列ももランダムに発生させます。
Cはやり始めて2年目です。
664デフォルトの名無しさん:2007/09/17(月) 19:48:21
kmpだったら前に書いたのに!
665デフォルトの名無しさん:2007/09/17(月) 20:42:41
プログラムソースを、fopenで開いて、fgetsで配列bufに1行取ってくるようにしてるんですが、字句解析で、取ってきた1行の中から、1文字づつチェックをかけて、識別子か整定数かを調べて、その単語を出力したいのですが、どうすればいいか教えてください。
666デフォルトの名無しさん:2007/09/17(月) 20:47:56
分かりにくいんでもう少し抽象的に話してくれ
667デフォルトの名無しさん:2007/09/17(月) 20:50:36
識別子か整定数だけでなく、

@シングルクオテーションがきた時に、シングルクオテーションで単語がくくられてたら、単語を文字定数として出力し、ただ単にシングルクオテーションがあるだけなら、特殊記号として出力したい
A整定数(75とか)がきたら、識別子(a4b9とか)と比較して、整定数なら整定数、識別子なら識別子として出力したい

どうしたらいいでしょうか?

ちなみにc言語です。
668デフォルトの名無しさん:2007/09/17(月) 20:52:28
抽象的に言うと、字句解析で、識別子と整定数と文字定数に分けて出力したいんです。
669デフォルトの名無しさん:2007/09/17(月) 22:12:54
フラグを1個作って、対象文字が出てきたらフラグを反転する。
フラグの状況によって、処理を変える。
670デフォルトの名無しさん:2007/09/17(月) 22:22:36
初心者なんで、全然意味がわからないんで詳しく教えていただけませんか?
671デフォルトの名無しさん:2007/09/17(月) 22:30:40
>>1読んだら回線切れ
672デフォルトの名無しさん:2007/09/17(月) 22:31:58
初心者に抽象的に教えるのは厳しい。
宿題なら問題文まるまる乗せてくれ。
やさしい人ならコメントくらいつけてくれる.。
自分がどの程度まで習っているのかもちゃんと示してくれ。
673デフォルトの名無しさん:2007/09/17(月) 22:42:15
問題文が無いんで、自分なりに説明すると、
文字列を単語に分割する。単語の種類には、予約語、識別子、整定数、文字定数、特殊記号がある。予約語、特殊記号はテキスト参照。
文字列はプログラミング言語KPLを適当に作成し、それを読み込んでくる。
環境はC言語、OSはLinuxで、Gnome端末というものでemacsを使っています。
674デフォルトの名無しさん:2007/09/17(月) 23:15:05
[1] 授業単元:
[2] 問題文(含コード&リンク):http://pc11.2ch.net/test/read.cgi/tech/1189892773/
                   大富豪のプログラム。二人でプレイでき、ジョーカー無し。
                  ルールは大きい数字をどんどん出していく。同じ数字なら絵柄に関わらず
                  同時にだしていい。両方とも出すカードがなくなればその場を切る。
                  特別ルールで革命あり。先にカードがなくなったほうが負け
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: Borland C++ Compiler 5.5
 [3.3] 言語: C
[4] 期限:
[5] その他の制限:CUIで。スレ違いですいませんが自分ではどうもできません・・・お願いします・・・
675デフォルトの名無しさん:2007/09/17(月) 23:17:47
>>674
君がやらなきゃいけないことじゃないが・・・
676デフォルトの名無しさん:2007/09/17(月) 23:20:28
>>674
> 先にカードがなくなったほうが負け
逆では?

カードシャッフル部分だけなら作れるよ
677デフォルトの名無しさん:2007/09/17(月) 23:22:27
>>675 すいません・・・自分も学校の課題で大富豪が出ておりちょうどトランプスレを見つけたんで何かヒントになれば
     と思ったんですがC言語暦1ヶ月の自分には無理のようで・・・。

>>676 カードを全部出し終わった人が勝ちですね。すいません
678デフォルトの名無しさん:2007/09/17(月) 23:27:07
そのスレ見るととりあえずシャッフルまでのプログラムはあるな。そこから先が問題ってことか
679デフォルトの名無しさん:2007/09/17(月) 23:32:25
そのスレにも俺がいるが、いま作ってる。
680デフォルトの名無しさん:2007/09/17(月) 23:32:46
2人プレイってサーバーとクライアントに分けて通信も書かなきゃならんのか・・・
面倒くさいな。何時間も掛かりそうでだるい
681デフォルトの名無しさん:2007/09/17(月) 23:35:18
今欲しいのはAI同士の戦いが見れるものです。
682デフォルトの名無しさん:2007/09/17(月) 23:36:18
>>663 本当にBM法になってるのか微妙
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
static int table[128];
void make_table(char *ptn){
    int i, len = strlen(ptn);
    for(i = 0; i < 128; i++) table[i] = len;
    while(*ptn) table[*ptn++] = --len;
}
char *bm(char *str, char *ptn){
    int i, len = strlen(ptn);
    char *p = str + strlen(str);
    if(*ptn == '\0') return NULL;
    make_table(ptn);
    while(p - str >= len){
        for(i = len - 1; i >= 0 && str[i] == ptn[i]; i--) ;
        if(i < 0) return str;
        str += table[str[i]] - len + 1 + i > 0? table[str[i]] - len + 1 + i : 2;
    }
    return NULL;
}
int main(void){
    int i, j, cnt = 0, len;
    char str[101] = {0}, ptn[5] = "hoge", *p;
    for(len = strlen(ptn), srand((unsigned int)time(NULL)), i = 0; i < 20; i++){
        for(j = 0; j < 100; j++) str[j] = rand()/(RAND_MAX + 1.0)*(122 - 97) + 97;
        for(p = bm(str, ptn); p != NULL; p = bm(p + len, ptn)) cnt++;
    }
    return printf("%g\n", cnt/20.0), 0;
}
683デフォルトの名無しさん:2007/09/17(月) 23:54:35
とりあえずどんどんカードを出していくところも出力してもらいたいです。最後は先行後攻かどちらかの勝ちを
表示、もう一度しますか?みたいなものがあれば・・・
684デフォルトの名無しさん:2007/09/18(火) 00:04:48
UIがだるいんだよ
685デフォルトの名無しさん:2007/09/18(火) 00:11:23
CUIだよな?
UIよりAIがだるい

CPUは出せれば出すってだけでいいのか
686デフォルトの名無しさん:2007/09/18(火) 00:13:03
大富豪自体は、ちょい面倒なだけで初心者でもそれほど難儀せずに作れると思う
せいぜいシャッフルで>>551>>554を考慮しないといけないくらいで

むしろAIの部分が初心者にはきついんじゃないか?
687デフォルトの名無しさん:2007/09/18(火) 00:13:45
そうですね
688デフォルトの名無しさん:2007/09/18(火) 00:14:43
AIは出せれば出すというのでお願いできますか?
689デフォルトの名無しさん:2007/09/18(火) 00:45:12
できません
690デフォルトの名無しさん:2007/09/18(火) 00:52:17
じゃあまずはAI無しで普通に作ってみては?AIは後付で。
691デフォルトの名無しさん:2007/09/18(火) 00:53:07
これはアメリカのゲームです。1度やってみてください。
これは、たった3分でできるゲームです。試してみてください。
驚く結果をご覧いただけます。
このゲームを考えた本人は、メールを読んでからたった10分で願い事が
かなったそうです。このゲームは、おもしろく、かつ、あっと驚く結果を貴方にもたらすでしょう。
約束してください。絶対に先を読まず、1行ずつ進む事。
たった3分ですから、ためす価値ありです。
まず、ペンと、紙をご用意下さい。
先を読むと、願い事が叶わなくなります。
@まず、1番から、11番まで、縦に数字を書いてください。A1番と2番の横に好きな3〜7の数字をそれぞれお書き下さい。
B3番と7番の横に知っている人の名前をお書き下さい。(必ず、興味の
ある性別名前を書く事。男なら女の人、女なら男の人、ゲイなら同姓の名
前をかく)
必ず、1行ずつ進んでください。先を読むと、なにもかもなくなります。
C4,5,6番の横それぞれに、自分の知っている人の名前をお書き下さい。これは、家族の人でも知り合いや、友人、誰でも結構です。
まだ、先を見てはいけませんよ!!
D8、9、10、11番の横に、歌のタイトルをお書き下さい。
E最後にお願い事をして下さい。さて、ゲームの解説です。
1)このゲームの事を、2番に書いた数字の人に伝えて下さい。
2)3番に書いた人は貴方の愛する人です。3)7番に書いた人は、好きだけれど叶わぬ恋の相手です。
4)4番に書いた人は、貴方がとても大切に思う人です。
5)5番に書いた人は、貴方の事をとても良く理解してくれる相手です。
6)6番に書いた人は、貴方に幸運をもたらしてくれる人です。
7)8番に書いた歌は、3番に書いた人を表す歌。
8)9番に書いた歌は、7番に書いた人を表す歌。9)10番に書いた歌は、貴方の心の中を表す歌。
10)そして、11番に書いた歌は、貴方の人生を表す歌です。
この書き込みを読んでから、1時間以内に10個の掲示板にこの書き込みをコピーして貼って下さい。そうすれば、あなたの願い事は叶うでしょう。もし、貼らなければ、願い事を逆のことが起こるでしょう。とても奇妙ですが当たってませんか?
692デフォルトの名無しさん:2007/09/18(火) 01:20:57
>>674
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
static int trump[52];
int print_trump(int player){
    int i, cnt = 0;
    printf("%s\n", player > 0 ? "#player 1" : "#player 2");
#define hoge(str, start, end) \
    for(printf("%s :", str), i = start; i < end; i++) \
        if(trump[i] == player) printf("%3d", i%13 + 1), cnt++; \
    putchar('\n');
    hoge("spa", 0, 13); hoge("hea", 13, 26); hoge("clu", 26, 39); hoge("dia", 39, 52);
    return cnt;
}
int isput(int field, int turn){
    int i, min = 64;
    for(i = 0; i < 52; i++) if(trump[i] == turn && i%13 > field%13 && min%13 >= i%13) min = i;
    return min;
}
int main(void){
    int i, j, field = -1, turn = -1;
    for(i = 0; i < 26; i++) trump[i] = 1;
    for(i = 26; i < 52; i++) trump[i] = -1;
    srand((unsigned int)time(NULL));
#define swap(type, x, y) do{type tmp = x; x = y; y = tmp;}while(0)
    for(i = 1; j = rand()/(RAND_MAX + 1.0)*(i + 1), i < 52; i++) swap(int, trump[i], trump[j]);
    while((turn *= -1, printf("\n<%d> : %d\n", turn < 0 ? 1 : 2, field + 1), print_trump(1)) && print_trump(-1))
        if((field = isput(field, turn)) != 64) trump[field] = 0, field %= 13;
        else puts("pass"), field = -1;
    return 0;
}
693デフォルトの名無しさん:2007/09/18(火) 01:41:27
すげぇ。エラーがいっぱいw
694デフォルトの名無しさん:2007/09/18(火) 01:46:26
授業単元:C
問題文(含コード&リンク):
ポインタ変数を使ったプログラム
入力された金額について最適な金種枚数を求めよ

実行画面
10000円の枚数==>12
5000円の枚数==>1
1000円の枚数==>0
500円の枚数==>1
100円の枚数==>3
50円の枚数==>0
10円の枚数==>1
1円の枚数==>2


環境
OS:WindowsXP
コンパイラ名とバージョン:ボーランド
言語:C
期限:今日の7時30分まで
その他の制限:

695デフォルトの名無しさん:2007/09/18(火) 01:52:11
>>694
何にポインタを使えばいいんだ
696デフォルトの名無しさん:2007/09/18(火) 01:58:18
アクセサ
697デフォルトの名無しさん:2007/09/18(火) 01:59:20
695>入力ミスりました^^;
訂正文
ポインタ変数を使ったプログラム
入力された金額について最適な金種枚数を求めよ

実行画面
入金==>125847
10000円の枚数==>12
5000円の枚数==>1
1000円の枚数==>0
500円の枚数==>1
100円の枚数==>3
50円の枚数==>0
10円の枚数==>1
1円の枚数==>2

以下のような配列名をポインタ変数で扱う
int money[] = {10000,5000,1000,500,100,50,10,5,1,0};
698デフォルトの名無しさん:2007/09/18(火) 02:07:20
>>692
エラー E2206 sample.c 6: 不正な文字 '#' (0x23)(関数 print_trump )
エラー E2027 sample.c 6: メモリ上に配置されなければならない(関数 print_trump )
エラー E2206 sample.c 6: 不正な文字 '#' (0x23)(関数 print_trump )
エラー E2027 sample.c 6: メモリ上に配置されなければならない(関数 print_trump )
エラー E2140 sample.c 6: ここでは宣言はできない(関数 print_trump )
エラー E2206 sample.c 7: 不正な文字 '#' (0x23)(関数 print_trump )
エラー E2027 sample.c 7: メモリ上に配置されなければならない(関数 print_trump )
エラー E2206 sample.c 7: 不正な文字 '#' (0x23)(関数 print_trump )
エラー E2027 sample.c 7: メモリ上に配置されなければならない(関数 print_trump )
エラー E2047 sample.c 11: define 指令の構文が正しくない(関数 print_trump )
エラー E2206 sample.c 12: 不正な文字 '#' (0x23)(関数 print_trump )
エラー E2027 sample.c 12: メモリ上に配置されなければならない(関数 print_trump )
エラー E2206 sample.c 12: 不正な文字 '#' (0x23)(関数 print_trump )
エラー E2027 sample.c 12: メモリ上に配置されなければならない(関数 print_trump )
警告 W8065 sample.c 12: プロトタイプ宣言のない関数 'hoge' の呼び出し(関数 print_trump )
警告 W8065 sample.c 12: プロトタイプ宣言のない関数 'hoge' の呼び出し(関数 print_trump )
警告 W8065 sample.c 12: プロトタイプ宣言のない関数 'hoge' の呼び出し(関数 print_trump )
警告 W8065 sample.c 12: プロトタイプ宣言のない関数 'hoge' の呼び出し(関数 print_trump )
699デフォルトの名無しさん:2007/09/18(火) 02:08:21
>>698の続き

エラー E2206 sample.c 13: 不正な文字 '#' (0x23)(関数 print_trump )
エラー E2027 sample.c 13: メモリ上に配置されなければならない(関数 print_trump )
エラー E2206 sample.c 13: 不正な文字 '#' (0x23)(関数 print_trump )
エラー E2027 sample.c 13: メモリ上に配置されなければならない(関数 print_trump )
エラー E2206 sample.c 16: 不正な文字 '#' (0x23)(関数 isput )
エラー E2027 sample.c 16: メモリ上に配置されなければならない(関数 isput )
エラー E2206 sample.c 16: 不正な文字 '#' (0x23)(関数 isput )
エラー E2027 sample.c 16: メモリ上に配置されなければならない(関数 isput )
エラー E2140 sample.c 16: ここでは宣言はできない(関数 isput )
エラー E2206 sample.c 17: 不正な文字 '#' (0x23)(関数 isput )
エラー E2027 sample.c 17: メモリ上に配置されなければならない(関数 isput )
エラー E2228 sample.c 17: エラーあるいは警告が多すぎる(関数 isput )
*** 26 errors in Compile ***
700デフォルトの名無しさん:2007/09/18(火) 02:23:41
何方か697お願いします
701デフォルトの名無しさん:2007/09/18(火) 02:23:55
>>697
>以下のような配列名をポインタ変数で扱う
相変わらず意味が分からないし、何をすれば実行画面と示した結果になるのか不明

問題自体を見直してこい
702デフォルトの名無しさん:2007/09/18(火) 02:39:25
>>692 これが大富豪のプログラムなの?最近C始めたばかりでよく分からないけど遊んでみようと
思ったらエラーで遊べなかったw
703デフォルトの名無しさん:2007/09/18(火) 02:41:54
>>697
下二桁が47なのになぜ10円が1枚・・・ というか5円はどうした
704デフォルトの名無しさん:2007/09/18(火) 03:05:16
>>697
#include<stdio.h>
int main(){
int money[] = {10000,5000,1000,500,100,50,10,5,1,0};
int count[sizeof(money)/sizeof(money[0])],n,*p;
for(p=&money[0];*p;++p)count[p-money]=0;
printf("入金==>");scanf("%d",&n);
p=&money[0];
while(*p)if(n>=*p){n-=*p;++count[p-money];}else ++p;
for(p=&money[0];*p;++p)printf("%d円の枚数==>%d\n",*p,count[p-money]);
return 0;
}
なんかポインタを活用してるっぽく書いてみた。無意味だけど。
705デフォルトの名無しさん:2007/09/18(火) 03:10:11
ん?>>692エラーなんか出なかったぞ。VC2003とgcc(mingw)でためしたけど。
コピペのときに&#160;とか入るのちゃんと消したか?
706デフォルトの名無しさん:2007/09/18(火) 03:20:12
>>692 BCC5.5でも動いた。これってどういう動きしてんだ?
707デフォルトの名無しさん:2007/09/18(火) 03:27:59
動いたけどBCC5.5だと途中経過が全部表示しきれずよく分からないようになってる・・・ウィンドウが小さいのかな・・・
708デフォルトの名無しさん:2007/09/18(火) 03:28:56
リダイレクトで結果をテキストファイルに出力すればいいじゃない。
709デフォルトの名無しさん:2007/09/18(火) 03:52:28
[1] 後期から入るゼミで出た課題です
[2] 下記のテキストデータを読み出し
   各列ごとに値の小さい順に並べて表示させよ
---------------------
6,1,92,92
1,1,93,93
5,1,94,94
2,1,95,95
4,1,97,97
3,1,99,99
2,2,142,47
4,2,144,47
5,2,146,52
1,2,149,56
6,2,151,59
---------------------
[3] 環境
 [3.1] WindowsXP
 [3.2] VC 6.0
 [3.3] C言語
[4] 2007年9月25日まで
[5] 基本は一通りやりました・・・
データの読み出しを勉強してみて、デリミタを指定して
strtokで文字列にしてやればいいと
思い色々やってみましたがギブアップです・・・。
お願いします
710デフォルトの名無しさん:2007/09/18(火) 03:54:41
strtokは指定?
あと、各列を独立してソートしていいの?
エクセルの並べ替えみたいに列1で並び変えて、同じなら列2で並び変えるとかじゃなくてOK?
711709:2007/09/18(火) 03:59:57
>>710
strtokは指定ではないです
読み出した文字を配列にいれるのに
使えると思い自分で試してみただけです^^;

ソートに関してはどのようなやり方でも大丈夫だと思います
よろしくお願いします!!
712デフォルトの名無しさん:2007/09/18(火) 04:02:59
>>711
ソートの方法じゃなくて各列が独立かを訊いてるんだよ
713709:2007/09/18(火) 04:04:25
>>710
答えになって無くて申し訳ないです
各列独立でお願いします
714デフォルトの名無しさん:2007/09/18(火) 04:04:53
>>711
問題文はそのまま書け
715デフォルトの名無しさん:2007/09/18(火) 04:10:57
strtok使わなくていいならscanfでいいんじゃね?
動作確認とかしてないし、コンパイルもしてないけどこんな感じ?
swapは自分で作ってくれ。
int iData[4][11], i, j, k;
// 読み込み
for( i = 0; i < 11; i++ ) {
scanf( "%d,%d,%d,%d", &iData[0][i], &iData[1][i], &iData[2][i], &iData[0][i] );
}
// ソート
for( i = 0; i < 4; i++ ) {
for( j = 0; j < 11; j++ ) {
for( k = j + 1; k < 11; k++ ) {
if ( iData[i][j] > iData[i][k] ) swap( &iData[i][j], &iData[i][k] );
}
}
}

716709:2007/09/18(火) 04:18:55
>>715
fscanfで一度やってみて上手くいかなかったのでscanf諦めてました・・・
前に書いたプログラムと>>715を見比べながらやってみます。

ありがとうございました(*_ _)
717デフォルトの名無しさん:2007/09/18(火) 04:27:35
>>709
使い回ししにくいが、こんなのどうだろう?

#include <stdio.h>
#include <stdlib.h>
#define LINE_MAX 11
#define TEXTFILE "data.txt"
int col_a[LINE_MAX]; int col_b[LINE_MAX]; int col_c[LINE_MAX]; int col_d[LINE_MAX];
int cmp_int(const int *a, const int *b){return *a - *b;}
main(){
int i; FILE* fp = fopen(TEXTFILE, "r");
for(i = 0; i != LINE_MAX; i++)
fscanf(fp, "%d,%d,%d,%d", &col_a[i], &col_b[i], &col_c[i], &col_d[i]);
fclose(fp);
qsort(col_a, LINE_MAX, sizeof(int), (int (*)(const void*, const void*)) cmp_int);
qsort(col_b, LINE_MAX, sizeof(int), (int (*)(const void*, const void*)) cmp_int);
qsort(col_c, LINE_MAX, sizeof(int), (int (*)(const void*, const void*)) cmp_int);
qsort(col_d, LINE_MAX, sizeof(int), (int (*)(const void*, const void*)) cmp_int);
for(i = 0; i != LINE_MAX; i++)
printf("%d,%d,%d,%d\n", col_a[i], col_b[i], col_c[i], col_d[i]);}
718デフォルトの名無しさん:2007/09/18(火) 07:12:53
授業単元:C
問題文(含コード&リンク):
ポインタ変数を使ったプログラム
入力された金額について最適な金種枚数を求めよ
int money[] = {10000,5000,1000,500,100,50,10,5,1,0};

実行画面
入金==>125847
10000円の枚数==>12
5000円の枚数==>1
1000円の枚数==>0
500円の枚数==>1
100円の枚数==>3
50円の枚数==>0
10円の枚数==>1
1円の枚数==>2
環境
OS:WindowsXP
コンパイラ名とバージョン:ボーランド
言語:C

719709:2007/09/18(火) 07:23:40
>>717さん
いつの間にか意識が飛んでましたw
ありがとうございます。
早速動作の確認と内容の理解に取り組みます!!
720デフォルトの名無しさん:2007/09/18(火) 08:27:08
>>718
#include <stdio.h>

int main(void)
{
int money[] = {10000, 5000, 1000, 500, 100, 50, 10, 5, 1, 0};
int *p, n;

printf("入金==>");
scanf("%d", &n);

p = money;
while(*p) {
printf("%d円の枚数==>%d\n", *p, n / *p);
n %= *p++;
}

return 0;
}
721デフォルトの名無しさん:2007/09/18(火) 09:18:29
文字列strに中に文字Cが含まれている個数(含まれていれば0とする)を返す
関数int str_src(char *s,int c)を作成しなさい。
わかる方いましたらお願いします。



#include <stdio.h>
int str_src(char *,int);

void main()
{
char s[200],c[10];
printf("input string -> ");
scanf("%s",s);
printf("input find character ->");
scanf("%s",c);
printf("find %c is %d\n",c[0], str_src(s,c[0]));

}
int str_src(char *s,int c)


{
       解答
}

722デフォルトの名無しさん:2007/09/18(火) 09:20:02
723デフォルトの名無しさん:2007/09/18(火) 09:23:46
>>721

// 文字Cが含まれている個数(含まれていれば0とする)を返す
int str_src(char *s,int c)
{
return 0;
}
724721:2007/09/18(火) 09:24:51
1] 授業単元: 4
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: (Windows XP)
 [3.2] (VC 6.0等)
 [3.3] 言語: (C++)
[4] 期限: 今日中
[5] ポインタまで
725デフォルトの名無しさん:2007/09/18(火) 09:26:32
int str_src(char *s, int c)
{
int cnt = 0;
while(*s) if(*s++==c) cnt++;
return cnt;
}
726デフォルトの名無しさん:2007/09/18(火) 09:27:34
>>724
>授業単元: 4
それ単位じゃねえか?

>>441-443
727デフォルトの名無しさん:2007/09/18(火) 09:44:58
[1] 授業単元: C++
[2] 問題文(含コード&リンク):
下記の物は作れたのですがこれをコマンドラインで書くとどのようになるのでしょうか?
#include <stdio.h>
int main(void){
int m,n,r;
int saidai;
int yakusuu;
scanf("%d",&m);
scanf("%d",&n);
r=m%n;

if(r==0)
{
saidai=n;
}
if(r!=0)
{
m=n;
n=r;
saidai=n;
}
printf("%dと%dの最大公約数は%d\n",m,n,saidai); return (0);
}
728709:2007/09/18(火) 09:52:51
717氏のプログラムで無事動かすことができました。

ただ、作りかけたfgetsで配列に読み込ませ
strtok関数を使いソースを完成させたいと思っています。
よろしければ後学のためにサンプルお願いします。

贅沢言って申し訳ないです
729デフォルトの名無しさん:2007/09/18(火) 11:02:18
730709:2007/09/18(火) 11:49:12
>>729
ありがとうございます;_;
少しずつでも理解しながら読んで行きます!!
多謝!!

731デフォルトの名無しさん:2007/09/18(火) 12:57:21
>>727
とりあえずmとnをコマンドラインから入力、ということなら
main(void) -> main( int c, char *v[] )
int m,n,r; -> int m=atoi(v[1]), n=atoi(v[2]), r;

ただそれ、最大公約数返すようには見えないんだけど、いいの…?
732デフォルトの名無しさん:2007/09/18(火) 13:02:21
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): 逆ポーランド記法に変換してから計算する四則演算の電卓プログラムを作れ
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語: c
[4] 期限: 2007年9月19日
[5] その他の制限:前回作っていただいたのですが、項の桁や括弧機能なども付けてみろと言われたので出来ればよろしくお願いします。
>>187にまだ残ってますが一応前回の物も張っておきます
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4893.c

それと前回作っていただいた方にお礼が言えず終いですみませんでした。
733デフォルトの名無しさん:2007/09/18(火) 13:31:57
>>732
括弧機能って? 187 のは括弧は対応してるみたいだが
734デフォルトの名無しさん:2007/09/18(火) 13:47:54
[1] 授業単元:C言語プログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4932.txt

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] bcc
 [3.3] C言語
[4] 9月22日

お願いします
735デフォルトの名無しさん:2007/09/18(火) 14:14:59
>>733
失礼しました
入力に対応させるために自分で少し変更したのを忘れてましたorz
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4933.txt
gets関数が危険なのはわかってますが一応指定された関数なので・・・
ここから括弧機能や桁を追加していきたいのですが自分のスキルでは詰まってしまいました
736デフォルトの名無しさん:2007/09/18(火) 14:26:03
>>735
括弧機能って? >>735 も括弧に対応してるみたいだが
( 少なくとも (1+2)*(3+4) はきちんと処理された )
737デフォルトの名無しさん:2007/09/18(火) 14:27:39
>>734
プログラムの問題じゃないじゃないか。
こういう問題を解読するプログラムを作れってことなのか?
738デフォルトの名無しさん:2007/09/18(火) 15:04:57
>>734
#include <stdio.h>
char*A="ACDIMNORST";int T,S,u[10],v[99];
#define M(P) for (k=T=0;#P[k];T=T*10+v[#P[k++]]);S+=T;
void s(int i){int k;if(!A[i]){S=0;M(INTO)M(ONTO)M(CANON)M(INTACT)M(AMMONIA)
M(OMISSION)M(DIACRITIC)M(STATISTICS)M(ASSOCIATION)M(ANTIMACASSAR)
M(CONTORTIONIST)M(NONDISCRIMINATION)M(CONTRADISTINCTION)S=-S;
M(MISADMINISTRATION)if(!S)for(k=0;A[k];++k)printf("%c %d\n",A[k],v[A[k]]);}else
for(k=0;A[k];++k)if(!u[k])u[k]=1,v[A[i]]=k,s(i+1),u[k]=0;}main(){s(0);}
739デフォルトの名無しさん:2007/09/18(火) 15:29:27
総当りでやる方が早くね?
740デフォルトの名無しさん:2007/09/18(火) 15:36:27
この再帰の使い方はいらつくわ!
741デフォルトの名無しさん:2007/09/18(火) 15:36:33
宿題スレで得意げに詰めて書くやつって何なんでしょうか。
初心者の助けにも何にもなってないでしょうが。
とっとと巣に帰れでございます。
742デフォルトの名無しさん:2007/09/18(火) 15:39:05
宿題スレで宿題でもない問題にまともに答えてやるこたあない
743デフォルトの名無しさん:2007/09/18(火) 15:39:18
理解できないからってファビョるなよw
744デフォルトの名無しさん:2007/09/18(火) 15:41:33
総当りに見えるような
745740:2007/09/18(火) 16:04:42
>>738
順列だとこういうふうに再帰するしかないっぽいな
746デフォルトの名無しさん:2007/09/18(火) 16:17:44
>673を教えてください
747デフォルトの名無しさん:2007/09/18(火) 16:25:25
>>746
問題文が無いんで、自分なりに説明すると、
文字列を単語に分割する。単語の種類には、予約語、識別子、整定数、文字定数、特殊記号がある。予約語、特殊記号はテキスト参照。
文字列はプログラミング言語KPLを適当に作成し、それを読み込んでくる。
環境はC言語、OSはLinuxで、Gnome端末というものでemacsを使っています。

と言う事だ、分かったかね?
748927:2007/09/18(火) 16:30:19
>>931
レスありがとうございます。
公約数返せてないですか・・・。
問題文すべて書きますね。
コマンドプロントで2つのmとmを読み込み、ユークリッドの交互方を使って
その最大公約数を求めるCプログラムを作成しなさい。
@mをnで割った余りをrとする。
Ar=0ならば、nが求める最大公約数になる。
Br!=0ならば、nをmに代入して@へ戻る。

追記で使っているコンパイラはbcc5.5で
言語はC++です。
よろしくお願い致します。
749デフォルトの名無しさん:2007/09/18(火) 16:33:09
>>748
>Br!=0ならば、nをmに代入して@へ戻る。
>727は戻ってないぞ。
750948:2007/09/18(火) 16:34:09
mとnの間違いです。
751727:2007/09/18(火) 16:35:20
何度もすみません。
>>731
900番台ではありませんでした・・。
752デフォルトの名無しさん:2007/09/18(火) 16:36:12
>>738
こういうの見てるとBASICで書かれた糞プログラムを思い出す。
753デフォルトの名無しさん:2007/09/18(火) 16:39:41
>673を教えてください
754デフォルトの名無しさん:2007/09/18(火) 16:48:50
#include <stdio.h>
#include <string.h>
#define SEP " "
int main(void){
    char *str = "Shut up !", *p;
    for(p = strtok(str, SEP); p != NULL; p = strtok(NULL, SEP)) puts(p);
    return 0;
}
755デフォルトの名無しさん:2007/09/18(火) 17:00:13
>>751
だから、>727は>748に書いてあるようには書かれていないぞ。
756デフォルトの名無しさん:2007/09/18(火) 17:11:35
>673を教えてください
757デフォルトの名無しさん:2007/09/18(火) 17:12:21
>673を教えてください
758デフォルトの名無しさん:2007/09/18(火) 17:14:33
>673を教えてください
759751:2007/09/18(火) 17:14:43
>>755
すみません。
もしよろしければ>>748の@ABのやり方を教えていただけないでしょうか?
自分よくわかってないみたいです。
760デフォルトの名無しさん:2007/09/18(火) 17:15:19
>673を教えてください
761731:2007/09/18(火) 17:27:24
>>751
#include <stdio.h>
int main( int c, char *v[] ){
 int m=atoi(v[1]), n=atoi(v[2]), r;
 int saidai, yakusuu;

 r=m%n;
 if(r==0){ saidai=n; }
 if(r!=0){
  m=n;
  n=r;
  saidai=n;
 }
 printf("%dと%dの最大公約数は%d\n",m,n,saidai); return (0);
}

あなたの書いたやつに>>731の変更してある。
まず、六行目で@をクリアしてるのはわかるな??
で、七行目でAをクリアしてる。
八行目から十三行目で
>r!=0ならば、nをmに代入して
の部分はクリアできてるんだが、
>@へ戻る。
の部分が欠けている。
762デフォルトの名無しさん:2007/09/18(火) 18:09:08
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): ファイルから読み込んだ適当なプログラムを、字句解析し、その結果を出力するプログラムを作成せよ。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: c
[4] 期限: 2007年9月19日
[5]字句解析は予約語、識別子、整定数、文字定数、特殊記号の5つに分ける
予約語は、PROGRAM、CONST、TYPE、VAR、PROCEDURE、FUNCTION、BEGIN、END、ARRAY、OF、INTEGER、CHAR、CALL、IF、THEN、ELSE、WHILE、DO、FOR、TO
特殊記号は、+、-、*、/、<、>、=、空白、,、.、:、;、'、(、)、(.、.)、:=、!=、<=、>=
文字定数はシングルクオテーションでくくられた中の文字のこと
整定数は整数
識別子はその他の文字

文字定数と特殊記号の判別が難しいと思います。
763デフォルトの名無しさん:2007/09/18(火) 18:12:27
764751:2007/09/18(火) 18:22:43
>>761
わかりやすい説明ありがとうございました。
本当に助かりました。
765デフォルトの名無しさん:2007/09/18(火) 18:30:32
ガチで>762をお願いします。明日までなんですが、全然わからないんです…
766デフォルトの名無しさん:2007/09/18(火) 18:35:30
>>765
しょっぱい実装なら1行ずつ読み込んでstrcmp()でも延々と回せば?
'が来たらフラグ管理でも。
767デフォルトの名無しさん:2007/09/18(火) 18:50:57
>766
どう書けばいいか全然わからいんで具体的に教えてください…
768デフォルトの名無しさん:2007/09/18(火) 19:05:46
>>762
予約語は大文字小文字区別すんの?
「整定数は整数」って10進の整数のみ?というか負値も?
769デフォルトの名無しさん:2007/09/18(火) 19:19:43
>768
ごめんなさい、書き忘れてました…
予約語は大文字のみです
整数は特に制限が無いんで、出てきた数をそのまま出力してください。
よろしくお願いしますm(__)m
770デフォルトの名無しさん:2007/09/18(火) 19:32:47
整数として -25 とか負値が登場しうるんだろ
単項演算子 - を扱うかどうかを訊いてるんだ

あと、文字定数は 'abc' のように複数の文字が入ってても文字定数でいいのか
771デフォルトの名無しさん:2007/09/18(火) 19:40:07
暇つぶしにやってるがこれは先に出されるかもしれんね・・・
772デフォルトの名無しさん:2007/09/18(火) 20:23:28
字句解析って何すればいいんだろ
773デフォルトの名無しさん:2007/09/18(火) 20:25:14
面倒だったらtokenじゃなくてchar比較でおk
774デフォルトの名無しさん:2007/09/18(火) 20:59:10
>770

その場合は
-は特殊記号
25は整定数

って出力してくださいm(__)m
775デフォルトの名無しさん:2007/09/18(火) 21:09:02
いざ>>762を張ろうとしたらC++で書いた事に気付いた。
修正面倒なんで後は頑張ってくれ。疲れた
776デフォルトの名無しさん:2007/09/18(火) 21:19:19
え…
ほんとお願いします…ヤバいです…
777デフォルトの名無しさん:2007/09/18(火) 21:44:40
>>762の結果出力ってどんな風に出力すればいいの?
778デフォルトの名無しさん:2007/09/18(火) 22:07:21
>777

どんな形でもいいです
例えば
文字定数は
〇〇
△△
◇◇
識別子は
●●
▲▲

とかでもいいですし、1文字づつ、△△は文字定数、●●は識別子、▲▲は識別子◇◇は文字定数

みたいな感じでお願いしますm(__)m
779デフォルトの名無しさん:2007/09/18(火) 23:00:19
>762>769
どなたかほんとにお願いします…
780デフォルトの名無しさん:2007/09/18(火) 23:02:54
少し黙って待ってろ
781デフォルトの名無しさん:2007/09/18(火) 23:06:01
はい…もう頼みの綱がここの人達しかいないので…
782デフォルトの名無しさん:2007/09/18(火) 23:12:13
>>778
未定義の識別子はどうする?
それと、対になってないシングルクオーテーションは無いと仮定していいのか?('AAAだけみたいな文字列)
783デフォルトの名無しさん:2007/09/18(火) 23:14:40
>>762>>673を学生に持つ先生は、本当に可哀想だと思う
784デフォルトの名無しさん:2007/09/18(火) 23:18:31
>>782
面倒だから文字定数は 'x' のように間に1字しか入らないものとしようか
785デフォルトの名無しさん:2007/09/18(火) 23:19:48
ここで課題を解いてくれてる人達ってすげぇな。プログラム暦どのくらいなんだ?
786デフォルトの名無しさん:2007/09/18(火) 23:21:09
>782
未定義の識別子とはどのようなものですか?
一応、予約語、特殊記号、文字定数、整定数以外の単語
(意味のある単語も無い単語も【appleとかg8m1jtとか】)は識別子として出力してくださいm(__)m

対になっていないシングルクオテーションは、その場合
'は特殊記号
AAAは識別子

として出力してください。
よろしくお願いしますm(__)m
787デフォルトの名無しさん:2007/09/18(火) 23:22:01
[1] 授業単元:
[2] 問題文(含コード&リンク): テキスト情報に書かれた社員情報を検索する。
[3] 環境 FOXPADにて設計をしてからコーディングです。(明日にはPADを完成させなければなりません;;)
 [3.1] OS: (Windows))
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: C言語です。
[4] 期限: [2007年9月19日09:00まで]
[5] その他の制限:関数、 ポインタ、構造体、乱数、単体テストなど習いました。

詳細もあるので記述しておきます。

1.社員情報を含む社員情報ファイルを作成しておいてプログラムに取り組むこと
2.社員情報は社員ID、社員指名の2つで構成すること
3.社員IDは半角4文字、社員名は全角10文字で左詰めとし、
空白は全角スペースにする
4.社員IDは数字とa-z、A-zの組み合わせで作ること
5.レコードの順番は不規則にすること
6.全レコードが改行で終わるようにすること
7.レコード数は20以下とする

もう少し細かいところもあるのですが、たくさん書いてあるので随時聞いて
くださるとありがたいです。

自分でもやってみましたがうまくできなかったのでどなたか力を貸していただけると助かります。
788デフォルトの名無しさん:2007/09/18(火) 23:25:28
>762>786です
シングルクオテーションで定義された文字定数は>784が書いた1文字ではなく、複数の文字でもお願いします。
789 ◆GRRPdDaVH. :2007/09/18(火) 23:32:06
>762>788です。
トリップつけときますm(__)m
790デフォルトの名無しさん:2007/09/18(火) 23:53:58
>>787
>.>1嫁。
>・問題文は、出題されたまま全文を書いてください。
>・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
とりあえずこんなんでも、お前が挙げた条件は満たす。

#include<stdio.h>
main(){
  FILE *record=fopen("record.txt","r");
  char id[5], name[21], str[26], phrase[26];

  printf("検索語句を入れろ:");
  scanf("%s", phrase);

  while( fgets(str,sizeof(str),record) ){
    sscanf( str, "%4s%s", id, name );
    if( strstr(str,phrase) ) printf("found[ID:%s, name:%s]\n", id, name);
  }
}

----------record.txt
abcdあーあー
dcbaあああああーあ
ABCDあーあーー
BCDAああああ
------------------
791デフォルトの名無しさん:2007/09/19(水) 00:06:05
>>789
このクソコードでも提出して怒られて来い
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4936.c

あんまりテストしてないし、仕様に独自解釈がはいってるかもしれん
792デフォルトの名無しさん:2007/09/19(水) 00:07:50
>>785
1年前はプログラミングに触れたこともなかった。

確かにプログラミング歴もあるだろうけど、
受験生みたいな勢いで学習すれば1ヶ月程度である程度書けるようになると思う。
793デフォルトの名無しさん:2007/09/19(水) 00:11:01
一ヶ月か。何かお勧めの本とかある?
794デフォルトの名無しさん:2007/09/19(水) 00:11:42
しかるべきスレで聞くべき
795デフォルトの名無しさん:2007/09/19(水) 00:11:57
ここ見てるとたまに出てくる鮮やかなコード

プログラムって数学的センスが必須だね
俺にはセンスのかけらもない事がわかった
796791:2007/09/19(水) 00:14:38
やっぱりバグがあったので修正orz
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4937.c
797デフォルトの名無しさん:2007/09/19(水) 00:17:03
>792
ありがとうございます☆ただ、ファイルはどこで読み込んでいるのでしょうか?あと、切り出したトークンをどのようなデータ、変数で返しているか教えてくださいm(__)m
798デフォルトの名無しさん:2007/09/19(水) 00:18:21
>791でした…ごめんなさい…
799デフォルトの名無しさん:2007/09/19(水) 00:18:22
ます☆ただ
800デフォルトの名無しさん:2007/09/19(水) 00:19:35
assert.hってなんでしょうか?
801791:2007/09/19(水) 00:23:04
>>797
ファイルは標準入力で渡してくれ
データ型はenum TokenTypeとstruct Tokenの定義を
 
>>800
assert.hはassertマクロを定義するもの
802デフォルトの名無しさん:2007/09/19(水) 00:23:10
Unit系のヘッダー
803デフォルトの名無しさん:2007/09/19(水) 00:28:14
これってポインタ、構造体、配列、関数しか習ってなくても、出来るプログラムですか?あと、どんな変数で返しているか教えてくださいm(__)m
804デフォルトの名無しさん:2007/09/19(水) 00:32:16
安価も無しにいきなり「これ」って言われてもどれか分かんねーよ。
ちょっとは頭使え馬鹿。
805デフォルトの名無しさん:2007/09/19(水) 00:33:55
>796のプログラムです…
806デフォルトの名無しさん:2007/09/19(水) 00:36:44
>>803
たぶん列挙体、共用体を習っていないと思う。
学校によっちゃassert.hを扱わないことも多いだろうし。
807 ◆GRRPdDaVH. :2007/09/19(水) 00:44:05
>806
列挙体、共有体、assert.hを使用しないように、直せるでしょうか……
808デフォルトの名無しさん:2007/09/19(水) 00:44:21
この時期ってことは専門学校か何かか。
このコード持って行ったら確実に突っ込み喰らうぞ。良い意味でも悪い意味でも
809デフォルトの名無しさん:2007/09/19(水) 00:44:24
>790さんありがとうございます。
ではすべて記述させていただきます。


>1の長文質問に使うやつがよくわからないので2回に分けて記述したいと思います。


[1] 授業単元:
[2] 問題文(含コード&リンク): テキスト情報に書かれた社員情報を検索する。
[3] 環境 FOXPADにて設計をしてからコーディングです。(明日にはPADを完成させなければなりません;;)
 [3.1] OS: (Windows))
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: C言語です。
[4] 期限: [2007年9月19日09:00まで]
[5] その他の制限:関数、 ポインタ、構造体、乱数、単体テストなど習いました。

詳細もあるので記述しておきます。

1.社員情報を含む社員情報ファイルを作成しておいてプログラムに取り組むこと
2.社員情報は社員ID、社員指名の2つで構成すること
3.社員IDは半角4文字、社員名は全角10文字で左詰めとし、
空白は全角スペースにする
4.社員IDは数字とa-z、A-zの組み合わせで作ること
5.レコードの順番は不規則にすること
6.全レコードが改行で終わるようにすること
7.レコード数は20以下とする


810デフォルトの名無しさん:2007/09/19(水) 00:45:07
・プログラムメッセージを表示すること
・社員IDで昇順ソートした社員情報を表示すること
・検索する社員IDの入力を促すメッセージを表示すること

・ファイル読み込み
・空ファイル(1文字もデータが含まれていないファイル)の場合、その旨を表示して終了すること
・社員情報ファイルが存在しない場合にはその旨を表示して終了すること
・社員情報を格納する構造体配列の要素数は20で宣言する(レコード数より多く確保する)

・ソート
・社員IDで昇順する
・社員IDの比較には標準ライブラリ関数のstrncmp()を使用する

・ソート結果表示
・ソート後の社員構造体の要素を順番に表示する


811デフォルトの名無しさん:2007/09/19(水) 00:45:38
・検索
・検索の正否は関数の戻り値で判定すること
・成功の場合はポインタ渡しの引数に有効な整数(配列要素の位置)を設定すること
・検索のアルゴリズムはバイナリサーチにすること

・検索結果出力
・該当する社員情報が存在する場合、社員名を表示すること
・該当する社員情報が存在しない場合、その旨を知らせるメッセージを表示すること
・検索結果を表示するたびに、検索を繰り返すか確認すること。形式は問わない

・エラーメッセージ表示
・エラーメッセージからエラー内容が理解できる事

・以下の仕様変更を考慮する
・社員IDの長さが2-10の間で変化すること
・社員名の長さが20-40の間で変化すること
・レコード数が10-40の間で変化すること
・社員情報ファイルのファイル名を変更できる事

よろしくお願いします。

812デフォルトの名無しさん:2007/09/19(水) 00:48:32
>>807
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
死ねば?
813デフォルトの名無しさん:2007/09/19(水) 00:55:04
>>807
僕、プログラムが大好きで独学しました!っていってこい。
814デフォルトの名無しさん:2007/09/19(水) 00:55:45
エディタみたいに単語や文字の色分けするのも字句解析と呼べるのかな?
815791:2007/09/19(水) 00:56:05
816デフォルトの名無しさん:2007/09/19(水) 00:58:11
>>815
これはひどいプリプロセッサw
817790:2007/09/19(水) 01:01:23
>>809
・・・・・・。どんだけ〜
818デフォルトの名無しさん:2007/09/19(水) 01:06:54
今日は後出しが流行なんですかね。
819デフォルトの名無しさん:2007/09/19(水) 01:13:17
中学生が「子供作るのは後出しだっけ?」「違うよ中出しだよ」という会話をしてたのを思い出した。
いやブスだったんだけどさ
820デフォルトの名無しさん:2007/09/19(水) 08:34:29
>>795
そのセンスってのは天賦の才能じゃないよ
既存の知識の応用・既知の解決法からの類推(ないし単なるパクり)がほとんどであって
努力次第でどうにでもなる
821デフォルトの名無しさん:2007/09/19(水) 08:51:02


1] 授業単元:C言語(
[2] 問題文(含コード&リンク):
以下に示すプログラムの一部について、誤りのある箇所に下線を引き
その理由と対処方法を記述しなさい。

@if((fp=fopen(name,"r"==NULL){
自分の解答(間違っていいると思う場所)
@nameが" "で囲まれていない。
 そう習ったので理由はよくわかりません教えてください。
Aswitch(c){
case'U':
++p;
case 'D':
--p;
default:
P=NULL;
自分の解答(間違っていいると思う場所
Aよくわかりません。
 教えてください。
Bwhile(*d!='\0')
*d++=*s++;
自分の解答(間違っていいると思う場所
Bs++の前の*がいらない?
 よくわかりません教えてください。

改行多いと出るので2回にわけます。
822821:2007/09/19(水) 08:51:35
続き
C#include "stdio.h"
自分の解答(間違っていいると思う場所
Cstdio.hが" "で囲まれているが< >で囲む
 そう習ったので理由がよくわかりません教えてください。
D#define MAX12
main()
{
int i;
char buf[MAX];
for(i=0; i<=MAX; i++)
buf[i]=' ';
自分の解答(間違っていいると思う場所
D理由、間違っている箇所ともにわかりません教えてください。
[3.3] 言語: (C++)
823デフォルトの名無しさん:2007/09/19(水) 08:54:51
まるきし専門学校あたりのしょぼい宿題に見えるなw
こんなもん分からんのは死んだ方がいいぞ
824デフォルトの名無しさん:2007/09/19(水) 08:56:21
>自分の解答(間違っていいると思う場所
間違いを何度もコピペ
825デフォルトの名無しさん:2007/09/19(水) 09:40:06
(1)nameがちゃんとした文字列とかcharポインタなら問題ない。
問題は括弧がおかしいことだ。
これだけで後は分かるだろ。

(2)各caseでbreakがないから全部デフォルトを通る。
まぁ、プログラム次第では別に間違ってないとも言い張れるかもね。
ってことで屁理屈弄するなら中括弧が閉じてねえ。

(3)あえて言うならsの内容をdに写してるのに、終了条件がdで決められて意味あんの?ってところ。
まぁ、これもプログラム次第では(ry

(4)俺も完全に自信持てないから適当にググったらでてきた。
ってことでググれカス。

(5)defineのMAXと12が繋がってる。
ってことで配列宣言できない。
中括弧閉じてねえ。
826デフォルトの名無しさん:2007/09/19(水) 11:06:52
ポインタで110と10をつかって演算しなさいと言う問題わかりませんお願い致します
827デフォルトの名無しさん:2007/09/19(水) 11:08:42
お願いされても誰にも判らないと思います。
>1を読んで出直してください。
828デフォルトの名無しさん:2007/09/19(水) 11:09:36
>1を読んで人生をやり直してください。
829751:2007/09/19(水) 11:23:22
きのうはいろいろお世話になりました。
自分ではこれでよいと思ったのですが提出したところまだおかしいと言われました。
おかしなところ。
実行すると例えば 15と5の最大公約数だと15と5の最大公約数は5ときちんと出るのですが
19と9とか余りが出てしまうやつだと答えが、9と1の最大公約数は9......と出てしまいます
よろしくお願いいたします
#include <stdio.h>
#include <stdlib.h>
int main( int argc, char *argv[] )
{
if(argc!=3)
exit(3);
int m=atoi(argv[1]), n=atoi(argv[2]),r;
int saidai,x;
if(m<n){
x=m;m=n;n=x;
}
r=m%n;
if(r==0){
     saidai=n;
}
while(r!=0){
m=n;
n=r;
r=m%n;
}
printf("%dと%dの最大公約数は%d\n",m,n,saidai);
     }
830デフォルトの名無しさん:2007/09/19(水) 11:35:57
>>829
saidaiが更新される箇所が一箇所しかないじゃないか

> if(r==0){
>      saidai=n;
> }
831デフォルトの名無しさん:2007/09/19(水) 11:37:45
>>829
--
foo.c:7: warning: ISO C90 forbids mixed declarations and code
foo.c:22: warning: control reaches end of non-void function
--
saidaiが設定されるに参照されている。
m, nが更新されているので更新結果が出力されている。
832デフォルトの名無しさん:2007/09/19(水) 11:43:02
さっきポインタのけんで記載したものです 誰か教えてくれませんか?
833デフォルトの名無しさん:2007/09/19(水) 11:45:14
>>832
プログラミング言語だけじゃなく日本語も不自由なのか?
834デフォルトの名無しさん:2007/09/19(水) 11:46:45
>>832
>828
835デフォルトの名無しさん:2007/09/19(水) 11:48:06
809-811に書き込んだんですが、教えていただけないでしょうか(;_;)
836デフォルトの名無しさん:2007/09/19(水) 11:50:25
>>829

#include <stdio.h>
#include <stdlib.h>
int main( int argc, char *argv[] )
{
   if(argc != 3){
       puts("引数が正しくない");
       exit(EXIT_FAILURE);
   }
   int p=-1, q=-1;
   int r, m, n;
   sscanf(argv[1], "%d", &p);
   sscanf(argv[2], "%d", &q);
   if(p<0 || q<0){
       puts("引数が正しくない");
       exit(EXIT_FAILURE);
   }
   m = p;
   n = q;
   while(n!=0){
       r = m%n;
       m = n;
       n = r;
   }
   printf("%dと%dの最大公約数は%d\n", p, q, m);
   return EXIT_SUCCESS;
}
837デフォルトの名無しさん:2007/09/19(水) 12:00:20
>>835
宿題なら授業単元を書け。
業務課題なら会社名を晒せ。
838829:2007/09/19(水) 12:09:42
>>830
>>831
>>836
ありかがとうございます、助かりました!
839デフォルトの名無しさん:2007/09/19(水) 12:32:14
>>835
締め切り過ぎてるけどいいの?
840デフォルトの名無しさん:2007/09/19(水) 12:34:03
結局提出できなくて謝って来たとかそんなんじゃねえ?
841デフォルトの名無しさん:2007/09/19(水) 12:47:20
>837
>839
ありがとうございます!
授業単元とはどんなことを書けばいいですか?><

期限は設計が今日まで、コーディングは明日までになったので大丈夫なんです^^
842デフォルトの名無しさん:2007/09/19(水) 12:48:50
授業名を書け
843841:2007/09/19(水) 12:59:54
>>842
アルゴリズム研修課題
社員検索
テキストファイルに記述された社員情報を構造体配列に格納し、検索する

です!
844デフォルトの名無しさん:2007/09/19(水) 13:11:57
学校の授業じゃねえなw
84584:2007/09/19(水) 13:23:05
あ!研修です><
846デフォルトの名無しさん:2007/09/19(水) 13:36:08
>業務課題なら会社名を晒せ。
847デフォルトの名無しさん:2007/09/19(水) 14:02:41
>>809
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Data{ char id[5], name[21];};
int id_cmp(struct Data *x, struct Data *y){ return strncmp(x->id, y->id, 4);}
int search(struct Data data[], int n, char *id){
    int i = 0, val;
    while(i <= n)
        if((val = strncmp(id, data[(i + n)/2].id, 4)) == 0) return (i + n)/2;
        else if(val > 0) i = (i + n)/2 + 1;
        else n = (i + n)/2 - 1;
    return -1;
}
int main(int argc, char *argv[]){
    FILE *fp;
    struct Data data[20];
    int i, j;
    char id[5];
    if(argc < 2) return fprintf(stderr, "usage : %s filename\n", argv[0]), 1;
    if((fp = fopen(argv[1], "r")) == NULL) return perror(argv[1]), 1;
    for(i = 0; i < 20 && fscanf(fp, "%s%s", data[i].id, data[i].name) == 2; i++) ;
    if(i == 0) return fprintf(stderr, "data doesn't exist\n"), 1;
    qsort(data, i, sizeof(struct Data), (int (*)(const void *, const void *))id_cmp);
    for(j = 0; j < i; j++) printf("%s %s\n", data[j].id, data[j].name);
    while(printf("search ? (y/n) "), scanf("%*[\t\n]"), getchar() == 'y'){
        printf("id : "), scanf("%4s", id);
        if((j = search(data, i, id)) >= 0) printf("%s %s\n", data[j].id, data[j].name);
        else printf("%s doesn't exist\n", id);
    }
    return fclose(fp), 0;
}
848841:2007/09/19(水) 14:04:22
会社名ってさらしていいものなんですか?><
でもどうしても1にんじゃできなくて力をかりたいんです><
849デフォルトの名無しさん:2007/09/19(水) 14:07:23
晒すなよw
ニュースになるぞw
850809:2007/09/19(水) 14:14:52
>>847さんありがとうございます!!これが809-811までのコーディングになるんですか?
すごいです!!

会社名はやっぱさらしちゃまずいですよね^^;
よかった☆
851デフォルトの名無しさん:2007/09/19(水) 14:32:18
>でもどうしても1にんじゃできなくて力をかりたいんです><
           ̄ ̄
なんだ、日本人じゃないのか。
852809:2007/09/19(水) 14:55:17
それミスっちゃったんです><
1人=1にんでお願いします☆
853デフォルトの名無しさん:2007/09/19(水) 15:08:39
業務課題は基本的にスレ違い
しかし、研修やった上でこんな課題すら解けないヤツを雇ってる会社があわれだな
854デフォルトの名無しさん:2007/09/19(水) 15:20:55
>>853
そんなもんじゃねえ?
大学生ですらろくにプログラムも書かずに就職する奴はいるし、ましてや高卒や専門は話にならんよ
855デフォルトの名無しさん:2007/09/19(水) 16:50:20
それまでのプログラム経験がどうとかじゃなくて、研修受けてるのに課題が解けないのがまずいんだろ。
給料ドブに捨ててるみたいなもんだからな。
856デフォルトの名無しさん:2007/09/19(水) 16:53:45
こりゃFizzBuzz解けないレベルかなぁ

無経験で就職なんて珍しくも無いが
プログラミングってダメな人は本当にダメだね
857デフォルトの名無しさん:2007/09/19(水) 17:45:06
>>809
研修中に分からない事をさも分かるかのような顔をして
その場だけ切り抜けても後で自分を含め周囲も迷惑するだけ
しったかしておいて後で猛勉強するタイプでもなさそうだ

向いてないなら取り返しがつかなくなる前に早めに諦めたほうがいいよ
858デフォルトの名無しさん:2007/09/19(水) 18:00:15
暇つぶし希望
859デフォルトの名無しさん:2007/09/19(水) 18:00:21
>>809
このスレを見ている人は類似スレも見てるからね
860デフォルトの名無しさん:2007/09/19(水) 18:11:34
>>858
20x20 ライフゲーム
画面の右端と左端、上端と下端は繋がっているものとする
1000世代まで標準出力に出力する
861デフォルトの名無しさん:2007/09/19(水) 18:16:18
>>860

俺は>>858ではないけど
それって球状になるんだよね?

あれ?ならないのか?

なってないようなきもするなw
862デフォルトの名無しさん:2007/09/19(水) 18:19:25
>>861
三次元にするとトーラスになる
平たく言うとドーナツ型
863デフォルトの名無しさん:2007/09/19(水) 18:20:13
ドーナツ型でもよさそう
864デフォルトの名無しさん:2007/09/19(水) 18:23:06
[1] 授業単元: 暇つぶし
[2] 問題文(含コード&リンク):

整数の配列が与えられる。このとき、配列から隣り合う要素を
選ばないように要素を何個か選び、それらの積が最大になるようにせよ。

例:
[3,1,1,-4,1,5] → 15(3,5 を選んだ)
[3,1,1,-4,1,-5] → 60(3,-4.-5 を選んだ)
[3,-1,1,-4,1,5] → 20(-1,-4,5 を選んだ)

[3] 環境: お任せ
[4] 期限: 9月24日
[5] その他の制限: 他の課題を優先
865デフォルトの名無しさん:2007/09/19(水) 18:31:01
>>862
あああああ
そっかwww
ドーナツ型になるよなw

ありがと。
866デフォルトの名無しさん:2007/09/19(水) 18:47:08
>>864
#include<stdio.h>
#include<limits.h>

int array_check(int array[], int array_size, int current, int is_valid)
{
int a, b;

if(array_size<=0)
{
if(is_valid) return current;
else return INT_MIN;
}

a=array_check(&array[1], array_size-1, current, is_valid);
b=array_check(&array[2], array_size-2, current*array[0], 1);

return a>b?a:b;
}

int main(void)
{
int array[]={3, 1, 1,-4, 1, 5};
// int array[]={3, 1, 1,-4, 1,-5};
// int array[]={3,-1, 1,-4, 1, 5};
// int array[]={-1};

printf("%d\n", array_check(array, sizeof(array)/sizeof(array[0]), 1, 0));

return 0;
}
867864:2007/09/19(水) 19:05:18
>>866
array の長さが30〜40くらいが限界かな?
暇があればもう少し効率の良いものを考えてみてください

( 入力例:
int array[100];
for (int i = 0; i < 100; ++i) array[i] = i % 4 - 2;
のとき 16777216 )
868>>860:2007/09/19(水) 19:09:05
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <time.h>
static int cur[20][20], prev[20][20];
void print(void){
    int i, j;
    char *ele = " *";
    system("CLS");
    for(i = 0; i < 20; putchar('\n'), i++)
        for(j = 0; j < 20; j++) putchar(ele[cur[i][j]]);
}
int get_sum(int i, int j){
    return prev[(i + 19)%20][(j + 19)%20] + prev[(i + 19)%20][j] + prev[(i + 19)%20][(j + 1)%20]
    + prev[i][(j + 19)%20] + prev[i][(j + 1)%20]
    + prev[(i + 1)%20][(j + 19)%20] + prev[(i + 1)%20][j] + prev[(i + 1)%20][(j + 1)%20];
}
void rule(void){
    int i, j, sum;
    for(i = 0; i < 20; i++)
        for(j = 0; j < 20; j++)
            if((sum = get_sum(i, j)) >= 3 && prev[i][j] == 0) cur[i][j] = 1;
            else if(prev[i][j] == 1 && (sum == 2 || sum == 3)) cur[i][j] = 1;
            else cur[i][j] = 0;
}
int main(void){
    int i, j;
    for(i = 0; i < 20; i++) for(j = 0; j < 20; j++) prev[i][j] = rand()/(RAND_MAX + 1.0)*2;
    for(i = 0; i < 2000; i++) rule(), print(), memcpy(prev, cur, sizeof(cur)), Sleep(10);
    return 0;
}
869デフォルトの名無しさん:2007/09/19(水) 19:20:42
>>868
if((sum = get_sum(i, j)) >= 3 && prev[i][j] == 0) cur[i][j] = 1;

if((sum = get_sum(i, j)) == 3 && prev[i][j] == 0) cur[i][j] = 1;
じゃないかな?
870デフォルトの名無しさん:2007/09/19(水) 19:26:15
>>869
そうでした。
ありがとう。
871デフォルトの名無しさん:2007/09/19(水) 19:47:06
>>866
面白いなー
872デフォルトの名無しさん:2007/09/19(水) 20:04:24
知識のない状態で作ろうとするのが無理。作ろうとする努力はいいことだから
もうちょっと勉強してこよう
873デフォルトの名無しさん:2007/09/19(水) 20:40:57
面目ございません
874デフォルトの名無しさん:2007/09/19(水) 21:55:52
>>867
int array[200];
for (int i = 0; i < 200; ++i) array[i] = i % 4 - 2;
のとき 1073741824
で合ってる?
875デフォルトの名無しさん:2007/09/19(水) 21:59:01
 _, ,
( ゚A゚)y-・~~ 腹立つわーこいつらー…

ttp://love6.2ch.net/test/read.cgi/kao/1179929773/
876874:2007/09/19(水) 22:16:30
>>874 は間違ってたよ
オーバーフローしてた orz
877デフォルトの名無しさん:2007/09/19(水) 22:19:05
おっと>>822の解答がw
878874:2007/09/19(水) 22:28:03
>>867
int array[ARRAY_SIZE];
for (int i = 0; i < ARRAY_SIZE; ++i) array[i] = i % 4 - 2;
とすると
ARRAY_SIZE=110 のとき 268435456
ARRAY_SIZE=120 のとき 1073741824
ARRAY_SIZE=130 のとき 4294967296
ARRAY_SIZE=140 のとき 17179869184
ARRAY_SIZE=150 のとき 274877906944
ARRAY_SIZE=160 のとき 1099511627776
ARRAY_SIZE=170 のとき 4398046511104
ARRAY_SIZE=180 のとき 17592186044416
ARRAY_SIZE=190 のとき 281474976710656
ARRAY_SIZE=200 のとき 1125899906842624
で合ってる?
879デフォルトの名無しさん:2007/09/19(水) 23:16:32
それぞれの変数ポインタをつかいA Bを交換するプログラムを作成  
#include<stdio.h>
int min()
 int a=12, b=8,wrk,*p_a =&a,*p_b = &b,*p_wrk = &wrk:

ですここからわかりませんお願い致します
880デフォルトの名無しさん:2007/09/19(水) 23:19:09
何だこの芸術的なプログラムは?
>>1を見て出直せ
881デフォルトの名無しさん:2007/09/19(水) 23:45:43
>>879
フイタwww
882デフォルトの名無しさん:2007/09/20(木) 01:28:49
void swap( int * a, int * b ) {
int temp;
temp=*a;
*a = *b;
*b = temp;
}
883デフォルトの名無しさん:2007/09/20(木) 01:35:32
これをわかっている、というのが凄いw
このスレに居る誰一人として、>>879のプログラムは判らんだろう。
884デフォルトの名無しさん:2007/09/20(木) 02:09:08
>>879
授業ちゃんと聞いてまつか?
885デフォルトの名無しさん:2007/09/20(木) 02:29:10
おそらく>>879は机上コーディング・机上実行なんだろうよ。
>>879が実行した気になればOKなんじゃね?
886864:2007/09/20(木) 05:44:04
>>878
正解です
887デフォルトの名無しさん:2007/09/20(木) 06:20:33
どこまでゆとれば気が済むんだ
888デフォルトの名無しさん:2007/09/20(木) 06:58:59
>>879

コンパイラも手作りなんだろ?
889874:2007/09/20(木) 09:32:30
>>864
きれいに書けなかった…
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4945.c

>>879
問題の意味がよく分からない
int a=12, b=8, wrk, *p_a, *p_b, *p_wrk;
p_a=&a;
p_b=&b;
p_wrk=&wrk;
*pwrk=*p_a;
*p_a=*p_b;
*p_b=*p_wrk;
890デフォルトの名無しさん:2007/09/20(木) 12:06:10
>>864,874
ICPCなつもりで書いたんで変数名とかアレですけど、シンプルにはなると思う。
っつーか配列要らない……
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4946.c
891デフォルトの名無しさん:2007/09/20(木) 13:08:52
>>890
int num[]={0,0,-3,1,-2};
とか
int num[]={-1,-1,3};
とか
892デフォルトの名無しさん:2007/09/20(木) 13:39:28
>>874 だが
使うのは直前の 6 つの値だけだから
>>874 に計算の途中経過を保存するための配列はいらないのには同意
途中で計算が合ってるかどうか訳がわからなくなったから、すべて残しておいた

ちなみに >>890>>891 を入力すると
int num[]={0,0,-3,1,-2}; -> 0
int num[]={-1,-1,3}; -> -1
になるよ
そういう入力を考えなくても良ければ >>874 ももう少しだけ簡単にできる
893デフォルトの名無しさん:2007/09/20(木) 13:45:32
[1] 授業単元:C言語入門
[2] 問題文:テキストファイルから1行ずつ読み込み、先頭の文字がaだった回数を求めるプログラムを作成せよ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4947.txt
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
 [3.3] 言語:C
[4] 期限: 2007年9月21日
[5] その他の制限:
894デフォルトの名無しさん:2007/09/20(木) 13:49:40
[1] 授業単元:趣味
[2] 問題文(含コード&リンク):与えられた行列Aが対角化できるか判定する。
対角化できる必要十分条件は一次独立な固有ベクトルがDim(A)個存在する事
[3] 環境:なんでも
[4] 期限: 無期限
[5] その他の制限:行列Aは配列でも構造体でも。
895デフォルトの名無しさん:2007/09/20(木) 13:52:35
>>893
> テキストファイルから1行ずつ読み込み
1行の最大桁数が明示されていないのでオレには難しい
ってことで題意を無視してみた
#include <stdio.h>

int main(void){
int moji, is_top=1, count=0;
FILE *fp;

fp=fopen("4947.txt", "r");
if(fp==NULL) return 1;
while((moji=fgetc(fp))!=EOF){
if(is_top && moji=='a') count++;
is_top=0;
if(moji=='\n') is_top=1;
}
fclose(fp);
printf("%d\n", count);

return 0;
}
896デフォルトの名無しさん:2007/09/20(木) 13:54:08
string使えよ・・・
897デフォルトの名無しさん:2007/09/20(木) 13:54:16
>>894
「Numeical Recipes in C」っていう本ににあったような気がする
スペルミスがあるかも
898デフォルトの名無しさん:2007/09/20(木) 13:59:31
Numerical Recipes だな
899864:2007/09/20(木) 14:35:38
>>874 正解です。
>>890 未使用の場合の更新が落ちてるのだと。

以下は想定解です:

#include <cstdio>
using namespace std;
int main() {
  const int n = 200;
  double x[n];
  for (int i = 0; i < n; ++i) 
    x[i] = i % 4 - 2;

  double a = x[0], b = x[0], c = 1, d = 1;
  for (int i = 1; i < n; ++i) {
    double a_ = a, b_ = b, e = x[i];
    a = max(a_, max(e*c, e*d));
    b = min(b_, min(e*c, e*d));
    c = max(c, a_);
    d = min(d, b_);
  }
  printf("%.0f\n", a);
}
900デフォルトの名無しさん:2007/09/20(木) 15:40:54
[1] 授業単元:C
[2] 問題文(含コード&リンク):ttp://www.logos.ic.i.u-tokyo.ac.jp/icpc2007/jp/domestic/problem.html
問題B・C・Dの3つ
[3] 環境
 [3.1] OS:Windows
 [3.2] VC++ 6.0
 [3.3] 言語:C
[4] 期限:2007年9月30日
[5] その他の制限:なし
901デフォルトの名無しさん:2007/09/20(木) 16:10:21
>>900
どこの学校か晒して欲しいね。

問題の権利は何かと面倒で、たとえば宿題にそのまんま
転用するのは色々と問題があるんだけどな。
902デフォルトの名無しさん:2007/09/20(木) 16:40:34
>>901
どういう問題があるんですかね。
903デフォルトの名無しさん:2007/09/20(木) 16:50:50
ただ東京大学ってとこに噛みついとるだけちゃうかと
904デフォルトの名無しさん:2007/09/20(木) 16:53:09
>>900
ググレカス

東大のwikiに載ってるよ。
本番でF問題解けなくて俺涙目。
905デフォルトの名無しさん:2007/09/20(木) 16:57:02
転用っていうか公式じゃないの?
906デフォルトの名無しさん:2007/09/20(木) 16:59:50
>>901
UVaとかPKUどうなるんだよww
907デフォルトの名無しさん:2007/09/20(木) 17:00:23
問題自体は公式だけれど、それを勝手に自校の宿題として
使っているようであれば問題だよ。

非公式の練習会くらいなら問題ないだろうけどさ。
908デフォルトの名無しさん:2007/09/20(木) 17:01:54
>>906
UVA, PKU は ACM に許可を取ってるよ。
909デフォルトの名無しさん:2007/09/20(木) 17:14:01
>>903
お前URLしか見てないんちゃうかと
910デフォルトの名無しさん:2007/09/20(木) 17:14:36
[1] 授業単元:プログラミング技術
[2] 問題文(含コード&リンク):四則(加減乗除)演算を関数としてもっているプログラム。
実数と整数の両方に対応し、式と結果を表示する。
[3] 環境
 [3.1] OS:WindowsVista
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
 [3.3] 言語:C言語
[4] 期限:2007/09/27(木)
[5] その他の制限:関数,scanfを使います。
911デフォルトの名無しさん:2007/09/20(木) 17:18:37
>>910
どんな形式の入力で、どんな結果を出せばいいんだ
912デフォルトの名無しさん:2007/09/20(木) 17:46:32
>>907 そういう事か
例えば中学校で高校の入試問題をそのまま宿題にして出している、という感じか。

ちろっとググってみたが、長文問題で小説の一節を使ったりするのは許可がいるみたいだな。
ttp://web.archive.org/web/20051026000316/http://www.asahi.com/life/update/0925/003.html
問題文そのもののコピーはどうなるんだろ?許可があればいいのかな?

ttp://www.houko.com/00/01/S45/048.HTM
ここの第35条だと思うが、「必要と認められる限度」とか「著作権者の利益を不当に害することとなる場合」とかよくわからん。
913デフォルトの名無しさん:2007/09/20(木) 17:53:07
>>912
いまのところACM/ICPCの問題では事例が無いけど
万が一ということが怖いのです。

ということで、例えば少しオフィシャルっぽい国内模擬練習会なんかは、
問題はすべてオリジナルで作り、類題がないこともチェックしてます。
(もちろん参加者にとって初見の問題にするという意味もあるんだけど)
914デフォルトの名無しさん:2007/09/20(木) 17:56:55
>>912
宿題程度が槍玉にされることはあんまないだろ
でも正式な試験とかだと許可云々が厳しくなるな

横断歩道で信号無視してんのと車乗って信号無視してるくらいの違いになる
915910:2007/09/20(木) 18:00:34
入力する値は2つで良いので、
入力=>a
加減乗除選択
入力=>b
a○b=c
みたいな感じでしょうか。
関数は4つ必要みたいです。
916デフォルトの名無しさん:2007/09/20(木) 18:00:47
>>914
いい例だな
917デフォルトの名無しさん:2007/09/20(木) 18:03:04
>>915
>加減乗除選択
ここで何をするんだ
918915:2007/09/20(木) 18:20:08
四則のいずれかを選択して、switch文で判断して関数を呼び出そうかと思ってます。
このあたりで苦戦中してます。
919デフォルトの名無しさん:2007/09/20(木) 18:24:55
>>918
どうやって選択させるのかって聞いてるんだ
920915:2007/09/20(木) 18:30:45
int x;
printf(1.+ 2.- 3.* 4./);
scanf("%d",&x);
switch(x){
case 1:
+の関数呼び出し
 〜(case 4まで)
}
できるかわかりませんが、このような形です。
921デフォルトの名無しさん:2007/09/20(木) 18:38:33
【質問テンプレ】
[1] 授業単元:コンピュータ2及び実習
[2] 問題文(含コード&リンク):次の問題を解くプログラムを書く
 ・ビリヤード台が置いてある
 ・台の左下端の座標は(0,0)、右上端の座標は(2,1)とする。
 ・位置(x0,y0)に手玉がある。
 ・手玉を諸速度(V0x,V0y)で突き出す。 ※手玉の位置、初速度はscanfを使って入力する。

 ○問題
 ・手玉はどこに衝突するか。(衝突位置の座標を表示する、20回のパンクを考慮して21箇所回答)
 ・ただし、ポケットに落ちることは考えない。

[3] 環境
 [3.1] OS: Linux
 [3.3] 言語: C
[4] 期限:特になし
[5] その他の制限:特になし
922デフォルトの名無しさん:2007/09/20(木) 18:51:41
どこに向かって突くのか分からないから、レールにぶつかるとしか答えようがない
923デフォルトの名無しさん:2007/09/20(木) 19:08:02
初期位置とベクトルを入力したとき、どこで跳ね返るかを求めるプログラムを書けってことだろ。
日本語読めるようになってから書き込めよ
924デフォルトの名無しさん:2007/09/20(木) 19:11:05
じゃぁお前プログラム書いてやれよ。
925デフォルトの名無しさん:2007/09/20(木) 19:13:54
ベクトルなんか書いてねーじゃん
どこ?どこに書いてあるの?
ねえ教えて?
早く!早く教えて?
どこに書いてあるのかな?
ん?恥ずかしがらないでいいから教えて?
ね、ね?
それともあぶり出しかな?
おーい、早くおしえてよ!
926デフォルトの名無しさん:2007/09/20(木) 19:18:41
問題文が曖昧なことが多いなこのスレ
927デフォルトの名無しさん:2007/09/20(木) 19:21:46
>初速度はscanfを使って入力する
って書いてあるのに
>どこに向かって突くのか分からないから
とかいう奴には、どんなに詳しく書いても曖昧だろw
928デフォルトの名無しさん:2007/09/20(木) 19:23:44
>>927
むしろ説明してみ?できるならね
929デフォルトの名無しさん:2007/09/20(木) 19:24:51
>手玉を初速度(V0x,V0y)で突き出す

これがベクトルになるって話
930デフォルトの名無しさん:2007/09/20(木) 19:27:07
ベクトルの意味わかってないんだろ。
931デフォルトの名無しさん:2007/09/20(木) 19:30:33
わかるよ
要するに、第一象限くらいの話でしょ
932デフォルトの名無しさん:2007/09/20(木) 19:30:44
二つの整数を読み込んで、後者が前者の約数かを表示するプログラムを表示しなさい。
933デフォルトの名無しさん:2007/09/20(木) 19:31:18
等価演算氏や関係演算子が、1あるいは0の値を生成することを確認するプログラムを作成せよ。
934デフォルトの名無しさん:2007/09/20(木) 19:31:32
整数地を読みこんで、その絶対値を表示しなさい。
935デフォルトの名無しさん:2007/09/20(木) 19:33:53
>>931
全然わかってねーw
936デフォルトの名無しさん:2007/09/20(木) 19:34:52
>>932
>>933
>>934
をお願いします。
937デフォルトの名無しさん:2007/09/20(木) 19:35:13
ただ思うことは>>921の台ってちいさすぎね?ww
938デフォルトの名無しさん:2007/09/20(木) 19:35:34
939デフォルトの名無しさん:2007/09/20(木) 19:35:48
>>936
>>1をお願いします
940デフォルトの名無しさん:2007/09/20(木) 19:36:50
なんでいきなり加速してんだ
恥ずかしいレスした奴が流そうと必死なのか?
941デフォルトの名無しさん:2007/09/20(木) 19:38:01
1] 授業単元:C言語
[2] 問題文:
二つの整数を読み込んで、後者が前者の約数かを表示するプログラムを表示しなさい。

等価演算氏や関係演算子が、1あるいは0の値を生成することを確認するプログラムを作成せよ。

整数値を読みこんで、その絶対値を表示しなさい。

[3] 環境
 [3.1] OS:windows
 [3.2] コンパイラ名とバージョン: (bcc32)
 [3.3] 言語: C
[4] 期限: (2007年9月22日まで)
[5] その他の制限:
942デフォルトの名無しさん:2007/09/20(木) 19:48:15
1.二つの整数を読み込んで、後者が前者の約数かを表示するプログラム。
2.等価演算氏や関係演算子が、1あるいは0の値を生成することを確認するプログラム。
3.整数値を読みこんで、その絶対値を表示するプログラム。
943912:2007/09/20(木) 20:17:18
>>913-914
レスサンクス。やんない方がいい事みたいだな。

これだけだとなんなので、>>941の1つめ
#include <stdio.h>
int main(void){
  int a,b;
  printf("整数値を2つ入力して下さい>");
  scanf("%d %d",&a,&b);
  if(b!=0 && a%b==0){
    printf("%dは%dの約数です。",b,a);
  }else{
    printf("%dは%dの約数ではありません。",b,a);
  }
  return 0;
}
944デフォルトの名無しさん:2007/09/20(木) 20:22:45
>>941
> 等価演算氏や関係演算子が、1あるいは0の値を生成する

これってC的にはどうなの?
1って保証あったっけ?
945デフォルトの名無しさん:2007/09/20(木) 20:22:45
aが0の場合、0以外のbが全部約数になるけど、いいんかね?
946デフォルトの名無しさん:2007/09/20(木) 20:27:46
>>941
2つめ

#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
printf("%d",(n>>(sizeof(n)*8-1))?~n+1:n);
return 0;
}
947946:2007/09/20(木) 20:28:26
3つめだった
948デフォルトの名無しさん:2007/09/20(木) 20:29:03
/*読み込んだ整数値の符号を判定*/
#include <stdio.h>
int main(void)
{
int no1,no2;

puts("二つの整数を入力してください。");
printf("整数1:"); scanf("%d",&no1);
printf("整数2:"); scanf("%d",&no2);

if(no2%no1)
puts("後者は前者の約数ではありません。");
else
puts("後者は前者の約数です。");

return (0);
}
949デフォルトの名無しさん:2007/09/20(木) 20:38:48
>>944
疑問に思ったら仕様書を確認しような。以下 ANSI ISO/IEC 9899, 1999 から引用。

6.5.8 - 6
Each of the operator < (less than), > (greater than), <= (less than
or equal to), and >= (greater than or equal to) shall yield 1 if the
specified relation is true and 0 if it is false. The result has type int.

6.5.9 - 3
The == (equal to) and != (not equal to) operators are analogous to the
relational operators exept for their lower precedence. Each of the
operator yields 1 if the specified relation is true and 0 if it is false.
The result has type int. For any pair of operand, exactly one of the
relations is true.
950デフォルトの名無しさん:2007/09/20(木) 20:42:40
>>941
二つ目
#include <stdio.h>

int main(void)
{
int i;

for(i=0; i<2; i++) printf("%d %d %d ", i == 0, i > 0, i < 1);

return 0;
}
951デフォルトの名無しさん:2007/09/20(木) 20:45:34
/*1か0を生成*/
#include <stdio.h>
int main(void)
{
int no1;

printf("整数を入力してください。:");
scanf("%d",&no1);

if (no1 == 0)
puts("0");
else
puts("1");

return (0)
}
952デフォルトの名無しさん:2007/09/20(木) 20:51:38
953デフォルトの名無しさん:2007/09/20(木) 20:56:45
確実に0か1かを返すプログラムを提供してくれたんだと思うよ
954デフォルトの名無しさん:2007/09/20(木) 20:59:23
>整数値を読みこんで、その絶対値を表示しなさい。
は、
-8とか-10と入力したら、
絶対値は、8です、とか10ですとか表示するプログラムのことです。
955デフォルトの名無しさん:2007/09/20(木) 21:01:50
#include <stdio.h>

int main(void)
{
int n;

scanf("%d", &n);

printf("絶対値は%dです", n < 0 ? -n : n);

return 0;
}
956デフォルトの名無しさん:2007/09/20(木) 21:02:18
printf("%d",n>0?n:-n);
957デフォルトの名無しさん:2007/09/20(木) 21:05:30
どっちでもいいだろ
958デフォルトの名無しさん:2007/09/20(木) 21:10:38
【質問テンプレ】
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):int型で10個の要素を持つ配列に順次キーボードから整数を入力していく(入力データに関する
範囲チェックも行う)。10個の要素全てにデータを入力したら、配列の内容を降順にソートし、その内容を表示する。
また、10個の要素の合計、平均、最大値、最小値を求めて表示するプログラムの作成。
[3] 環境
 [3.1] OS:(Windows Vista Business)
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2005
 [3.3] 言語: C
[4] 期限: ([2007年09月21日まで]
[5] その他の制限:
@配列に対する入力・出力は繰り返しのアルゴリズムで処理すること
A整数値しか入力されないものとし、入力データに大して「0以上かつ100以下」の範囲チェックを行う。
範囲外のデータが入力された場合はエラーメッセージを出力し、再入力を行う。
Bソートのアルゴリズムはfor文の2重ループで処理すること
C平均は小数点以下2桁で表示し、合計、平均、最大値、最小値は小数点の位置を合わせて表示する
959デフォルトの名無しさん:2007/09/20(木) 21:10:42
書き込みのタイミングが遅れただけなんだけど?
960デフォルトの名無しさん:2007/09/20(木) 21:11:15
【質問テンプレ】
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
以下の実行結果を表示するプログラムの作成

[実行結果]
国語 数学 英語 | 合計
-------------------+------
55 67 75 | 197
30 41 55 | 126
90 85 88 | 263
77 75 72 | 224
95 65 89 | 249
[3] 環境
 [3.1] OS:(Windows Vista Business)
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2005
 [3.3] 言語: C
[4] 期限: ([2007年09月20日まで]
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

あらかじめ以下の二次元配列を定義しておくこと
int ten[5][3] = {
{55,67,75}
{30,41,55}
{90,85,88}
{77,75,72}
{95,65,89}
};
961デフォルトの名無しさん:2007/09/20(木) 21:12:42
【質問テンプレ】
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
半角英数字を一文字入力し、入力された英字で始まる曜日を検索して表示するプログラム
[3] 環境
 [3.1] OS:(Windows Vista Business)
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2005
 [3.3] 言語: C
[4] 期限: ([2007年09月20日まで]
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
@あらかじめ以下の二次元配列を定義しておく
char week[7][10] = {
"Sunday"
"Monday"
"Tuesday"
"Wednesday"
"Thursday"
"Friday"
"Saturday"
};
A入力された文字で始まる曜日がなければ「頭文字が一致する曜日はありませんでした」と表示する。
B入力された文字で始まる曜日があれば「頭文字が一致するのは以下の通りです」と表示し、
その次の行から頭文字が一致する曜日を全て表示する。
962デフォルトの名無しさん:2007/09/20(木) 21:16:05
【質問テンプレ】
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
金額を入力し、入力された金額の金種計算を行うプログラムの作成

[実行結果]()内はキーボードから入力
金額を入力:(10000000)
金額は「1〜9999999」の範囲で入力してください
金額を入力:(38999)

金種計算
------------------
10000 | 3
5000 | 1
2000 | 1
1000 | 1
500 | 1
100 | 4
50 | 1
10 | 4
5 | 1
1 | 4

[3] 環境
 [3.1] OS:(Windows Vista Business)
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2005
 [3.3] 言語: C
[4] 期限: ([2007年09月20日まで]
[5] その他の制限:@金種計算で必要な配列データは各自で最適だと思うものを用意する
963デフォルトの名無しさん:2007/09/20(木) 21:17:21
【質問テンプレ】
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
万年カレンダー(グレゴリオ暦)を表示するプログラムの作成

[実行結果]()内はキーボードからの入力
万年カレンダー
年を入力:(12345)
年は「1〜9999」の範囲で入力してください。
年を入力:(2006)
月を入力:(15)
月は「1〜12」での範囲で入力してください。
月を入力:(11)

2006年11月のカレンダー
----------------------------
sun mon tue wed thu fri sat
----------------------------
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
----------------------------
964デフォルトの名無しさん:2007/09/20(木) 21:19:12

[3] 環境
 [3.1] OS:(Windows Vista Business)
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2005
 [3.3] 言語: C
[4] 期限: ([2007年09月20日まで]
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
グレゴリオ暦の規則
@ 西暦の年数が4で割り切れ、かつ100で割り切れない年を閏年とする。
A 西暦の年数が400で割り切れる年も閏年とする。
B 西暦1年1月1日を月曜日とする
カレンダーに必要な配列データなどは各自で最適だと思うものを用意すること
965デフォルトの名無しさん:2007/09/20(木) 21:29:20
なんか一気に来た
966デフォルトの名無しさん:2007/09/20(木) 21:31:52
>>962
#include<stdio.h>
int main(void){
int a[]={10000,5000,2000,1000,500,100,50,5,1};
int y,i;
while(1){
printf("金額を入力:");
scanf("%d",&y);
if(y<1||y>9999999)
printf("金額は「1〜9999999」の範囲で入力してください\n");
else
break;
}
printf("金種計算\n------------------\n");
for(i=0;i<9;i++){
printf("%5d | %d\n",a[i],y/a[i]);
y%=a[i];
}
return 0;
}
967デフォルトの名無しさん:2007/09/20(木) 21:46:47
新学期始まったんだなw
968デフォルトの名無しさん:2007/09/20(木) 22:06:06
>>963
#include<stdio.h>
int f(int y,int m,int d){
if(m<3) y--,m+=12;
return y*365+y/4-y/100+y/400+(m+1)*306/10+d-428;
}
int main(void){
int y,m,d;
printf("万年カレンダー\n");
//グレゴリオ暦は1582年10月15日から
while(1){
printf("年を入力:",y); scanf("%d",&y);
if(y<1||y>9999) printf("年は「1〜9999」の範囲で入力してください。\n");
else break;
}
while(1){
printf("月を入力:",m); scanf("%d",&m);
if(m<1||m>12) printf("月は「1〜12」での範囲で入力してください。\n");
else break;
}
printf("\n%d年%d月のカレンダー\n----------------------------\n"\
" sun mon tue wed thu fri sat\n----------------------------\n",y,m);
for(d=0;d<f(y,m,1)%7;d++) printf("  ");
for(d=1;d<=f(y,m+1,1)-f(y,m,1);d++){
printf("%4d",d);
if(f(y,m,d)%7==6) printf("\n");
}
printf("\n----------------------------\n");
return 0;
}
969デフォルトの名無しさん:2007/09/20(木) 22:32:02
1] 授業単元:C言語
[2] 問題文:
最初300個ある商品が、毎日何個かランダムに減っていき、
残り75個になったら、その3日後に250個たされるプログラムを作りなさい。

[3] 環境
 [3.1] OS:windows
 [3.2] コンパイラ名とバージョン: (bcc32)
 [3.3] 言語: C
[4] 期限: (2007年9月22日まで)
[5] その他の制限:

よろしくお願いします。

970デフォルトの名無しさん:2007/09/20(木) 22:32:49
減り幅限定しないのか?
971969:2007/09/20(木) 22:35:44
>970
すいません減り幅は、0〜50です。
よろしくお願いします。
972デフォルトの名無しさん:2007/09/20(木) 22:36:29
75個未満はいいのか?
973969:2007/09/20(木) 22:39:59
>972
何度もすいません。
75個以下になったらです。
974デフォルトの名無しさん:2007/09/20(木) 22:42:14
デバッグに3日以上かかるがいいのか?
975969:2007/09/20(木) 22:48:37
>974
できるだけ早くお願いしたいんですけど。。。
976デフォルトの名無しさん:2007/09/20(木) 22:49:39
終了条件ないと永遠に終わらないんだけど。
977969:2007/09/20(木) 22:54:20
>976
そのとおりですね。
5回250個足したら終了でお願いします。
978デフォルトの名無しさん:2007/09/20(木) 23:04:10
問題文
最初300個ある商品が、毎日何個かランダムに減っていき、
残り75個になったら、その3日後に250個たされるプログラムを作りなさい。
すいません減り幅は、0〜50です。
75個以下になったらです。

単語の抽出
最初 300個 商品 毎日 何個 ランダム
残り 75個 3日後 250個
減り幅 0〜50
75個以下
979デフォルトの名無しさん:2007/09/20(木) 23:06:24
乱数の精度は?
980969:2007/09/20(木) 23:11:51
>979
0〜50の間であればいいんですけど。。。
981デフォルトの名無しさん:2007/09/20(木) 23:20:52
>>969
#include<stdio.h>
#include<stdlib.h>

int main(void)
{
int num, prev_num, dec_num, inc_times=0, inc_day=0, day;

num=prev_num=300;
for(day=1;inc_times<3;day++)
{
if(day==inc_day) num+=250, inc_times++;
dec_num=rand()%51;
if(dec_num>num){
printf("\n!!!%d 日目に商品が %d 個不足しました!!!\n", day, dec_num-num);
dec_num=num;
}
num-=dec_num;

if(num<=75 && day>=inc_day) inc_day=day+3;
printf("%2d日目 商品数:%3d->%3d %+4d\n", day, prev_num, num, num-prev_num);

prev_num=num;
}

return 0;
}
982デフォルトの名無しさん:2007/09/20(木) 23:50:04
>>981 の訂正
for(day=1;inc_times<3;day++)

for(day=1;inc_times<5;day++)
983デフォルトの名無しさん:2007/09/21(金) 08:47:08 BE:331348875-2BP(12)
次スレ立てました
C/C++の宿題を片付けます 96代目
http://pc11.2ch.net/test/read.cgi/tech/1190331997/
984デフォルトの名無しさん:2007/09/21(金) 11:04:17
>>937
これも酷いな……。
こっちまでブルーになる。
985デフォルトの名無しさん:2007/09/21(金) 11:31:16
2×3=6ドットしかないのか
986デフォルトの名無しさん:2007/09/21(金) 11:40:51
単位がmなら何も不思議じゃない
987デフォルトの名無しさん:2007/09/21(金) 14:07:42
C#の問題は書いていいの?
C#の問題といてくれるスレはないの?
988デフォルトの名無しさん:2007/09/21(金) 14:13:08
無いよ
自分でやれカス
989デフォルトの名無しさん:2007/09/21(金) 14:13:11
無いよ
990デフォルトの名無しさん
>>961
#include<stdio.h>

main(){
int ten[5][3] = {
{55,67,75}
{30,41,55}
{90,85,88}
{77,75,72}
{95,65,89}
};

printf("国語 数学 英語 | 合計 \n"
"-------------------+------ \n"
"55 67 75 | 197 \n"
"30 41 55 | 126 \n"
"90 85 88 | 263 \n"
"77 75 72 | 224 \n"
"95 65 89 | 249 \n"
);
}