C/C++の宿題を片付けます 95代目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2007/08/24(金) 17:28:30【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[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/
0002デフォルトの名無しさん
2007/08/24(金) 19:45:410003デフォルトの名無しさん
2007/08/24(金) 20:31:240004デフォルトの名無しさん
2007/08/24(金) 21:26:28また来年
0005デフォルトの名無しさん
2007/08/24(金) 22:51:48std::istreamから区切り文字のある場所を発見するのに
std::find(first, last, '&');
ってやると、戻り値がfirstと一致してしまうんだけど、
こういう使い方って駄目なの?
0006デフォルトの名無しさん
2007/08/24(金) 23:41:3696代目が待っている。どんどん問題を解いてスレ消化
0007デフォルトの名無しさん
2007/08/25(土) 02:57:20/ \
/ ─ ─ \
/ (●) (●) \ >>3さん2GETできなかった気分はどう?
| :::::: (__人__) :::::: |
\. `ー'´ /ヽ
(ヽ、 / ̄) |
| ``ー――‐''| ヽ、. |
ゝ ノ ヽ ノ |
0008デフォルトの名無しさん
2007/08/25(土) 12:41:110009デフォルトの名無しさん
2007/08/25(土) 17:56:060010デフォルトの名無しさん
2007/08/25(土) 23:05:140011デフォルトの名無しさん
2007/08/25(土) 23:06:10はがれては困る時にははがれてほしくない
人間ってゼイタクだよな
0012デフォルトの名無しさん
2007/08/26(日) 00:05:59firstとlastの型は何?
0013デフォルトの名無しさん
2007/08/26(日) 03:28:220014デフォルトの名無しさん
2007/08/26(日) 14:36:25[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日」です
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━
↑みたいな感じでよろしくお願いします<(_ _*)>
説明下手ですいません^^;
0015デフォルトの名無しさん
2007/08/26(日) 14:53:21#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;
}
0016デフォルトの名無しさん
2007/08/26(日) 15:54:08素早い返信ありがとうございます^^
またよろしくお願いします(*- -)(*_ _)ペコリ
0017デフォルトの名無しさん
2007/08/27(月) 04:40:10[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日
お願いします。
0018デフォルトの名無しさん
2007/08/27(月) 05:19:07#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));}
0019デフォルトの名無しさん
2007/08/27(月) 23:44:530020デフォルトの名無しさん
2007/08/28(火) 10:47:50[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日
0021デフォルトの名無しさん
2007/08/28(火) 11:04:381
#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;
}
0022デフォルトの名無しさん
2007/08/28(火) 11:55:23#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;
}
0023デフォルトの名無しさん
2007/08/28(火) 13:03:00ありがとうございました。
0024デフォルトの名無しさん
2007/08/28(火) 14:24:29>20の1は、こういうことではないのか?
>整数a,bを入力とし、以下の関数を定義して、小大の順に出力するプログラムを作成せよ。区切りは空白とする。
入力:整数
出力対象:以下の関数
出力条件:小大の順に
関数を小大の順に出力ってのがどういうことかはわかりませんが。
0025デフォルトの名無しさん
2007/08/28(火) 14:25:430026デフォルトの名無しさん
2007/08/28(火) 15:52:35> void exch_order(int *pa, int *pb)
> ポインタ引数を用い、大小関係により、 *pa と *pb を入れ替えて格納する。
入れ替えて格納する機能だけで十分でしょ。前文には「以下の関数を定義して」とあるんだし。
以下に該当する関数が、表示するところまでは条件に入ってない。
0027デフォルトの名無しさん
2007/08/28(火) 17:20:57二点(xs,ys)-(xe,ye)で与えられる線分が、長方形の領域(左下コーナー(xmin,ymin)、右上コーナー(xmax,ymax))
と交わるかどうか判定したいのですが、良い方法はありますか?
細かく場合分けして、判定したら出来そうなのですが、
何か物凄くいい方法で、数行で書けるような判定方法があればうれしいのですが。
Cで書いています。
よろしく
0028デフォルトの名無しさん
2007/08/28(火) 18:21:07日 月 火・・・
1 2・・・
・・・
と表示するプログラムを教えてください。
0029デフォルトの名無しさん
2007/08/28(火) 18:25:41カレンダーを見た事は有りますか?
年も指定しないと無理なんですよ。
0030デフォルトの名無しさん
2007/08/28(火) 19:09:32日本語を見たことありますか?
書かれたまんまのことを答えれば良いのですよ。
0031デフォルトの名無しさん
2007/08/28(火) 19:23:570032デフォルトの名無しさん
2007/08/28(火) 19:34:52けど、テンプレに則ってないんで無視しチャイナ。
0033デフォルトの名無しさん
2007/08/28(火) 20:33:59[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日
再々ですがお願いします
0034デフォルトの名無しさん
2007/08/28(火) 20:41:320035デフォルトの名無しさん
2007/08/28(火) 20:47:08#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++);
}
0036デフォルトの名無しさん
2007/08/28(火) 21:52:09[2] 問題文:
二次座標平面において,ランダムに4〜5個ほど点が与えられる.
そのような複数の点の最近傍を通る円の方程式を求めよ.
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語:C
[4] 期限:[2007年08月31日24:00まで]
[5] その他の制限:計算速度が速い方が好ましい.
今現在最急降下法で作ってみたのですがうまく動きません。
よろしくお願いします。
0037ジャレ
2007/08/28(火) 22:05:11[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の読み込み部分は
関数化してくだい。では、よろしくお願い致します!!
0038デフォルトの名無しさん
2007/08/28(火) 23:16:32回帰直線(最小二乗法)のように数式で表現できるはずだから、それを晒してくれれば…
0039デフォルトの名無しさん
2007/08/28(火) 23:18:52>>1 の質問テンプレ
それと線分の交差って高校の数学でやらなかったっけ?
もう忘れてしまったけど
0040デフォルトの名無しさん
2007/08/29(水) 00:42:22http://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未満のときと全ての点が一直線上にあるときは答えが出ない
0041デフォルトの名無しさん
2007/08/29(水) 02:24:44できてるところまでうp!
0042デフォルトの名無しさん
2007/08/29(水) 07:31:35[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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
0043デフォルトの名無しさん
2007/08/29(水) 08:19:00[2] 問題文(含コード&リンク): 50行以上のプログラムをつくりなさい。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VS2005
[3.3] 言語: C
[4] 期限: 2007年8月31日
[5] その他の制限: C言語検定3級まで習いましたので、その範囲でお願いします。
0044デフォルトの名無しさん
2007/08/29(水) 09:55:36#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;
}
0045デフォルトの名無しさん
2007/08/29(水) 10:18:59[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日
0046デフォルトの名無しさん
2007/08/29(水) 10:25:03{
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;
}
0047デフォルトの名無しさん
2007/08/29(水) 10:26:340048デフォルトの名無しさん
2007/08/29(水) 10:34:40とは言え、>46は性質が悪すぎる。
0049デフォルトの名無しさん
2007/08/29(水) 10:48:37ソース全部書いて貰えるとうれしいのですが
0050デフォルトの名無しさん
2007/08/29(水) 11:26:02// >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;
}
0051デフォルトの名無しさん
2007/08/29(水) 11:41:220052デフォルトの名無しさん
2007/08/29(水) 11:42:390053デフォルトの名無しさん
2007/08/29(水) 12:03:420054デフォルトの名無しさん
2007/08/29(水) 12:25:57[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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
0055デフォルトの名無しさん
2007/08/29(水) 12:33:33[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] その他の制限:
何方かお願いします
0056デフォルトの名無しさん
2007/08/29(水) 12:54:04strlenでググれ。
それだけで解決するから。
0057【4200円(定額)】
2007/08/29(水) 13:06:24#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];
}
0058デフォルトの名無しさん
2007/08/29(水) 13:08:030059デフォルトの名無しさん
2007/08/29(水) 13:16:55BM法でやれとか書いてないからいいんじゃないかな。
いかにもって感じで。
0060デフォルトの名無しさん
2007/08/29(水) 13:18:42char *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;
}
0061デフォルトの名無しさん
2007/08/29(水) 14:00:56区切り文字判別したりしなきゃならないのか。
・改行が出現するまでを1行とする
・1行は70文字未満
・区切り文字は空白、タブ、改行の三種類
効率よく単語毎に切り出せるプログラムってどうやって作るの?
0062デフォルトの名無しさん
2007/08/29(水) 14:03:26[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まで]
お願いします。
0063デフォルトの名無しさん
2007/08/29(水) 14:05:28その条件を満たせばどんなプログラムでもいいってこと?
0064デフォルトの名無しさん
2007/08/29(水) 14:21:41物凄く難しくね?
0066デフォルトの名無しさん
2007/08/29(水) 14:55:260067デフォルトの名無しさん
2007/08/29(水) 15:02:22>>66
問題文には対応型と書いてあったのですが、よくわからないので7番目の条件はどうでも良いです。
すいません。
0068デフォルトの名無しさん
2007/08/29(水) 15:07:360069デフォルトの名無しさん
2007/08/29(水) 15:18:352〜5の条件にある文は既に習ったんだろうけど
それぞれを学んだ時の題材として作ったのはどんなプログラム?
0070デフォルトの名無しさん
2007/08/29(水) 15:21:16つけた俺の答えを送ろう
「数値を螺旋状に表示するプログラム」
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4877.txt
0071デフォルトの名無しさん
2007/08/29(水) 16:34:41入力した数値が処理された数値として出力されるようなプログラムですかね。
平均を出したりとか。
あと、例としてはカレンダーをつくってみてはどうか?と書いてありました。
0073ジャレ
2007/08/29(水) 22:51:12ファイルタイプの判別、コメントを飛ばしが必要です。
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
0074デフォルトの名無しさん
2007/08/30(木) 00:23:52pgmにはバイナリとアスキーがあって、どちらもヘッダ部(コメント含む)を読んだら後は、前者はfread()、
後者は本体部分が70文字以上の長い行のデータが多いことを鑑みてfscanf()で取り出せばいい。
問題はヘッダ部で、途中で改行されると読めないツールや逆に改行がないと読めないツールもあって、
どう解釈するかが微妙。
0075デフォルトの名無しさん
2007/08/30(木) 00:27:16しかし、depthを色調と言われてもぴんとこないなぁ。
0076デフォルトの名無しさん
2007/08/30(木) 01:47:49[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日
0077デフォルトの名無しさん
2007/08/30(木) 02:29:00[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] その他の制限:
よろしくお願いします<(_ _*)>
0078デフォルトの名無しさん
2007/08/30(木) 02:40:39http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4879.c
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4880.c
1と3だけきんもぉ〜☆なクソースでお届けしまつ
0079デフォルトの名無しさん
2007/08/30(木) 03:13:12#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;
}
0080デフォルトの名無しさん
2007/08/30(木) 03:25:38#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;
}
0081デフォルトの名無しさん
2007/08/30(木) 03:45:09#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';
}
0082デフォルトの名無しさん
2007/08/30(木) 04:32:39[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] その他の制限: 特にありません
よろしくお願いします
0083デフォルトの名無しさん
2007/08/30(木) 12:08:13[2] 問題文(含コード&リンク):
テーマ:文字列配列の操作
問題1:文字列を入力して偶数番目の要素と奇数番目の要素を別の配列に格納し、文字列として表示しなさい
実行画面
文字列入力==>ABC123def
偶数要素:AC2df
奇数要素:B13e
問題2:文字列と削除文字列を入力し文字列中から削除文字を排除しなさい
実行画面
文字列入力(m1)==>ABCDEFAABCDABC
削除文字==>A
結果文字列(m2):BCDEFBCDBC
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:ボーランド
[3.3] 言語: C
[4] 期限:
[5] その他の制限:
0084デフォルトの名無しさん
2007/08/30(木) 12:18:53[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] その他の制限:
0085デフォルトの名無しさん
2007/08/30(木) 12:27:030086デフォルトの名無しさん
2007/08/30(木) 12:27:56[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] その他の制限:
0087デフォルトの名無しさん
2007/08/30(木) 12:41:05仕様に忠実にするなら
P5 100 100 255
P5
#hoge hoge
100 100
255
どちらも読めなきゃだめだよなあ。
0088デフォルトの名無しさん
2007/08/30(木) 13:33:480089デフォルトの名無しさん
2007/08/30(木) 13:46:070090デフォルトの名無しさん
2007/08/30(木) 13:50:48該当スレなどはありませんか?
0091デフォルトの名無しさん
2007/08/30(木) 14:01:050092デフォルトの名無しさん
2007/08/30(木) 14:12:40#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;
}
0093デフォルトの名無しさん
2007/08/30(木) 14:20:22#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;
}
0094デフォルトの名無しさん
2007/08/30(木) 14:23:07#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;
}
0095デフォルトの名無しさん
2007/08/30(木) 14:24:32#include <stdio.h>
int main()
{
char moji[]="ABCD";
char *mp;
mp = moji;
while(*mp) putchar(*mp++);
return 0;
}
0096デフォルトの名無しさん
2007/08/30(木) 14:28:06#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;
}
0097デフォルトの名無しさん
2007/08/30(木) 14:28:180098デフォルトの名無しさん
2007/08/30(木) 14:32:18void 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;
}
0099デフォルトの名無しさん
2007/08/30(木) 14:59:04[2] 問題文(含コード&リンク):20〜100までのランダムな値を表示
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:BorlandC++
[3.3] 言語:C++
010076
2007/08/30(木) 14:59:28http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4884.c
あと>>33の2もお願いできませんか?
0101デフォルトの名無しさん
2007/08/30(木) 15:14:23[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日
0102デフォルトの名無しさん
2007/08/30(木) 15:22:46あとから、これ参照してとか言うなカス
作った関数意味ねーだろうが
あと>>33の2も答え出てるだろうが
010382
2007/08/30(木) 15:23:500104デフォルトの名無しさん
2007/08/30(木) 15:26:58[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] その他の制限:制限はありません。
よろしくおねがいします。
0105デフォルトの名無しさん
2007/08/30(木) 15:30:08#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(time(NULL));
printf("%d", rand()%81 + 20);
return 0;
}
0106デフォルトの名無しさん
2007/08/30(木) 15:45:54[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まで表示させたいのです。
0107デフォルトの名無しさん
2007/08/30(木) 15:56:27int 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');
}
}
0108デフォルトの名無しさん
2007/08/30(木) 15:59:20int 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);
}
0109デフォルトの名無しさん
2007/08/30(木) 16:05:473番めこんなのでどうでしょう?
/*
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;
}
0110デフォルトの名無しさん
2007/08/30(木) 16:12:55[2] 1~25までの数字をランダムで25個表示させる。その際同じ値がでないようにする。
[3.1] WinXP
[3.2] Borland
[3.3] C++
よろしくお願いします
0111デフォルトの名無しさん
2007/08/30(木) 16:24:11http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4887.txt
0112デフォルトの名無しさん
2007/08/30(木) 16:24:20#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;
}
0113デフォルトの名無しさん
2007/08/30(木) 16:47:21#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;
}
0114デフォルトの名無しさん
2007/08/30(木) 17:06:12#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;
}
0116111
2007/08/30(木) 17:48:33「どういたしまして」
0117デフォルトの名無しさん
2007/08/30(木) 20:08:54回答をしてもらったわけではない部外者だが、他の回答者として
自分よりお早く回答してくれてありがとうございました!
おかげで自分が回答せずに済みました!
0118デフォルトの名無しさん
2007/08/30(木) 20:19:47このスレでGNUスタイルのコードは初めて見た気がする
0119デフォルトの名無しさん
2007/08/30(木) 20:48:25int main() で良いんだよ。CはISO準拠だとint main(void)ってなるが
0120デフォルトの名無しさん
2007/08/30(木) 23:05:03#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;
}
0121デフォルトの名無しさん
2007/08/30(木) 23:12:07>>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;
}
0122デフォルトの名無しさん
2007/08/30(木) 23:29:58ありがとうございます。
1,2の方もお願いできませんか
0123デフォルトの名無しさん
2007/08/30(木) 23:54:221はyの範囲に制限を付けないと難しいのではないかな。
例えば1900年以降でよいとか、前提はないの?
0125デフォルトの名無しさん
2007/08/31(金) 00:24:33問題を確認しましたが101で書いたことしか載ってませんでした。
0126デフォルトの名無しさん
2007/08/31(金) 00:56:07void 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:
}
でソースをかいてくれませんか
0127デフォルトの名無しさん
2007/08/31(金) 01:10:34日本語でOk
0128デフォルトの名無しさん
2007/08/31(金) 02:01:56日付チェックはしてない。グレゴリオ暦が使われた年以降。
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));
}
0129デフォルトの名無しさん
2007/08/31(金) 07:51:47#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;
}
0130デフォルトの名無しさん
2007/08/31(金) 09:41:06#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;
}
0131デフォルトの名無しさん
2007/08/31(金) 11:01:58#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;
}
0132デフォルトの名無しさん
2007/08/31(金) 11:46:32[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
0133デフォルトの名無しさん
2007/08/31(金) 12:02:54arr_cycle(data,n);
0134デフォルトの名無しさん
2007/08/31(金) 12:39:47ありがとうございます。
0135デフォルトの名無しさん
2007/08/31(金) 12:48:51[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と表示される感じです
0136デフォルトの名無しさん
2007/08/31(金) 12:52:11http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4888.txt
和がうまく求めたいのですが、どうすればいいのでしょうか?
0137デフォルトの名無しさん
2007/08/31(金) 13:00:10> int iary[] ={0};
これだとそもそも一個しか入力できないわけだが。
入力ロジックは兎も角、積算ロジックはぱっと見良さそうだよ。
0138デフォルトの名無しさん
2007/08/31(金) 13:30:570139136
2007/08/31(金) 14:29:340140デフォルトの名無しさん
2007/08/31(金) 14:46:34ってやればいいんじゃない?
0141デフォルトの名無しさん
2007/08/31(金) 14:55:260142136
2007/08/31(金) 15:04:550143デフォルトの名無しさん
2007/08/31(金) 15:23:51を見て、「あれ、どっかで俺、こんな関数名の入ったソースを張ったぞ」
と思って見返したら>>81で>>33に向けて張ったソースの一部じゃねぇか
どおりで<ctype.h>が意味無くincludeされてるわ。
ファイルそのものUpしてあげる
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4889.txt
それで、いったい何をしたいのか、事細かく質問しなよ
何が分からないのかがわからないの?まぁ、良いや。
ついでに>>33よ、まるで自分が書いたようにソースファイルをupしちゃだめだよ
0145デフォルトの名無しさん
2007/08/31(金) 15:36:13もう我慢ならねえ!!!!
コマンドラインから受け取るようにしろよ、この穀つぶしが!!!!!!!
0146143
2007/08/31(金) 16:06:110147デフォルトの名無しさん
2007/08/31(金) 16:30:450148デフォルトの名無しさん
2007/08/31(金) 16:48:300149デフォルトの名無しさん
2007/08/31(金) 17:41:01こうなんじゃないか?
0150デフォルトの名無しさん
2007/08/31(金) 19:59:350151デフォルトの名無しさん
2007/09/01(土) 01:14:10#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;}
0152デフォルトの名無しさん
2007/09/01(土) 02:18:00int 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;}
0153デフォルトの名無しさん
2007/09/01(土) 15:53:36[2] 問題文(含コード&リンク):
C#でクラスを用いてシューティングゲームを作れ。
スタート・中断・再開ボタン機能を必ず入れ、敵味方と弾は全てオブジェクトとする
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:Windows visual studio2005
[3.3] 言語: C#
[4] 期限:9月4日
[5] その他の制限: なし
C#は駄目でしょうか。
C#のソース付きのゲームとかがあればそれを参考にやれるんですが・・・
0154デフォルトの名無しさん
2007/09/01(土) 15:54:590155デフォルトの名無しさん
2007/09/01(土) 16:30:320156デフォルトの名無しさん
2007/09/01(土) 19:03:05夏休み中に何をしていたんだ
0157デフォルトの名無しさん
2007/09/01(土) 19:14:24ガンシューにしてみたら?
0158デフォルトの名無しさん
2007/09/01(土) 19:58:000159デフォルトの名無しさん
2007/09/01(土) 20:50:01[2] 問題文: 文字列に含まれるすべての文字を、1つ後のASC�Uコードをもつ文字に置き換えるプログラムを作成する。
例:Nurupo → Ovsvqp
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ: bcc
[3.3] 言語: C
[4] 期限: 9月4日
[5] その他の制限: 特にありません。 よろしくお願いします。
0160デフォルトの名無しさん
2007/09/01(土) 21:07:52#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;
}
0161デフォルトの名無しさん
2007/09/01(土) 21:08:520162デフォルトの名無しさん
2007/09/01(土) 21:16:12適当に置き換えておいてくれ
0163デフォルトの名無しさん
2007/09/01(土) 22:39:030164デフォルトの名無しさん
2007/09/01(土) 22:45:540165デフォルトの名無しさん
2007/09/01(土) 22:56:37[2] 問題文: 長方形の縦と横の長さ(double型)を引数として受け取り、その長方形の面積(double型)を
返す関数Xを作り、mainから呼び出して動作を確認するプログラムの作成
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Windows visual studio2005
[3.3] 言語: C
[4] 期限: 9月3日 21時
[5] その他の制限: なし
0166デフォルトの名無しさん
2007/09/01(土) 23:02:06double X(double width, double hight)
{
return width * hight;
}
int main(void)
{
printf("%g", X(10.0, 8.0));
return 0;
}
0167デフォルトの名無しさん
2007/09/01(土) 23:50:03テトリスでもいいんで教えてもらえないでしょうか。要領さえ分かれば何とかなるんで
>>156
全然違う事の勉強です。
0168デフォルトの名無しさん
2007/09/02(日) 00:11:21これって1文字目が\0だとPC爆発しないか?
0169デフォルトの名無しさん
2007/09/02(日) 00:21:510170デフォルトの名無しさん
2007/09/02(日) 05:25:19http://school.topposystem.co.jp/SampleCode/PictureList.asp
のフリーサンプル集のどっかにあったよ。
っていうか、俺もサンプルとして見たかったからダウンしたので
それをupしますね
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4891.zip
0171デフォルトの名無しさん
2007/09/02(日) 20:09:48お早い回答ありがとうございます!!
おかげで助かりました!
>>162
どこを置き換えればいいかもおしえていただけると助かるのですが
おしえていただけないでしょうか?
0172デフォルトの名無しさん
2007/09/02(日) 20:53:33void 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;
}
017336
2007/09/02(日) 22:49:56遅くなりましたが,答えてくださった方ありがとうございます.
無事に課題提出を行うことができました.
実は>>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] その他の制限:計算速度が速い方が好ましい.
0174デフォルトの名無しさん
2007/09/02(日) 22:55:35最近傍の評価はどうするの?
円と点 n の距離を Dn と置く時
Σ(Dn)
Σ((Dn)^2)
とかそういうのが無いと解けないっぽ
017536
2007/09/02(日) 23:28:37評価関数は各自で任意に設定すると言われているのですが….
今回は
Σ(Dn^2)
の最小二乗法でお願いします.
0176デフォルトの名無しさん
2007/09/03(月) 00:47:20[2] 問題文: 整数aと自然数nを入力してaのn乗を求める。入力は正しく行われるものとする。
[3] 環境
[3.1] OS:Win
[3.2] コンパイラ:Win visual studio2005
[3.3] 言語: C
[4] 期限: 9月5日
[5] その他の制限: --nを使うところまではわかるのですが、どうも上手くできません。
お力を貸していただけると助かります。
0177デフォルトの名無しさん
2007/09/03(月) 01:04:59long int buf=a;
while(n!=0){
buf *=a;
n--;
}
return buf;
}
ただし少しnを大きくしただけでオーバーフローする
0178デフォルトの名無しさん
2007/09/03(月) 07:13:30[2] 問題文:掛け算の九九の表をファイルprod99.txtに書き込むプログラムを作成する。
[3.1] OS:Windows
[3.2] コンパイラ:Windows visual studio2005
[3.3] 言語: C
[4] 期限: 9月5日 12時
[5] その他の制限: 特にありません
0179デフォルトの名無しさん
2007/09/03(月) 08:34:13[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] その他の制限:特になし
0180デフォルトの名無しさん
2007/09/03(月) 08:40:41付帯条件がよくわからんのだけど、つまり円の右上だけ(or 左上だけ)で
他の点に近い円を描けってことでよいのかね?
0181デフォルトの名無しさん
2007/09/03(月) 08:43:42#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);
}
0182デフォルトの名無しさん
2007/09/03(月) 08:45:10#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;
}
0183182
2007/09/03(月) 09:01:27→
if(({file=fopen("prod99.txt","w"))==NULL){
0184デフォルトの名無しさん
2007/09/03(月) 09:11:130185デフォルトの名無しさん
2007/09/03(月) 12:02:13[2] 問題文(含コード&リンク): 逆ポーランド記法に変換してから計算する四則演算の電卓プログラムを作れ
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:bcc
[3.3] 言語: c
[4] 期限: 2007年9月4日
よろしくおねがいします。
0186 ◆kRtmRcQ9ak
2007/09/03(月) 12:41:26[2] 問題文: 名前&身長&体重の入力&ファイルに記録&読み出し&BMI計算(BMI=体重kg/(身長m)^2)&身長順に並び替え
[3] 環境
[3.1] windows
[3.2] コンパイラ名とバージョン:C++Compiler5.5
[3.3] 言語: C
[4] 期限:2007 9/5まで
[5] その他の制限:無し。
よろしくお願いします。
0187デフォルトの名無しさん
2007/09/03(月) 13:35:05エラーチェックはしていない
二桁以上の数が入力される場合にも対応していない
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4893.c
0188billy
2007/09/03(月) 14:58:500189デフォルトの名無しさん
2007/09/03(月) 16:00:11スレ違い
0190デフォルトの名無しさん
2007/09/03(月) 16:19:38〔2〕問題(下記)
#include<stdio.h>
void main()
{
int ia;
printf("整数を入力してください:");
scanf("%d",&ia);
if(○○)
printf("偶数です");
else
printf(”奇数です”);
}
問
上記に示したのは、入力した整数が偶数か奇数かを判断するプログラムである。
if(○○)の○○を埋めよ。
〔3〕WinXP
9月4日〆
よろしくお願い致します。
0191デフォルトの名無しさん
2007/09/03(月) 16:23:52(ia+191)%2
0192デフォルトの名無しさん
2007/09/03(月) 16:35:44協力感謝です。
有難うございました!
0193デフォルトの名無しさん
2007/09/03(月) 17:47:42[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^)/
0194デフォルトの名無しさん
2007/09/03(月) 17:52:28〔int〕imin(int ia,int ib)
{
if(ia<ib)
〔return ia;〕
else
〔return ib;〕
}
0195デフォルトの名無しさん
2007/09/03(月) 17:54:22{
if(ia<ib)
〔; 〕
else
〔*/int imin(int ia,int ib){return ia<ib?ia:ib;〕
}
0196デフォルトの名無しさん
2007/09/03(月) 17:55:12馬鹿?これよんどけ。
ttp://www5c.biglobe.ne.jp/~ecb/c/07_01.html
ttp://www5c.biglobe.ne.jp/~ecb/c/07_01_02.html
ttp://www5c.biglobe.ne.jp/~ecb/c/07_01_03.html
int
return ia;
return ib;
0197デフォルトの名無しさん
2007/09/03(月) 17:55:220198デフォルトの名無しさん
2007/09/03(月) 17:56:07この発想はなかったわ
0199デフォルトの名無しさん
2007/09/03(月) 20:52:39[2] 問題:
問題の概要はhttp://www.uploda.org/uporg1000429.txtにかきました。
問題は、入力データを正規分布のデータで評価し確率をもとめてほしいのです。
長くなりましたがお願いします。
計算がめんどうだったらlogで出してくれてもいいです。
[3] 環境
[3.1] OS:LINUX
[3.3] 言語:C
[4] 期限: いつでもいいです。
020036
2007/09/03(月) 21:35:18そうです,右上または左上となる円を描くイメージです.
もしお時間ありましたらよろしくお願いします.
0201デフォルトの名無しさん
2007/09/03(月) 21:49:05「正規分布のデータで『評価』」ってなに?
アップローダにあるほうもグダグダかかれてて
結局問題でやるべきことがよくわからないんだが。
0202デフォルトの名無しさん
2007/09/03(月) 22:01:08(横軸が数値で、縦軸が度数(ここでは確率))において
入力データと数値を見比べて一致したところの確率を出すことを評価するっていうんです。
1つのデータが9次元なんです。
9次元の入力データから9次元の平均をひいたものを2乗して
9次元の分散でわる。そうすると9個の値がでますからそれをたせばexpの中身になって
expの前にある変数とexpをかけると確率が出せるわけです。
それがfです。
すいませんfの式がここでかけなくて。
0203デフォルトの名無しさん
2007/09/03(月) 22:07:30平均分散が与えられた多次元正規分布の式に、与えられた
20個のデータを突っ込んだときの値を出せと言っている?
『評価』は estimate じゃなくて evaluate だということ?
0204デフォルトの名無しさん
2007/09/03(月) 22:12:000205デフォルトの名無しさん
2007/09/03(月) 22:19:08他のアルゴリズムに用いないといけないから困る。
0206デフォルトの名無しさん
2007/09/03(月) 22:32:06http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4894.c
205 のいうとおり、値があまりに小さくなったがこれでいいのかね。
0207デフォルトの名無しさん
2007/09/03(月) 22:35:07logで表示してくれるとありがたいです。
検算させていただきます。
0208デフォルトの名無しさん
2007/09/03(月) 22:37:44http://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
0209デフォルトの名無しさん
2007/09/03(月) 22:50:46目的関数の性質が悪そうなんだけど、単純な降下法でうまくいくの?
0211デフォルトの名無しさん
2007/09/04(火) 07:45:43min. Σ| (x-x_i)^2 + (y-y_i)^2 - r^2 |
s.t. x ≧ 0, y ≧ 0, r ≧ 0
を解く、という問題に落ちるんだけど、この目的関数は
凸でないし、滑らかでもないので非常に面倒な問題になるはず。
ただ、関数が綺麗だから逐次二次緩和くらいで十分解けそう。
とても実装する気にはならないけど。
0212デフォルトの名無しさん
2007/09/04(火) 15:02:44[2] 問題文(含コード&リンク): トランプをランダムで表示させる
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:Borland
[3.3] 言語:C++
表示が○○(マーク)の○(数字)と表示させたいのです
0213デフォルトの名無しさん
2007/09/04(火) 15:58:55#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;
}
0214デフォルトの名無しさん
2007/09/04(火) 21:20:09[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がおかしいのだと思うのですが、いろいろ変えてみても上手くいきません
おかしい箇所の指摘や改善方法のご教授をお願いします
0215デフォルトの名無しさん
2007/09/04(火) 21:25:300216デフォルトの名無しさん
2007/09/04(火) 21:26:26[2] 問題文:文字列を入力し、その文字列を縦に並べて表示するプログラムの作成。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名:Windows visual studio2005
[3.3] 言語: C
[4] 期限: 9月5日 21時
[5] その他の制限: ないです。
よろしくお願いします。
0217デフォルトの名無しさん
2007/09/04(火) 21:29:45#include <stdio.h>
int main(void)
{
char buf[512], *p = buf;
scanf("%s", buf);
while(*p)
{
printf("%c\n", *p);
p++;
}
return 0;
}
0218デフォルトの名無しさん
2007/09/04(火) 21:37:522バイト文字対応は不要?
0219デフォルトの名無しさん
2007/09/04(火) 21:50:150220214
2007/09/04(火) 22:13:01スレ汚しすみませんでした。
0221デフォルトの名無しさん
2007/09/04(火) 23:04:34問題文(含コード&リンク):
テーマ:文字配列の操作
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
期限:
0222デフォルトの名無しさん
2007/09/04(火) 23:06:43問題文(含コード&リンク):
テーマ:文字配列の操作
問題2:文字列と検索文字、置換文字を入力し文字列中の検索文字を置換文字に置き換え
なさい
実行画面
文字列(m1)入力==>ABCDEFAABCDABC
削除文字==>A
置換文字==>*
結果文字列(m1):*BCDEF**BCD*BC
環境:
OS:WindowsXP
コンパイラ名とバージョン:ボーランド
言語:C
期限:
0223デフォルトの名無しさん
2007/09/04(火) 23:20:30#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;
}
0224デフォルトの名無しさん
2007/09/04(火) 23:24:39#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;
}
0225デフォルトの名無しさん
2007/09/05(水) 00:32:04[2] 問題文: 文字(char型)を引数として受け取り、その文字が英小文字ならば大文字に、英大文字なら小文字に変換して返す関数toulを作り、
mainから呼び出して動作を確認するプログラムの作成する。ただし、引数はスペース、英字、数字のみとし、スペースや字数はそのまま変更しない。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Windows visual studio2005
[3.3] 言語: C
[4] 期限: 9月6日 22時
[5] その他の制限: なし
0226デフォルトの名無しさん
2007/09/05(水) 00:46:54mainは省略
動作確認も省略
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;
}
0227デフォルトの名無しさん
2007/09/05(水) 00:50:15#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;
}
0228デフォルトの名無しさん
2007/09/05(水) 01:24:23問題文(含コード&リンク):
文字列と削除文字列を入力し文字列中から削除文字を排除しなさい
実行画面
文字配列入力(m1)==>ABCDEFAABCDABC
排除文字==>A
結果文字列(m2):BCDEFBCDBC
環境:
OS:WindowsXP
コンパイラ名とバージョン:ボーランド
言語:C
期限:
0229デフォルトの名無しさん
2007/09/05(水) 02:51:26#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;
}
0230デフォルトの名無しさん
2007/09/05(水) 07:31:01問題文(含コード&リンク):
問題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
期限:
0231デフォルトの名無しさん
2007/09/05(水) 08:02:320232デフォルトの名無しさん
2007/09/05(水) 08:06:40入力の改行文字を取り除いていない。
0233デフォルトの名無しさん
2007/09/05(水) 08:18:570234デフォルトの名無しさん
2007/09/05(水) 08:42:130235デフォルトの名無しさん
2007/09/05(水) 08:47:47いや、バカは知ったかのお前。何が問題かが分かってないな。
MAXで指定した以上の文字列を入力した場合の問題だよ、アホ。
失せろ、初心者。なんか、去年このスレで世話になったのか知らんが
今年はおかしな知ったか無知初心者が回答者に紛れ込んで大嘘ついて恥さらしをしているよな・・・
失せろガキ
0236自信過剰のアホの極み発言
2007/09/05(水) 08:48:41>>231
入力の改行文字を取り除いていない。
入力の改行文字を取り除いていない。
入力の改行文字を取り除いていない。
入力の改行文字を取り除いていない。
入力の改行文字を取り除いていない。
0237デフォルトの名無しさん
2007/09/05(水) 08:49:57うわっ、なんだお前ら、きめぇ。何様?アホ丸出しw
0238デフォルトの名無しさん
2007/09/05(水) 08:51:53お前笑えるw
0239デフォルトの名無しさん
2007/09/05(水) 08:57:29おいっリアル馬鹿、何か言えよ?知ったか君よぉ(プッ
0240デフォルトの名無しさん
2007/09/05(水) 09:10:01調子ぶっこいて恥さらしをするくらいなら >>230 にでも答えてやれよ、知ったか初心者w
0241デフォルトの名無しさん
2007/09/05(水) 11:11:56問題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;
}
0242デフォルトの名無しさん
2007/09/05(水) 12:28:42問題文(含コード&リンク):
問題:ポインタで操作しなさい
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
期限:
0243デフォルトの名無しさん
2007/09/05(水) 12:47:08// 実験してないからバグるかも
#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;
}
0244デフォルトの名無しさん
2007/09/05(水) 14:34:14[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] その他の制限: 関数、ポインタ、構造体を用いる
0245デフォルトの名無しさん
2007/09/05(水) 15:57:55問題が読めない
『bcvrf.yahoo.com というサーバが見つかりませんでした。』だって…
問題文がテキストなら>>1のろだに上げてよ
0246デフォルトの名無しさん
2007/09/05(水) 16:25:01[2] 問題文(含コード&リンク): トランプをランダムで表示させる
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:Borland
[3.3] 言語:C++
212の発展で今度は5枚表示させたいのです。
ハート6ダイアAクラブ4スペード5クラブ4 みたいな感じです
0247デフォルトの名無しさん
2007/09/05(水) 16:40:180248デフォルトの名無しさん
2007/09/05(水) 17:05:330249デフォルトの名無しさん
2007/09/05(水) 18:22:410250デフォルトの名無しさん
2007/09/05(水) 18:25:08Cだけど。
#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;
}
0251デフォルトの名無しさん
2007/09/05(水) 20:20:36[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・・・
見にくくてすいません、宜しくお願いします
0252251
2007/09/05(水) 20:21:39お疲れ様でした、終了します。
の一文でプログラムを終了させるようにしたいです。
長くなりましたがお願いします。
0253デフォルトの名無しさん
2007/09/05(水) 21:59:40[2] 問題文: 0とは異なる二つの実数(double型)を入力し、それらの和差積商を求めるプログラム
[3] 環境
[3.1] OS:Win
[3.2] コンパイラ:Win visual studio2005
[3.3] 言語: C
[4] 期限: 9月7日
[5] その他の制限: なし
0254デフォルトの名無しさん
2007/09/05(水) 22:02:22236 名前:自信過剰のアホの極み発言[] 投稿日: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回連続書き込みで規制が入ったのか。
0255デフォルトの名無しさん
2007/09/05(水) 22:04:08回数を数えると、6回のようだが・・・
0256デフォルトの名無しさん
2007/09/05(水) 22:05:04238 名前:デフォルトの名無しさん[sage] 投稿日:2007/09/05(水) 08:51:53
239 名前:デフォルトの名無しさん[sage] 投稿日:2007/09/05(水) 08:57:29
0257デフォルトの名無しさん
2007/09/05(水) 22:18:41その5回目も規制後かも知らんが。
0258244
2007/09/06(木) 00:26:11[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] その他の制限: 関数、ポインタ、構造体を用いる
0259たなか
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] その他の制限: ないです。
0260デフォルトの名無しさん
2007/09/06(木) 07:17:48問題文(含コード&リンク):
テーマ:標準関数の利用
文字列と検索文字列を入力し、文字列中の検索文字の検索文字列と一致する位置を表示しなさい
使用する標準関数:strncmp(),strlen()
実行画面
文字列入力==>ABCDEABCAABCDEFABC
検索文字列入力==>ABC
一致場所:0
一致場所:5
一致場所:9
一致場所:15
OS:WindowsXP
コンパイラ名とバージョン:ボーランド
言語:C
期限:
問題:
0261デフォルトの名無しさん
2007/09/06(木) 07:28:07strstr()使っちゃいけないの?
0262デフォルトの名無しさん
2007/09/06(木) 09:18:040263デフォルトの名無しさん
2007/09/06(木) 09:20:200264デフォルトの名無しさん
2007/09/06(木) 09:22:37ちょ〜〜〜っと入力受付のところできんもぉ〜☆なソースかもしれんがw
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4901.c
0265デフォルトの名無しさん
2007/09/06(木) 09:29:030266デフォルトの名無しさん
2007/09/06(木) 09:29:50上の方にある↓の部分を消しておいて
> printf("%d / %d \n",str_sz,search_sz);
0267デフォルトの名無しさん
2007/09/06(木) 09:32:28お前みたいな理解力のない奴に意味を説明しても分からんだろうけど
今年になってからよく知らない初心者が要らぬ発言をしているみたいでうざいんだが?
黙ってろよ、分からないなら。お前みたいな固有の環境でしかプログラムを作らない奴には
一生分からない。
配列の要素の数をMAXで指定しているだけであって、実際のところはMAXでなくても
指定が可能だろ。そのときにも対処できるようにしてあるんだよ。
まぁ、そういうときはMAXを変えれば良いんだが、それでも 理屈 からして
配列の要素の数をああいう形で導くのが適切。大学くらい出ろよ、低学歴
0268デフォルトの名無しさん
2007/09/06(木) 09:34:26char str[MAX]="\0",search[MAX]="\0",ch;
ここのMAXの部分をMAX以外で指定した場合に対処できるだろ?
そうする必要があるのかって言う必要性については一個人の主観でしかないから
理屈からして筋が通るんであればそれに対して要らぬ指摘をするなよ、バカ初心者
0269昨日もいたクソガキ
2007/09/06(木) 09:35:27>>231
入力の改行文字を取り除いていない。
234 名前:デフォルトの名無しさん 投稿日:2007/09/05(水) 08:42:13
何この馬鹿。
265 名前:デフォルトの名無しさん 投稿日:2007/09/06(木) 09:29:03
配列のサイズをMAXで定義してるのに、sizeof使ってsize_tで求める意味がわからん。
0270デフォルトの名無しさん
2007/09/06(木) 09:36:40あっ、俺は上の人とは別の人だから、同じ人が連続投稿していると思わないでねw
0271デフォルトの名無しさん
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じゃないけど。
0272デフォルトの名無しさん
2007/09/06(木) 09:55:54MAXと同じ数値を無駄な計算で出すんじゃなくて、文字列の長さを入れて条件判定部や引数に
strlen()使わないようにするとかさ。
0273デフォルトの名無しさん
2007/09/06(木) 09:58:16って問題の趣旨を理解する頭もないアホ
0274デフォルトの名無しさん
2007/09/06(木) 10:07:45大学いける見込みもない引きこもりには理解できなかったかなw
0275デフォルトの名無しさん
2007/09/06(木) 10:22:10ここまで悪意の塊なのはみたことがない
0276デフォルトの名無しさん
2007/09/06(木) 10:23:34問題文(含コード&リンク):
テーマ:ユーザー関数の作成
問題: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
期限:
0277デフォルトの名無しさん
2007/09/06(木) 10:46:15なんというか、命名もキモいし、動作説明もキモいな…
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);
}
0278デフォルトの名無しさん
2007/09/06(木) 10:53:23なんか前に解いた気がするぞwww
0279デフォルトの名無しさん
2007/09/06(木) 12:12:56問題文(含コード&リンク):
問題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
期限:
0280デフォルトの名無しさん
2007/09/06(木) 12:25:46問題文(含コード&リンク): 配列データの平均を求めるユーザ関数を作成しなさい
プロトタイプ宣言: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
0281デフォルトの名無しさん
2007/09/06(木) 13:50:570282デフォルトの名無しさん
2007/09/06(木) 15:23:21[2] 問題文(含コード&リンク):
ウィンドウに、
・「正解は?」と表示したラベル、
・入力用のテキストボックス、
・回答用のボタン、
・「正解」or「残念」と表示するラベル
を作成する。
ある文字列が入力されて一致した場合は「正解」と表示する。
なお、正解の文字列や各種コントロールの配置は任意とする
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:
[3.3] 言語: c++
[4] 期限: 2007年9月7日
ウィンドウズプログラムのGUIがよくわかりません。
よろしくお願いします。
0283デフォルトの名無しさん
2007/09/06(木) 19:11:480284デフォルトの名無しさん
2007/09/06(木) 19:38:19比較的エスパーレベルが低くても対応は出来そうだけどな。
0285デフォルトの名無しさん
2007/09/06(木) 19:40:21配列が最大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 );
}
0286デフォルトの名無しさん
2007/09/06(木) 19:59:28> 無意味で無駄な計算乙
すでに理屈と説明がされているのだが、それについて理解できないお前が
勝手に無意味とか無駄にしているだけ、だから知ったか初心者は口を出さずに
間違っていないことに対して口を出すなって言ってんだよ。
お前みたいな浅はかな考えの未熟者はいつまでたってもまともなソースの記述は出来ない。
下手に手間を惜しむ奴は、横着がバグの横行の原因となる
とにかくお前みたいな低学歴は黙ってろ、うぜぇ
お前の場合主観ばかりで何の説明にもなってないだろ。
0287相当な思い込み勘違いのアホ
2007/09/06(木) 20:02:52最近size_t覚えて嬉しくってはしゃいでるのはわかるけど、もうちょっと使いどころ考えろよw
↑最近ってなんだよ?もうかなり前から知っているしどこをどう見たら
うれしくてはしゃいでいるように見える????気持ち悪い。これもお前の思い込みか
お前がキャッキャ言いながらはしゃいでsize_tを使ってんだろw
MAXと同じ数値を無駄な計算で出すんじゃなくて、文字列の長さを入れて条件判定部や引数に
↑説明したことを理解していない証拠
strlen()使わないようにするとかさ。
↑>>260の問題読めてますか?w
> 使用する標準関数:strncmp(),strlen()
0288デフォルトの名無しさん
2007/09/06(木) 20:05:06これはバカだな。文字列の長さの条件って、まだ入力されていない
文字列の長さなんて算出できねーよ。そもそも文字列の長さじゃなくて
size_tには配列の要素数の算出がされているんだが?
文字の終端を意味するNULL文字を入れた文字列の長さだったら
文字列を格納した配列の要素数じゃなくてstrlenを使うだろw
初心者は黙ってなさい。
0289デフォルトの名無しさん
2007/09/06(木) 20:17:12場合のトラブルは、そう過去ではないすぐ上に問題として出ているはず。
だから入力された文字列の最後までgetchar()で読み込み、その中で文字列を入れるのに
指定した配列に格納できる範囲内で入力を受け付けている仕組みが理解できなかったか。
だからわざわざ きんもぉ〜☆ なソースだといっておいたのにw
その辺の問題解決が出来ているなら示してくれんかね?
俺、専門でプログラミングやってないんでw
とにかく、目的の処理が果たせている以上、つまらぬ言いがかりをせずに
お前がソースを書いて、物申す自分でも出来るぞって証拠を示せ。
まぁ口出しするだけで、あの関数は使っちゃダメなのか?とか実装すりゃ良いとか
口先だけで終わって実際にソースが書けないようじゃ話にならないけどなw
あとな、この世には多種様々な考えの人間がいるんだよ。自分と意見が合わない奴なんて
この世にどんだけいると思ってんだ?しかし、それはおまえ自身の理解力がないが故に
不適切なものを信じてしまい、適切なものを無視してしまうんだよ。
幸い、俺は聞く耳は持っているんで、あしからず。
さぁ、あんたのソースを示せ!論より証拠って言うだろ?
0290デフォルトの名無しさん
2007/09/06(木) 20:37:020291デフォルトの名無しさん
2007/09/06(木) 20:50:420292デフォルトの名無しさん
2007/09/06(木) 21:07:25> if( !strncmp(&str[i],search,strlen(search)) )
> printf("一致場所:%d\n",i);
> }
何回strlen()呼び出しゃ気が済むんだよw
>条件判定部や引数に strlen()使わないようにするとかさ
ってのは、この無駄なstrlenの呼び出しをやめろってことだろ。
0293デフォルトの名無しさん
2007/09/06(木) 21:54:330294デフォルトの名無しさん
2007/09/06(木) 21:57:160295デフォルトの名無しさん
2007/09/06(木) 22:02:470296デフォルトの名無しさん
2007/09/06(木) 22:08:44聞き方次第では回答にケチ付けやがったと思われてウザイ目にあうのでそのへんを考慮しておいた方がいいかも
それとここが宿題スレってことも念頭において
0297デフォルトの名無しさん
2007/09/06(木) 22:16:580298デフォルトの名無しさん
2007/09/06(木) 22:34:06[2] 問題文: 0とは異なる二つの実数(double型)を入力し、それらの和差積商を求めるプログラム
[3] 環境
[3.1] OS:Win
[3.2] コンパイラ:Win visual studio2005
[3.3] 言語: C
[4] 期限: 9月7日
[5] その他の制限: どうしてもわかんないんですけど、教えてもらえませんか?
0299デフォルトの名無しさん
2007/09/06(木) 22:35:29何も勉強しようとすらしないからわからないんだよ
0300デフォルトの名無しさん
2007/09/06(木) 22:36:53#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;
}
0301デフォルトの名無しさん
2007/09/07(金) 01:11:28質問なら良いかもしれんが、どこぞの知ったか無知初心者みたいに
なんでそうするんだよ?だのなんで自分が思う通りにしなかったの?
みたいな言いがかりをつけると、下手すりゃ自分の理解力のなさを露呈して
逆に答えてもらえない可能性あり。とりあえず最近、知ったかの詰まらんちゃちを入れる
上級者ぶっている初心者が一匹いるみたいで・・・
0303デフォルトの名無しさん
2007/09/07(金) 07:26:05条件逆
0304デフォルトの名無しさん
2007/09/07(金) 09:26:27http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4902.txt
0305304
2007/09/07(金) 09:28:130306デフォルトの名無しさん
2007/09/07(金) 17:54:52[2] 問題文:グラフを作成するプログラムを作成せよ。
例えば、プログラムを実行すると、0〜10分間時間が計測され
その間に、使用者が↑キーを押すと1、↓キーなら2、→キーなら3、
←キーなら4という数値が入力される。
10分経過後、横軸は時間(秒)、縦軸は使用者が入力した数値
の棒グラフを出力するというようなプログラムです。
お願いします!!
[3] 環境
[3.1] OS:Win
[3.2] コンパイラ:Win visual studio2003
[3.3] 言語: C
[4] 期限: できるだけ早めでお願いします。
0307デフォルトの名無しさん
2007/09/07(金) 21:15:57ないない、エロゲヲタなんてこのスレにはほとんどおらんやろw
まぁ俺ならサイドポケットだが
0308デフォルトの名無しさん
2007/09/08(土) 01:29:45コンソールベース?
ウインドウベース?
マルチスレッド?
ポーリング?
0309デフォルトの名無しさん
2007/09/08(土) 02:45:39↑を押したら1
↓を押したら2
・・・は理解できた.
↑を1秒押した”後に”↓を2秒押したらどうなる?
↑を1秒押した”後に”↓を2秒押した後に→を3秒押したらどうなる?
↑を1秒押した”後に”↓を2秒押した後に→を3秒押した後に・・・ならどうなる?
あと,「できるだけ早め」って言うけど,コレって無期限ってことだから.
0310デフォルトの名無しさん
2007/09/08(土) 03:21:200311デフォルトの名無しさん
2007/09/08(土) 04:06:01C言語で定められた標準関数の範囲では無理
kbhit とか ReadConsoleInput とかでできるけどね
0312デフォルトの名無しさん
2007/09/08(土) 08:09:54そうそう、日本語だけではあんたの文章を理解できないのと似たようなもんだ。
0313デフォルトの名無しさん
2007/09/08(土) 08:40:110314306
2007/09/08(土) 10:01:20そのあたりの指定はないのでやりやすい方でお願いします。
>>309
↑を1秒押しつづけたら、1の数値が1秒間入力されつづけ
そのあとに、すぐ↓を2秒押した場合は2の数値を2秒間入力し続ける。
キーをおしつづけた時間だけその数値を入力しつづけるといった形です。
質問の答えになってますか??勘違いしてたらごめんなさい・・
あと期限ですが、来週中でお願います!!
0315デフォルトの名無しさん
2007/09/08(土) 12:06:58よーく読み返してみろ・・・
> ↑を1秒押しつづけたら、1の数値が1秒間入力されつづけ
> そのあとに、すぐ↓を2秒押した場合は2の数値を2秒間入力し続ける
何の説明にもなってないぞ
0316デフォルトの名無しさん
2007/09/08(土) 13:19:25押した時から離した時の時間を積算すればいいんじゃないの?
というか、グラフを作成するプログラムならなんでもいいのか、例えば〜のプログラムを作るのか、どっちなの?
0317デフォルトの名無しさん
2007/09/08(土) 14:07:560318デフォルトの名無しさん
2007/09/08(土) 14:22:55[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] その他の制限: 特に無し
宜しくお願いします。
0319デフォルトの名無しさん
2007/09/08(土) 15:15:56すまんが俺の悪い頭ではその問題文は理解できん。
0320デフォルトの名無しさん
2007/09/08(土) 16:01:16例えばですね、
itemの5項目目はp[5]=43,w[5]=18になります。
でp[5]/w[5]=43/18となります。
このような値を大きい順に並べ替えるようなプログラムを作る問題です。
説明が足らずすいませんでした。
0321デフォルトの名無しさん
2007/09/08(土) 16:05:210322デフォルトの名無しさん
2007/09/08(土) 16:13:07p[i]/w[i]入れる配列作って放り込めばいいんじゃないか
0323デフォルトの名無しさん
2007/09/08(土) 16:19:290324デフォルトの名無しさん
2007/09/08(土) 16:22:560325デフォルトの名無しさん
2007/09/08(土) 16:45:06[2] 問題文(含コード&リンク):
課題9
ファイルun.txtから文字を読み込み、大文字と小文字を区別しないでアルファベット
26文字の出現頻度をカウントし度数分布表を作るプログラムを作れ。
un.txtは大文字と小文字のアルファベットが縦に26文字書いてある自分で作った
ファイル。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C++
できれば、早めにお願いします.....
0326デフォルトの名無しさん
2007/09/08(土) 17:00:42表示するのはアイテムだけ。
#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;
}
0327デフォルトの名無しさん
2007/09/08(土) 17:02:56Cか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;
}
0328デフォルトの名無しさん
2007/09/08(土) 17:04:18[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++
お願いします。。
0329デフォルトの名無しさん
2007/09/08(土) 17:14:190330デフォルトの名無しさん
2007/09/08(土) 17:15:53本当に助かりました。ありがとうございます。
0331デフォルトの名無しさん
2007/09/08(土) 17:16:55#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;
}
0332デフォルトの名無しさん
2007/09/08(土) 17:17:520333デフォルトの名無しさん
2007/09/08(土) 17:18:55本当に感謝してます、単位取れます 本当にありがとうございます!
0334デフォルトの名無しさん
2007/09/08(土) 17:22:26gccでコンパルするのに、なぜC++なんだ?
0335デフォルトの名無しさん
2007/09/08(土) 17:26:54何度も申し訳ありません。。。。
Cでやると、どうなります。。。??
0336デフォルトの名無しさん
2007/09/08(土) 17:29:51#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;
}
0337デフォルトの名無しさん
2007/09/08(土) 17:36:44本当に何度もすみません。
感謝の気持ちでいっぱいです。
本当にありがとうございます。プログラミングは本当に苦手です。。
0338デフォルトの名無しさん
2007/09/08(土) 19:10:37有難うございます!!
0339デフォルトの名無しさん
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);
}
0340339
2007/09/08(土) 22:16:47input number : 3
input number : 2
input operater : such an operater does not exist !input number :
0341339
2007/09/08(土) 22:17:340342デフォルトの名無しさん
2007/09/08(土) 22:46:39scanf("%c",&operater);
↓
scanf("%*[ \t\n]");
scanf("%c",&operater);
0343デフォルトの名無しさん
2007/09/08(土) 22:53:20rewind(stdin);
を
scanf("%c",&operator);
の前に追加
変数名にoperatorは…
0344デフォルトの名無しさん
2007/09/08(土) 22:55:41>operater
に突っ込んではいけないのか
0345339
2007/09/08(土) 23:02:54どの方法をやっても結果が同じなのですが・・・
0346デフォルトの名無しさん
2007/09/08(土) 23:05:05コンパイラの名称は?
0347デフォルトの名無しさん
2007/09/08(土) 23:07:15コンパイルし直せば?
0348339
2007/09/08(土) 23:46:370349デフォルトの名無しさん
2007/09/09(日) 11:21:02[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] その他の制限: 特になし
どうぞよろしくお願いします
0350デフォルトの名無しさん
2007/09/09(日) 11:52:06int 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;
}
0351349
2007/09/09(日) 12:10:480352306
2007/09/09(日) 15:50:45いろいろ考えた結果、↑が1、↓が2・・・というのは抜きにして
単純に、プログラムを実行したら0〜10分間時間を計測する。
その間に、使用者が↑キーを押した時、その押した時間とキーを離した時間を
最後に出力するというプログラムをつくっていただきたいです。どうかおねがいします!!
あと、いろいろめんどうなこといってすいません・・・
0353デフォルトの名無しさん
2007/09/09(日) 16:18:45もうお前自分でやれよ・・・
その例にしたって正確にはどう出力すればいいか判断できんよ。
0354デフォルトの名無しさん
2007/09/09(日) 17:16:46[2] 問題文(含コード&リンク): 44.1kHzサンプリング周波数で
1kHzの正弦波を10秒間作るプログラム
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 期限無し、早期希望
[5] その他の制限: 無し
よろしくお願いします
0355デフォルトの名無しさん
2007/09/09(日) 17:43:38おk
なにも出力しなくていいんだな?
void make_seigen_haaaaaaaaaaaaaa(int);
int main(){
make_seigen_haaaaaaaaaaaaaa(44100);
}
void make_seigen_haaaaaaaaaaaaaa(int x){
//後の人に任せる
make_seigen_haaaaaaaaaaaaaa(x); //宇宙が消滅しても尚計算が必要だけど,そのうち作られるはず
}
0356デフォルトの名無しさん
2007/09/09(日) 17:53:31ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4905.txt
0357デフォルトの名無しさん
2007/09/09(日) 18:49:10>>355
すみません。忘れてました。
波形をgnuplotで出力できるようにしてもらいたいです。
0358デフォルトの名無しさん
2007/09/09(日) 18:50:01#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;
}
0359デフォルトの名無しさん
2007/09/09(日) 18:55:17>>358 を変更
fwrite(&value, sizeof(value), 1, fp);
↓
fprintf(fp, "%d\n", value);
0361デフォルトの名無しさん
2007/09/09(日) 19:59:12なんかグダグダなソースになってしもた orz
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4907.c
0362デフォルトの名無しさん
2007/09/09(日) 21:44:33#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);
0363デフォルトの名無しさん
2007/09/09(日) 21:46:04len = sizeof(client);
sock = accept(sock0, (struct sockaddr *)&client, &len);
write(sock, "HELLO", 5);
close(sock);
}
close(sock0);
return 0;
}
0364デフォルトの名無しさん
2007/09/09(日) 21:48:41なぜ複数のクライアントと接続することができるんですか?
実際、このプログラムはどのように動作するんですか?
まず、listen(sock0, 5);で接続受付状態になって停止して
接続を受け付けたらwhile以下を実行するんですよね?
0365デフォルトの名無しさん
2007/09/09(日) 21:54:440366デフォルトの名無しさん
2007/09/10(月) 12:13:270367デフォルトの名無しさん
2007/09/10(月) 12:25:480368デフォルトの名無しさん
2007/09/10(月) 13:22:370369デフォルトの名無しさん
2007/09/10(月) 13:24:58ttp://www.wdic.org/w/SCI/Zellerの公式
0370デフォルトの名無しさん
2007/09/10(月) 14:09:32[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文などの基本的なものをできるだけ使ってほしいです
0371デフォルトの名無しさん
2007/09/10(月) 14:46:15#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
}
続く
0372デフォルトの名無しさん
2007/09/10(月) 14:47:02{
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];
}
続く
0373デフォルトの名無しさん
2007/09/10(月) 14:47:35printf( "\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" );
}
}
終わり
0374デフォルトの名無しさん
2007/09/10(月) 14:48:430375デフォルトの名無しさん
2007/09/10(月) 14:59:49スレの趣旨とは異なるが...
間違い - listen() は単に接続待ちキューの設定を行うだけ(必須)
接続要求に対する応答は accept() で行う(接続要求が無い場合ここで停止している)
accept() が返すソケットIDが接続要求に対する通信ソケットとなる
0376デフォルトの名無しさん
2007/09/10(月) 17:13:09糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
0377デフォルトの名無しさん
2007/09/10(月) 17:13:41糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
0378デフォルトの名無しさん
2007/09/10(月) 17:14:58糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
糞アメリカ人は世界貿易センタービルから飛び降り自殺して地面にブチ当って死ね
0379デフォルトの名無しさん
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言語未習。アメの大学で授業始まったばかりです。
0380379
2007/09/10(月) 18:44:32修正をお願いいたします。
#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;
}
0381デフォルトの名無しさん
2007/09/10(月) 18:48:52コンパイル、実行も問題なしだった
ファイルはcppで保存した?
もしくはmain()の方に問題あるかも
0382デフォルトの名無しさん
2007/09/10(月) 18:52:27合ってると思うが。環境が悪いかもしれん
0383デフォルトの名無しさん
2007/09/10(月) 18:54:53もしかして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;
}
0384379&380
2007/09/10(月) 19:08:25ご指摘の通り int name () を int main () に修正したら、エラーが2から0になりました
他の授業の宿題もものすごく重なっていてちょっとパニック状態だったので涙が出るくらい感激しています。おさがわせしました
0385デフォルトの名無しさん
2007/09/10(月) 20:09:42#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
}
}
}
0386デフォルトの名無しさん
2007/09/10(月) 22:05:26[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] その他の制限: 悪い点、対処法を教えていただければと思います。
0387386
2007/09/10(月) 22:15:49修正版をアップ致しました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4909.txt
0388デフォルトの名無しさん
2007/09/10(月) 22:19:30値がハンパなく1に近いからじゃないか
0389デフォルトの名無しさん
2007/09/11(火) 00:02:12元の数式が分からないことには答えようが無いよ
0390デフォルトの名無しさん
2007/09/11(火) 00:23:27[2] 問題文(含コード&リンク):メールを受信送信閲覧できるプログラムを書け。(できる人はメーリングリストや機能を増やしてもよい)
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:特に指定してないが自分はBorland C++ Compiler 5.5 無償ダウンロードを使っています
[3.3] 言語:C
[4] 期限: [2007年9月24日まで]
[5] その他の制限: GUI環境で。できたプログラムはメール等で先生に送りテストは先生が行う
0391デフォルトの名無しさん
2007/09/11(火) 00:30:07悪い点:数式がゴチャゴチャしすぎで式が正しいかを確認出来ない。
対処法:同じ式や、あまりに長い式は適当に作った変数に突っ込んでおく。
とりあえず軽く修正してみた。出力が元と一緒なのは確認済み。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4911.txt
0392デフォルトの名無しさん
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」にすればよい。
です。お願いします。
0393デフォルトの名無しさん
2007/09/11(火) 01:31:430394デフォルトの名無しさん
2007/09/11(火) 04:33:34うちの大学は初めからC++だったけど
0395デフォルトの名無しさん
2007/09/11(火) 04:57:07情報系以外の学部からすれば、簡単なアルゴリズムやるだけならCだけで十分だから
逆にわざわざC++する必要ないって感じじゃないだろうか?
0396デフォルトの名無しさん
2007/09/11(火) 05:03:47そういえば別に情報学部以外の学部でもプログラミング勉強してたんだね
そのこと忘れてた
0397デフォルトの名無しさん
2007/09/11(火) 08:36:580398デフォルトの名無しさん
2007/09/11(火) 08:43:17先生がどの環境でテストするかが問題であって
>>390 の環境ははっきりいってどうでもいい
GUIは環境依存だから作りなおしは面倒なんだぞ
まあ、俺には回答できない宿題なんだが口出しだけしてみた
0399デフォルトの名無しさん
2007/09/11(火) 13:12:060400デフォルトの名無しさん
2007/09/11(火) 14:13:280401デフォルトの名無しさん
2007/09/11(火) 14:14:571週間でメイラー作れとは厳しいね
ちゃんとできれば実務で使えるレベルだと思う
Socket 送受信、POP/SMTP プロトコルの処理だけでも真面目に書けば
1000ステップ位になりそうだから、ここで回答を期待するのは難しいかと
地道に頑張ってね
0402デフォルトの名無しさん
2007/09/11(火) 14:23:28作るというのはできるでしょうか?
0403デフォルトの名無しさん
2007/09/11(火) 14:32:330404デフォルトの名無しさん
2007/09/11(火) 14:38:49シミュレーションで3Dグラフィックスぐりぐり動かしたり
機械の制御とかやらせたりするのかな?
0406デフォルトの名無しさん
2007/09/11(火) 15:00:34Visual Cでやろう。
MAPIを使えば簡単にできる。
0407デフォルトの名無しさん
2007/09/11(火) 15:13:200408デフォルトの名無しさん
2007/09/11(火) 15:17:070409デフォルトの名無しさん
2007/09/11(火) 15:37:58#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;
}
0410デフォルトの名無しさん
2007/09/11(火) 17:22:42ttp://support.microsoft.com/kb/304894/ja
いまいち使いかたがよくわかりません・・・
0411デフォルトの名無しさん
2007/09/11(火) 18:20:24[2] 問題文(含コード&リンク):身長は?という問いに対して自分の身長を入れるプログラムを作成せよ。
また、確認として最後にYと入力すると「入力を終了します」と表示され終了、Nが入力されるともう一度身長の入力するとこに戻りループする
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
[3.3] 言語:C
[4] 期限: 今週まで
[5] その他の制限: 実行例
あなたの身長は?:180cm
これでよろしいですか?【Y・・・はい/N・・・いいえ】
あなたの身長180cmです。入力を終了します。
0412デフォルトの名無しさん
2007/09/11(火) 18:41:34POP3(受信)に関して言えば使うコマンドは 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 の基礎とか各種プロトコルに対する理解度を求めるモノであれば題意に反する気もする
0413デフォルトの名無しさん
2007/09/11(火) 18:48:18#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);
}
0414デフォルトの名無しさん
2007/09/11(火) 18:56:260415デフォルトの名無しさん
2007/09/11(火) 19:00:19判断できないなら気にする必要ないと思うよ。
0416デフォルトの名無しさん
2007/09/11(火) 19:11:37あなたの身長は?:180cm
これでよろしいですか?【Y・・・はい/N・・・いいえ】
あなたの身長は?:Y
あなたの身長180cmです。入力を終了します。
というふうになります・・・
0417デフォルトの名無しさん
2007/09/11(火) 19:25:58ありがおうございます!
0418デフォルトの名無しさん
2007/09/11(火) 19:26:46ch = getchar();
↓
while((ch = getchar())=='\n');
0419417
2007/09/11(火) 19:27:37すいません。打ち間違えました。
ありがとうございます!
0420デフォルトの名無しさん
2007/09/11(火) 19:42:530421デフォルトの名無しさん
2007/09/11(火) 20:53:53#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++;
ここれまではわかったのですがこの先がいまいちわかりません。
わかるかたいたらお願いします。
0422デフォルトの名無しさん
2007/09/11(火) 20:56:500423デフォルトの名無しさん
2007/09/11(火) 21:00:41while(--p>s) q=*s,*s++=*p,*p=q;
0424423
2007/09/11(火) 21:01:470426デフォルトの名無しさん
2007/09/12(水) 00:00:08[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
よろしくお願いします
0427デフォルトの名無しさん
2007/09/12(水) 00:38:20無理
1を置ける場所は4箇所のみ
3x3魔方陣は例に出ているものの回転鏡像解しか存在しない
0428デフォルトの名無しさん
2007/09/12(水) 01:55:21また知ったかのお前か、いい加減うっとうしいんだよ、調べもしないで。
奇数魔方陣について調べてから出直せ。それから無理じゃないからw
0429デフォルトの名無しさん
2007/09/12(水) 02:26:05>>427の言うとおり、3x3の場合は1が置けるのは4箇所のみだから
どこにもおける訳ではないよ
出来るというんだったら例を挙げてみて
0430デフォルトの名無しさん
2007/09/12(水) 02:45:10[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] 期限: 明後日まで
[
0431デフォルトの名無しさん
2007/09/12(水) 02:45:560432デフォルトの名無しさん
2007/09/12(水) 02:47:531をどこにでもおけるのが前提なら無理
1を真ん中に置いてとけるかっつーの
0433デフォルトの名無しさん
2007/09/12(水) 02:53:301 0 5
6 2 -2
-1 4 3
0434デフォルトの名無しさん
2007/09/12(水) 03:40:33http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4918.c
各行、各列、対角線の合計の表示あり。この法則で1〜行*列までの数字を
行列に入れていく場合、対角線まで合計が一致するのは
>>426にあるパターンのみかな。後は言われているように、全部で4パターンってことになるかな?
0435デフォルトの名無しさん
2007/09/12(水) 03:45:163まで進んだら、4は上下左右どちらか。それらの法則は
おりはさっぱりなんで誰か解説プリーズ。
0436デフォルトの名無しさん
2007/09/12(水) 05:12:52void 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 );
}
0437デフォルトの名無しさん
2007/09/12(水) 05:49:23つstrstr
0438デフォルトの名無しさん
2007/09/12(水) 06:44:59美しいよぉ〜、美しいよぉ〜、綺麗だよぉ〜、素晴らしいよぉ〜
今君、すっごく輝いているよぉ〜、それじゃ、一枚脱いでみようか?
あと、mainをつけるともっと良くなるよぉ〜
0439デフォルトの名無しさん
2007/09/12(水) 07:23:05[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
0440デフォルトの名無しさん
2007/09/12(水) 09:16:08#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;
}
0441デフォルトの名無しさん
2007/09/12(水) 09:32:13を返す関数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)
{
}
0442デフォルトの名無しさん
2007/09/12(水) 09:37:22int str_src(char *s, int c)
{
int count;
for(count=0;(s=strchr(s,c))!=NULL;count++,s++);
return count;
}
0443デフォルトの名無しさん
2007/09/12(水) 11:00:31おかしなところを変えたが勝手に直してくれ
#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;
}
0444デフォルトの名無しさん
2007/09/12(水) 13:01:44だって問題に strstr() は使って良いと書いてないから
StrStr() を書いたらイヤミって言われそうですし..
>>438
今はシャネルの5番だけなので脱げないの...ゴメンナサイ
main() も書けないボウヤには興味が無いの...ゴメンナサイ.
0445デフォルトの名無しさん
2007/09/12(水) 13:10:32そんな君に俺がアイラブユー
0446デフォルトの名無しさん
2007/09/12(水) 21:53:09つーかそんなのやっても役にたつんかなあ
0447デフォルトの名無しさん
2007/09/12(水) 21:56:140448デフォルトの名無しさん
2007/09/12(水) 21:59:46>>439 を回答を見ずに解いてみて欲しい
それが簡単だったら >>390 を解いてみて
何行になったかうp!
0449デフォルトの名無しさん
2007/09/12(水) 22:06:53>>439と>>390レベルの差大きすぎじゃね?
0450446
2007/09/12(水) 22:16:44僕が間違っていました。
みなさん一緒に宿題がんばりましょう
0451デフォルトの名無しさん
2007/09/12(水) 22:18:14>>439 >>306 >>390
でどうかな?
でも、回答者のセンスのおかげで
行数が少なくなっていることもあるということを
言いたかっただけで本当に解かなくてもいいんだ
0452デフォルトの名無しさん
2007/09/12(水) 22:51:49その場限りでバグも可読性も無視できるならずいぶん減る。
0453デフォルトの名無しさん
2007/09/12(水) 22:54:37http://pc11.2ch.net/test/read.cgi/tech/1142467359/
ここでも見ればおk
0454デフォルトの名無しさん
2007/09/12(水) 22:55:54日本語でおk
0455デフォルトの名無しさん
2007/09/12(水) 23:05:00日本人でおk
0456デフォルトの名無しさん
2007/09/13(木) 00:04:540457デフォルトの名無しさん
2007/09/13(木) 01:39:590458デフォルトの名無しさん
2007/09/13(木) 01:49:140459デフォルトの名無しさん
2007/09/13(木) 01:50:140460デフォルトの名無しさん
2007/09/13(木) 07:17:36問題文(含コード&リンク):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
0461デフォルトの名無しさん
2007/09/13(木) 07:22:24>>98
0462デフォルトの名無しさん
2007/09/13(木) 07:26:50問題文(含コード&リンク):文字列を入力し、圧縮しながら他の文字列配列に格納しなさい
使用する主な標準関数:strlen()、sprintf()など
実行画面
入力文字列(m1)==>AAAAAAABBBCddEEEE####
圧縮(m2):@7A@3BC@2d@4E@5#
圧縮比:72.7%
環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:ボーランド
[3.3] 言語:C
[4] 期限:
[5] その他の制限:
0463デフォルトの名無しさん
2007/09/13(木) 07:29:020464デフォルトの名無しさん
2007/09/13(木) 07:39:44だったらそれを書け。
0465デフォルトの名無しさん
2007/09/13(木) 09:53:48#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++;
}
}
0466デフォルトの名無しさん
2007/09/13(木) 09:59:59おまけの 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)は "#" が一個足らないよな(最後だけ一個多くするとかの仕様ではなく)
0467デフォルトの名無しさん
2007/09/13(木) 10:02:45その圧縮方法だと圧縮率が1以上になることあるなw
0468デフォルトの名無しさん
2007/09/13(木) 10:27:40"1111111111"
を圧縮すると…
0469デフォルトの名無しさん
2007/09/13(木) 10:38:24#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;
}
0470デフォルトの名無しさん
2007/09/13(木) 11:26:2220個だったらどうすんの?
0471469
2007/09/13(木) 11:39:20ま、いいや
0473問題2の答え
2007/09/13(木) 12:16:41問題文(含コード&リンク):検索する文字列を入力し、その値を返すユーザ関数を作成しなさい
引数1:検索対象文字列
引数2:検索文字列
戻り値:あった場合(一致した文字列の先頭アドレス)
なかった場合(NULL)
char moji[] ="ABCDEFGHJABFGHSKL"; */検索対象文字列*/
実行画面
検索文字列==>HS
検索位置:HSKL
環境
OS:WindowsXP
コンパイラ名とバージョン:Borland C++ Compiler 5.5
言語:C
0474デフォルトの名無しさん
2007/09/13(木) 12:23:44char *FindStr(const char *tgt, const chat *str)
{
return strstr(tgt, str);
}
0475デフォルトの名無しさん
2007/09/13(木) 13:10:33禿ワラw
0476デフォルトの名無しさん
2007/09/13(木) 17:57:55#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;
}
0477デフォルトの名無しさん
2007/09/13(木) 18:09:28char* 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
0478デフォルトの名無しさん
2007/09/13(木) 18:36:27strlen(), 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;
}
0479デフォルトの名無しさん
2007/09/13(木) 19:06:590480デフォルトの名無しさん
2007/09/13(木) 19:15:570481デフォルトの名無しさん
2007/09/13(木) 19:21:52それだと小数点以下が切り捨てに...
とネタとも思える質問の回答に突っ込んでみた
0482デフォルトの名無しさん
2007/09/13(木) 19:23:36小数点以下については触れてないからね
0483デフォルトの名無しさん
2007/09/13(木) 19:33:22よろしくお願いします。
0484デフォルトの名無しさん
2007/09/13(木) 19:39:090485デフォルトの名無しさん
2007/09/13(木) 19:40:320486デフォルトの名無しさん
2007/09/13(木) 19:42:16int 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);
}
0487デフォルトの名無しさん
2007/09/13(木) 20:05:34#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;
}
0488デフォルトの名無しさん
2007/09/13(木) 20:41:19×printf("Aの値はBの%f%です。\n",(double)na*100/nb);
○printf("Aの値はBの%f%です。\n",(double)na*100.0/(double)nb);
0489デフォルトの名無しさん
2007/09/13(木) 20:50:480490デフォルトの名無しさん
2007/09/13(木) 21:01:03それ処理系依存じゃなかったっけ?
0491デフォルトの名無しさん
2007/09/13(木) 21:07:41少なくとも488が指摘した部分だってそのままで問題ない。
0492デフォルトの名無しさん
2007/09/13(木) 21:17:350493デフォルトの名無しさん
2007/09/13(木) 22:16:12論外
0494デフォルトの名無しさん
2007/09/13(木) 22:25:570495デフォルトの名無しさん
2007/09/13(木) 22:44:510496デフォルトの名無しさん
2007/09/13(木) 22:46:06%%
0497デフォルトの名無しさん
2007/09/13(木) 22:46:290498デフォルトの名無しさん
2007/09/13(木) 22:47:300499デフォルトの名無しさん
2007/09/13(木) 23:05:31* * *
*** *
*
* ***
* * *
* ***
0500デフォルトの名無しさん
2007/09/13(木) 23:13:390501デフォルトの名無しさん
2007/09/14(金) 12:48:18あらゆる文字列を短く圧縮する方法は情報理論的にありえないから、おっけーなのでは?
問題は「ありがちな文字列が縮まらない」かどうか。
0502デフォルトの名無しさん
2007/09/14(金) 15:06:16int 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');
}
*を並べて長方形を表示するプログラムを作っています。
これは横長の長方形を出力するようにしてるのですが、
実行すると*が延々と並ぶのですが、何処が間違っているのでしょう?
0503デフォルトの名無しさん
2007/09/14(金) 15:09:32l1 = h; l2 = w;
とかがミステリー。
h = l1, w = l2;
みたいに逆なのではないだろうか?
for文がとまらないのは、hとwに不定値が詰まっているからだろう
0504デフォルトの名無しさん
2007/09/14(金) 15:17:54メールでもやるかな。
いや、やめとこう。
0505デフォルトの名無しさん
2007/09/14(金) 15:19:31でもこれ以外に原因は無いと思うんですけどね…
0506デフォルトの名無しさん
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;
}
0507デフォルトの名無しさん
2007/09/14(金) 15:31:40if文のあたりですかね?
0508デフォルトの名無しさん
2007/09/14(金) 15:33:09l1 = h と h = l1 という様に、左辺と右辺が逆なのだと思います。
0509デフォルトの名無しさん
2007/09/14(金) 15:34:27今作り直してみたら同じ結果になりました。
どうもありがとうございました。
0510デフォルトの名無しさん
2007/09/15(土) 00:37:54[2] 問題文(含コード&リンク):1から10の数字をランダムで表示せよ。ただし一度出た数字は重複しないこと
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
[3.3] 言語:C
[4] 期限: 2007年9月17日
[5] その他の制限:
0511デフォルトの名無しさん
2007/09/15(土) 00:42:57#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void){
srand(time(NULL));
printf("%d\n", (rand()%10)+1);
return 0;
}
0512デフォルトの名無しさん
2007/09/15(土) 00:44:410513デフォルトの名無しさん
2007/09/15(土) 00:56:39#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;
}
0514デフォルトの名無しさん
2007/09/15(土) 01:02:370515デフォルトの名無しさん
2007/09/15(土) 07:24:510516デフォルトの名無しさん
2007/09/15(土) 10:46:05確率w 偏ってるw 間違いw
0517デフォルトの名無しさん
2007/09/15(土) 10:49:360518デフォルトの名無しさん
2007/09/15(土) 10:53:02両方やって統計を取ってみて欲しい
>>513 の方が一様になると思う
コンパイラの rand 関数の実装にもよるけど
0519デフォルトの名無しさん
2007/09/15(土) 11:00:21#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)で実行して数値のばらつきを比較してみな
0520デフォルトの名無しさん
2007/09/15(土) 11:08:54頼むから無意味なソース貼るなよ、スレ違い
0521デフォルトの名無しさん
2007/09/15(土) 11:12:1310の10乗しかない。
シャッフルで等確率に出すのはけっこうむずい。
>>517 はもっと出ない系列が増える。
あと、等確率とか乱数の質とか言っている場合は rand()%なんとか と
乱数の下位のビットを使わず、RAND_MAX で割って上位のビットを使うこと。
0522デフォルトの名無しさん
2007/09/15(土) 11:12:53確かに偏りがある
rand()%(i+1)
にするとその時点毎に一様になりそうなことは分かる
rand()%10
にすると偏るのはなぜ?
0523デフォルトの名無しさん
2007/09/15(土) 11:13:41> 1から10までの数字を全部重複しないようにランダムで表示します
要するに1〜10を並び替えているだけ。重複しないように発生させているんじゃなくて
単に1〜10を先頭の要素からランダムに選んだ要素と交換するのに一様とかあまり深く関わらんぞ。
0524デフォルトの名無しさん
2007/09/15(土) 11:15:0010^10 >> 10!
じゃないか?
0525デフォルトの名無しさん
2007/09/15(土) 11:16:01偏らないようにRAND_MAXを用いるとかって話なら分かるけどなw
0526デフォルトの名無しさん
2007/09/15(土) 11:18:18常にある一定の範囲内の値しか出さないようなアルゴリズムなら偏りとか
話は分かるけど、全部を重複せずに出すのに偏りとかないからw
っつーか重複していないんだから偏れないってw
0527デフォルトの名無しさん
2007/09/15(土) 11:22:30なぜそうなるのか興味がある。
0528デフォルトの名無しさん
2007/09/15(土) 11:32:280529デフォルトの名無しさん
2007/09/15(土) 11:41:56srand()に入れるSEEDも工夫してみたら。
これである位置にある値が常に入っているとかでなければ問題はないっしょ。
0530デフォルトの名無しさん
2007/09/15(土) 11:51:40「1 と 10 の間の乱数を生成したいのであれば、常に
j = 1 + (int) (10.0 * rand() / (RAND_MAX + 1.0));
のように上位ビットを用いること。
j = 1 + (rand() % 10);
のような、下位のビットを用いるような方法は決してしないこと。」
0531デフォルトの名無しさん
2007/09/15(土) 11:53:040532513
2007/09/15(土) 12:17:40array[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
0533デフォルトの名無しさん
2007/09/15(土) 12:18:38その番号が未使用なら採用、
使用済なら再度乱数生成に戻る。
10個取得したら終了する。
これで良いんじゃないの?
0534513
2007/09/15(土) 12:21:13ratio[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;
}
0535デフォルトの名無しさん
2007/09/15(土) 12:23:01> 使用済なら再度乱数生成に戻る。
ここが非効率的
だったら、10個の配列をランダムにシャッフルして...ってやるかな
0536デフォルトの名無しさん
2007/09/15(土) 12:24:48そうそう。それなら全ての系列が等確率なのは自明。
ちなみに試行は平均 n log n 回。
0537デフォルトの名無しさん
2007/09/15(土) 12:27:550538デフォルトの名無しさん
2007/09/15(土) 12:34:42数が多くなったら時間が掛かるぞ。実際にやってみろ。
俺、それ数年前にやってみたけど、そのアルゴリズムを見せたら
モロに笑われたよw
0539デフォルトの名無しさん
2007/09/15(土) 12:36:080540デフォルトの名無しさん
2007/09/15(土) 12:37:360541デフォルトの名無しさん
2007/09/15(土) 12:44:470542デフォルトの名無しさん
2007/09/15(土) 12:50:280543デフォルトの名無しさん
2007/09/15(土) 12:58:37偏らないよ
0544デフォルトの名無しさん
2007/09/15(土) 13:02:3610件程度の番号取得する宿題じゃ、効率よりもわかりやすい方が
依頼者や出題者wからは喜ばれるのではないかな。
さすがに1000件とかなら、もう少し考えるが。
0545デフォルトの名無しさん
2007/09/15(土) 13:17:44お前さすがにうざいわ。失せろ、知ったか初心者。
0546デフォルトの名無しさん
2007/09/15(土) 13:18:54何を基準にサンプルをとったわけ?それがはっきりしないと
その確率も曖昧というかナンセンス。
0547デフォルトの名無しさん
2007/09/15(土) 13:21:500548デフォルトの名無しさん
2007/09/15(土) 13:22:140549デフォルトの名無しさん
2007/09/15(土) 13:22:580550デフォルトの名無しさん
2007/09/15(土) 13:39:24長年の疑問が解けたかもしれない。
0551デフォルトの名無しさん
2007/09/15(土) 13:41:43i=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が増えても同様の計算で常に一様になる。
0552デフォルトの名無しさん
2007/09/15(土) 13:47:12もっと帰納的に説明できる話だろうに。
0553デフォルトの名無しさん
2007/09/15(土) 13:48:020554デフォルトの名無しさん
2007/09/15(土) 14:54:28実際には一様にはならず偏りができる
>>517 のコードは一瞬あれっ?と思うが
実際には一様にシャッフルすることができる
要するに >>517 やるじゃねーか
って話でおk?
0555デフォルトの名無しさん
2007/09/15(土) 15:01:010556デフォルトの名無しさん
2007/09/15(土) 15:35:45rand() の実装によるとしか・・・
少なくとも linux だと線形合同法は使われてないらしい
0557デフォルトの名無しさん
2007/09/15(土) 16:32:40[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以降を記述せよ。変数の新たな宣言は禁止する
0558557
2007/09/15(土) 16:33:25void 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);
}
続きです。よろしくお願いします
0559デフォルトの名無しさん
2007/09/15(土) 17:07:21for(i=0; i<n; i++) {
s += x[i];
ss += x[i] * x[i];
}
a = s / n;
ss -= a * s;
sigma2 = ss / n;
0560デフォルトの名無しさん
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などは無しで。
よろしくお願いします
0561デフォルトの名無しさん
2007/09/15(土) 17:36:16ss -= a * s;
は
ss += ( - 2 * a * s + a * a * n );
じゃねぇの?
0562デフォルトの名無しさん
2007/09/15(土) 17:37:040563デフォルトの名無しさん
2007/09/15(土) 17:49:480564デフォルトの名無しさん
2007/09/15(土) 18:12:38#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;
}
0565デフォルトの名無しさん
2007/09/15(土) 18:57:010566デフォルトの名無しさん
2007/09/15(土) 18:59:47ansiに規定がないからないのもあるよ。
# M_PIもね。
0568370のものです
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などの繰り返しのを出来るだけ使用する。
. 初歩的な物のばかりを利用して大変だと思いますがよろしくお願いします。
0569デフォルトの名無しさん
2007/09/15(土) 23:46:54ここで回答を求めても、また再提出を食らうのがオチなんじゃ・・・
0570デフォルトの名無しさん
2007/09/15(土) 23:57:19> static bool
習ってないのはこの辺りか?
0571デフォルトの名無しさん
2007/09/16(日) 00:00:47#include <stdio> とかやってるのに何故でしょうか?
.\printf.cpp(15) : error C3861: 'printf': 識別子が見つかりませんでした
0572デフォルトの名無しさん
2007/09/16(日) 00:03:40つ、釣られないクマー
cstdio
stdio.h
と思ったけど、ダメだったクマー
0573371
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 とか書いてるところを () 内の数字に
書き換える(直値のマジックナンバーは悪い習慣になるのでお勧めしないけど)
このくらいの修正は自分でやってね
0574デフォルトの名無しさん
2007/09/16(日) 01:48:390575371
2007/09/16(日) 01:52:08<conio.h> の textcolor() は確かに教わらないだろうし環境依存だから良くないかもしれないね
0576デフォルトの名無しさん
2007/09/16(日) 01:54:46チョンはさっさと糞アメリカに行けや
チョンはさっさと糞アメリカに行けや
チョンはさっさと糞アメリカに行けや
チョンはさっさと糞アメリカに行けや
チョンはさっさと糞アメリカに行けや
0577デフォルトの名無しさん
2007/09/16(日) 01:55:46チョンの分際でえらそうな口きくな
チョンの分際でえらそうな口きくな
チョンの分際でえらそうな口きくな
チョンの分際でえらそうな口きくな
チョンの分際でえらそうな口きくな
0578デフォルトの名無しさん
2007/09/16(日) 02:11:00568 読んでコーディングしてみた輩ですが、
なんで >>385 のコードを提出したと思ったのでしょうか
と単純に思ったので聞いてみる
0579385
2007/09/16(日) 02:22:30しかも%7とか意味のないことやってるし…
0580デフォルトの名無しさん
2007/09/16(日) 02:56:200581デフォルトの名無しさん
2007/09/16(日) 06:53:58#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;
}
0582デフォルトの名無しさん
2007/09/16(日) 07:01:02for(i = 0; i < pos; i++) printf(" ");
ではなく
for(i = 0; i < pos; i++) printf(" ");
だな
0583デフォルトの名無しさん
2007/09/16(日) 07:58:16を
if (hoge) return true else return false;
と書く人が多いね。こっちの方が読みやすいかな?
0584デフォルトの名無しさん
2007/09/16(日) 08:04:08return (year%4 == 0 && year%100 != 0) || year%400 == 0;
のがスマートかもね
いちいち関数にする必要がないな……
0585デフォルトの名無しさん
2007/09/16(日) 08:14:10可読性というか何やってるかを分かりやすく書くなら、
int isLeapYear(int year){
if( !(year % 400) ) return 1;
if( !(year % 100) ) return 0;
if( !(year % 4) ) return 1;
return 0;
}
こんな風に書いた方がいい気がする。
関数にする必要性は感じた方がいいと思うが。
0586デフォルトの名無しさん
2007/09/16(日) 08:46:08必然性がないならどっちでも良いよ。少なくともその一行を
無理に複雑にしなくても良いだろ。考え方なんて人それぞれ。
最終的に必要な結果が得られれば問題なし。
まぁ、自分の定義したライブラリを登録しておいて、うるう年の判別には
そのライブラリを用いるというスタイルをとっているならそれでも良し。
0587デフォルトの名無しさん
2007/09/16(日) 08:52:39強いて欠点を言うなら、400で割り切れる、100で割り切れる年が
全体のどんだけぇ〜あるか。多くの場合、上から順に流すと
2つとも無駄な判別になる。果たしてそういうのが効率が良いかどうか。
だったら4で割れるものの中から100で割れるものと400で割れるものを
さらに判定したらどうだろうか?少なくとも奇数の年数だったらその時点で
無駄な判定はせずに済む。
0588デフォルトの名無しさん
2007/09/16(日) 08:59:53if(year%4) return 0;
if(year%100) return 1;
if(year%400) return 0;
return 1;
}
こう書いた方がいいってことか
0589デフォルトの名無しさん
2007/09/16(日) 09:04:32int isLeapYear(int year)
{
if(year % 4 != 0)
{
return 0;
}
if(year % 100 != 0)
{
return 1;
}
if(year % 400 != 0)
{
return 0;
}
return 1;
}
0590デフォルトの名無しさん
2007/09/16(日) 09:15:49それ上手くいかなくね?
0591デフォルトの名無しさん
2007/09/16(日) 09:33:14400で割り切れるならという条件を先に入れるか・・・
0592デフォルトの名無しさん
2007/09/16(日) 09:37:44やはり、まず4で割り切れてという条件の下に
100で割り切れないもの、100で割り切れるというならば
その中でも400で割り切れるものという条件ならどうかな?
0593デフォルトの名無しさん
2007/09/16(日) 09:41:53{
if (year <= 1900 || year >= 2100) return -1;
return year % 4 != 0;
}
0594デフォルトの名無しさん
2007/09/16(日) 09:43:55何の判定だよwwww
0595デフォルトの名無しさん
2007/09/16(日) 09:45:39if(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を返す
}
0596デフォルトの名無しさん
2007/09/16(日) 09:49:10見たまんまだろ。1901年から2099年に限定すれば4年に一度閏年だ。
0597デフォルトの名無しさん
2007/09/16(日) 09:49:450598デフォルトの名無しさん
2007/09/16(日) 10:56:26っ isLeapYear(1900);
!!!
>>585 の書き方が好きだ
自分の書き方と同じだから
最適化のしすぎで読みにくいなんていやだ
うるう年の判定を何百万回するつもりかしらんけど
0599デフォルトの名無しさん
2007/09/16(日) 11:05:51お前馬鹿だろ
0600598
2007/09/16(日) 11:10:470601デフォルトの名無しさん
2007/09/16(日) 11:18:200602デフォルトの名無しさん
2007/09/16(日) 11:33:45> 最適化のしすぎで読みにくいなんていやだ
読みにくいという自分規準が既におかしいと気づけ
0603デフォルトの名無しさん
2007/09/16(日) 11:48:09>>584とか理解できない奴がいる可能性も否定できないし。
ま、>>588が理解できない人間に対しては、どんなに可読性に気を使っても無駄だろうけど。
0604571
2007/09/16(日) 11:53:03#include <stdio.h>
って入れ替えたら、うまく動きました。
ただ、知る人ぞ知る書式演算子 %n
int iLength = 0;
printf("hello%n\n", &iLength);
printf("%d", iLength);
でアサート吐かれるんだけど、何でだろ?
0605デフォルトの名無しさん
2007/09/16(日) 11:55:590606デフォルトの名無しさん
2007/09/16(日) 11:56:52iLength=printf("hello");
printf("\n%d\n", iLength);
じゃダメ?
0607デフォルトの名無しさん
2007/09/16(日) 12:36:31gccだと普通に動くけどな。
0608デフォルトの名無しさん
2007/09/16(日) 15:42:580609デフォルトの名無しさん
2007/09/16(日) 16:15:03問題文(含コード&リンク):
テーマ:ファイル処理
問題2:ファイル"memo.txt"の中身を配列に格納してしなさい。
そのファイルの行数をcountとします。
その配列の中身と行数を表示しなさい。
"memo.txt"は
akasatana/23
ahajsjoi/21
12/4343
2/3sefs
とします。
0610デフォルトの名無しさん
2007/09/16(日) 16:17:12static, bool, switch, #define くらいに文句つける講師は居ないだろと思っただけだよ
問題にエスケープシーケンスによる色設定方法を書いてるのにそれを使わないなら怒るかなと
俺と >>385 以外に回答なかったと思うし
>>370
どっち出したの?
0611デフォルトの名無しさん
2007/09/16(日) 16:26:39具体的に何かに対してではなく 習っていない という点をお忘れなく。
0612デフォルトの名無しさん
2007/09/16(日) 16:30:25日本語でおk
0613デフォルトの名無しさん
2007/09/16(日) 16:36:51あるいは、講師にこの部分はどういう意味かと聞かれて説明できず
他人のを丸写しにしたのがバレたとかね。
0614609
2007/09/16(日) 16:37:50そのファイルの数も考慮にいれるファイルでありまして。
"memo.txt"に
data0913.dat
data0912.dat
data0911.dat
とかかれていて。その拡張子.datのファイル3個を配列に格納したいんですけど、
ちょっとわからなくて。
0615デフォルトの名無しさん
2007/09/16(日) 16:41:12#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;
}
0616デフォルトの名無しさん
2007/09/16(日) 16:46:42『教えてない事を使うな』ってスタンスは講師としては良くないと思うんだけどね
『教えてない=パクリ』も短絡的すぎるし
>>613
その可能性は高いね
0617609
2007/09/16(日) 16:57:02作ってくれたのはありがたいんですけど、
表示じゃなくて
2次元配列の行ごとに格納する感じにしたいんだけどね
char matr[1][]="data0913.dat"
char matr[2][]="data0912.dat"
char matr[3][]="data0911.dat"
0618609
2007/09/16(日) 17:06:280619デフォルトの名無しさん
2007/09/16(日) 17:07:01宿題じゃないことは分かったが、何がしたいのか箇条書きで整理してくれ
0620デフォルトの名無しさん
2007/09/16(日) 17:09:53>>609 ができるわけがないです
断言できます
今後できるようになる事も無いです
あきらめました。っていうなら納得です
0621609
2007/09/16(日) 17:16:47#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]);
}
}
0622デフォルトの名無しさん
2007/09/16(日) 17:57:590623デフォルトの名無しさん
2007/09/16(日) 18:05:50それに答えられたら加点 ってやればおk。
まぁ、そこまでやってくれる講師なんぞいないだろうけどね。
0624デフォルトの名無しさん
2007/09/16(日) 22:12:27問題12 下の図の台形の面積を求めるプログラムを作成しなさい。
※図は省略します。
上底=12 下底=17 高さ=5
面積S float 上辺a int 下辺b int 高さh でプログラムを作成すること
C:\c>kadai12
台形の面積はXXXX
※XXXXは計算した値を表示
初歩的なことかもしれませんが、よろしくお願いします。
0625デフォルトの名無しさん
2007/09/16(日) 22:17:06#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;
}
0626デフォルトの名無しさん
2007/09/16(日) 22:17:14#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;
}
0627624
2007/09/16(日) 23:08:26携帯からの書き込みです
ありがとうございました
0628デフォルトの名無しさん
2007/09/16(日) 23:14:09int main(a=12,b=17,c=5){float S;S=(a+b)*h/2.0;printf("台形の面積は %f\n");}
どぞ。
0629デフォルトの名無しさん
2007/09/16(日) 23:15:11C言語でおk
0630デフォルトの名無しさん
2007/09/16(日) 23:19:49これでもコンパイルできるよ。
0631デフォルトの名無しさん
2007/09/16(日) 23:21:06コンパイラの名前とバージョンをplz
0632デフォルトの名無しさん
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?"白の勝ち":"引き分け");}
オセロ。
0633デフォルトの名無しさん
2007/09/17(月) 00:12:410634デフォルトの名無しさん
2007/09/17(月) 00:19:00適当に直してみたけど入力待ちから先に進まない
明日までに直しといてね
0635デフォルトの名無しさん
2007/09/17(月) 00:19:21できねーよハゲ
0636デフォルトの名無しさん
2007/09/17(月) 00:25:59> n&g
って明らかに参照渡しの仮引数だろ。
main()の戻り値型を省けばc++でコンパイルできたが。
>>632
void main() なんて書くな。
0637デフォルトの名無しさん
2007/09/17(月) 00:29:25俺が言いたかったのはどこのコンパイラ使ったのかってこと
0639デフォルトの名無しさん
2007/09/17(月) 00:31:22634だよ
0640デフォルトの名無しさん
2007/09/17(月) 00:37:17ん?普通にコンパイルできないのか?
0641デフォルトの名無しさん
2007/09/17(月) 00:41:12main() の引数は好きに定義できるんだっけ?処理系依存?
#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%実用性のない書き方だからどうでも良いけど
0642デフォルトの名無しさん
2007/09/17(月) 00:44:16オセロとしておかしくねーか?
明らかに置ける場所におけない場合があるんだが。
0643デフォルトの名無しさん
2007/09/17(月) 00:46:06いまやってみた。
コンパイルは問題なさそうだが、オセロとしてはおかしいな。
0644デフォルトの名無しさん
2007/09/17(月) 00:52:06gccでコンパイルしようとすると2行目で止まる
g++でコンパイルしようとすると、mainはvoid返さねえよ氏ねとエラーでる。
0645デフォルトの名無しさん
2007/09/17(月) 01:01:10>g++でコンパイルしようとすると、mainはvoid返さねえよ氏ねとエラーでる。
mainはint返さなきゃいけねーよ氏ねだよな。
VC++なら通ったぞ。
0646デフォルトの名無しさん
2007/09/17(月) 01:46:04if(p=t[c])p==1?x++:y++;
p=t[c] は == の間違い?
動作確認は少しだけしたけど、最後までゲームをするの面倒
0647デフォルトの名無しさん
2007/09/17(月) 01:46:08[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] その他の制限:
なぜか僕のパソコンからは、問題文が文字化けしてしまっています。
もしもリンク先で文字化けが起こったときは、エンコード設定をお願いします。
迷惑をおかけしましてすみません。
0648デフォルトの名無しさん
2007/09/17(月) 03:20:30----【即会える出会い系サイト×優良出会い系サイト=毎日出会い!】-----------
優良出会い系サイトと即出会えるサイトを併用して使い、即会いライフを楽しんでいます。
これが面白いほど会える☆
俺の場合、出会い系サイト3つで女の子と週2〜3で出会えてます。
これ以外にもお気にの女の子とは週1で会ってます。
今回は皆さんにも出会いを楽しんでもらいたいので、俺が使っている
登録後一日以内に出会えたサイトを紹介するブログ始めました。
皆も休日にエンジョイしてください!
↓↓↓
【即出会えるサイト紹介ブログ】
http://deaigets.blog97.fc2.com/
--------------------------------------------------------------------
0649デフォルトの名無しさん
2007/09/17(月) 03:39:58書いてみた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4924.txt
日頃C++でSTL使い放題なんで単方向リストとか新鮮だわー
0650デフォルトの名無しさん
2007/09/17(月) 04:11:46649に遅れながら書いてみた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4925.txt
>>649のreverse()の発想までたどり着けなかったのが不甲斐ない
0651デフォルトの名無しさん
2007/09/17(月) 04:26:56[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
0652デフォルトの名無しさん
2007/09/17(月) 04:58:52http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4926.c
0653デフォルトの名無しさん
2007/09/17(月) 05:11:35http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4927.c
0654デフォルトの名無しさん
2007/09/17(月) 08:27:15http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4929.c
0656647
2007/09/17(月) 09:10:40これを参考に、もう一度頑張ってみます。
0657デフォルトの名無しさん
2007/09/17(月) 14:22:12[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] その他の制限: 超初級です
0658657
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;
}
0659657
2007/09/17(月) 14:30:08Enter 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 // 小数点以下二桁にできません
よろしくお願い致します
0660デフォルトの名無しさん
2007/09/17(月) 15:52:59http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4930.txt
>どうやったらこの二行を・・
endlの動作は「改行した後バッファをフラッシュする」なので、
フラッシュだけしたいときや改行だけしたいときは別の方法を使ったほうがいい。
>小数点以下二桁に・・
精度を指定してあげればいい
あと、float main() は止めた方がいい
0661デフォルトの名無しさん
2007/09/17(月) 17:59:41main 関数の外にある三つのグローバル変数
float JANUARY_SALES;
float FEBRUARY_SALES;
float MARCH_SALES;
は使う予定がないなら削除したほうがいいと思う
0662657
2007/09/17(月) 18:19:09ありがとうございました
ほとんど説明のない授業なので、非常に参考になります
精度指定も全く習っていなくて、色々調べたのですがいまいち使い方が分かりませんでした
>>661 さん
助言ありがとうございます
削除しました
0663デフォルトの名無しさん
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年目です。
0664デフォルトの名無しさん
2007/09/17(月) 19:48:210665デフォルトの名無しさん
2007/09/17(月) 20:42:410666デフォルトの名無しさん
2007/09/17(月) 20:47:560667デフォルトの名無しさん
2007/09/17(月) 20:50:36�@シングルクオテーションがきた時に、シングルクオテーションで単語がくくられてたら、単語を文字定数として出力し、ただ単にシングルクオテーションがあるだけなら、特殊記号として出力したい
�A整定数(75とか)がきたら、識別子(a4b9とか)と比較して、整定数なら整定数、識別子なら識別子として出力したい
どうしたらいいでしょうか?
ちなみにc言語です。
0668デフォルトの名無しさん
2007/09/17(月) 20:52:280669デフォルトの名無しさん
2007/09/17(月) 22:12:54フラグの状況によって、処理を変える。
0670デフォルトの名無しさん
2007/09/17(月) 22:22:360671デフォルトの名無しさん
2007/09/17(月) 22:30:400672デフォルトの名無しさん
2007/09/17(月) 22:31:58宿題なら問題文まるまる乗せてくれ。
やさしい人ならコメントくらいつけてくれる.。
自分がどの程度まで習っているのかもちゃんと示してくれ。
0673デフォルトの名無しさん
2007/09/17(月) 22:42:15文字列を単語に分割する。単語の種類には、予約語、識別子、整定数、文字定数、特殊記号がある。予約語、特殊記号はテキスト参照。
文字列はプログラミング言語KPLを適当に作成し、それを読み込んでくる。
環境はC言語、OSはLinuxで、Gnome端末というものでemacsを使っています。
0674デフォルトの名無しさん
2007/09/17(月) 23:15:05[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で。スレ違いですいませんが自分ではどうもできません・・・お願いします・・・
0675デフォルトの名無しさん
2007/09/17(月) 23:17:47君がやらなきゃいけないことじゃないが・・・
0676デフォルトの名無しさん
2007/09/17(月) 23:20:28> 先にカードがなくなったほうが負け
逆では?
カードシャッフル部分だけなら作れるよ
0677デフォルトの名無しさん
2007/09/17(月) 23:22:27と思ったんですがC言語暦1ヶ月の自分には無理のようで・・・。
>>676 カードを全部出し終わった人が勝ちですね。すいません
0678デフォルトの名無しさん
2007/09/17(月) 23:27:070679デフォルトの名無しさん
2007/09/17(月) 23:32:250680デフォルトの名無しさん
2007/09/17(月) 23:32:46面倒くさいな。何時間も掛かりそうでだるい
0681デフォルトの名無しさん
2007/09/17(月) 23:35:180682デフォルトの名無しさん
2007/09/17(月) 23:36:18#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;
}
0683デフォルトの名無しさん
2007/09/17(月) 23:54:35表示、もう一度しますか?みたいなものがあれば・・・
0684デフォルトの名無しさん
2007/09/18(火) 00:04:480685デフォルトの名無しさん
2007/09/18(火) 00:11:23UIよりAIがだるい
CPUは出せれば出すってだけでいいのか
0686デフォルトの名無しさん
2007/09/18(火) 00:13:03せいぜいシャッフルで>>551>>554を考慮しないといけないくらいで
むしろAIの部分が初心者にはきついんじゃないか?
0687デフォルトの名無しさん
2007/09/18(火) 00:13:450688デフォルトの名無しさん
2007/09/18(火) 00:14:430689デフォルトの名無しさん
2007/09/18(火) 00:45:120690デフォルトの名無しさん
2007/09/18(火) 00:52:170691デフォルトの名無しさん
2007/09/18(火) 00:53:07これは、たった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個の掲示板にこの書き込みをコピーして貼って下さい。そうすれば、あなたの願い事は叶うでしょう。もし、貼らなければ、願い事を逆のことが起こるでしょう。とても奇妙ですが当たってませんか?
0692デフォルトの名無しさん
2007/09/18(火) 01:20:57#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;
}
0693デフォルトの名無しさん
2007/09/18(火) 01:41:270694デフォルトの名無しさん
2007/09/18(火) 01:46:26問題文(含コード&リンク):
ポインタ変数を使ったプログラム
入力された金額について最適な金種枚数を求めよ
実行画面
10000円の枚数==>12
5000円の枚数==>1
1000円の枚数==>0
500円の枚数==>1
100円の枚数==>3
50円の枚数==>0
10円の枚数==>1
1円の枚数==>2
環境
OS:WindowsXP
コンパイラ名とバージョン:ボーランド
言語:C
期限:今日の7時30分まで
その他の制限:
0695デフォルトの名無しさん
2007/09/18(火) 01:52:11何にポインタを使えばいいんだ
0696デフォルトの名無しさん
2007/09/18(火) 01:58:180697デフォルトの名無しさん
2007/09/18(火) 01:59:20訂正文
ポインタ変数を使ったプログラム
入力された金額について最適な金種枚数を求めよ
実行画面
入金==>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};
0698デフォルトの名無しさん
2007/09/18(火) 02:07:20エラー 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 )
0699デフォルトの名無しさん
2007/09/18(火) 02:08:21エラー 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 ***
0700デフォルトの名無しさん
2007/09/18(火) 02:23:410701デフォルトの名無しさん
2007/09/18(火) 02:23:55>以下のような配列名をポインタ変数で扱う
相変わらず意味が分からないし、何をすれば実行画面と示した結果になるのか不明
問題自体を見直してこい
0702デフォルトの名無しさん
2007/09/18(火) 02:39:25思ったらエラーで遊べなかったw
0703デフォルトの名無しさん
2007/09/18(火) 02:41:54下二桁が47なのになぜ10円が1枚・・・ というか5円はどうした
0704デフォルトの名無しさん
2007/09/18(火) 03:05:16#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;
}
なんかポインタを活用してるっぽく書いてみた。無意味だけど。
0705デフォルトの名無しさん
2007/09/18(火) 03:10:11コピペのときに とか入るのちゃんと消したか?
0706デフォルトの名無しさん
2007/09/18(火) 03:20:120707デフォルトの名無しさん
2007/09/18(火) 03:27:590708デフォルトの名無しさん
2007/09/18(火) 03:28:560709デフォルトの名無しさん
2007/09/18(火) 03:52:28[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で文字列にしてやればいいと
思い色々やってみましたがギブアップです・・・。
お願いします
0710デフォルトの名無しさん
2007/09/18(火) 03:54:41あと、各列を独立してソートしていいの?
エクセルの並べ替えみたいに列1で並び変えて、同じなら列2で並び変えるとかじゃなくてOK?
0711709
2007/09/18(火) 03:59:57strtokは指定ではないです
読み出した文字を配列にいれるのに
使えると思い自分で試してみただけです^^;
ソートに関してはどのようなやり方でも大丈夫だと思います
よろしくお願いします!!
0712デフォルトの名無しさん
2007/09/18(火) 04:02:59ソートの方法じゃなくて各列が独立かを訊いてるんだよ
0713709
2007/09/18(火) 04:04:25答えになって無くて申し訳ないです
各列独立でお願いします
0714デフォルトの名無しさん
2007/09/18(火) 04:04:53問題文はそのまま書け
0715デフォルトの名無しさん
2007/09/18(火) 04:10:57動作確認とかしてないし、コンパイルもしてないけどこんな感じ?
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] );
}
}
}
0716709
2007/09/18(火) 04:18:55fscanfで一度やってみて上手くいかなかったのでscanf諦めてました・・・
前に書いたプログラムと>>715を見比べながらやってみます。
ありがとうございました(*_ _)
0717デフォルトの名無しさん
2007/09/18(火) 04:27:35使い回ししにくいが、こんなのどうだろう?
#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]);}
0718デフォルトの名無しさん
2007/09/18(火) 07:12:53問題文(含コード&リンク):
ポインタ変数を使ったプログラム
入力された金額について最適な金種枚数を求めよ
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
0719709
2007/09/18(火) 07:23:40いつの間にか意識が飛んでましたw
ありがとうございます。
早速動作の確認と内容の理解に取り組みます!!
0720デフォルトの名無しさん
2007/09/18(火) 08:27:08#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;
}
0721デフォルトの名無しさん
2007/09/18(火) 09:18:29関数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)
{
解答
}
0723デフォルトの名無しさん
2007/09/18(火) 09:23:46// 文字Cが含まれている個数(含まれていれば0とする)を返す
int str_src(char *s,int c)
{
return 0;
}
0724721
2007/09/18(火) 09:24:51[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: (Windows XP)
[3.2] (VC 6.0等)
[3.3] 言語: (C++)
[4] 期限: 今日中
[5] ポインタまで
0725デフォルトの名無しさん
2007/09/18(火) 09:26:32{
int cnt = 0;
while(*s) if(*s++==c) cnt++;
return cnt;
}
0726デフォルトの名無しさん
2007/09/18(火) 09:27:34>授業単元: 4
それ単位じゃねえか?
>>441-443 嫁
0727デフォルトの名無しさん
2007/09/18(火) 09:44:58[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);
}
0728709
2007/09/18(火) 09:52:51ただ、作りかけたfgetsで配列に読み込ませ
strtok関数を使いソースを完成させたいと思っています。
よろしければ後学のためにサンプルお願いします。
贅沢言って申し訳ないです
0729デフォルトの名無しさん
2007/09/18(火) 11:02:18http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4931.txt
0730709
2007/09/18(火) 11:49:12ありがとうございます;_;
少しずつでも理解しながら読んで行きます!!
多謝!!
0731デフォルトの名無しさん
2007/09/18(火) 12:57:21とりあえずmとnをコマンドラインから入力、ということなら
main(void) -> main( int c, char *v[] )
int m,n,r; -> int m=atoi(v[1]), n=atoi(v[2]), r;
ただそれ、最大公約数返すようには見えないんだけど、いいの…?
0732デフォルトの名無しさん
2007/09/18(火) 13:02:21[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
それと前回作っていただいた方にお礼が言えず終いですみませんでした。
0733デフォルトの名無しさん
2007/09/18(火) 13:31:57括弧機能って? 187 のは括弧は対応してるみたいだが
0734デフォルトの名無しさん
2007/09/18(火) 13:47:54[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日
お願いします
0735デフォルトの名無しさん
2007/09/18(火) 14:14:59失礼しました
入力に対応させるために自分で少し変更したのを忘れてましたorz
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4933.txt
gets関数が危険なのはわかってますが一応指定された関数なので・・・
ここから括弧機能や桁を追加していきたいのですが自分のスキルでは詰まってしまいました
0736デフォルトの名無しさん
2007/09/18(火) 14:26:03括弧機能って? >>735 も括弧に対応してるみたいだが
( 少なくとも (1+2)*(3+4) はきちんと処理された )
0737デフォルトの名無しさん
2007/09/18(火) 14:27:39プログラムの問題じゃないじゃないか。
こういう問題を解読するプログラムを作れってことなのか?
0738デフォルトの名無しさん
2007/09/18(火) 15:04:57#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);}
0739デフォルトの名無しさん
2007/09/18(火) 15:29:270740デフォルトの名無しさん
2007/09/18(火) 15:36:270741デフォルトの名無しさん
2007/09/18(火) 15:36:33初心者の助けにも何にもなってないでしょうが。
とっとと巣に帰れでございます。
0742デフォルトの名無しさん
2007/09/18(火) 15:39:050743デフォルトの名無しさん
2007/09/18(火) 15:39:180744デフォルトの名無しさん
2007/09/18(火) 15:41:330746デフォルトの名無しさん
2007/09/18(火) 16:17:440747デフォルトの名無しさん
2007/09/18(火) 16:25:25問題文が無いんで、自分なりに説明すると、
文字列を単語に分割する。単語の種類には、予約語、識別子、整定数、文字定数、特殊記号がある。予約語、特殊記号はテキスト参照。
文字列はプログラミング言語KPLを適当に作成し、それを読み込んでくる。
環境はC言語、OSはLinuxで、Gnome端末というものでemacsを使っています。
と言う事だ、分かったかね?
0748927
2007/09/18(火) 16:30:19レスありがとうございます。
公約数返せてないですか・・・。
問題文すべて書きますね。
コマンドプロントで2つのmとmを読み込み、ユークリッドの交互方を使って
その最大公約数を求めるCプログラムを作成しなさい。
�@mをnで割った余りをrとする。
�Ar=0ならば、nが求める最大公約数になる。
�Br!=0ならば、nをmに代入して�@へ戻る。
追記で使っているコンパイラはbcc5.5で
言語はC++です。
よろしくお願い致します。
0749デフォルトの名無しさん
2007/09/18(火) 16:33:09>�Br!=0ならば、nをmに代入して�@へ戻る。
>727は戻ってないぞ。
0750948
2007/09/18(火) 16:34:090751727
2007/09/18(火) 16:35:20>>731
900番台ではありませんでした・・。
0752デフォルトの名無しさん
2007/09/18(火) 16:36:12こういうの見てるとBASICで書かれた糞プログラムを思い出す。
0753デフォルトの名無しさん
2007/09/18(火) 16:39:410754デフォルトの名無しさん
2007/09/18(火) 16:48:50#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;
}
0755デフォルトの名無しさん
2007/09/18(火) 17:00:13だから、>727は>748に書いてあるようには書かれていないぞ。
0756デフォルトの名無しさん
2007/09/18(火) 17:11:350757デフォルトの名無しさん
2007/09/18(火) 17:12:210758デフォルトの名無しさん
2007/09/18(火) 17:14:330759751
2007/09/18(火) 17:14:43すみません。
もしよろしければ>>748の�@�A�Bのやり方を教えていただけないでしょうか?
自分よくわかってないみたいです。
0760デフォルトの名無しさん
2007/09/18(火) 17:15:190761731
2007/09/18(火) 17:27:24#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に代入して
の部分はクリアできてるんだが、
>�@へ戻る。
の部分が欠けている。
0762デフォルトの名無しさん
2007/09/18(火) 18:09:08[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
特殊記号は、+、-、*、/、<、>、=、空白、,、.、:、;、'、(、)、(.、.)、:=、!=、<=、>=
文字定数はシングルクオテーションでくくられた中の文字のこと
整定数は整数
識別子はその他の文字
文字定数と特殊記号の判別が難しいと思います。
0763デフォルトの名無しさん
2007/09/18(火) 18:12:27>>673
0764751
2007/09/18(火) 18:22:43わかりやすい説明ありがとうございました。
本当に助かりました。
0765デフォルトの名無しさん
2007/09/18(火) 18:30:320766デフォルトの名無しさん
2007/09/18(火) 18:35:30しょっぱい実装なら1行ずつ読み込んでstrcmp()でも延々と回せば?
'が来たらフラグ管理でも。
0767デフォルトの名無しさん
2007/09/18(火) 18:50:57どう書けばいいか全然わからいんで具体的に教えてください…
0768デフォルトの名無しさん
2007/09/18(火) 19:05:46予約語は大文字小文字区別すんの?
「整定数は整数」って10進の整数のみ?というか負値も?
0769デフォルトの名無しさん
2007/09/18(火) 19:19:43ごめんなさい、書き忘れてました…
予約語は大文字のみです
整数は特に制限が無いんで、出てきた数をそのまま出力してください。
よろしくお願いしますm(__)m
0770デフォルトの名無しさん
2007/09/18(火) 19:32:47単項演算子 - を扱うかどうかを訊いてるんだ
あと、文字定数は 'abc' のように複数の文字が入ってても文字定数でいいのか
0771デフォルトの名無しさん
2007/09/18(火) 19:40:070772デフォルトの名無しさん
2007/09/18(火) 20:23:280773デフォルトの名無しさん
2007/09/18(火) 20:25:140774デフォルトの名無しさん
2007/09/18(火) 20:59:10その場合は
-は特殊記号
25は整定数
って出力してくださいm(__)m
0775デフォルトの名無しさん
2007/09/18(火) 21:09:02修正面倒なんで後は頑張ってくれ。疲れた
0776デフォルトの名無しさん
2007/09/18(火) 21:19:19ほんとお願いします…ヤバいです…
0777デフォルトの名無しさん
2007/09/18(火) 21:44:400778デフォルトの名無しさん
2007/09/18(火) 22:07:21どんな形でもいいです
例えば
文字定数は
〇〇
△△
◇◇
識別子は
●●
▲▲
とかでもいいですし、1文字づつ、△△は文字定数、●●は識別子、▲▲は識別子◇◇は文字定数
みたいな感じでお願いしますm(__)m
0779デフォルトの名無しさん
2007/09/18(火) 23:00:19どなたかほんとにお願いします…
0780デフォルトの名無しさん
2007/09/18(火) 23:02:540781デフォルトの名無しさん
2007/09/18(火) 23:06:010782デフォルトの名無しさん
2007/09/18(火) 23:12:13未定義の識別子はどうする?
それと、対になってないシングルクオーテーションは無いと仮定していいのか?('AAAだけみたいな文字列)
0783デフォルトの名無しさん
2007/09/18(火) 23:14:400784デフォルトの名無しさん
2007/09/18(火) 23:18:31面倒だから文字定数は 'x' のように間に1字しか入らないものとしようか
0785デフォルトの名無しさん
2007/09/18(火) 23:19:480786デフォルトの名無しさん
2007/09/18(火) 23:21:09未定義の識別子とはどのようなものですか?
一応、予約語、特殊記号、文字定数、整定数以外の単語
(意味のある単語も無い単語も【appleとかg8m1jtとか】)は識別子として出力してくださいm(__)m
対になっていないシングルクオテーションは、その場合
'は特殊記号
AAAは識別子
として出力してください。
よろしくお願いしますm(__)m
0787デフォルトの名無しさん
2007/09/18(火) 23:22:01[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以下とする
もう少し細かいところもあるのですが、たくさん書いてあるので随時聞いて
くださるとありがたいです。
自分でもやってみましたがうまくできなかったのでどなたか力を貸していただけると助かります。
0788デフォルトの名無しさん
2007/09/18(火) 23:25:28シングルクオテーションで定義された文字定数は>784が書いた1文字ではなく、複数の文字でもお願いします。
0789 ◆GRRPdDaVH.
2007/09/18(火) 23:32:06トリップつけときますm(__)m
0790デフォルトの名無しさん
2007/09/18(火) 23:53:58>.>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ああああ
------------------
0791デフォルトの名無しさん
2007/09/19(水) 00:06:05このクソコードでも提出して怒られて来い
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4936.c
あんまりテストしてないし、仕様に独自解釈がはいってるかもしれん
0792デフォルトの名無しさん
2007/09/19(水) 00:07:501年前はプログラミングに触れたこともなかった。
確かにプログラミング歴もあるだろうけど、
受験生みたいな勢いで学習すれば1ヶ月程度である程度書けるようになると思う。
0793デフォルトの名無しさん
2007/09/19(水) 00:11:010794デフォルトの名無しさん
2007/09/19(水) 00:11:420795デフォルトの名無しさん
2007/09/19(水) 00:11:57プログラムって数学的センスが必須だね
俺にはセンスのかけらもない事がわかった
0796791
2007/09/19(水) 00:14:38http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4937.c
0797デフォルトの名無しさん
2007/09/19(水) 00:17:03ありがとうございます☆ただ、ファイルはどこで読み込んでいるのでしょうか?あと、切り出したトークンをどのようなデータ、変数で返しているか教えてくださいm(__)m
0798デフォルトの名無しさん
2007/09/19(水) 00:18:210799デフォルトの名無しさん
2007/09/19(水) 00:18:220800デフォルトの名無しさん
2007/09/19(水) 00:19:350801791
2007/09/19(水) 00:23:04ファイルは標準入力で渡してくれ
データ型はenum TokenTypeとstruct Tokenの定義を
>>800
assert.hはassertマクロを定義するもの
0802デフォルトの名無しさん
2007/09/19(水) 00:23:100803デフォルトの名無しさん
2007/09/19(水) 00:28:140804デフォルトの名無しさん
2007/09/19(水) 00:32:16ちょっとは頭使え馬鹿。
0805デフォルトの名無しさん
2007/09/19(水) 00:33:550806デフォルトの名無しさん
2007/09/19(水) 00:36:44たぶん列挙体、共用体を習っていないと思う。
学校によっちゃassert.hを扱わないことも多いだろうし。
0807 ◆GRRPdDaVH.
2007/09/19(水) 00:44:05列挙体、共有体、assert.hを使用しないように、直せるでしょうか……
0808デフォルトの名無しさん
2007/09/19(水) 00:44:21このコード持って行ったら確実に突っ込み喰らうぞ。良い意味でも悪い意味でも
0809デフォルトの名無しさん
2007/09/19(水) 00:44:24ではすべて記述させていただきます。
>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以下とする
0810デフォルトの名無しさん
2007/09/19(水) 00:45:07・社員IDで昇順ソートした社員情報を表示すること
・検索する社員IDの入力を促すメッセージを表示すること
・ファイル読み込み
・空ファイル(1文字もデータが含まれていないファイル)の場合、その旨を表示して終了すること
・社員情報ファイルが存在しない場合にはその旨を表示して終了すること
・社員情報を格納する構造体配列の要素数は20で宣言する(レコード数より多く確保する)
・ソート
・社員IDで昇順する
・社員IDの比較には標準ライブラリ関数のstrncmp()を使用する
・ソート結果表示
・ソート後の社員構造体の要素を順番に表示する
0811デフォルトの名無しさん
2007/09/19(水) 00:45:38・検索の正否は関数の戻り値で判定すること
・成功の場合はポインタ渡しの引数に有効な整数(配列要素の位置)を設定すること
・検索のアルゴリズムはバイナリサーチにすること
・検索結果出力
・該当する社員情報が存在する場合、社員名を表示すること
・該当する社員情報が存在しない場合、その旨を知らせるメッセージを表示すること
・検索結果を表示するたびに、検索を繰り返すか確認すること。形式は問わない
・エラーメッセージ表示
・エラーメッセージからエラー内容が理解できる事
・以下の仕様変更を考慮する
・社員IDの長さが2-10の間で変化すること
・社員名の長さが20-40の間で変化すること
・レコード数が10-40の間で変化すること
・社員情報ファイルのファイル名を変更できる事
よろしくお願いします。
0812デフォルトの名無しさん
2007/09/19(水) 00:48:32[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
死ねば?
0813デフォルトの名無しさん
2007/09/19(水) 00:55:04僕、プログラムが大好きで独学しました!っていってこい。
0814デフォルトの名無しさん
2007/09/19(水) 00:55:450815791
2007/09/19(水) 00:56:05http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4939.c
氏んでね☆
0816デフォルトの名無しさん
2007/09/19(水) 00:58:11これはひどいプリプロセッサw
0818デフォルトの名無しさん
2007/09/19(水) 01:06:540819デフォルトの名無しさん
2007/09/19(水) 01:13:17いやブスだったんだけどさ
0820デフォルトの名無しさん
2007/09/19(水) 08:34:29そのセンスってのは天賦の才能じゃないよ
既存の知識の応用・既知の解決法からの類推(ないし単なるパクり)がほとんどであって
努力次第でどうにでもなる
0821デフォルトの名無しさん
2007/09/19(水) 08:51:021] 授業単元: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回にわけます。
0822821
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++)
0823デフォルトの名無しさん
2007/09/19(水) 08:54:51こんなもん分からんのは死んだ方がいいぞ
0824デフォルトの名無しさん
2007/09/19(水) 08:56:21間違いを何度もコピペ
0825デフォルトの名無しさん
2007/09/19(水) 09:40:06問題は括弧がおかしいことだ。
これだけで後は分かるだろ。
(2)各caseでbreakがないから全部デフォルトを通る。
まぁ、プログラム次第では別に間違ってないとも言い張れるかもね。
ってことで屁理屈弄するなら中括弧が閉じてねえ。
(3)あえて言うならsの内容をdに写してるのに、終了条件がdで決められて意味あんの?ってところ。
まぁ、これもプログラム次第では(ry
(4)俺も完全に自信持てないから適当にググったらでてきた。
ってことでググれカス。
(5)defineのMAXと12が繋がってる。
ってことで配列宣言できない。
中括弧閉じてねえ。
0826デフォルトの名無しさん
2007/09/19(水) 11:06:520827デフォルトの名無しさん
2007/09/19(水) 11:08:42>1を読んで出直してください。
0828デフォルトの名無しさん
2007/09/19(水) 11:09:360829751
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);
}
0830デフォルトの名無しさん
2007/09/19(水) 11:35:57saidaiが更新される箇所が一箇所しかないじゃないか
> if(r==0){
> saidai=n;
> }
0831デフォルトの名無しさん
2007/09/19(水) 11:37:45--
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が更新されているので更新結果が出力されている。
0832デフォルトの名無しさん
2007/09/19(水) 11:43:020833デフォルトの名無しさん
2007/09/19(水) 11:45:14プログラミング言語だけじゃなく日本語も不自由なのか?
0834デフォルトの名無しさん
2007/09/19(水) 11:46:45>828
0835デフォルトの名無しさん
2007/09/19(水) 11:48:060836デフォルトの名無しさん
2007/09/19(水) 11:50:25#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;
}
0837デフォルトの名無しさん
2007/09/19(水) 12:00:20宿題なら授業単元を書け。
業務課題なら会社名を晒せ。
0839デフォルトの名無しさん
2007/09/19(水) 12:32:14締め切り過ぎてるけどいいの?
0840デフォルトの名無しさん
2007/09/19(水) 12:34:030841デフォルトの名無しさん
2007/09/19(水) 12:47:20>839
ありがとうございます!
授業単元とはどんなことを書けばいいですか?><
期限は設計が今日まで、コーディングは明日までになったので大丈夫なんです^^
0842デフォルトの名無しさん
2007/09/19(水) 12:48:500843841
2007/09/19(水) 12:59:54アルゴリズム研修課題
社員検索
テキストファイルに記述された社員情報を構造体配列に格納し、検索する
です!
0844デフォルトの名無しさん
2007/09/19(水) 13:11:57084584
2007/09/19(水) 13:23:050846デフォルトの名無しさん
2007/09/19(水) 13:36:080847デフォルトの名無しさん
2007/09/19(水) 14:02:41#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;
}
0848841
2007/09/19(水) 14:04:22でもどうしても1にんじゃできなくて力をかりたいんです><
0849デフォルトの名無しさん
2007/09/19(水) 14:07:23ニュースになるぞw
0850809
2007/09/19(水) 14:14:52すごいです!!
会社名はやっぱさらしちゃまずいですよね^^;
よかった☆
0851デフォルトの名無しさん
2007/09/19(水) 14:32:18 ̄ ̄
なんだ、日本人じゃないのか。
0852809
2007/09/19(水) 14:55:171人=1にんでお願いします☆
0853デフォルトの名無しさん
2007/09/19(水) 15:08:39しかし、研修やった上でこんな課題すら解けないヤツを雇ってる会社があわれだな
0854デフォルトの名無しさん
2007/09/19(水) 15:20:55そんなもんじゃねえ?
大学生ですらろくにプログラムも書かずに就職する奴はいるし、ましてや高卒や専門は話にならんよ
0855デフォルトの名無しさん
2007/09/19(水) 16:50:20給料ドブに捨ててるみたいなもんだからな。
0856デフォルトの名無しさん
2007/09/19(水) 16:53:45無経験で就職なんて珍しくも無いが
プログラミングってダメな人は本当にダメだね
0857デフォルトの名無しさん
2007/09/19(水) 17:45:06研修中に分からない事をさも分かるかのような顔をして
その場だけ切り抜けても後で自分を含め周囲も迷惑するだけ
しったかしておいて後で猛勉強するタイプでもなさそうだ
向いてないなら取り返しがつかなくなる前に早めに諦めたほうがいいよ
0858デフォルトの名無しさん
2007/09/19(水) 18:00:150859デフォルトの名無しさん
2007/09/19(水) 18:00:21このスレを見ている人は類似スレも見てるからね
0860デフォルトの名無しさん
2007/09/19(水) 18:11:3420x20 ライフゲーム
画面の右端と左端、上端と下端は繋がっているものとする
1000世代まで標準出力に出力する
0861デフォルトの名無しさん
2007/09/19(水) 18:16:18俺は>>858ではないけど
それって球状になるんだよね?
あれ?ならないのか?
なってないようなきもするなw
0862デフォルトの名無しさん
2007/09/19(水) 18:19:25三次元にするとトーラスになる
平たく言うとドーナツ型
0863デフォルトの名無しさん
2007/09/19(水) 18:20:130864デフォルトの名無しさん
2007/09/19(水) 18:23:06[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] その他の制限: 他の課題を優先
0865デフォルトの名無しさん
2007/09/19(水) 18:31:01あああああ
そっかwww
ドーナツ型になるよなw
ありがと。
0866デフォルトの名無しさん
2007/09/19(水) 18:47:08#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;
}
0867864
2007/09/19(水) 19:05:18array の長さが30〜40くらいが限界かな?
暇があればもう少し効率の良いものを考えてみてください
( 入力例:
int array[100];
for (int i = 0; i < 100; ++i) array[i] = i % 4 - 2;
のとき 16777216 )
0868>>860
2007/09/19(水) 19:09:05#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;
}
0869デフォルトの名無しさん
2007/09/19(水) 19:20:42if((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;
じゃないかな?
0870デフォルトの名無しさん
2007/09/19(水) 19:26:15そうでした。
ありがとう。
0871デフォルトの名無しさん
2007/09/19(水) 19:47:06面白いなー
0872デフォルトの名無しさん
2007/09/19(水) 20:04:24もうちょっと勉強してこよう
0873デフォルトの名無しさん
2007/09/19(水) 20:40:570874デフォルトの名無しさん
2007/09/19(水) 21:55:52int array[200];
for (int i = 0; i < 200; ++i) array[i] = i % 4 - 2;
のとき 1073741824
で合ってる?
0875デフォルトの名無しさん
2007/09/19(水) 21:59:01( ゚A゚)y-・~~ 腹立つわーこいつらー…
ttp://love6.2ch.net/test/read.cgi/kao/1179929773/
0877デフォルトの名無しさん
2007/09/19(水) 22:19:050878874
2007/09/19(水) 22:28:03int 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
で合ってる?
0879デフォルトの名無しさん
2007/09/19(水) 23:16:32#include<stdio.h>
int min()
int a=12, b=8,wrk,*p_a =&a,*p_b = &b,*p_wrk = &wrk:
ですここからわかりませんお願い致します
0880デフォルトの名無しさん
2007/09/19(水) 23:19:09>>1を見て出直せ
0881デフォルトの名無しさん
2007/09/19(水) 23:45:43フイタwww
0882デフォルトの名無しさん
2007/09/20(木) 01:28:49int temp;
temp=*a;
*a = *b;
*b = temp;
}
0883デフォルトの名無しさん
2007/09/20(木) 01:35:32このスレに居る誰一人として、>>879のプログラムは判らんだろう。
0884デフォルトの名無しさん
2007/09/20(木) 02:09:08授業ちゃんと聞いてまつか?
0885デフォルトの名無しさん
2007/09/20(木) 02:29:10>>879が実行した気になればOKなんじゃね?
0887デフォルトの名無しさん
2007/09/20(木) 06:20:330888デフォルトの名無しさん
2007/09/20(木) 06:58:59コンパイラも手作りなんだろ?
0889874
2007/09/20(木) 09:32:30きれいに書けなかった…
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;
0890デフォルトの名無しさん
2007/09/20(木) 12:06:10ICPCなつもりで書いたんで変数名とかアレですけど、シンプルにはなると思う。
っつーか配列要らない……
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4946.c
0891デフォルトの名無しさん
2007/09/20(木) 13:08:52int num[]={0,0,-3,1,-2};
とか
int num[]={-1,-1,3};
とか
0892デフォルトの名無しさん
2007/09/20(木) 13:39:28使うのは直前の 6 つの値だけだから
>>874 に計算の途中経過を保存するための配列はいらないのには同意
途中で計算が合ってるかどうか訳がわからなくなったから、すべて残しておいた
ちなみに >>890 に >>891 を入力すると
int num[]={0,0,-3,1,-2}; -> 0
int num[]={-1,-1,3}; -> -1
になるよ
そういう入力を考えなくても良ければ >>874 ももう少しだけ簡単にできる
0893デフォルトの名無しさん
2007/09/20(木) 13:45:32[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] その他の制限:
0894デフォルトの名無しさん
2007/09/20(木) 13:49:40[2] 問題文(含コード&リンク):与えられた行列Aが対角化できるか判定する。
対角化できる必要十分条件は一次独立な固有ベクトルがDim(A)個存在する事
[3] 環境:なんでも
[4] 期限: 無期限
[5] その他の制限:行列Aは配列でも構造体でも。
0895デフォルトの名無しさん
2007/09/20(木) 13:52:35> テキストファイルから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;
}
0896デフォルトの名無しさん
2007/09/20(木) 13:54:080897デフォルトの名無しさん
2007/09/20(木) 13:54:16「Numeical Recipes in C」っていう本ににあったような気がする
スペルミスがあるかも
0898デフォルトの名無しさん
2007/09/20(木) 13:59:310899864
2007/09/20(木) 14:35:38>>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);
}
0900デフォルトの名無しさん
2007/09/20(木) 15:40:54[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] その他の制限:なし
0901デフォルトの名無しさん
2007/09/20(木) 16:10:21どこの学校か晒して欲しいね。
問題の権利は何かと面倒で、たとえば宿題にそのまんま
転用するのは色々と問題があるんだけどな。
0902デフォルトの名無しさん
2007/09/20(木) 16:40:34どういう問題があるんですかね。
0903デフォルトの名無しさん
2007/09/20(木) 16:50:500904デフォルトの名無しさん
2007/09/20(木) 16:53:09ググレカス
東大のwikiに載ってるよ。
本番でF問題解けなくて俺涙目。
0905デフォルトの名無しさん
2007/09/20(木) 16:57:020906デフォルトの名無しさん
2007/09/20(木) 16:59:50UVaとかPKUどうなるんだよww
0907デフォルトの名無しさん
2007/09/20(木) 17:00:23使っているようであれば問題だよ。
非公式の練習会くらいなら問題ないだろうけどさ。
0908デフォルトの名無しさん
2007/09/20(木) 17:01:54UVA, PKU は ACM に許可を取ってるよ。
0909デフォルトの名無しさん
2007/09/20(木) 17:14:01お前URLしか見てないんちゃうかと
0910デフォルトの名無しさん
2007/09/20(木) 17:14:36[2] 問題文(含コード&リンク):四則(加減乗除)演算を関数としてもっているプログラム。
実数と整数の両方に対応し、式と結果を表示する。
[3] 環境
[3.1] OS:WindowsVista
[3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
[3.3] 言語:C言語
[4] 期限:2007/09/27(木)
[5] その他の制限:関数,scanfを使います。
0911デフォルトの名無しさん
2007/09/20(木) 17:18:37どんな形式の入力で、どんな結果を出せばいいんだ
0912デフォルトの名無しさん
2007/09/20(木) 17:46:32例えば中学校で高校の入試問題をそのまま宿題にして出している、という感じか。
ちろっとググってみたが、長文問題で小説の一節を使ったりするのは許可がいるみたいだな。
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条だと思うが、「必要と認められる限度」とか「著作権者の利益を不当に害することとなる場合」とかよくわからん。
0913デフォルトの名無しさん
2007/09/20(木) 17:53:07いまのところACM/ICPCの問題では事例が無いけど
万が一ということが怖いのです。
ということで、例えば少しオフィシャルっぽい国内模擬練習会なんかは、
問題はすべてオリジナルで作り、類題がないこともチェックしてます。
(もちろん参加者にとって初見の問題にするという意味もあるんだけど)
0914デフォルトの名無しさん
2007/09/20(木) 17:56:55宿題程度が槍玉にされることはあんまないだろ
でも正式な試験とかだと許可云々が厳しくなるな
横断歩道で信号無視してんのと車乗って信号無視してるくらいの違いになる
0915910
2007/09/20(木) 18:00:34入力=>a
加減乗除選択
入力=>b
a○b=c
みたいな感じでしょうか。
関数は4つ必要みたいです。
0916デフォルトの名無しさん
2007/09/20(木) 18:00:47いい例だな
0917デフォルトの名無しさん
2007/09/20(木) 18:03:04>加減乗除選択
ここで何をするんだ
0918915
2007/09/20(木) 18:20:08このあたりで苦戦中してます。
0919デフォルトの名無しさん
2007/09/20(木) 18:24:55どうやって選択させるのかって聞いてるんだ
0920915
2007/09/20(木) 18:30:45printf(1.+ 2.- 3.* 4./);
scanf("%d",&x);
switch(x){
case 1:
+の関数呼び出し
〜(case 4まで)
}
できるかわかりませんが、このような形です。
0921デフォルトの名無しさん
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] その他の制限:特になし
0922デフォルトの名無しさん
2007/09/20(木) 18:51:410923デフォルトの名無しさん
2007/09/20(木) 19:08:02日本語読めるようになってから書き込めよ
0924デフォルトの名無しさん
2007/09/20(木) 19:11:050925デフォルトの名無しさん
2007/09/20(木) 19:13:54どこ?どこに書いてあるの?
ねえ教えて?
早く!早く教えて?
どこに書いてあるのかな?
ん?恥ずかしがらないでいいから教えて?
ね、ね?
それともあぶり出しかな?
おーい、早くおしえてよ!
0926デフォルトの名無しさん
2007/09/20(木) 19:18:410927デフォルトの名無しさん
2007/09/20(木) 19:21:46って書いてあるのに
>どこに向かって突くのか分からないから
とかいう奴には、どんなに詳しく書いても曖昧だろw
0928デフォルトの名無しさん
2007/09/20(木) 19:23:44むしろ説明してみ?できるならね
0929デフォルトの名無しさん
2007/09/20(木) 19:24:51これがベクトルになるって話
0930デフォルトの名無しさん
2007/09/20(木) 19:27:070931デフォルトの名無しさん
2007/09/20(木) 19:30:33要するに、第一象限くらいの話でしょ
0932デフォルトの名無しさん
2007/09/20(木) 19:30:440933デフォルトの名無しさん
2007/09/20(木) 19:31:180934デフォルトの名無しさん
2007/09/20(木) 19:31:320935デフォルトの名無しさん
2007/09/20(木) 19:33:53全然わかってねーw
0936デフォルトの名無しさん
2007/09/20(木) 19:34:52>>933
>>934
をお願いします。
0937デフォルトの名無しさん
2007/09/20(木) 19:35:130938デフォルトの名無しさん
2007/09/20(木) 19:35:34>>1
0939デフォルトの名無しさん
2007/09/20(木) 19:35:48>>1をお願いします
0940デフォルトの名無しさん
2007/09/20(木) 19:36:50恥ずかしいレスした奴が流そうと必死なのか?
0941デフォルトの名無しさん
2007/09/20(木) 19:38:01[2] 問題文:
二つの整数を読み込んで、後者が前者の約数かを表示するプログラムを表示しなさい。
等価演算氏や関係演算子が、1あるいは0の値を生成することを確認するプログラムを作成せよ。
整数値を読みこんで、その絶対値を表示しなさい。
[3] 環境
[3.1] OS:windows
[3.2] コンパイラ名とバージョン: (bcc32)
[3.3] 言語: C
[4] 期限: (2007年9月22日まで)
[5] その他の制限:
0942デフォルトの名無しさん
2007/09/20(木) 19:48:152.等価演算氏や関係演算子が、1あるいは0の値を生成することを確認するプログラム。
3.整数値を読みこんで、その絶対値を表示するプログラム。
0943912
2007/09/20(木) 20:17:18レスサンクス。やんない方がいい事みたいだな。
これだけだとなんなので、>>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;
}
0944デフォルトの名無しさん
2007/09/20(木) 20:22:45> 等価演算氏や関係演算子が、1あるいは0の値を生成する
これってC的にはどうなの?
1って保証あったっけ?
0945デフォルトの名無しさん
2007/09/20(木) 20:22:450946デフォルトの名無しさん
2007/09/20(木) 20:27:462つめ
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
printf("%d",(n>>(sizeof(n)*8-1))?~n+1:n);
return 0;
}
0947946
2007/09/20(木) 20:28:260948デフォルトの名無しさん
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);
}
0949デフォルトの名無しさん
2007/09/20(木) 20:38:48疑問に思ったら仕様書を確認しような。以下 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.
0950デフォルトの名無しさん
2007/09/20(木) 20:42:40二つ目
#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;
}
0951デフォルトの名無しさん
2007/09/20(木) 20:45:34#include <stdio.h>
int main(void)
{
int no1;
printf("整数を入力してください。:");
scanf("%d",&no1);
if (no1 == 0)
puts("0");
else
puts("1");
return (0)
}
0952デフォルトの名無しさん
2007/09/20(木) 20:51:380953デフォルトの名無しさん
2007/09/20(木) 20:56:450954デフォルトの名無しさん
2007/09/20(木) 20:59:23は、
-8とか-10と入力したら、
絶対値は、8です、とか10ですとか表示するプログラムのことです。
0955デフォルトの名無しさん
2007/09/20(木) 21:01:50int main(void)
{
int n;
scanf("%d", &n);
printf("絶対値は%dです", n < 0 ? -n : n);
return 0;
}
0956デフォルトの名無しさん
2007/09/20(木) 21:02:180957デフォルトの名無しさん
2007/09/20(木) 21:05:300958デフォルトの名無しさん
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桁で表示し、合計、平均、最大値、最小値は小数点の位置を合わせて表示する
0959デフォルトの名無しさん
2007/09/20(木) 21:10:420960デフォルトの名無しさん
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}
};
0961デフォルトの名無しさん
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入力された文字で始まる曜日があれば「頭文字が一致するのは以下の通りです」と表示し、
その次の行から頭文字が一致する曜日を全て表示する。
0962デフォルトの名無しさん
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] その他の制限:�@金種計算で必要な配列データは各自で最適だと思うものを用意する
0963デフォルトの名無しさん
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
----------------------------
0964デフォルトの名無しさん
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日を月曜日とする
カレンダーに必要な配列データなどは各自で最適だと思うものを用意すること
0965デフォルトの名無しさん
2007/09/20(木) 21:29:200966デフォルトの名無しさん
2007/09/20(木) 21:31:52#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;
}
0967デフォルトの名無しさん
2007/09/20(木) 21:46:470968デフォルトの名無しさん
2007/09/20(木) 22:06:06#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;
}
0969デフォルトの名無しさん
2007/09/20(木) 22:32:02[2] 問題文:
最初300個ある商品が、毎日何個かランダムに減っていき、
残り75個になったら、その3日後に250個たされるプログラムを作りなさい。
[3] 環境
[3.1] OS:windows
[3.2] コンパイラ名とバージョン: (bcc32)
[3.3] 言語: C
[4] 期限: (2007年9月22日まで)
[5] その他の制限:
よろしくお願いします。
0970デフォルトの名無しさん
2007/09/20(木) 22:32:490971969
2007/09/20(木) 22:35:44すいません減り幅は、0〜50です。
よろしくお願いします。
0972デフォルトの名無しさん
2007/09/20(木) 22:36:290973969
2007/09/20(木) 22:39:59何度もすいません。
75個以下になったらです。
0974デフォルトの名無しさん
2007/09/20(木) 22:42:140975969
2007/09/20(木) 22:48:37できるだけ早くお願いしたいんですけど。。。
0976デフォルトの名無しさん
2007/09/20(木) 22:49:390977969
2007/09/20(木) 22:54:20そのとおりですね。
5回250個足したら終了でお願いします。
0978デフォルトの名無しさん
2007/09/20(木) 23:04:10最初300個ある商品が、毎日何個かランダムに減っていき、
残り75個になったら、その3日後に250個たされるプログラムを作りなさい。
すいません減り幅は、0〜50です。
75個以下になったらです。
単語の抽出
最初 300個 商品 毎日 何個 ランダム
残り 75個 3日後 250個
減り幅 0〜50
75個以下
0979デフォルトの名無しさん
2007/09/20(木) 23:06:240980969
2007/09/20(木) 23:11:510〜50の間であればいいんですけど。。。
0981デフォルトの名無しさん
2007/09/20(木) 23:20:52#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;
}
0982デフォルトの名無しさん
2007/09/20(木) 23:50:04for(day=1;inc_times<3;day++)
↓
for(day=1;inc_times<5;day++)
C/C++の宿題を片付けます 96代目
http://pc11.2ch.net/test/read.cgi/tech/1190331997/
0984デフォルトの名無しさん
2007/09/21(金) 11:04:17これも酷いな……。
こっちまでブルーになる。
0985デフォルトの名無しさん
2007/09/21(金) 11:31:160986デフォルトの名無しさん
2007/09/21(金) 11:40:510987デフォルトの名無しさん
2007/09/21(金) 14:07:42C#の問題といてくれるスレはないの?
0988デフォルトの名無しさん
2007/09/21(金) 14:13:08自分でやれカス
0989デフォルトの名無しさん
2007/09/21(金) 14:13:110990デフォルトの名無しさん
2007/09/21(金) 17:02:09#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"
);
}
0991デフォルトの名無しさん
2007/09/21(金) 20:32:55[2] 問題文(含コード&リンク):
#include <stdio.h>
int main(void)
{
int num;
printf("整数:"); scanf("%d",&num);
if (num)
printf("その数は0ではない。");
else
printf("その数は0。");
return (0);
}
をif分ではなく、条件演算子を用いて書き換えよ。
[3] 環境:Windows Bcc C
[4] 期限: (2007年9月25日まで)
[5] その他の制限:
0992デフォルトの名無しさん
2007/09/21(金) 20:41:44if〜elseのところを
num ? printf("その数は0ではない。") : printf("その数は0。");
にすればいい。
0993デフォルトの名無しさん
2007/09/21(金) 20:47:45教科書に載ってるからやらないといけないんだろ。専門学校とかは
0994デフォルトの名無しさん
2007/09/21(金) 21:05:14printf( "その数は0%s。", num ? "ではない" : "" );
0995デフォルトの名無しさん
2007/09/21(金) 21:06:34printf("その数は0%s。", num?"ではない":"");
0996デフォルトの名無しさん
2007/09/21(金) 21:26:16#include <stdio.h>
#include <ctype.h>
int main(void){
char week[7][10] = {
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"
};
int i, moji, count=0;
printf("半角英数字を一文字入力してください : ");
fflush(stdout);
moji=getchar();
for(i=0;i<sizeof(week)/sizeof(week[0]);i++){
if(toupper(week[i][0])==toupper(moji)){
if(count==0) printf("頭文字が一致するのは以下の通りです\n");
printf("%s\n", week[i]);
count++;
}
}
if(count==0) printf("頭文字が一致する曜日はありませんでした\n");
return 0;
}
0997デフォルトの名無しさん
2007/09/21(金) 21:38:54#include <stdio.h>
int main(void){
int ten[5][3] = {
{55,67,75},
{30,41,55},
{90,85,88},
{77,75,72},
{95,65,89}
};
int i, j, sum;
printf("国語 数学 英語 | 合計\n");
printf("------------------+------\n");
for(i=0;i<5;i++){
for(j=0,sum=0;j<3;j++) printf("%4d ", ten[i][j]), sum+=ten[i][j];
printf("| %4d\n", sum);
}
return 0;
}
0998デフォルトの名無しさん
2007/09/21(金) 22:04:27#include <stdio.h>
int main(void){
int num[10];
int i, j, temp, sum;
for(i=0;i<10;i++){
while(1){
scanf("%d", &num[i]);
if(0<=num[i] && num[i]<=100) break;
printf("ERROR : 0以上かつ100以下の数値を入力して下さい\n");
}
}
for(i=0;i<10-1;i++){
for(j=0;j<10-1-i;j++){
if(num[j]<num[j+1]){
temp=num[j];
num[j]=num[j+1];
num[j+1]=temp;
}
}
}
for(i=0,sum=0;i<10;i++) sum+=num[i];
printf("合計 %5d\n平均 %8.2f\n最大値 %3d\n最小値 %3d\n", sum, sum/10., num[0], num[10-1]);
return 0;
}
0999デフォルトの名無しさん
2007/09/22(土) 00:42:091000デフォルトの名無しさん
2007/09/22(土) 00:42:3310011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。