――【注意点】―――――――――――――――――――――――――
・質問は必ず【質問テンプレ】に従ってください。
・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
・複雑なAAはスレが荒れたり問題が埋もれる原因になりますので使用を控えてください。
―――――――――――――――――――――――――――――――
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS:Windows/Linux/等々
[3.2] コンパイラ(バージョン):
[3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:yyyy年mm月dd日hh:mmまで または 無期限 のいずれか
[5] その他の制限:どこまで習っているか、等々
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm 【前スレ】
C/C++の宿題を片付けます 44代目
http://pc8.2ch.net/test/read.cgi/tech/1116914132/ 【歴代スレは
>>2-13】
乙
6 :
デフォルトの名無しさん:2005/06/08(水) 04:27:39
[1] 授業単元:Advanced Programming
[2] 問題文(含コード&リンク):
STLのvectorはCOMPOSITEパターンの一つといえるか。また理由も述べよ。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):BCC5.5
[3.3] 言語:C++
[4] 期限:2005年06月10日10:00まで
[5] その他の制限:
C++は一通りやったと思います(まだまだ奥深いトピックあるのかもしれませんが)。
よろしくお願いします。
7 :
73:2005/06/08(水) 11:49:24
[1] 授業単元:配列?
[2] 問題文(含コード&リンク):n×nの大きさの実行例A、Bをキーボードより読み込んで
行列の積C=A×Bを計算し、その結果を画面に出力するプロ
グラムを作成しなさい。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C
[4] 期限:2005年6月14日18:30まで
[5] その他の制限:2次元配列とfor分は使うそうです。
あと、定数nは記号定数宣言のconstを使って
10に定義するそうです。
困っています。作成してくださったらうれしいです。ちゃんと後で
すべての意味を勉強します!
9 :
デフォルトの名無しさん:2005/06/08(水) 12:01:03
↓何がおかしい?
#include "smp.h"
main()
{
void USERF(double *,double *,double);
double x0,e;
int n,NMAX;
/*** ステップ1 データの入力 ***/
printf("\n初期値 x0 ");
scanf("\lf",&x0);
printf("\n収束判別計数 v =");
scanf("%\lf",&e);
printf("\n最大反復回数 NMAX = ");
scanf("%d",&NMAX);
/*** ステップ2 ニュートンラフソン法の計算 ***/
S_NEWT(&n,&x0,e,NMAX,USERF);
/*** ステップ3 計算結果の出力 ***/
printf("\n反復回数:N=%d 解:X(N)=%10.7lf",n,x0);
}
9の続き
/* < ニューソンラフソン法の関数 > */
void S_NEWT(int *n,double *x0,double e,int NMAX,double (*FUNC)())
/* n : スカラー 反復回数 (Out)
x0 : スカラー 初期値(解) (In/Out)
e : スカラー 収束判別定数 (In)
NMAX : スカラー 最大反復回数 (In)
FUNC : ユーザー定義関数 (In) */
{
double fun,dfun,xn,ans;
for(*n=0,xn=*x0;*n<NMAX;){
(*FUNC)(&fun,&dfun,xn);
*x0=xn-fun/dfun;
(*n) ++;
if(fabs(xn-*x0)>e)
xn=*x0;
else
break;
}
}
10の続き
/* < ユーザ定義の関数とその微分の関数 > */
void USERF(double *fn,double *dfn,double x)
/* fn : スカラー 方程式 (Out)
dfn : スカラー 方程式の微分 (Out)
x : スカラー 入力値 (In) */
{
double x2;
x2=x*x;
*fn=x2*x-1,0;
*dfn=3.0*x2;
return;
}
12 :
デフォルトの名無しさん:2005/06/08(水) 12:48:09
14 :
デフォルトの名無しさん:2005/06/08(水) 13:31:11
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
[2.1]有理数の乗算を求めるプログラムを作りなさい。
[2.2]氏名・住所・電話番号からなる住所録の構造体を定義して、住所録データを入力できるようにしなさい。
[3] 環境
[3.1] OS:Windows XP home
[3.2] コンパイラ(バージョン):VC++ 6.0
[3.3] 言語:C
[4] 期限:今日中
[5] 構造体まで習いました。ポインタも大丈夫です。
よろしくおねがいします。
15 :
デフォルトの名無しさん:2005/06/08(水) 13:52:17
>>9 まづは
printf("\n初期値 x0 ");
scanf("\lf",&x0);
printf("\n収束判別計数 v =");
scanf("%\lf",&e);
↓
printf("\n初期値 x0 ");
scanf("%lf",&x0);
printf("\n収束判別計数 v =");
scanf("%lf",&e);
16 :
15:2005/06/08(水) 14:11:44
>>9 そんなもんかな。smp.hの中身がようわからんが、
プログラムの都合悪いところはこの中で解決されて
いるとしとこう。
17 :
15:2005/06/08(水) 14:44:36
18 :
デフォルトの名無しさん:2005/06/08(水) 14:57:57
[1] 授業単元:
[2] 問題文: 九九の表を作りなさい。
かけ算は交換可能なので、上側の半分だけに結果を書くこと。
[3] 環境
[3.1] Linux
[3.2] イーマックス(?)
[3.3] 言語:C
[4] 期限:2005年6月13日
[5] その他の制限:反復型プログラムまで
どなたかお願いします。
#include <stdio.h>
int main( void )
{
int i,j;
for ( i = 1; i <= 9; i++ ) {
for ( j = 1; j < i; j++ )
printf( " " ); // スペース9個
for ( ; j <= 9; j++ )
printf( "%2dx%2d=%2d ", i, j, i * j );
printf( "\n" );
}
}
>>14 [2.1]
typedef struct _rational { int numerator, denominator; } rational;
int gcd( int m, int n )
{
int rem;
if ( m < 0 ) m *= -1;
if ( n < 0 ) n *= -1;
while ( n ) { rem = m % n; m = n; n = rem; }
return m;
}
rational multiple( rational * r1, rational * r2 )
{
int n, d, x;
rational result;
n = r1->numerator * r2->numerator;
d = r1->denominator * r2->denominator;
x = gcd( n, d );
result.numerator = n / x;
result.denominator = d / x;
return result;
}
>>14 [2.2]
#define GET( s ) fgets( s, sizeof( s ), stdin ); \
s[ strlen( s ) - 1 ] = '\0'
typedef struct _record { char name[ 1024 ],
address[ 1024 ], phone[ 1024 ]; } record;
void input_record( record * r )
{
GET( r->name );
GET( r->address );
GET( r->phone );
}
>>18 int i, j;
for ( i = 1; i <= 9; i ++ )
{
for ( j = 1; j <= 9; j ++ )
if ( i <= j )
printf( "%3d", i * j );
else
printf( " ." );
putchar( '\n' );
}
23 :
18:2005/06/08(水) 16:15:01
19さん、22さんありがとうございます。
24 :
9:2005/06/08(水) 17:53:11
15さんありがとうございます!
unsignedのchar name[]にgets(name)で漢字の文字列を代入するプログラムを作りたいのですが。
漢字以外の文字列が代入された場合に「漢字のみで入力して下さい」と表示させる方法がわかりません。
taro→漢字のみです
太郎→OK
お力を貸してください・・・
>>25 なぜgets・・・
っていうか文字コードは何なんだ?
[1] 授業単元:プログラミング
[2] 問題文:n個の文字列を読み込み、読み込んだ文字列を反転させる。
(実行例)
何個の文字列を入れますか? 2
1個目の文字列を入れなさい tokyo
文字列を反転しました oykot
2個目の文字列を入れなさい oosaka
文字列を反転しました akasoo
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):cc
[3.3] 言語:C言語
[4] 期限:なるべく早めに。
[5] その他の制限:変数、条件文、関数、配列。
反転がいまいちわかりません。
お願いします。
>>26 授業でgetsを使っていたので合わせたほうがいいかと思っていたのですが、
特に指定はないです。すいません。
文字コードはアスキーコード使ってます。
アスキーコードで漢字てあんた・・・
>>27 char *strrev(char *s)
{
char *p, *q;
char tmp;
if (!s || !*s)
return s;
for (p = s, q = s + strlen(s) - 1; q > p; ++p, --q) {
tmp = *p;
*p = *q;
*q = tmp;
}
return s;
}
>>28 ひとまずWindowsかLinuxか言ってみれ。
大方Shift-JISかEUCだろうから。
あと、getsはお勧めしない。まー個人的に使うなら別にいいけど。
>>29 アスキーコードとかぶらないように128以上になったら
漢字とみなすようにとのことでした。
まぎらわしい書き方ですいません・・・orz
>>31 Windowです。一番大切なことを書いていませんでしたね。申し訳ないです・・・
>>33-34 条件書いてませんでしたね・・・吊ってきます・・・orz
[1] 授業単元:プログラミング
[2] 問題文:e^(a+bi)のマクローリン展開を求める関数Cexpとその逆関数
Clogを作成せよ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:2005年6月9日
[5] その他の制限:累乗関数、階乗関数等を使用しないこと。
以下は途中まで書いたコードです。
38 :
37:2005/06/08(水) 20:05:55
#include <stdio.h>
typedef struct FCOMPLEX {double r,i;} fcomplex;
fcomplex Cexp(fcomplex x);
fcomplex Clog(fcomplex x);
int main(void)
{
fcomplex x;
printf("x.rの値を入力してください:");
scanf("%lf",&x.r);
printf("x.iの値を入力してください:");
scanf("%lf",&x.i);
printf("%lf + %lfi\n",Cexp(x, y).r,Cexp(x, y).i);
printf("%lf + %lfi\n",Clog(x, y).r,Clog(x, y).i);
return 0;
}
fcomplex Cexp(fcomplex x)
{
fcomplex a;
return a;
}
fcomplex Clog(fcomplex x)
{
fcomplex b;
return b;
}
39 :
37:2005/06/08(水) 20:11:25
間違えました。15、16行目は
printf("%lf + %lfi\n",Cexp(x).r,Cexp(x).i);
printf("%lf + %lfi\n",Clog(x).r,Clog(x).i);
です。
よろしくおねがいします。
必要な情報の後だし禁止。
41 :
40:2005/06/08(水) 20:14:39
42 :
デフォルトの名無しさん:2005/06/08(水) 20:55:36
[1] 授業単元:プログラミング
[2] 文字列をキー入力し,
① その文字列とその長さを出力した後,
② 文字列を逆順にした文字列を出力する
プログラムを作りなさい。
ただし、プログラムの仕様は以下の通りです。
(1) 最大文字列長を超える異常入力がされたかどうかのチェックは必ずしも必要としない。
(2) 逆順にした文字列を格納する配列は、別の名前で宣言して使用すること。
(3) 配列サイズは各自で設定して構わない。
[動作の具体例]
入力文字列: abcabcabcabc
入力された文字列: abcabcabcabc
文字列の長さ: 12
逆順に並べ替えた文字列: cbacbacbacba
[3.1] OS:Windows XP home
[3.2] コンパイラ(バージョン):VC++ 6.0
[3.3]C++
[4] 期限:2005年6月9日
よろしくお願いします
43 :
デフォルトの名無しさん:2005/06/08(水) 21:16:18
>>42 こんな感じで。
#include <stdio.h>
#include <string.h>
#define ARRAYLEN (1024)
int main(){
char buf[ARRAYLEN],cpy[ARRAYLEN];
int i,len=0;
printf("入力文字列:");
scanf("%s",buf);
len=strlen(buf);
printf("入力された文字列:%s\n",buf);
printf("文字列の長さ:%d\n",len);
for(i=0;i<len;i++){
cpy[i]=buf[len-i-1];
}
cpy[len]='\0';
printf("逆順に並べ替えた文字列:%s\n",cpy);
return 0;
}
44 :
12:2005/06/08(水) 21:18:01
>>42 #include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
string s;
cin >> s;
cout << "入力された文字列: " << s << endl;
cout << "文字列の長さ: " << s.size() << endl;
reverse(s.begin(), s.end());
cout << "逆順に並び替えた文字列: " << s;
return 0;
}
>>42 C++だったのか。折角作ったからage。
#include <string>
#include <iostream>
#include <algorithm>
int main(){
std::string buf,cpy;
std::cout<<"入力文字列:"<<std::endl;
std::cin>>buf;
std::cout<<"入力された文字列:"<<buf<<std::endl;
std::cout<<"文字列の長さ:"<<buf.length()<<std::endl;
cpy=buf;
std::reverse(cpy.begin(),cpy.end());
std::cout<<"逆順に並べ替えた文字列:"<<cpy<<std::endl;
return 0;
}
47 :
前スレ972:2005/06/08(水) 21:34:19
[1] ~ [3]前スレと同じ
[4] 期限:2005年6月9日
[5]chk_moreの部分を戻り値1個、引数1個だけということで
作り直しと言われて作ってみたのですが、間違っているみたいで
動きません。よろしくお願いします。
// 引数1:比較対象の文字列
// 戻り値:bool型 ture:"more"/false:"more"以外
bool chk_more(char more_str[])
int i = 0;
{
if(str[i] == true)
i ++;
return true;
else
i++;
return false;
}
[1] 授業単元:プログラミング
[2] 問題文:入力した文字列を配列に読み込みその中の特定した文字列を
指定した文字列に入れ替える。
文字列入力してください bokuha asa okirunoga turai
置き換える文字列 asa
置き換えたい文字列 yoru
置き換えた文字列 bokuha yoru okirunoga turai
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):cc
[3.3] 言語:C
[5] その他の制限:習ったのは条件文、配列、関数です。
条件は必要であればstrncpy、strlen、strncmp、strcatの関数を使ってもよい
初心者なのでお願いします・・・
49 :
デフォルトの名無しさん:2005/06/08(水) 21:45:16
こんな感じで。
static const char more = "more"
bool chk_more(char more_str[]) {
for(int i=0;i<4;i++){
if(more_str[i]!=more[i]){
return false;
}
}
return true;
}
50 :
42:2005/06/08(水) 21:48:03
>>43,43,46
有難うございます。
皆様の見ながら勉強させてもらいたいと思います
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
ローマ数字(I,II,III,IV,・・・)を入力すると、それに対応したアラビア数字(1,2,3,4・・・)を返すプログラムを作成せよ。
配列を使用し、どんなに大きな数でも対応できなければならない。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:06月17日まで
[5] その他の制限:
全スレで質問した内容と逆の課題が出ました。
今回は1000でも10000でも表示できるようにしなければならないため、予め全てを配列に格納するのではなく、
与えられたローマ数字を計算してやる必要があるそうです。
ヒントには、「ローマ数字の計算には”M D C L X V I”の7つを使ってるだけでよい」とありますが、どう使っていいのやらさっぱりです。
皆さんに任せっきりで申し訳ないのですが、宜しくお願いします。
[1] 授業単元:ゼミナールのプレゼンで必要
[2] 問題文:ランレングス法の考え方→文字列を読み込み、連続する部分があった場合連続数に直し、
結果を表示するプログラムを書け。例、abcdを入力→そのままabcdで出力 aabbを入力→a2b2で出力
aaabbcを入力→a3b2cを出力。
[3] 環境
[3.1] OS:Windows2000
[3.2] コンパイラ:Borland c++bulider
[3.3] 言語:C
[4] 期限:6月9日昼くらいまで
[5] その他の制限:情報処理の授業でcをやったくらいのレベル
明日のプレゼンで発表しようと思ったプログラムなのですが、連続するところの処理が
うまくいきません。元々、実現可能なプログラムなのかもわかりませんが・・・。今ゼミ室に
残ってこれを書いてたりします。わかる方がいればよろしくお願いします。
>>53 前にコード書いたヨ
ログを探してみると良いヨ
[1] 授業単元:プログラミング基礎
[2] 問題文:
24ビットと8ビットのbmpファイルがある。
このどちらを読み込んでも元画像をモノクロ化したbmp画像を出力せよ。
なお、bmp画像以外のファイル、対応してない形式のbmp画像、
これらを読み込んだ時「~という理由でファイルを生成できない」
といった内容のエラーメッセージを出力すること。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ:Visual C++
[3.3] 言語:C++
[4] 期限:2005年06月16日まで
[5] その他の制限:mallocを使用
これを落とすと留年してしまうのでどうかよろしくお願いします!
57 :
47:2005/06/08(水) 22:40:19
>>53 #include <stdio.h>
int main () {
char buf[256];
int i, n;
for (;;) {
printf("入力: ");
if (!fgets(buf, sizeof buf, stdin))
break;
printf("出力: ");
for (i = n = 0;; i++)
if (i && buf[i - 1] == buf[i])
n++;
else {
if (n)
printf("%d", n + 1);
if (!buf[i])
break;
n = 0;
putchar(buf[i]);
}
}
return 0;
}
59 :
デフォルトの名無しさん:2005/06/08(水) 22:45:04
>54さん >58さん
早速のご回答感謝です。今終電に乗って携帯からの書き込みなので、家につき次第すぐ試してみようと思います。ありがとうございましたm(_ _)m
文字列を十六進とみなして整数型にする方法ってライブラリとかでありますか?
atoiのようなもの
[1] 授業単元: データ構造とアルゴリズム
[2] 問題文(含コード&リンク):
ポインタを使って作成せよ。
1.要素数100個の文字配列を用意し、英語の一文を初期化します。
その文の中に出てくる単語の数を表示するプログラム。
2.要素数10個の整数配列を用意し、その要素を昇順に並べ替えるプログラムを
基本選択法により作成。
3.A~Eさんの3教科のテストの点数が初期設定された2次元配列を用意し、3教科の合計を
ひとりずつ表示させる。
[3] 環境
[3.1] OS:Unix
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:2005年6月10日
[5] その他の制限:なし
すみませんが手助けお願い致します
>>55 #include <windows.h>
#include <stdio.h>
#pragma comment (lib, "user32.lib")
#pragma comment (lib, "gdi32.lib")
int main(int argc, char **argv) {
if (argc != 3) {printf("%s InputFile OutputFile\n", *argv); return EXIT_FAILURE;}
HBITMAP hBmp = (HBITMAP)LoadImage(NULL, argv[1], IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_MONOCHROME);
if (!hBmp) {printf("ファイルがロードできない\n"); return EXIT_FAILURE;}
BITMAP bm;
GetObject(hBmp, sizeof bm, &bm);
int size = bm.bmHeight * ((bm.bmWidthBytes + 3) & ~3);
void *bits = malloc(size);
if (!bits) {printf("メモリ無さ杉\n"); return EXIT_FAILURE;}
struct {BITMAPINFOHEADER b; RGBQUAD c[2];} bi =
{{sizeof bi.b, bm.bmWidth, bm.bmHeight, 1, 1},{{255, 255, 255}}};
HDC hDC = GetDC(NULL);
GetDIBits(hDC, hBmp, 0, bm.bmHeight, bits, (BITMAPINFO *)&bi, DIB_RGB_COLORS);
ReleaseDC(NULL, hDC);
DeleteObject(hBmp);
FILE *fp = fopen(argv[2], "wb");
if (!fp) {printf("ファイルがオープンできない: %s\n", argv[2]); return EXIT_FAILURE;}
BITMAPFILEHEADER bf = {'MB', sizeof bf + sizeof bi + size, 0, 0, sizeof bf + sizeof bi};
fwrite(&bf, sizeof bf, 1, fp);
fwrite(&bi, sizeof bi, 1, fp);
fwrite(bits, size, 1, fp);
fclose(fp);
free(bits);
return EXIT_SUCCESS;
}
65 :
61:2005/06/08(水) 23:33:03
>>63 モノクロ化というかニ値化しているような気がするのは気のせいか
>>52 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main () {
const char *roman = "IVXLCDM";
static const int arabic[] = {1, 5, 10, 50, 100, 500, 1000};
const char *r, *b;
char buf[256];
int n;
printf ("ローマ数字: ");
fgets (buf, sizeof buf, stdin);
n = 0;
for (b = buf; *b && *b != '\n'; b++) {
r = strchr (roman, *b);
if (!r) {printf("知らない文字: %c\n", *b); return EXIT_FAILURE;}
if (*r != 'M' && ~((r - roman) & 1) && (b[1] == r[1] || b[1] == r[2]))
n -= arabic[r - roman];
else
n += arabic[r - roman];
}
printf ("アラビア数字: %d\n", n);
return 0;
}
>>66 LR_MONOCHROME - イメージをモノクロでロードします。
グレイスケールにしろなどとは問題文のどこにも書いていないわけだが。
70 :
デフォルトの名無しさん:2005/06/09(木) 00:11:37
>>62@2
手を抜いた。
#include <stdio.h>
/*see
ttp://wisdom.sakura.ne.jp/solution/algorithm/algorithm6.html*/ int* maxSort(int *ary , int last_index) {
int i , j , tmp;
for (i = 0 ; i < last_index - 1 ; i++) {
for (j = i + 1 ; j < last_index ; j++) {
if (*(ary + i) > *(ary + j)) {
tmp = *(ary + i);
*(ary + i) = *(ary + j);
*(ary + j) = tmp;
}
}
}
return ary;
}
void printArray(int* ary,int n){
int i;
for(i=0;i<n;i++){
printf("%d ",ary[i]);
}
puts("");
}
int main(){
int array[10]={10,2,4,58,6,24,8,25,85,1};
printArray(array,10);
maxSort(array,10);
printArray(array,10);
return 0;
}
あ、インデントすっ飛んだ。
72 :
デフォルトの名無しさん:2005/06/09(木) 00:22:06
>>62@3
こんな感じか?
#include <stdio.h>
static int subject[5][3]={
/*A*/{100,80,90},
/*B*/{50,40,95},
/*C*/{80,80,80},
/*D*/{70,80,70},
/*E*/{100,100,100},
};
int main(){
int i,sum;
for(i=0;i<5;i++){
sum = subject[i][0]+subject[i][1]+subject[i][2];
printf("%cの合計:%d\n",'A'+i,sum);
}
}
>>73 締め切り書いてないからいつでもOKなんだよ。遅くない。
75 :
48:2005/06/09(木) 01:32:46
76 :
デフォルトの名無しさん:2005/06/09(木) 01:53:52
「単元名」基礎プログラミング
「期限」6月9日午後4時
C言語
ポインタと配列?
課題
3×3の行列A、B、CのためにINT型の二次元配列を3個用意し、C=A^t(Aの転置行
列)、C=A+B(AとBの行列和)、C=A*B(AとBの行列積)の計算結果を表示するプ
ログラムを作成し、実行しなさい。ただし、配列の要素へのアクセスにはポイン
タを使用し、また、各要素は100以下であるものとします。
78 :
デフォルトの名無しさん:2005/06/09(木) 02:04:53
namespaceについて質問です。
下記のように実装した場合、operatorでprivateメンバに
アクセスできない旨エラーがでるのですが、どなたか
解決方法が分かる方いらっしゃいませんでしょうか。
namespace nsBBB
{
class BBB
{
public:
BBB(void);
virtual ~BBB(void);
friend bool operator==(const BBB& left, const BBB& right);
private:
string bbb;
};
}
79 :
78:2005/06/09(木) 02:47:55
すいません、自己解決しました。
cpp側でnamespaceで括ればよかっただけでした。
namespace nsBBB{
bool
operator==(const BBB& left, const BBB& right)
{
;
}
}
using nsBBB::BBBで問題ないと思い込んでいました・・・
80 :
67:2005/06/09(木) 05:01:53
>>52 >>67 は間違い。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main () {
const char *roman = "IVXLCDM";
static const int arabic[] = {1, 5, 10, 50, 100, 500, 1000};
const char *r, *b;
char buf[256];
int n;
printf ("ローマ数字: ");
fgets (buf, sizeof buf, stdin);
n = 0;
for (b = buf; *b && *b != '\n'; b++) {
r = strchr (roman, *b);
if (!r) {printf("知らない文字: %c\n", *b); return EXIT_FAILURE;}
if (*r != 'M' && !((r - roman) & 1) && (b[1] == r[1] || b[1] == r[2]))
n -= arabic[r - roman];
else
n += arabic[r - roman];
}
printf ("アラビア数字: %d\n", n);
return 0;
}
81 :
ななし:2005/06/09(木) 11:45:55
[1] 授業単元:コマンド
[2] 問題文(含コード&リンク):3行3列の行列を二つ掛け合わせる
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン): cygwin
[3.3] 言語:C
[4] 期限:今日の正午
お願いします・・・・
#define N 3
void mul(int a[N][N], int b[N][N], int c[N][N])
{
int i,j,k;
for(i=0;i<N;i++){
for(j=0;j<N;j++){
a[i][j]=0;
for(k=0;k<N;k++){
a[i][j]+=b[i][k]*c[k][j];
}}}
}
84 :
52:2005/06/09(木) 12:10:30
>>80 修正ありがとうございます。
何度もお手数おかけして申し訳ありませんでした。
85 :
73:2005/06/09(木) 12:11:36
>>48 訂正っす
//検索
char*
search(const char* source,const char* word){
size_ti,k;
const size_tlength = strlen(word);
const size_tlengthSource = strlen(source);
if(lengthSource >= length){
const size_tend = lengthSource - length;
for(i=0;i<=end;i++,source++){
if(*source == word[0]){
for(k=1;k < length;k++){
if(source[k] != word[k])
return NULL;
}
if(k == length) return source;
}
}
}
return NULL;
}
88 :
≠86:2005/06/09(木) 13:42:05
[1] 授業単元: データ構造
[2] 問題文(含コード&リンク):
1.キーボードorファイルから文字列を読み込む
2.読み込んだ文字列を辞書順にソートしてメモリ上に保持する
※文字列はローマ字
[3] 環境
[3.1] OS:WindowsXP SP2
[3.2] コンパイラ(バージョン):Microsoft Visual Studio .NET 2003
[3.3] 言語:C
[4] 期限:今日中
よろしくお願いします
91 :
55:2005/06/09(木) 15:23:39
92 :
デフォルトの名無しさん:2005/06/09(木) 15:37:15
「単元名」基礎プログラミング
期限6月15日
C言語
コンパイラ
ポインタと配列
課題
3×3の行列A、B、CのためにINT型の二次元配列を3個用意し、C=A^t(Aの転置行
列)、C=A+B(AとBの行列和)、C=A*B(AとBの行列積)の計算結果を表示するプ
ログラムを作成し、実行しなさい。ただし、配列の要素へのアクセスにはポイン
タを使用し、また、各要素は100以下であるものとします。
期限変更になりましたよろしくおねがいします(><)
94 :
86:2005/06/09(木) 16:08:23
>86,88,89,93
皆様ありがとうございました・゚・(ノД`)・゚・
96 :
C**:2005/06/09(木) 16:46:47
[1] 授業単元: 計算機数学序論
[2] 問題文(含コード&リンク):
1から12までの整数mをキーボードから入力して、
「m月の日数は?日です」と出力せよ!mが1~12
以外の時は、「入力に誤りあり」と出力せよ。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン):Microsoft Visual Studio .NET 2003
[3.3] 言語:C++
[4] 期限:今日中
[5]その他の制限:特になしでつ
皆さんより相当簡単だとは思うのですが
わかりません。よろしくお願いします!
97 :
89:2005/06/09(木) 16:50:08
>>82 >>93に指摘されたんで、一部訂正。ツリー構造ではない表記も。
int print_tree(node_t* a, int level)
{
int i;
putchar(a->op); // 逆ポーランド式
putchar('('); // *
if(a->left != NULL) print_tree(a->left, level + 1);
else printf(" %.1f", a->lnumber);
putchar(a->op); // 中間記法
if(a->right != NULL) print_tree(a->right, level + 1);
else printf(" %.1f", a->rnumber);
putchar(')'); // *
putchar(a->op); // ポーランド式
return 0;
}
*は中間記法で計算順を間違えないように。場合によっては冗長だけど面倒なので略。
書きたくない記法の行をコメントアウトすればOK。
>>94 ヒマってのもあるけど、これは他の課題に比べてまだ面白みがある。
#include <stdio.h>
int main(void) {
int m;
scanf("%d", &m);
switch(m) {
case 1:case 3:case 5:case7:case 8:case 10:case 12: printf("%d月の日数は31日です\n",m);break;
case 4:case 6:case 9:case 11: printf("%d月の日数は30日です\n",m);break;
case 2:puts("2月の日数は28日か29日");break;
default:puts("入力に誤りあり");
}
return 0;
}
100 :
C**:2005/06/09(木) 17:10:57
>>98 大変助かりました!
ありがとうございます!
C++だったらstream使わないと拙かったりしないのかな?
102 :
C**:2005/06/09(木) 17:39:07
[1] 授業単元: 計算機数学序論
[2] 問題文(含コード&リンク):
キーボードから自然数nを入力せよ。
キーボードからn個の実数を入力する。
k番目に入力させられた実数をXkとする。
この時 n
∑(-1)^k|Xk|
k=1 を求めて、出力せよ。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン):Microsoft Visual Studio .NET 2003
[3.3] 言語:C++
[4] 期限:今日中
[5]その他の制限:特になしでつ
>>98さん先ほどはありがとうございました!
これで最後なんですが、考えてもわかりません!
教えてください(´Д`)m
103 :
93:2005/06/09(木) 17:40:40
>>97 >ヒマってのもあるけど、これは他の課題に比べてまだ面白みがある。
禿同。
今頃
>>82は4人からコード書かれたから読み分けるのにかえって苦労してたりして。w
漏れのはある程度読みやすさ重視だし
>>82のコード再利用してるから(コピペしただけだがw)おすすめ。
カッコの対応も一番まともかと。
まあでも
B = 3 + 2
B = 2 * 5
みたいに同じ変数2回書かれたら開放し損ねがでるな。エラーチェック甘くていいって話だったけど甘すぎたか。
その点
>>89のリスト式のがいいのかも(そこまでちゃんと読んでないけど)。
っていうかループ対応ってどういうこと?方程式解かせるってこと?
>>102 int n;
cout << "n = "; cin >> n;
double sum = 0.0;
double x;
for (int k = 1; k <= n; k ++)
{
cout << "No." << k << " of " << n << " = "; cin >> x;
sum += ( k & 1 ? - fabs( x ) : fabs( x ) );
}
cout << "Result = " << sum << endl;
>>102 #include <iostream>
#include <cmath>
int main(int argc, char* argv[])
{
double sum, n;
double* x;
std::cin >> n;
x = new double[n];
for(int i = 0; i < n; i++)
{
std::cin >> x[i];
}
sum = 0.0;
for(int i = 1; i <= n; i++)
{
sum += std::pow(-1, i) * std::fabs(x[i - 1]);
}
std::cout << sum << std::endl;
delete[] x;
return 0;
}
106 :
47:2005/06/09(木) 19:57:26
moreだとかmoraだとか。その内maraに見えてきた。
// 3項以上の計算にもかかわらず"more"が無い("more"コードが見つかりません)
if(chk == false)
{ // <-------------------------------------------------------------
code_not(j, argv[j]);// "more"コードが見つかりません
return CAL_NG;
} // <-------------------------------------------------------------
これでどうなんだろ?
宿題じゃないんだけど Cで
「配列の型にかかわらず、全要素の平均値をdouble型で返す関数」
って作ることできますか? void *とか使ったんだけどうまくいかなかった...。
できたとしても、一般的にそーいう作り方はしないの?
Cの基本は理解できた気がするけど
実際に作るとなるとどーしていいのか分らないこと多すぎ...。
111 :
106:2005/06/09(木) 21:08:45
>>109 それは既に試しました。
データ:1 + 2 more more *2
結果:4番目に演算子ない
moreないのエラーがでます。
例:データ:1 + 2 mora *2
4番目にmoreがありませんのエラー
判定の関数自体は間違っていないみたいです。
例:データ:1 + 2 more * 2 more / 0
9番目に0でわるのエラー
よって、間違っているのは上に書いてある部分だと思われます。
more判定部以外の正常・異常テストは問題ありませんでした。
>>110 ポインタを渡すだけじゃ無理。型の情報も渡さないとダメ。
例えば、
double myfunc( void *dataarray, int datatype, int datalength )
{
switch ( datatype ) {
case 0 :
...
case 1 :
...
}
}
こんな感じ。
殆ど出来ているんですが、0以下の時の条件分岐を思い出して付け加えたら突然13行目にエラーが発生しました。
13行目はcout<<"入力された数値が~の所です。
何が違うのかサッパリ分らないので何方かご教授願います。
OSはwindows、言語はC++です。
/**********************************************************
*正の整数値を読み込み、その逆数を出力するプログラム*
**********************************************************/
#include<iostream>
using namespace std;
int main()
{
int m,d;
cout<<"整数値(正)を入力せよ:";
cin>>m;
if(m<=0)
cout<<"入力された値が正しくありません.処理を終了します."<<endl;
else{
while(m>0){
d=m%10;
m=m/10;
cout<<d;}
}
}
[1] 授業単元:アルゴリズム論
[2] 問題文(含コード&リンク):
分割した系列の後半を常に先にスタックに積む(pushする)場合の関数quicksort1 と
分割した系列の長さを比較して長い方を先にスタックに積む場合の関数quicksort2
の2通りの関数を作成しなさい
まらスタックの高さ(スタック内に入った要素の最大値)を求められるようにしなさい
プログラムの動作97,98,99,3,2,1,6,5,4,......93,92,91,96,95,94という
99個の数値の系列を用いて確認しなさい、
[3] 環境
[3.1] OS:Windows2000
[3.2] コンパイラ(バージョン):LSI C-86
[3.3] 言語:C
[4] 期限:2005年6月13日09:00まで
[5] その他の制限:特になし
どうかお願いしますm(_ _)m
116 :
110:2005/06/09(木) 21:32:35
>>112 ありがとうございます!
で、実際にこのような関数が必要になった場合どうします?
関数をint用とdouble用に作ると、型が違うだけなのに同じ処理をする関数が
あって気持ち悪い。けど、他の人が使うときは分り易いと思う。
逆に1つにまとめるとコード的にはスマートだけど、他の人が使うときに
datatype があることが不親切な気がすると考えてしまうんですけど。
こーいうプログラミングの
「文法的な意味じゃない"書き方"」
っていうーのを解説してる本を見たことないので...。
>>117 すいません逆数でなく入力された数値を逆に表示です。
あとテンプレに沿ってなくてスミマセン。
120 :
110:2005/06/09(木) 21:50:50
>>118 ありがとうございます。ただ、C++ではなくてCなんですよ。
上に書いた通り、人に分り易く作るか、人に少し気を使ってもらうか
によって選択すればよいのでしょうかね?
>>119 ソースファイルの拡張子を.cppにしてる?
>>120 議論がしたいんなら他のC言語スレでやってくれ。
ここは宿題スレだ。
123 :
113:2005/06/09(木) 21:55:01
スイマセン
本当話すのも下らないミスしてました。
解決済みなのでスルーしてください
>>116 どうしても纏めたければマクロ。
尚、移植性は悪くなるがintとdoubleのサイズが違う処理系なら
datatypeをsizeof(型)にする手もなくはない。
まぁ、私なら>118
C言語での宿題です。
よろしくお願いします。
10件ほどのリスト構造です。
バブルソート部分が出来ません。
先頭アドレスのみ関数に引数として渡します。
よろしくお願いします。
>>120 簡単な処理ならtypedefって手もあるが2つ同時に存在できない欠点がある。
>>124 sizeof() では signed と unsigned の区別がつきませんよ、と。
129 :
92:2005/06/09(木) 23:38:22
99さんそしてみなさん、ありがとうございます
>>106 //-----直すのは多分ここから----
// argv[]の3*n+1番目には"more"が来るので"more"か確認
else if(j % 3 == 1)
{
chk = chk_more(argv[j]);
// 3項以上の計算にもかかわらず"more"が無い("more"コードが見つかりません)
if(chk == false)
{ // <---------追加
code_not(j, argv[j]);// "more"コードが見つかりません
return CAL_NG;
} // <---------追加
}
if (chk == false) return CAL_NG; // <---------追加
}
//------ここまで-----
131 :
106:2005/06/10(金) 06:56:51
132 :
デフォルトの名無しさん:2005/06/10(金) 09:37:17
[1] 授業単元: 関数
[2] 問題文(含コード&リンク): 関数に任意の整数を渡すと2乗された値と、平方根を引数で返す関数を記述しなさい。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン): ?
[3.3] 言語:C
[4] 期限:2005/06/10
[5] その他の制限:
よろしくお願いします。
#include <stdlib.h>
struct
{
int pow;
double sqrt;
} PS;
PS pow_and_sqrt(int n)
{
return PS{ n*n, sqrt(n); }
}
こんな?
まさか一つの関数で2つの値を返せって課題じゃない気はするが、
もしそうだとしたらこんな具合だろうか。
>>133 「引数で返す」って言っているからこうじゃないか?
>>132 void math( int var, double *ppow, double *psqrt )
{
*ppow = pow( ( double )var, 2 );
*psqrt = sqrt( ( double )var );
}
>>134 平方値ごときにpow()を持ち出すのは如何な最中。
単純に(double) var * varで医院でね?
>>136 そんな事言っていたらキリが無い。
最終的にどうするかなんて質問者が決めれば良い。
普通は二乗如きでpowなんか使わないな
短く書けるわけでもないし遅くなるしヘッダは読まなきゃならないし
139 :
132:2005/06/10(金) 10:44:43
scanfの所がおかしい
142 :
デフォルトの名無しさん:2005/06/10(金) 12:59:30
[1] 授業単元: 上級プログラム演習
[2] 問題文(含コード&リンク):
640x480ドットの中のある位置に点A・点Bがある。
点A・Bは固定ではなく、ランダムな位置にあり、1~3ドットの速度で浮遊している。
なおそれぞれの座標はgetX('A'),getY('A'),getX('B'),getY('B')で常に取得可能とする。
点Aからは点Cを速度7ドットで一定の角度で射出する。
点Cは点Aの引力を受け周回軌道に乗りながら点Aを離れていく。
点A・B共に半径100ドットが引力の限界で点Cがそれを離れると惰性走行し続ける。
点Cが点Bの引力の範囲内に突入すると周回軌道の乗りつつ接近し、最後に衝突して点Cは消滅する。
なお、点Cが点A・B両方の引力圏に属する場合は遠いほうの引力が無視される。
以上の条件に基づき点Cの軌跡に点を打つCプログラムを作ること。
あまり例外などを考慮せず完結にコードを組むこと。
なお、点を打つ関数はpset( int x, int y )とする。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):VC++ 6.0
[3.3] 言語:Cのみ
[4] 期限:2005年06月13日
[5] その他の制限:
C/C++共にそこそこ経験あるのでおおよそ分かります。ただ点Cの角度と速度を求める計算が…
前々からCプログラミングの範疇を超えた難題吹っかけては
ネットとかで調べろとか言って困らすのが好きな教授なもので。orz
2週間自力で調べてきましたがそろそろ期限が近いので神頼みします。
どうかおながいします。
143 :
132:2005/06/10(金) 13:14:03
>>140 >>141 ありがとうございます!ようやくできました!
と思ったら平方根はいいのですが2乗の値が入力した数値そのまま表示されます。
pow()の書式も間違いないと思ったのですが・・・
>>142 速度の単位が良くワカランな・・・。
速度[Bit/Cycle]
引力(重力加速度)[Bit/Cycleの2乗]
点Aと点Bの重力加速度は任意。
点Cの射出角度はランダム
点Cの初速は7.0[Bit/Cycle]、点Aの引力圏を確実に超える値で点Aの引力を設定。
640x480の範囲を超えた場合は処理を終了。
点Bに到達できなくても良い。
で良いのかな?
点Bに確実に到達できる様にするのは勘弁してくれ。高卒には無理ポ。
半径100ドットの引力圏内にさえ入れば後は周回軌道に乗って当たるんだから
相当むちゃくちゃな方向に打たなければ当たりそうだが・・・
>>143 そりゃ平方根とったあと、その平方根を2乗してるんだから同じ値になるわな
147 :
142:2005/06/10(金) 14:37:26
>>144 そんな感じです。
点Cが引力圏に引っかかったかどうかの判定とかは何とか分かるんですが、
点Cの現在速度・角度を点AorBの引力でひん曲げて
周回軌道に乗せるあたりの計算がもうだめぽな状態ですorz
[1] 授業単元: 計算機数学序論
[2] 問題文(含コード&リンク):
英単語をハイフンで分ける方法のごく一部を考えましょう。次のリストはcで終わる
単語のハイフンによる分け方のルールを説明するものです。
et-ic al-is-tic s-tic p-tic -lyt-ic ot-ic an-tic n-tic c-tic at-ic
h-nic n-ic m-ic l-lic b-lic -clic l-ic h-ic f-ic d-ic -bic a-ic -mac i-ac
ルールは上の順で適用されます。たとえば、ethnicは左端からリストを見ていって、
h-nicが初めて一致するパターンなので、eth-nicとなります。clinicは、h-nicのパタ
ーンでもなく、次のn-icに一致するので、clin-icとなります。
標準入力から与えられた単語をハイフンで区切るプログラムはどのように書けばよいでしょう。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン):?
[3.3] 言語:C
[4] 期限:今日中
[5]その他の制限:よろしくお願いします
149 :
デフォルトの名無しさん:2005/06/10(金) 15:05:00
[1]授業単元:プログラミング演習
[2]問題文:配列とポインタ(C言語)
[3]環境 LINUX コンパイラ
[4]期限: 6月15日水曜日午後5時まで
作成お願い致します
20個の自然数を要素とする1次元配列ar[20]=
{57,563,381,239,345,821,881,979,447,461,221,683,743,379,597,149,223,127,231,159}
に関し、(1)要素の順番を変えずに表示させる。(2)降順(大から小)に表示させ
る(3)素数のみを昇順(小から大)に表示させる。(4)素数の和を表示させるプロ
グラムを作成し、実行する。ただし、int型のポインタ配列(例: int *par[20]を
定義し、ar[20]内の数の順序を変更するときは、ar[20]自体を全く変更させず、
par[20]の要素を操作すること、また、par[20],ar[20]以外の配列を定義、使用
することは認めない。
150 :
144:2005/06/10(金) 17:25:51
>>142 点Aの速度や移動している方向は不明って事で良いんだよね?
つまり、点Aから射出される点Cは、点Aの慣性の影響は受けないものとすると。
153 :
151:2005/06/10(金) 18:17:49
あー、
malloc返り血のチェック一箇所忘れたから追加しといてくれ。
それから、間違えて//コメント使ったから/**/にしといてくれ。
>>152 見方を変えれば単純な文字列置換だったんだな。
気づかなかった。
154 :
142:2005/06/10(金) 18:19:55
>>150 そうですね。
あまり例外などを考慮せず簡潔に、と問いに明記してあるので
書かれてないことは基本的に不定ないし考慮しない、で大丈夫なはずです。
156 :
144:2005/06/10(金) 19:46:22
>>156 簡単に書くにしても、誤りがあっちゃいかんだろ。万有引力とかradienとか円周率とか。
ちなみに
POINT_A_GRAVITY=G * Aの重さ * Cの重さ / (interval_ac * interval_ac)
redian → radian
3.1415926538 → 3.14159265358
で直るかな。POINT_A_GRAVITYはdefineじゃ無くなるからswitch内で計算したらいいと思う。Bも同様。
G(重力定数)、A~Cの重さは自由に設定して構わんだろう。
159 :
149:2005/06/10(金) 23:14:34
155さんありがとうございます。早速コンパイルしてみますw
[1] 授業単元: 情報処理基礎
[2] 問題文(含コード&リンク):テキストファイルからデータを読み込み基本統計量を計算する
プログラムを作成しプログラムと実行結果を提出
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン): bcc
[3.3] 言語:どちらでも可
[4] 期限:2005年6月13日まで
[5] その他の制限:クラスを使うこと
ポインタ関数やクラスの使い方などが全然わからず大苦戦ですorz
お手数かけますが是非ともよろしくおねがいします。
>>160 > [3.3] 言語:どちらでも可
>[5] その他の制限:クラスを使うこと
Cの方だとしたらclass使うのは無理だなぁ…
#define class struct …?
>>160 情報が少なすぎ。
>テキストファイル
フォーマット書け
>基本統計量
それだけじゃわからん。求めるもんを全部書け。
>>155 ("Four",&sum,1) の使いかた、目ウロコだった
("Four", &sum, 1) ね…
166 :
165:2005/06/11(土) 02:45:27
>>160 2箇所間違えた orz
double n = 0.0; って・・・ int n = 0; でいいわな。
double mean = (double) ... はキャストする必要なかった。
途中までintでやってて置換で直したら失敗。
反省。
167 :
144:2005/06/11(土) 07:50:12
>>157 マジスマン。脳内辞書の限界が・・・。
万有引力とかすっかり忘れてたよ。orz
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
M行N列の行列とN行M列の行列とのかけ算を行うプログラムを作成せよ。
M、Nは入力により自由な数を設定できるが、行列の各要素は乱数を用いること。ただし全て0にはならないようにすること。
なお、表示はM行N列の行列、N行M列の行列、それらの積全てを表示すること。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:6月14日
[5] その他の制限:M、Nは引数ではなくscanfで取得するようにしてください(引数をまだ習っていないため)
宜しくお願いします。
170 :
デフォルトの名無しさん:2005/06/11(土) 11:45:59
1] 授業単元: プログラミング実習
[2] 問題文(含コード&リンク): 地点Aから垂直方向に 初速度 V でボールを投げ上げたとき、到達する最高点はA地点から何メートルのところか。空気の抵抗は考えないことにする。
初速度Vを入力したとき到達する最高高度を表示するプログラムを作成せよ。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ(バージョン): 分からないです
[3.3] 言語:C++
[4] 期限:できればすぐに
[5] その他の制限:関数を習ったところです
171 :
15:2005/06/11(土) 12:00:03
>>170 #include <stdio.h>
#define g 9.80665
int main( void )
{
double v;
scanf( "%lf", &v );
printf("初速度 %lf m/s\n", v );
printf("最高点 %lf m\n", v*v/2.0/g );
return 0;
}
172 :
170:2005/06/11(土) 12:04:57
173 :
デフォルトの名無しさん:2005/06/11(土) 12:47:38
_______ __
// ̄~`i ゝ `l |
/ / ,______ ,_____ ________ | | ____ TM
| | ___ // ̄ヽヽ // ̄ヽヽ (( ̄)) | | // ̄_>>
\ヽ、 |l | | | | | | | | ``( (. .| | | | ~~
`、二===-' ` ===' ' ` ===' ' // ̄ヽヽ |__ゝ ヽ二=''
ヽヽ___// 日本
_____ _____ ______ _______
| ウェブ | | イメージ | | グループ | | ディレクトリ |
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
._________________
| │・検索オプション
└────────────────┘・表示設定
| Google検索 | I'm Feeling Lucky | ・言語ツール
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
○ウェブ全体から検索 ◎日本語のページを検索
174 :
デフォルトの名無しさん:2005/06/11(土) 16:20:15
[1] 授業単元:プログラミングI
[2] 問題文:3つの係数a,b,cをユーザーに入力させ対応する二次方程式
ax二乗+bx+c=0の根を出力するプログラムを書け。
(複素根となる場合は実根はないというコメントを出力すればよい)
[3] 環境:
[3.1] OS:UNIX
[3.2] コンパイラ(バージョン):
[3.3] 言語:C
[4] 期限:2005年6月13日
[5] その他の制限:条件判断処理を習った所です
よろしくおねがいします
175 :
15:2005/06/11(土) 16:34:21
>>174 #include <stdio.h>
#include <math.h>
int main( void )
{
double a,b,c,sol;
scanf( "%lf %lf %lf", &a, &b, &c );
sol = b*b-4.0*a*c;
if( sol > 0.0 ) {
sol = sqrt( sol );
printf( "%lf %lf\n", (-b + sol)/2.0/a, (-b - sol)/2.0/a );
}
else if ( sol == 0.0 ) {
printf( "%lf\n", -b/2.0/a );
}
else
printf( "実根はない\n" );
return 0;
}
>>174 浮動小数点数の引き算(つか異符号同士の加算)は避けられるなら避けた方がいいよ。
#include <stdio.h>
#include <math.h>
int main(void)
{
double a, b, c;
double sol, cond;
scanf("%lf %lf %lf", &a, &b, &c);
cond = b * b - 4 * a * c;
if (cond < 0) {
puts("実根はない");
return 0;
}
sol = ((b > 0)
? (-b - sqrt(cond)) / (2 * a)
: -(b - sqrt(cond)) / (2 * a));
if (cond == 0) {
printf("%f\n", sol);
} else {
printf("%f, %f\n", sol, c / a / sol);
}
return 0;
}
178 :
デフォルトの名無しさん:2005/06/11(土) 20:13:43
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):以下の二つの問のプログラムを作成せよ
(1)10個の要素よりなる配列a[ ]にデータを入れ、それをそっくりそのまま配列b[ ]にコピーする
プログラムを作れ。
(2)(1)の配列a[ ]の内容を逆の順序で配列b[ ]に格納するプログラムを作れ。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):?
[3.3] 言語:C
[4] 期限:2005年6月14日
[5] その他の制限:なし
よろしくお願いします。
(1)
#include <stdio.h>
int main(){
int a[10] = { 1,2,3,4,5,6,7,8,9,10 }, b[10], i, j;
for (i = 0; i < 10; i++) printf("a[%d]=%d ", i, a[i]);
putchar('\n');
for (i = 0; i < 10; i++) b[i] = a[i];
for (i = 0; i < 10; i++) printf("b[%d]=%d ", i, b[i]);
putchar('\n');
return 0;
}
(2)
for (i = 0, j = 9; i < 10; i++, j--) b[j] = a[i];
for (i = 0; i < 10; i++) printf("b[%d]=%d ", i, b[i]);
putchar('\n');
181 :
178:2005/06/11(土) 20:46:54
182 :
デフォルトの名無しさん:2005/06/11(土) 21:07:32
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
"I have a pen & pencil."という、文章データ内の文字列を置換する
という問題で、置換したい文字列を入力する。新しく入る文字列を入力
する。そうすると変換された文章を表示するというプログラムをつりたい。
たとえば、haveと入力し次にhadと入力すると"I had a pen & pencil."
と出力する。
このプログラムをmallocを使わないであらかじめ
文書のサイズを大きくとる方法を使い、同じ結果が
出るようにしなさい。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン):Microsoft Visual Studio .NET 2003
[3.3] 言語:C++
[4] 期限:月曜まで
[5]その他の制限:特になしです
問題文長くてすいません。ちょっと自分の手に負えないので
すいませんがよろしくお願いします。
183 :
ああ:2005/06/11(土) 21:08:38
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
"I have a pen & pencil."という、文章データ内の文字列を置換する
という問題で、置換したい文字列を入力する。新しく入る文字列を入力
する。そうすると変換された文章を表示するというプログラムをつりたい。
たとえば、haveと入力し次にhadと入力すると"I had a pen & pencil."
と出力する。
このプログラムをmallocを使わないであらかじめ
文書のサイズを大きくとる方法を使い、同じ結果が
出るようにしなさい。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン):Microsoft Visual Studio .NET 2003
[3.3] 言語:C++
[4] 期限:月曜まで
[5]その他の制限:特になしです
問題文長くてすいません。ちょっと自分の手に負えないので
すいませんがよろしくお願いします。
184 :
デフォルトの名無しさん:2005/06/11(土) 21:10:29
>>182,183
同じ書き込みしてすいません。
迷惑かけてごめんなさいです。
185 :
デフォルトの名無しさん:2005/06/11(土) 21:41:55
課題を作ったのですが、穴があるっていわれました・・、何か指摘があったら教えてもらえませんか?#include <stdio.h>
int main(void)
{ int i, j, k, arrayA[3][3], arrayB[3][3], arrayC[3][3];int *pA, *pB, *pC;
pA=(int *) arrayA;pB=(int *) arrayB;pC=(int *) arrayC;printf("Matrix A\n");
for (i=0; i<3; i++) {printf("Please input three elements in row#%d:", i+1);
scanf("%d %d %d", pA+3*i, pA+3*i+1, pA+3*i+2);}printf("Matrix B\n");
for (i=0; i<3; i++) { printf("Please input three elements in row#%d:", i+1);
scanf("%d %d %d", pB+3*i, pB+3*i+1, pB+3*i+2);}printf("Matrix C:transposed matrix of A\n");for (i=0;i<3;i++)
for (j=0; j<3;j++) *(pC+3*j+i)=*(pA+3*i+j);
for (i=0;i<9;i++) { if ((i+1)%3) printf("%6d", *(pC+i));
else printf("%6d\n", *(pC+i));}printf("\nMatrix C:sum of A and B\n");for (i=0;i<3;i++)
for (j=0; j<=3;j++) *(pC+3*i+j)=*(pA+3*i+j)+*(pB+3*i+j);for (i=0;i<9;i++) {
if ((i+1)%3) printf("%6d", *(pC+i));else printf("%6d\n", *(pC+i));}
printf("\nMatrix C:product of A and B\n"); for (i=0;i<9;i++) *(pC+i)=0;for (k=0;k<3;k++) for (i=0;i<3;i++)for (j=0; j<3;j++)
*(pC+3*i+j)=*(pC+3*i+j)+*(pA+3*i+k)*(*(pB+3*k+j));
for (i=0;i<9;i++) { if ((i+1)%3) printf("%6d", *(pC+i));else printf("%6d\n", *(pC+i));} return 0;
}
いえ、隙間なく敷き詰められておりますが・・・
すごく…見にくいです
わざわざポインタ使うかなあ
【質問テンプレ】
[1] 授業単元:数値計算法1
[2] 問題文(含コード&リンク):
ガウス・ザイデル法を用いて任意のn元連立一次方程式の解を求めるプログラムを書け。
また、同時に逆行列も求めよ。
収束条件は10E-6とする。
また今回は次のような行列を用いその出力結果を提出せよ。
4 0 -1 -2 -1 6
0 4 -1 0 -1 0
A=-1 -1 4 -1 0 B= 0
-2 0 -1 4 -1 0
-1 -1 0 -1 4 0
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン): LSI C-86 試食版
[3.3] 言語:C
[4] 期限:6月17日まで
すでにプログラミングは終えてるんですが、出力ファイルに意味不明な漢字の羅列やものすごい膨大な数値がでてきたり、
プログラムのほうが途中でとまったりするので、ソースの方を見ていただきたいです。
特にGandZ関数の方で動いているkの値に変なものが入ったりします。
参考URL:
http://mukun_mmg.at.infoseek.co.jp/mmg/bncpp/al043.html よろしくお願いします。
191 :
190:2005/06/11(土) 23:07:07
改行が多すぎるといわれたので分けてあげます。
----------ソースファイル-------------
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define NN 9999 /*kを何回繰り返すのかわからないので大きい値を定義しておく*/
int n,flag;/*nは元の数。flagは無限ループを抜けるためのフラグ。*/
double **a,*b,**x,sum,dif,e;/*配列aはAの配列。配列bはBの配列。配列xはx(k)iの配列。sumは式のサメイションの値を入れる。difはx(k)i-x(k-1)iの値を入れる。eは誤差を入れる。*/
192 :
デフォルトの名無しさん:2005/06/11(土) 23:08:06
/*ガウスザイデルの計算*/
int GandZ(FILE *fp){
int i,j,k,u;
fprintf(fp,"|\tk\t");
for(i=0;i<n;i++)
fprintf(fp,"|\tx[k][%d]\t\t",(i+1));
fprintf(fp,"|\n");
/*k=1とし無限ループに突入させる*/
k=1;
sum=0;
while(!0){
u=k-1;
for(i=0;i<n;i++){
sum=0;
for(j=0;j<n;j++){
if(i==j)continue;/*iとjが同じときは無視する*/
else if(j<i)sum+=a[i][j]*x[k][j];/*jのほうがiより小さければx(k)iをかける*/
else if(j>i)sum+=a[i][j]*x[u][j];/*jのほうが多きければx(k-1)iをかける*/
}
x[k][i]=(b[i]-sum)/a[i][i];/*x(k)iを計算*/
}
193 :
デフォルトの名無しさん:2005/06/11(土) 23:09:17
flag=1;/*flagを1としておく*/
for(i=0;i<n;i++){/*全てのx(k)の要素について|x(k)i-x(k-1)i|<eを実現しなければならない*/
dif=x[k][i]-x[u][i];
if(fabs(dif)>=e)
flag=0;/*もしdifの絶対値がeよりも大きい場合はflagを0とする*/
}
fprintf(fp,"| %d ",k);
for(i=0;i<n;i++)
fprintf(fp,"| %lf ",x[k][i]);
fprintf(fp,"|\n");
if(flag==1)break;/*flagが1のままなら無限ループから抜ける*/
k++;/*flagが0であればkをインクリメントし、無限ループをつづける。*/
}
return k;
}
194 :
デフォルトの名無しさん:2005/06/11(土) 23:10:31
int main(void){
int i,j;
int k;
FILE *fp,*fp1,*fp2;
/*値の入力*/
printf("連立方程式の元数を入力>>");
scanf("%d",&n);
/*メモリ確保*/
a=(double**)malloc(n*sizeof(double*));
b=(double*)malloc(n*sizeof(double));
x=(double**)malloc(NN*sizeof(double*));
for(i=0;i<n;i++){
a[i]=(double*)malloc(n*sizeof(double));
x[i]=(double*)malloc(n*sizeof(double));
if(a[i]==NULL||x[i]==NULL){
printf("配列の確保に失敗\n");
exit(0);
}
}
if(a==NULL||b==NULL||x==NULL){
puts("配列の確保に失敗\n");
exit(0);
}
195 :
デフォルトの名無しさん:2005/06/11(土) 23:11:13
>>189 ども、ありがとうございました。
おかげで助かりました。
196 :
デフォルトの名無しさん:2005/06/11(土) 23:11:22
printf("行列Aの値を入力\n");
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("a[%d][%d]=",(i+1),(j+1));
scanf("%lf",&a[i][j]);
}
}
printf("行列Bの値を入力\n");
for(i=0;i<n;i++){
printf("b[%d]=",(i+1));
scanf("%lf",&b[i]);
}
printf("xの初期値を入力\n");
for(i=0;i<n;i++){
printf("x[%d]=",(i+1));
scanf("%lf",&x[0][i]);
}
printf("eを入力>>");
scanf("%lf",&e);
/*対角要素が0であればこの方法は使えないのでエラーをだす。*/
for(i=0;i<n;i++){
if(a[i][i]==0){
printf("エラー:Aの対角要素が0");
exit(0);
}
}
197 :
190:2005/06/11(土) 23:16:11
fp=fopen("GandZ.txt","w");
k=GandZ(fp);
fclose(fp);
fp1=fopen("GZ_inv.txt","w");
fp2=fopen("GZ.txt","w");
for(i=0;i<n;i++){ /*逆行列を作成*/
for(j=0;j<n;j++){
if(i==j)b[j]=1;/*単位行列の一列分を作る*/
else b[j]=0;
}
k=GandZ(fp2);
for(j=0;j<n;j++)
fprintf(fp1,"%lf ",x[k][j]);
fprintf(fp1,"\n");
}
fclose(fp1);
fclose(fp2);
return 0;
}
なんかめちゃくちゃ長くなってすいません・・・。
198 :
190:2005/06/11(土) 23:21:16
すいません。ソースファイルの方はアップローダーの方にあげときました。申し訳ないです。
>>169 ありがとうございます。
ところで、「* * A」や「* * make_matrix」のように一部に「* *」が付いていますが、
これはどういう意味でしょうか。
ポインタのポインタ
201 :
デフォルトの名無しさん:2005/06/12(日) 03:37:52
[1] 授業単元:情報処理
[2] 問題文: 整数値を読み込み、それが正の値であれば、その数を逆順に出力するプログラムを作成せよ。
なお値が0以下であれば、何も出力しないものとする。
例 3145→5413
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):BCC6
[3.3] 言語:C++
[4] 期限:2005年06月13日
[5] その他の制限:
習い始めたばかりで、if、switch、do while文しか習っていません。
よろしくお願いします。
>>201 #include <iostream>
using namespace std;
int main()
{
int n;
cout << "整数値を入力:";
cin >> n;
if (n<1)
return 0;
do {
cout << n%10;
} while (n/=10);
cout << endl;
}
1 2 3 4 5 10 20 30 40 50
3 4 3 0 2
8 7 6 5 4 3 2
上みたいな数の組を標準入力から受け取って,行単位で処理したいのですが,
個数が不定なのでどこまで読んだらいいかがわかりません.
行末判定はどうやってやればいいのでしょう?
>>204 C++ なら 一行 string で取って istringstream
C なら1byteづつ取って parse するしかない?
>>204 1行分を文字列にfgetsなどで読み込む。数字への処理はその文字列に
対してゴリゴリやる。そうすれば行末判定はいらない。
fgets って一行の最大数が事前に分かってないと
char buf[1024], *p;
int n;
while( !fgets(buf, 1024, stdin) ) {
for(p = strtok(buf, " "); p ; p = strtok(NULL, " ")) {
n = atoi(p);
/* 処理 */
}
}
209 :
デフォルトの名無しさん:2005/06/12(日) 12:31:03
string line;
while (getline(cin, line)) {
istringstream iss(line);
int x;
while (iss >> x) { /* 処理 */ }
}
>>207 そういうのを”仕様”っていうんだよ。ぼうや。
211 :
204:2005/06/12(日) 13:14:59
istringstream を使うことにしました.ありがとうございます.
なんでお前ら、std::getline() 使わないの?
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
(1)クラスN人の試験の点数を配列grade[ ]に格納し総和、平均を求めよ。
さらに最高点、最低点を求められるようにせよ。
(2)(1)の問題の配列gradeへの試験の点数の格納の仕方をscanfで取り込むものと、
配列の初期化で行うものの両方を作れ。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):
[3.3] 言語:C
[4] 期限:2005年6月14日
[5] その他の制限:配列
どなたかお願いします。
scanfの時点で、やるきなくなった。
>>212 std::getline()って先読みするから大嫌い
端末からの入力にはぜんぜん向かない
>>214 #define N 5
int _01_main( void ) {
int grade[ N ], i, max, min, sum;
float ave;
for ( sum = 0, i = 0; i < N; i++ ) {
printf( "%d 人目の点数 =", i );
scanf( "%d", &grade[ i ] );
if ( i == 0 ) max = min = grade[ i ];
sum += grade[ i ];
if ( grade[ i ] > max ) max = grade[ i ];
if ( grade[ i ] < min ) min = grade[ i ];
}
ave = ( float )sum / ( float )N;
return 0;
}
int _02_main( void ) {
const int grade[ N ] = { 50, 28, 98, 76, 60 };
int i, max, min, sum;
float ave;
for ( sum = 0, i = 0; i < N; i++ ) {
if ( i == 0 ) max = min = grade[ i ];
sum += grade[ i ];
if ( grade[ i ] > max ) max = grade[ i ];
if ( grade[ i ] < min ) min = grade[ i ];
}
ave = ( float )sum / ( float )N;
return 0;
}
結果表示は自分で作って。
219 :
太郎:2005/06/12(日) 15:56:46
220 :
太郎:2005/06/12(日) 15:59:05
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
N行、M行の表に整数データを読み込み横計縦計および
総和を計算し表形式で出力するプログラムを書け。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):
[3.3] 言語:C
[4] 期限:2005年6月14日
[5] その他の制限:配列
もう一問ありました、よろしくおねがいします。
>>220 その糞みたいな参考プログラムがあるのに何でできないんだ?
その糞が何やってるのかも判らないならやめた方が無難だぞ。
223 :
デフォルトの名無しさん:2005/06/12(日) 18:46:20
どなたか、#include <iostream> #include <string>
using namespace std;
class Neko
{
private:
string name;
public:
Neko(string s){
name = s;
}
void naku(){
cout<<"にゃあ。俺様は"<<name<<"だ。"<<endl;
}
};
int main()
{
Neko dora("ボス"); //「ボス」というの名前を持ったdoraが生成される
cout<<"あなたの名づけた猫がメモリ上に生成されました。"<<endl;
cout<<"猫が鳴きます。"<<endl;
dora.naku();
}
を例として、これを少し改造するだけで、以下の問題のソースを書いてくださいm(__)m
「Objectクラスのサブクラスとして、Dogクラスを作成し、
インスタンスメソッドとして、噛む(bites)を作成しなさい。
bitesメソッドの内容は、"ガブ!"という文字列(String)を渡すものとする。
クラスおよびメソッドを作成したら、一時変数(a)としてDogクラスのインスタンスを作成,
bitesメソッドを送って噛むかどうかテストせよ」
Neko に対して Dog
naku に対して bites か・・・。
最初から全部 English で統一しろよ。
226 :
デフォルトの名無しさん:2005/06/12(日) 19:18:42
229 :
tomo:2005/06/12(日) 21:48:25
#include <iostream>#include <string> using namespace std;
class Dog {
private: string nakigoe; public:
void bites(string str){
cout<<str<<endl;
}
void aBark(string str){
nakigoe = str;
}
void barks(){
cout<<nakigoe<<endl;
}
};
class StrayDog : public Dog {
public:
void ote(){
bites("がぶ!");
}
};
class PetDog:public Dog{
public:
void ote(){
aBark("わん!");
barks();
}
};
int main()
{
PetDog a;
a.ote();
}
230 :
tomo:2005/06/12(日) 21:49:31
すいません、どなたか、
>>229を元にして、次のC++ソースを完成させてください。m(__)m
『PetDogクラスに犬の名前(aName)を保持するインスタンス変数を作成せよ。
また、名前を代入するインスタンスメソッド(aName:)と名前を呼んでお手をさせる
インスタンスメソッド(ote:)を作成せよ。
ote:メソッドは、名前の正誤を判定し、正しければ吠え、間違えば噛むを実行するものとする。
一時変数(a)としてDogクラスのインスタンスを作成し、名前(#pochi)を代入して、
名前を呼んでお手をさせた時に、吠えるか噛むかをテストせよ。』
231 :
デフォルトの名無しさん:2005/06/12(日) 21:51:41
232 :
デフォルトの名無しさん:2005/06/12(日) 21:55:33
うぇっっr
233 :
tomo:2005/06/12(日) 21:56:58
>>231 すいません。でもそのための板ではないでしょうか?
自分の勉強が足りないのは反省しています。
235 :
tomo:2005/06/12(日) 22:00:37
[1] 授業単元: プログラミング実習
[2] 問題文(含コード&リンク):<<230
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):borland
[3.3] 言語:C++
[4] 期限:2005年6月13日9:00まで
[5] その他の制限:
236 :
デフォルトの名無しさん:2005/06/12(日) 22:06:41
家で、cのプログラミングをしたいんですが、どんなアプリでやればいいのかわかりません。
ちなみに、自分のぱそこんのOSはMeです。どうか、おすすめのアプリをおしえてください。
Borland C++Builder
Visual C++ 6.0
>>236 おれ、お金ないからメモ帳でプログラム書いて
StudyCってソフトの体験版でコンパイル&実行してる
うえっwwwえっwww
239 :
デフォルトの名無しさん:2005/06/12(日) 22:20:00
CygwinからGcc使えよ
そこでMinGWの登場ですよ
1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
次に示す仕様を満たす名簿管理プログラムを作成しなさい。
1. 標準入力から「ID,氏名,生年月日,出身」のようなコンマ区切り形式(CSV形式)の名簿データを受け付けて登録する。
2. %で始まる入力行をコマンド入力と解釈して、登録してあるデータを表示、整列等できるようにする。以下に実装すべきコマンドを示す。
コマンド 意味 備考
%Q 終了(Quit)
%C 登録件数などの表示(Check)
%P n 先頭からn件表示(Print) n = 0; 全件表示, n < 0; 後ろから-n件表示
%R file fileから読み込み(Read)
%W file fileへ書き出し(Write)
%F word wordを含むデータを表示 (Find) %Pと同じ形式で表示
%S n データをn番目の項目で整列 (Sort) 表示はしない
サンプルソース
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/546.txt [3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:2005年6月15日まで
[5] その他の制限:なし
お願いします。
>>241 そこまでサンプルがあってなんで出来ねぇの?池沼じゃあるまいし
243 :
241:2005/06/12(日) 23:27:56
すみません。勉強不足で各関数の意味もよく分からず、どうしていいのか分からない状態です。
後で一から勉強し直します。なのでお願いします。
どうしても分かりません・・・
244 :
デフォルトの名無しさん:2005/06/12(日) 23:44:01
エラー処理は割愛
void
command_read (struct profile*p,
char*filename) {
FILE *fp
char line[1024];
char *data[4], *birth[3];
fp = fopen(filename, "r");
fgets(line, 1024, fp);
split(line, data, ',', 4);
p->id = atoi(data[0]);
strcpy(p->name, data[1]);
strcpy(p->home, data[3]);
split(data[2], birth, '-', 3);
p->birthday.y = atoi(birth[0]);
p->birthday.m = atoi(birth[1]);
p->birthday.d = atoi(birth[2]);
fclose(fp);
}
245 :
デフォルトの名無しさん:2005/06/12(日) 23:48:10
void
command_read (struct profile*p,
char*filename) {
FILE *fp
char line[1024];
char *data[4], *birth[3];
fp = fopen(filename, "r");
fgets(line, 1024, fp);
add_profile(p, line);
fclose(fp);
}
246 :
デフォルトの名無しさん:2005/06/12(日) 23:48:52
だめだ,眠くて間違ってばかりだからパス
アホばっかだなここ
248 :
デフォルトの名無しさん:2005/06/13(月) 00:20:48
そんなに誉めるなよ
1] 授業単元:H8マイコンプログラム
[2] 問題文(含コード&リンク):
LCDにHelloと表示させる
[3] 環境
[3.1] OS:windosw
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:2005年6月15日まで
[5] その他の制限:なし
お願いします。
>>249 おまえはその情報だけで作れると思ってるのか?
windowswというOSに興味津々
wind os w
254 :
249:2005/06/13(月) 01:50:10
他に何の情報がいるのでしょうか?
>>254 H8の種類やIO、LCDの型番や接続方法、コントロールするアドレスなど
情報がぜんぜん足りない
256 :
249:2005/06/13(月) 02:32:12
H8/3052F
SC1602BSLB
RS232C
無知ですみません。
>>256 情報が足りんって言ってるだろ。やる気が無いなら消えろ。
ものの種類だけじゃなくて、どれにどうアクセスすると何が起きるのか、
つまり"Hello"を表示させるには何をすべきなのか。ソフトウェア的データキボンヌ
[1] 授業単元:ゼミ課題 (画像処理)
[2] 問題文(含コード&リンク):
pgmファイルを読み込み、フィルタ処理を施し、pgmファイルで出力するプログラム(pgm.c)がある。
このプログラムを参考にし、ppmファイルで同じ処理をするプログラム(ppm.c)を作成しなさい。 */
但し、ppmファイルのファイルフォーマットは"P6"とし、入出力はバイナリモードで行うものとする。
また、使用するフィルタは3*3の線形平滑化フィルタとする。
サンプルソース(pgm.c)→
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/548.txt [3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ(バージョン):Visual C++6.0
[3.3] 言語:C
[4] 期限:2005年6月14日午前中まで
[5] その他の制限:特になし。習得状況はポインタまで(構造体はまだです)。
よろしくお願いします。
260 :
249:2005/06/13(月) 02:46:12
端子機能やLCDインストラクションの表の事でしょうか?
>>249 単元がマイコンってことはポケコンとか、ボードに線を刺して作ったコンピュータを使って
操作するわけだろ?そのときどこのメモリに何を書いたら表示が変わるとかいうマニュアルを
もらってるはずだ。取り合えずそれに関して知ってることを洗いざらい晒せ。
専用のライブラリが付属していて、単にそのライブラリの関数をコールするだけだったら笑う
授業まったくきいてませんと言ってるようなもんだな
264 :
デフォルトの名無しさん:2005/06/13(月) 08:43:24
[1] 授業単元: プログラミングとその応用
[2] 問題文(含コード&リンク): x円(x≧0)を、1円玉、5円玉、10円玉、50円玉、100円玉、500円玉で両替する方法が
何通りあるかを求めるプログラムを作成せよ。
例えば、10円玉を両替する方法は、{1円×10枚、1円×5枚と5円×1枚、5円×2枚、10円×1枚}の4通りである。
※①0円を両替する方法は1通り(それぞれが0枚)
②y円(y<0)を両替する方法は0通り
③6種類の硬貨のうち0種類を使って、x円を両替する方法は0通り
④n種類の硬貨(0<n≦6)の硬貨を使ってx円(x>0)を両替する方法が何通りあるかは、次の2つの場合をそれぞれ数え上げればいい。
(ⅰ)n種類のうち、一番高い硬貨をm円玉とすると、n種類の硬貨で(x-m)円を両替する方法が何通りあるか(つまりm円玉を1枚使って、残りを考える)
(ⅱ)n種類のうち一番高い硬貨を1枚も使わないで、(n-1)種類の硬貨でx円を両替する方法が何通りあるか
⑤次の再起呼び出し関数により計算を行うようにする。
int count_change(int amount,int first)
その関数の中で硬貨データを表すため次のような整数の配列を利用する
int coins[KINDS_OF_COINS]={500, 100, 50, 10, 5, 1}
(≠define KINDS_OF_COINS 6 とマクロの定義をしておく)
また各引数は次のようなデータを表すものとする。
*amountは両替する金額
*firstは配列coinsで使う硬貨のうち一番高いものを表す配列の添字
[3] 環境
[3.1] OS:Windows/Linux/等々 :Linux
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C/C++/どちらでも可 のいずれか :C
[4] 期限:yyyy年mm月dd日hh:mmまで または 無期限 のいずれか:来週まで
[5] その他の制限:どこまで習っているか、等々 :配列や関数を習ったところ
長くなりましたが、よろしくお願いしますm( __ __ )m
>>264 #define KINDS_OF_COINS 6
int count_charge(int amount, int first)
{
int coins[KINDS_OF_COINS] = {500, 100, 50, 10, 5, 1};
if(amount < 0)
return 0;
if(amount == 0)
return 1;
if(first >= KINDS_OF_COINS)
return 0;
return count_charge(amount - coins[first], first) + count_charge(amount, first + 1);
}
266 :
デフォルトの名無しさん:2005/06/13(月) 09:56:08
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
2次元配列に格納されている4次元方行列A=[aij](要素は実数)において、
a11+a22+a33a+a44 および、a14+a23+a32+a41
を求めて表示する。ただし、上記の和はfor文による繰り返しにより記述する。
計算に先立ち、行列の各要素の値はキーボードにより、以下のように入力する。
a11...a14=1.0 2.0 3.0 4.0
a21...a24=5.0 6.0 3.1 2.0
a31...a34=1.3 2.5 9.0 4.3
a41...a44=1.3 2.5 9.0 4.3
[3] 環境
[3.1] OS:Windows2000
[3.2] コンパイラ(バージョン):
[3.3] 言語:C++
[4] 期限:6月15日12:00まで
[5] その他の制限:for,while,if,switch,break,配列まで習いました。
一週間ほど考えましたが、ムリでした・・・。
助けてください。
テンパりすぎて板も間違える始末・・・。
どうかお願いします。
>>259 基本方針を提示。
・定義部
画像用配列を三次元配列に。
ex.
image1[MAX_IMAGESIZE][MAX_IMAGESIZE][3]
・読み込み部
二重ループでのfgetc()を三重ループに。
ex.
for (plane = 0; plane < 3; ++plane) {image1[y][x][plane] = (unsigned hcar) fgetc(fp);}
・出力部
読み込み部同様。
・フィルター部
やはり同様にplaneごとにフィルタリング。
#識別子の"P5"を"P6"にするのを忘れずに。
270 :
174:2005/06/13(月) 11:55:14
>>175>>177をコンパイルしてみたら
/var/tmp//ccxtlM0q.o: In function `main':
/var/tmp//ccxtlM0q.o(.text+0x5e): undefined reference to `sqrt'
と出たんですけど原因わかりますか?
272 :
174:2005/06/13(月) 12:13:59
>>271 -lmしたらできました。ありがとうございます。
273 :
148:2005/06/13(月) 12:20:26
test
275 :
259:2005/06/13(月) 12:54:17
>>269 完成しました!ありがとうございました。
276 :
266:2005/06/13(月) 13:02:13
>>267 一週間考えたのですが、出だしからわかりません。
a11とかa12とかのaijをどのように表示したらよいかがまずわからないと
いうか、思い付かないんです・・・。どうしたらよいでしょう?
>>268 明確にってどのようにかけばいいですか??
277 :
デフォルトの名無しさん:2005/06/13(月) 14:26:38
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
N行、M行の表に整数データを読み込み横計縦計および
総和を計算し表形式で出力するプログラムを書け。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):
[3.3] 言語:C
[4] 期限:2005年6月14日
[5] その他の制限:配列
期限が迫っているので宜しくお願いします。
>>276 >思い付かないんです・・・。どうしたらよいでしょう?
死ねばいいと思うよ。
いくらなんでもこれくらい理解できるべ。
for (int i = 1; i <= 4; ++i) {for (int j = 1; j <= 4; ++j) {printf("a%1d%1d ", i, j);}}
>>277 int data[N+1][M+1];として
for(i=0;i<N;i++)for(j=0;j<M;j++){u=data[i][j];data[N][j]+=u;data[i][M]+=u;data[N][M]+=u;}
あとは表示するだけ
>>278 printf()かい。
>>276 入力の仕様が不明。a11 .. a14 = は入力なのか出力なのか。
281 :
264:2005/06/13(月) 15:19:44
>265
ありがとうございます。
関数の定義はわかったのですが、
関数の使い方がわかってないので、
もしよかったら、残りのmain関数なども書いてもらえませんか?
宜しくお願いします。
282 :
デフォルトの名無しさん:2005/06/13(月) 15:54:54
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
平滑化、エッジ抽出の2種類のフィルタリング処理を高速化せよ。
・imgprocess.cを利用し、改善を加えることで高速化する。
・C言語を利用し、結果画像が変わらない限りどのような変更を加えてもよい。
(但しファイルは一つだけとする。)
・元のプログラム(imgprocess.c)で作成した結果画像とcmpコマンドで比較し、結果が正しいことを確認する。
・なお、丸め誤差などによる若干の誤差は許容する。
・プログラムの可読性よりも消費時間の短縮を優先する。
・消費時間は数回の平均で測定する。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C
[4] 期限:2005年06月14日10:00まで
どこをどう変えたか箇条書きを添えて頂けると有難いです。
[1]授業単元 プログラミング
[2]問題文
(1)XY平面上の10個の点(0~9番とする)の座標を入力させ、
原点に最も近い点までの距離とその点の番号を出力するプログラムを作れ。
(X,Y座標値には、プラスマイナス100以内といった仮定を設けてもいい)
(2)10個のデータX0,X1,・・・,X9を入力させ、これらの数の平均と
標準偏差を求めるプログラムを作れ。ただし、標準偏差σは、
σ=√Σ(Xi-平均)/n(iが0からn-1まで)の式を用いて計算し、
配列を用いること。
[3]環境
OS Linux
コンパイラ わかりません
言語 C
[4]期限 2005/06/15
[5]その他
この課題が出た日に初めて配列ならったので、(1)でも使ってください。
284 :
282:2005/06/13(月) 15:56:34
285 :
276:2005/06/13(月) 16:20:09
>>280 a11、a12、a13、a14は出力で=後の数字を入力するそうです。
287 :
276:2005/06/13(月) 16:23:12
>>278 まだ習い始めたばかりでfor文のなかにfor文を作るのが苦手で・・。
書いてもらうと理解できます!
278さんのおかげでちょっとわかってきました。
死ねばいいとまで言われても健気だなw
290 :
276:2005/06/13(月) 16:40:37
ごもっともって感じなんで・・・。
ホントに少しわかってきましたし!
291 :
デフォルトの名無しさん:2005/06/13(月) 16:48:43
[1] 授業単元: 情報処理
[2] 問題文(含コード&リンク): コマンドラインから2進数を入力させ、それを
シフト演算とビット列演算のみを用いて10進数(int 型)に変換するプログラムを作成せよ。
[3] 環境
[3.1] OS:Windows/Linux/等々 WindowsXP
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C/C++/どちらでも可 のいずれか C
[4] 期限:yyyy年mm月dd日hh:mmまで または 無期限 のいずれか 6月14日まで
お願いします。
>>291 for(;*p;p++){s<<=1;s|=(*p=='1'?1:0);}
293 :
デフォルトの名無しさん:2005/06/13(月) 17:04:25
>>282 main()の配列kernel、filtering()の引き数aをそれぞれint型にし、
kernel配列の1番目は9倍した値にする。
kernel配列のほかに配列を用意するかkernel配列の要素数を増やすかして定数として9を保持しておく。
#2番目はそのままの値で定数は1ということ。
filtering()のローカル変数tmpもint型として、絶対値を求める辺りからを整理する。
この改造で倍とは言わないまでもかなり高速化できるはず。
>>293 その顔文字を使ったらダメだよ
荒らし対策で IPが荒らし候補リストに載る
[1] 授業単元:
オペレーティングシステム入門
[2] 問題文(含コード&リンク):
あるファイルを監視して、何か変更があるたびに
そのファイルの先頭から表示するようなwatchfileというプログラムを作成せよ
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C
[4] 期限:6/14 PM6:00
お願いします。
298 :
297:2005/06/13(月) 17:48:06
ヒントソース:
for(;;){ /* 無限ループ */
stat(argv[1],&sbuf);
if(・・・・・){ /* ファイルの状態を検査して変わっていれば */
while ((n=read(fd,buf,1024))>0)
write(1,buf,n); /* 1024バイト単位に、readバイト数がゼロになるまで読んで出力 */
}
sleep(10); /* 10秒待機 */
}
>>298 そこまでヒントが出ていて、後何が必要なんだ?
答えそのものに決まってるじゃないか。
301 :
デフォルトの名無しさん:2005/06/13(月) 18:37:26
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):以下の三問に答えよ
【1】文字変数、整数変数、float変数、double変数を二つ以上宣言しているアドレスを
出力せよ。
【2】【1】のプログラムにさらにsizeofという演算子を使って自覚変数のバイト数を出せ
【3】【1】の書く変数を指すポインタ変数を宣言し、各ポインタ変数のアソレスとサイズを出力せよ。
[3] 環境
[3.1] OS:UNIX
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C
[4] 期限:6月14日
[5]その他
ポインタがさっぱりわからないので、お願いします。
>>301 >宣言しているアドレス
>自覚変数
>アソレス
この辺の解説希望。
304 :
282:2005/06/13(月) 19:09:28
>>284のプログラムを使用して、変更したプログラムをいただけませんか?
お願いいたします。
305 :
デフォルトの名無しさん:2005/06/13(月) 19:33:21
>>302 >宣言しているアドレス
これは問題文そのまま写しました
例で、文字変数aに対するアドレスの出力は
printf("adr of a=%d\n",&a);
とありました。
>自覚変数
これは各変数でした
>アソレス
これはアドレスです。
タイプミス多くてすみません。
306 :
294:2005/06/13(月) 19:34:44
>>304 私宛てかね?
さっきは方針を示しただけで作ってないのだよ。
未だ出先だから後で暇だったら書いてみようじゃないか。
#あてにしないで待っていたまえ。
307 :
282:2005/06/13(月) 19:52:40
ありがとうございます。ぜひお願いします。
□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
★☆★読売巨人の清原和博をオールスターでキャッチャーに投票お願いします★☆★
この夏最大の祭りイベント!
2ちゃんねらは神様です
是非この大イベントに参加してみませんか?
みんなで一丸となり1つの事をやりとげる感動を是非一緒に味わいましょう。
多数の参加者お待ちしております。
仮に1位にならなくても上位に食い込めれば清原に反省させる機会を与えることができます。
清原を反省させるためにもキャッチャー清原に投票してください。
ちなみに現在捕手部門7位と健闘しています。皆様の一票一票が力になります。
☆★☆ぜひ皆様の清き1日10票(PC:5票、携帯5票)を!!!☆★☆
詳しくは↓↓↓
オールスターで清原を捕手選出しよう Part.8
http://ex13.2ch.net/test/read.cgi/base/1118647801/l50 まとめサイト
http://www.geocities.jp/address_ichiran/ □■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
309 :
デフォルトの名無しさん:2005/06/13(月) 23:17:22
[1] 授業単元:プログラミング基礎
[2] 問題文:
最大50個の自然数からなる数列を20個考えて要素を入力して受け付ける。
ただし、各数列は負の数が入力された時点で入力を終了し、次の数列を読み込み
はじめるものとする。
結果として得られる二次元配列を、見やすい形で出力せよ。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ:Visual C++
[3.3] 言語:C++
[4] 期限:2005年06月14日まで
よろしくお願いします
310 :
294:2005/06/14(火) 00:09:21
#include <iostream>
enum emDIMS {DIM1=20,DIM2=50};
int main(int argc, char* argv[])
{
int num[DIM1][DIM2],i,k;
//入力部
for(i=0;i<DIM1;i++){
for(k=0;k<DIM2;k++){
std::cout<<"\nnum[" << i << "][" << k << "] = ";
std::cin >> num[i][k];
if(num[i][k] < 0) break;
}
}
//出力部
for(i=0;i<DIM1;i++){
std::cout<<"\nnum[" << i << "][] = ";
for(k=0;k<DIM2 && num[i][k] >= 0;k++){
std::cout<< num[i][k] << ' ';
}
}
std::cout << std::endl;
return 0;
}
312 :
デフォルトの名無しさん:2005/06/14(火) 01:31:51
313 :
デフォルトの名無しさん:2005/06/14(火) 08:33:01
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
a,b,c を整数として入力して、 ax2+bx+c=0 の解を求めるプログラムを求めなさい。 ただし、2つの異なる実数解のみだけではなく、
重解、複素数の場合も対応 できるようにする.
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):
[3.3] 言語:C
[4] 期限:2005年6月14日
[5] その他の制限:配列
期限が迫っているので宜しくお願いします。
314 :
デフォルトの名無しさん:2005/06/14(火) 09:00:58
[1] 授業単元: アルゴリズム
[2] 問題文(含コード&リンク):
以下のフィボナッチ数列の第n項を求める関数Fib(n)を作成せよ。
a_0=2,a_1=3, a_n=a_(n-1)+a_(n-2)
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):Visual Studio .NET 2003
[3.3] 言語:C言語
[4] 期限:今日中
期限が迫ってきたのでお願いします
何時までなんだよ
23時55分です
>>315 unsigned int Fib( unsigned int n )
{
switch ( n ) {
case 0 :
return 2;
case 1 :
return 3;
default :
return ( Fib( n - 1 ) + Fib( n - 2 ) );
}
}
320 :
314:2005/06/14(火) 10:15:26
自己解決しました
追加で課題がでたのですが、
リストを用いてソートプログラムを作成するというものです
この課題は単元中に作成しなくてはならないのですが、
ほかの課題もあるのでお願いしたいです
リストは単方向、双方向どちらでも可
ソートアルゴリズムは好きなものを使ってもOKです
どうかよろしくお願いします
>>315 unsigned
fib(unsigned n)
{
unsigned f2 = 1;
unsigned f1 = 1;
unsigned f0 = f1 + f2;
int i;
for (i = 0; i < n; i++) {
f2 = f1;
f1 = f0;
f0 = f1 + f2;
}
return f0;
}
【質問テンプレ】
[1] 授業単元:Visual c++
[2] 問題文(含コード&リンク):ファイルを読み込み、ファイルの中身を表示をさせる
[3] 環境
[3.1] OS:Windows 2000
[3.2] コンパイラ(バージョン):Visual c++
[3.3] 言語:C++
[4] 期限:14日午後2時まで
よろしくお願いします。
323 :
320:2005/06/14(火) 10:42:03
同じく自己解決
お騒がせしました
>>322 #include <fstream>
#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
const char* File = "hoge.txt";
int
main()
{
ifstream from(File);
if (!from) { exit(1); }
char c;
while (from.get(c)) { cout.put(c); }
return 0;
}
326 :
デフォルトの名無しさん:2005/06/14(火) 12:51:21
いぜん投稿したものですがうまいところできなかったのでもう一度お願いします
プログラムで穴があるところ、訂正した方がもっとよくなるところなどを指摘してくださいお願いします
#include <stdio.h>
int main(void)
{
int i, j, k, arrayA[3][3], arrayB[3][3], arrayC[3][3];
int *pA, *pB, *pC;
pA=(int *) arrayA;
pB=(int *) arrayB;
pC=(int *) arrayC;
printf("Matrix A\n");
for (i=0; i<3; i++) {
printf("Please input three elements in row#%d:", i+1);
scanf("%d %d %d", pA+3*i, pA+3*i+1, pA+3*i+2);
}
printf("Matrix B\n");
for (i=0; i<3; i++) {
printf("Please input three elements in row#%d:", i+1);
scanf("%d %d %d", pB+3*i, pB+3*i+1, pB+3*i+2);
}
327 :
デフォルトの名無しさん:2005/06/14(火) 12:51:39
printf("Matrix C:transposed matrix of A\n");
for (i=0;i<3;i++)
for (j=0; j<3;j++) *(pC+3*j+i)=*(pA+3*i+j);
for (i=0;i<9;i++) {
if ((i+1)%3) printf("%6d", *(pC+i));
else printf("%6d\n", *(pC+i));
}
printf("\nMatrix C:sum of A and B\n");
for (i=0;i<3;i++)
for (j=0; j<=3;j++) *(pC+3*i+j)=*(pA+3*i+j)+*(pB+3*i+j);
for (i=0;i<9;i++) {
if ((i+1)%3) printf("%6d", *(pC+i));
else printf("%6d\n", *(pC+i));
}
printf("\nMatrix C:product of A and B\n");
for (i=0;i<9;i++) *(pC+i)=0;
for (k=0;k<3;k++)
for (i=0;i<3;i++)
for (j=0; j<3;j++)
*(pC+3*i+j)=*(pC+3*i+j)+*(pA+3*i+k)*(*(pB+3*k+j));
for (i=0;i<9;i++) {
if ((i+1)%3) printf("%6d", *(pC+i));
else printf("%6d\n", *(pC+i));
}
return 0;
}
328 :
デフォルトの名無しさん:2005/06/14(火) 12:51:58
実行結果 (赤字はキーボードからの入力)
Matrix A
Please input three elements in row#1:12 10 11
Please input three elements in row#2:20 31 2
Please input three elements in row#3:61 42 23
Matrix B
Please input three elements in row#1:71 28 3
Please input three elements in row#2:31 90 50
Please input three elements in row#3:1 62 45
Matrix C:transposed matrix of A
12 20 61
10 31 42
11 2 23
Matrix C:sum of A and B
83 38 14
51 121 52
62 104 68
Matrix C:product of A and B
1173 1918 1031
2383 3474 1700
5656 6914 3318
>>324氏
どうもありがとうございました。
間に合いそうです。
331 :
デフォルトの名無しさん:2005/06/14(火) 15:10:10
[1] 授業単元: プログラムC
[2] 問題文(含コード&リンク):
プログラムを入力し、最も長い行を出力せよ。
最も長い行が複数存在するときには初めて現れるものを出力すること。
strcpyという関数がstring.hにあるのでそれを利用すること。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C
[4] 期限:2005年6月14日24:00まで
332 :
309:2005/06/14(火) 15:16:47
>>311 丁寧なご回答、ありがとうございました。
333 :
デフォルトの名無しさん:2005/06/14(火) 15:25:47
>>331 #include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char s1[512], s2[512];
int len;
len = 0;
while (fgets(s1, 512, stdin) != NULL) {
if (strlen(s1) > len) {
len = strlen(s1);
strcpy(s2, s1);
}
}
printf("%s", s2);
return 0;
}
335 :
デフォルトの名無しさん:2005/06/14(火) 21:00:50
もう一問お願いします。
[1] 授業単元: プログラムC
[2] 問題文(含コード&リンク):
プログラムを入力し、どこかに数字が入ってる行のみ出力するプログラム
を作成せよ。ctype.hには1文字を引数としてその数字があるときに1、
そうでないときに0を返す関数int isdigit(char c)があるのでそれを利用してもよい。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C
[4] 期限:2005年6月14日24:00まで
>>335 #include <stdio.h>
#include <ctype.h>
int main()
{
char buf[256], *p;
while(fgets(buf, sizeof(buf),stdin))
{
for(p = buf; *p !='\0'; ++p)
{
if(isdigit(*p))
{
fputs(buf, stdout);
break;
}
}
}
return 0;
}
実行しかた。リダイレクトで
a.exe < program.c
>>336 char *pでisdigit(*p)はやっちゃいかん
isdigit()の通常の実装なら、8bit目立ってる文字つっこんだら
未定義動作になるぞ
>>335 #include <stdio.h>
int main( void )
{
char ch;
int flag = 0;
unsigned long pos, head;
pos = head = ftell( stdin );
while( ch = getchar() ){
if( '0' <= ch && ch <= '9' ){
flag = 1;
continue;
}
if( ( ch == '\n' ) || ( ch == EOF ) ){
pos = ftell( stdin );
if( flag ){
flag = 0;
fseek( stdin, head, SEEK_SET );
while( ( ( ch = getchar() ) != '\n' ) && ( ch != EOF ) ){
putchar( ch );
}
putchar( '\n' );
}
if( ch == EOF ) break;
head = pos;
}
}
return 0;
}
[1]授業単位:基本プログラミング
[2]以下のように出力するプログラムを作成せよ、mは一行に印字する文字数
(奇数行は"*"が先で偶数行は"_"が先)、nは行数とし、それぞれ整数型変数として定義し、
値を入力するものとする。ただし、"*_*_*_"のように文字列を登録して印字する方法は使用しないこと。
<実行例>
mとnを入力してください:5 3
*_*_*
_*_*_
*_*_*
[3]環境
[3.1]OS WindowsXP HomeEd
[3.2]コンパイラバージョン 不明
[3.3]言語 C++
[4]期限 2005.6.17(金)まで
[5]習っているところ
if,for,while,do-whileの繰り返し制御まで。書き出しは#include<iostream>からでお願いします。
>>340 #include <iostream>
using namespace std;
int main( void )
{
int m, n;
int i, j;
char ch[2] = {'*', '_'};
cout << "mとnを入力してください: ";
cin >> m;
cin >> n;
for( i=0; i<n; i++ ){
for( j=0; j<m; j++ ) cout << ch[(i+j)%2];
cout << '\n';
}
return 0;
}
342 :
デフォルトの名無しさん:2005/06/15(水) 00:22:28
[1] 授業単元: アルゴリズム論
[2] 問題文(含コード&リンク):
下のプログラムにデータaの削除を行う関数 void delete(int a)
を作って追加せよ。
#include<stdio.h>
#include<malloc.h>
struct cell{
int node;
struct cell *next;
} header;
void insert(int a);
main(void){
int a,i;
struct cell *p;
for(i=0;i<3;i++){
scanf("%d",&a);
insert(a);
}
p=header.next;
while(p!=NULL){
printf("%5d\n",p->node);
p=p->next;
}
}
void insert(int a){
struct cell *p,*q,*n;
343 :
342続き:2005/06/15(水) 00:22:57
p=header.next;
q=&header;
while(p!=NULL && a>p->node){
q=p;
p=p->next;
}
n=malloc(sizeof(struct cell));
n->next=p;
n->node=a;
q->next=n;
}
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C言語
[4] 期限:6月15日まで
[5] その他の制限:どこまで習っているか、等々
どなたかご教授ください。
344 :
デフォルトの名無しさん:2005/06/15(水) 00:46:51
【質問テンプレ】
[1] 授業単元: 4
[2] 問題文(含コード&リンク):
パソコンに同時に接続されている二つのマウスのそれぞれを、
単一のディスプレイ上に表示されている二つのマウスカーソルのそれぞれに
一対一で対応させて、
個別に動かせることを特徴とするプログラム。
[3] 環境
[3.1] OS:WinXP,2k
[3.2] コンパイラ(バージョン):任意
[3.3] 言語:C C++ C#の何れかの一
[4] 期限:2005年09月01日16:20まで
[5] その他の制限:
オブジェクト指向型OK
C,C++,C#は一通り昨年度の授業でやったつ森です。
CはアドレスOK,C++は承継バンバン
ご多忙中申し訳ございませんが、宜しくお願い致します。
345 :
344:2005/06/15(水) 00:50:03
言葉足らずでした。
単一のパソコンに同時に接続されている二つのマウスのそれぞれを、
当該パソコンに接続された単一のディスプレイ上に表示されている二つのマウスカーソルのそれぞれに
一対一で対応させて、
当該二つのマウスカーソルを上記二つのマウスで個別に動かせることを特徴とするプログラム。
346 :
344:2005/06/15(水) 01:00:05
再びすみません。
もうなんか漠然とした課題でほんとすみません。
【質問テンプレ】
[1] 授業単元: 4
[2] 問題文(含コード&リンク):
単一のパソコンに同時に接続されている二つのキーボードのそれぞれを、
当該パソコンに接続された単一のディスプレイ上に表示されている二つの文字入力カーソルのそれぞれに
一対一で対応させて、
当該二つの文字入力カーソルにおいて上記二つのキーボードで個別に文字を入力できることを特徴とするプログラム。
上記プログラムにおいて、日本語入力が可能なことを特徴とするプログラム。
[3] 環境
[3.1] OS:WinXP,2k
[3.2] コンパイラ(バージョン):任意
[3.3] 言語:C C++ C#の何れかの一
[4] 期限:2005年12月23日16:20まで
[5] その他の制限: 334と同じです。
347 :
工大太郎:2005/06/15(水) 01:31:02
[1] 授業単元:
[2] 問題文(含コード&リンク): データをファイルから読み込みpointの平均およびgapの平均をファイルに書き込みなさい。
データ:alice 97 3.6
bob 88 3.2
charlie 69 2.8
dick 100 2.1
eve 55 2.4
[3] 環境
[3.1] OS:Windowsxp
[3.2] コンパイラ(バージョン):
[3.3] 言語:C
[4] 期限:2005年6月15日
[5] その他の制限:よろしくお願いします。
#include <stdio.h>
#include <stdlib.h>
#define NUM 6
int main() {
FILE *handle;
char name[NUM][256];
int point[NUM];
float gap[NUM];
int i,avr_point = 0;
float avr_gap = 0.0f;
if((handle = fopen("data.txt","r")) == NULL) exit(1);
for(i=0;i<6;i++){
fscanf(handle, "%s %d %f",&name[i], &point[i], &gap[i]);
avr_point += point[i];
avr_gap += gap[i];
}
fclose(handle);
avr_point /= NUM;
avr_gap /= NUM;
if((handle = fopen("result.txt","w")) == NULL) exit(1);
fprintf(handle, "avr_point=%d, avr_gap=%f\n", avr_point, avr_gap);
fclose(handle);
return 0;
}
実験したファイルの中身
kaneda 63 2.5
tetuo 78 4.5
kei 54 3.8
masaru 92 5.2
takashi 75 3.5
kiyoko 44 1.5
>>341 ありがとうごさいます。ちゃんと動きました。
353 :
デフォルトの名無しさん:2005/06/15(水) 10:04:03
[1] 授業単元:プログラミング演習I
[2] 問題文:
自然数nを入力して、n以下の全ての素数を表示するプログラムを作成 しなさい。
(ある自然数nが素数かどうかを判断するには、2 からn-1 までの数で割り切れるかどうかを判断すれば良い。)
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:6/21まで
[5] その他の制限:制御構造(条件分岐と繰り返し)まで
for文とif文を使って作成するようです。
どなたかご教授お願いします。
354 :
277:2005/06/15(水) 10:34:27
>>279 自分で表示したらエラーが沢山でてしまったので
全文よろしくおねがいします
355 :
デフォルトの名無しさん:2005/06/15(水) 10:59:24
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
8-queenの解を一つ表示するプログラムを作成しなさい。
[3] 環境
[3.1] OS:imac
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C
[4] 期限:2005年6月15日13:00まで
[5] その他の制限:
次のようなプログラムを作成したのですが、実行すると何故か「7(改行)」とだけ出力されます。Print文を丸ごと抜いて実行しても結果は変わりません。どこがおかしいかわからないので、問題点の指摘をお願いします。
#include<stdio.h>
int z = 0;
int save[8] = {-1, -1, -1, -1, -1, -1, -1, -1}; //0以外の数字
int ret(int kazu[8], int a){ //効き筋にいない場所をセーブする関数
356 :
デフォルトの名無しさん:2005/06/15(水) 10:59:41
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
8-queenの解を一つ表示するプログラムを作成しなさい。
[3] 環境
[3.1] OS:imac
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C
[4] 期限:2005年6月15日13:00まで
[5] その他の制限:
次のようなプログラムを作成したのですが、実行すると何故か「7(改行)」とだけ出力されます。Print文を丸ごと抜いて実行しても結果は変わりません。どこがおかしいかわからないので、問題点の指摘をお願いします。
#include<stdio.h>
int z = 0;
int save[8] = {-1, -1, -1, -1, -1, -1, -1, -1}; //0以外の数字
int ret(int kazu[8], int a){ //効き筋にいない場所をセーブする関数
357 :
デフォルトの名無しさん:2005/06/15(水) 11:00:13
int ret(int kazu[8], int a){ //効き筋にいない場所をセーブする関数
g[y-1]= save[x];
ret(g, y);
if(ret(g, y)!=-1){
for(v=0; v<8; v++){
if(save[v]!=-1){
g[y] = v;
return 0;
}
}
}
}
else ret(g, y-1); //戻った候補が不適だったらやり直し
}
ret(g, y-2); //一つ前に戻って候補が見つからなかった場合はさらにもう一つ戻る
}
else for(v=0; v<8; v++){ //バグがなければそのまま適用
if(save[v]!=-1){
g[y] = v;
}
}
}
int main(){
int m, n, l, o, p, www[8]; //列を添字で表現
printf("input the first point you want place queen\n");
scanf("%d", &www[0]); //初期配置の決定
for(m=1; m<8; m++){
358 :
デフォルトの名無しさん:2005/06/15(水) 11:00:31
ret(www, m);
back(www, m, l);
z = 0;
for(o=0;o<8;o++){
save[o] = -1;
} //初期化
}
for(p=0; p<8; p++){
printf("%d\n", www[p]);
return 0;
}
}
359 :
デフォルトの名無しさん:2005/06/15(水) 11:04:48
>>356-358です。
少しかぶりました。すいません。
>>356の >int ret(int kazu[8], int a){ //効き筋にいない場所をセーブする関数
ここは削除してください。
360 :
174:2005/06/15(水) 12:36:32
すみません、-lmでコンパイルはできたのですが
./ファイル名でも./a.outでも実行できません(><)
なんでかわかりますか?
361 :
353:2005/06/15(水) 13:09:39
[1] 授業単元:プログラミング演習I
[2] 問題文:
t ∈ [0, 6.28] の区間で x が 0 から 0.01 刻みずつ +6.28 まで
変化するものとして
x(t) = exp( 0.5 * t ) * cos( 4.0 * t )
y(t) = exp( 0.5 * t ) * sin( 4.0 * t )
の x-y データはどのようなグラフになるか。
プログラムのみ答えよ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:6/21まで
[5] その他の制限:for文を使ってください。
353の問題はさっき自力でやったら解けたので、こっちの問題を
どなたかご教授お願いします。
>>360 コマンドラインを晒せ。
>>359 ソースはアップローダに貼れ。
main()からのreturnの場所に注意。
363 :
デフォルトの名無しさん:2005/06/15(水) 13:19:59
#include <stdio.h>
#include <math.h>
int main()
{
double t;
for (t = 0.0; t <= 6.28; t += 0.01) {
printf("%lf %lf\n", exp(0.5 * t) * cos(4.0 * t), exp(0.5 * t) * sin(4.0 * t));
}
return 0;
}
>>361 問題の意味がわからん
プログラムが自分の意志でグラフに対する所感を述べるようにするのか?
main(){
printf("このグラフは美しいと思います\n");
}
365 :
デフォルトの名無しさん:2005/06/15(水) 13:28:42
[1] 授業単元: c++
[2]
#include <stdio.h>
#define N 256
void main(void){
char str[N], c[N];
int count[N];
printf("文字列を入力 "); gets(str);
int i=0,j=0,k,check;
while( !(str[i]=='\0') ){
for(k=0,check=0; k<j; k++){
if(str[i]==c[k]){
check = 1;
count[k]++;
break;
}
}
if(check==0){
c[j]=str[i];
count[j]=1;
j++;
}
i++;
}
for(k=0; k<j; k++){
printf(" %c : %d \n", c[k], count[k]);
}
}
366 :
デフォルトの名無しさん:2005/06/15(水) 13:29:23
以上のプログラムは
①適当な長さの文字列をキー入力する。
②どの文字が何回出現しているかをカウントして、出現文字とその出現回数を出力する。
このプログラムについて、出現頻度の多い順にソートして結果を出力するプログラムに書き換えなさい。ただし、ソートする箇所については、関数を用いること。
プログラムの仕様は以下の通りです。
(1)ソートを行う関数は、文字配列のポインタ、文字の頻度配列のポインタ、文字列のサイズの3つを受け取り、頻度順にソートするものとする。関数の名前は適当につけて構わない。
(2)ソートを行う関数を main関数内で呼び出して利用すること。
(3)ソートは、頻度の大きい順から出力されるようにすること。
[結果の表示例]
入力文字列: aabbbbcccccadd
出力表示
c : 5
b : 4
a : 3
d : 2
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ(バージョン):Visual c++
[3.3] 言語:C++
[4] 期限:16日
長くてなって申し訳ありません。よろしくお願いします。
367 :
174:2005/06/15(水) 13:29:42
>>367 >すみません、-lmでコンパイルはできたのですが
その、コンパイルしたときのコマンドラインを晒せ。
369 :
デフォルトの名無しさん:2005/06/15(水) 13:55:42
[1] 授業単元: プログラム
[2] 問題文(含コード&リンク):
成績表のプログラムを可変長配列を用いて作成しなさい。ただし、可変長配列の構造体は以下の通りとする。
struct array {
struct student *data;
int N;
int n;
};
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):VC++ 6.0
[3.3] 言語:C
[4] 期限:あと1時間ほど・・・
[5] その他の制限:構造体までです。
370 :
369:2005/06/15(水) 13:56:32
struct student {
char name[20];
int kokugo;
int sansu;
};
struct student read_student( ) {
struct student a;
scanf("%s", a.name);
scanf("%d", &a.kokugo);
scanf("%d", &a.sansu);
return a;
}
void writeln_student(struct student a) {
printf("%s %d %d\n", a.name, a.kokugo, a.sansu);
}
void main() {
struct student t[100];
int N=100, nt=0;
int i, n;
scanf("%d", &n);
for(i=0; i<n; i++){
i[i] = read_student( );
}
nt = n;
for(i=0; i<nt; i++) {
writeln_student(t[i]);
}
}
371 :
369:2005/06/15(水) 13:57:11
#include <stdio.h>
#include <stdlib.h>
struct array {
int *data;
int N;
int n;
};
struct array realloc_array(struct array a, int N) {
a.data = (int *)realloc(a.data, N*sizeof(int));
a.N = N;
return a;
}
void free_array(struct array a) {
free(a.data);
}
void main() {
struct array a = {NULL,0,0};
int n, i;
for(i=0; ; i++) {
scanf("%d", &n);
if (n < 0) break;
a = realloc_array(a, i+1);
a.data[i] = n;
a.n = i + 1;
}
for(i=0; i<a.n; i++) {
printf("%d", a.data[i]);
}
free_array(a);
}
372 :
デフォルトの名無しさん:2005/06/15(水) 13:58:23
1つめのプログラムが成績表のもの。
2つめは可変長配列のもの。
長くなりましたが、宜しくお願いします。
なんでこうもアップローダを使いたがらないんだろうか……
374 :
174:2005/06/15(水) 14:18:38
>>368 cc abc.c -o abc -lm
これでいいんでしょうか?
375 :
デフォルトの名無しさん:2005/06/15(水) 14:22:19
>>372 ここまで出来ててなにが出来ないんだ??
>>356 ↓は全部出す奴。
#include <stdio.h>
void
eq(int s, int u, int m[], int l, int r)
{
if (!u) {
int i, j;
putchar('\n');
for (i = 0; i < 8; i++) {
for (j = 0x8000; j & 0xff00; j >>= 1)
putchar(m[i]&j ? '!' : '.');
putchar('\n');
}
} else {
int uu = u & ~((l>>s)|(r<<s));
while (uu) {
int b = uu&~(uu-1);
uu ^= b;
m[s] = b;
eq(s+1, u^b, m, l|(b<<s), r|(b>>s));
}
}
}
int
main()
{
int m[8];
eq(0, 0xff00, m, 0, 0);
return 0;
}
>>374 そのコマンドを実行して、正しくコンパイル&リンクがなされている(エラーが出ない)ならば、
./abcで実行できる。ただし、>175も>177もいきなり(なんのメッセージもなしで)入力から始まるから注意。
[1] プログラミング
[2] C 言語を使用して、方程式 ax^2+bx+c=0 を満たす x を求めるプログラムを作成しなさい。
入力 a、b、c がどのような値(0を含む) になっても正しい値が出るようにしなさい。
[3] 環境
[3.1] Windows
[3.2] gcc
[3.3] C
[4] 2005年6月15日
[5]
>>174の係数があらゆる場合に対応した場合のプログラムです。
習いたてでif文など基本的なことしかわかりません。
よろしくお願いします。
379 :
デフォルトの名無しさん:2005/06/15(水) 14:35:25
>>377 あわわ、適当に数字を入れたらプログラムが動きました。
メッセージが何もでないからバグかと思ってました。
ありがとうございます。
>>378 aが0の場合は1次式を解く。そうでなければ>177。
382 :
デフォルトの名無しさん:2005/06/15(水) 14:48:52
>>379 ちょおま・・・scanfも分からないようじゃあちょっと厳しいんじゃないか?
>>380,382
早レスありがとうございます。
とりあえずa=0の場合を考えて
>>177のプログラムの12~15行目に条件を追加して
if (a==0) {
x1 = - c / b;
printf("%f\n", x1)
} else {
~
~
}
}
return 0;
}
としたらコンパイルできなかったのですが、どこかおかしいでしょうか?
エラーメッセージくらい書けよな
すみませんでした。
eport222.c: 関数 `main' 内:
eport222.c:13: error: `x1' undeclared (first use in this function)
eport222.c:13: error: (Each undeclared identifier is reported only once
eport222.c:13: error: for each function it appears in.)
eport222.c:15: error: 文法エラー before '}' token
です。
| | | |
| | ∧_∧ | |
| |( ´∀`)つ ミ |
| |/ ⊃ ノ | |
 ̄ ̄ ̄ ̄' ̄ ̄ ̄ ̄ | ミ 匙
389 :
デフォルトの名無しさん:2005/06/15(水) 15:26:16
>>389 あらかじめx1を定義し直したらうまく動作しました。
これと同じ要領でやっていきます。
ありがとうございました。
392 :
361:2005/06/15(水) 16:01:24
>>363 レスありがとうございます。
ただ、変化するのはxなのですが。
>>364 わかりづらくてすいません。
つまり、x-yデータを吐き出して、プログラムを作成する問題です。
>>392 >363はxyを算出して表示しているように見えるのだが。
後は何がしたいのかね。
394 :
デフォルトの名無しさん:2005/06/15(水) 16:44:45
>>395 あ、そうですね。
ちょっと自分、勘違いしていたみたいです。
ご指摘ありがとうございます。
395 :
394=392:2005/06/15(水) 16:46:05
宿題ですが....。
問題:
文字列をキーボードから入力し、小文字のアルファベットならば大文字に、
大文字ならば小文字に変換して出力しなさい。
補足:'A'-'a'の結果を加え、toupper(ctype.hを#includeする)を
使用しなさい。
出力例:
入力 ? abCDefGHiJKLMnopQrStu
出力 ABcdEFghIJklmNOPqRsTu
お願いします。
>補足:'A'-'a'の結果を加え、toupper(ctype.hを#includeする)を
>使用しなさい。
面倒だな。
オレだったらこうするな。
if ( isalpha( c ) ) c ^= 0x20;
399 :
365:2005/06/15(水) 21:02:59
402 :
388:2005/06/16(木) 00:03:31
>>398さん、すごく参考になります。ありがとうございます!
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): アフィン暗号の暗号プログラムおよび、復号プログラムの作成。
[3] 環境
[3.1] OS:mac
[3.2] コンパイラ(バージョン):cc
[3.3] 言語:C
[4] 期限:2005年06月16日05:00まで
[1] 授業単元:乱数
[2] 問題文(含コード&リンク):1から10までの整数をランダムに1つずつ選択するプログラムを作成せよ.
但し,1度選択した整数は再度選択できないものとする.
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン): C++6.0
[3.3] 言語:C
[4] 期限:2005年6月17日12:00まで
[5] その他の制限:乱数の種は0とする.
必修科目の課題なのですがさっぱりわかりません。
1から10までを
1
2
3
4
5
6
7
8
9
10
と表示するところまではできたのですが・・・・。
自分でいろいろ調べながらやってみたのですが、余計に混乱してしまい困っています。
力を貸してください。
>1から10までの整数をランダムに1つずつ選択する
案1)1~10を格納した10個の配列をランダムシャフルした後、先頭から順番に取り出す
406 :
404:2005/06/16(木) 03:35:31
>>406 #include <stdio.h>
#include <stdlib.h>
void swap(int *a, int *b)
{
int tmp;
tmp = *a, *a = *b, *b = tmp;
}
void random_shuffle(int *start, int *last)
{
int *next = start;
size_t index;
for (index = 2; ++next != last; ++index)
swap(next, start + (rand() % index));
}
main()
{
int i;
int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
srand(0);
random_shuffle(array, array+10);
for (i = 0; i < 10; ++i)
printf("%d\n", array[i]);
}
408 :
404:2005/06/16(木) 04:06:47
>>407 ありがとうございます。
学校行かないとC++ないので、明日学校で早速動かしてみます。
>>401 0x20 は元々シフトキーの状態を表すものから来てるので
多分 EBCDIC でも大丈夫。
414 :
149:2005/06/16(木) 16:12:02
149です155さんにプログラムを作っていただいて大変感謝しています。
155さんのプログラムをコンパイルしてみたのですが最後の部分で「入力の最後に 構文解析エラー」
となってしまうのですが、どこをどういじったらいいのでしょうか?タイプミスもありませんし困っています教えて下さい
>>414 >155のソースをダウンロードしてファイル名を変えてコンパイルしたら問題なくコンパイルできたよ。
自分のタイピング能力なんかを信用しないで↑この方法なりコピペなりでやり直して味噌。
最後に改行をブチこんだら通ったりする
417 :
155:2005/06/16(木) 16:57:12
>>414 えーっと、
>>155だけど、
>>149への回答で、エラーメッセージに[入力の最後に 構文解析エラー]という文は入ってないよ。
自分の番号をもう一回確認してみて。
>>404 クーポンコレクターズ問題を応用すると次のプログラムでも高い確率で出力できるよ。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define N 10
main(){
int a[N],i,r;
for(i=0;i<N;i++){
a[i]=1;
}
srand(time(NULL));
for(i=0;i<(log(N)/log(2)+1)*N;i++){
r=(int) ((double)N*rand()/(RAND_MAX+1.0));
if(a[r]){
printf("%d ",r+1);
a[r]=0;
}
}
}
OS:Windows/
コンパイラ(バージョン): C++6.0
言語:C++
問題:1から100までの素数をbreakを使わずに多重ループを使って表示するプログラム
この前勉強し始めたばかりです 17日の昼1時ぐらいまでに誰かお願いします
>>419 breakありなら出来てるんだエロ
breakのところでループカウンタに100ぶちこんでcontinueしろ
>>419 // やってみたら確かにbreak要らんわ
#include <iostream>
int main()
{
for (int ic = 2; ic <= 100; ++ic) {
int cc;
for (cc = ic - 1; ic % cc != 0 && cc > 1; --cc) {
}
if (cc <= 1) {
std::cout << ic << ' ';
}
}
return 0;
}
>>419 エラトステネスのふるいをやってみた
#include <iostream>
#include <vector>
#include <cmath>
int main(){
const int n=100;
std::vector<int> a(n,1);
for(int i=2;i<=std::sqrt((double)n);i++)
for(int j=i; i*j<=n ; j++)
a[i*j-1]=0;
for(int i=1;i<=n;i++)
if(a[i]) std::cout << i+1 << std::endl;
return 0;
}
[1] 授業単元:プログラミング技術
[2] 問題文(含コード&リンク):
円周率πは、π=4(1-1/3+1/5-1/7+・・・)
であることが知られている。これを利用して
4(1-1/3+1/5-1/7+・・・+1/1997-1/1999)
を計算し、πの近似値を求めるプログラムを作成せよ
ただし型変換の際には以下の記述のような方法で記述すること
int i = 1;
float f = (float)i;
float f2 = float(i);
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン):
[3.3] 言語:C++
[4] 期限:できれば本日中まで
[5] その他の制限:
どうか宜しくお願い致します。
>>423 # include <iostream>
int main()
{
float val = 0.0f;
for(int den = 1; den <= 1999; den += 4)
{
val += 1.0f / float(den);
val -= 1.0f / float(den + 2);
}
std::cout << 4*val;
}
425 :
デフォルトの名無しさん:2005/06/16(木) 21:56:36
[1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク):
学生情報をファイル(.dat)から読み込み学科ごとの
英語、数学、国語の合計点と平均点を計算させる。
また学生情報は学科ごとにまとめなさい。
学科 学番 氏名 英語 数学 国語
1 001 A 90 80 90
1 002 B 80 80 70
2 003 C 80 60 80
2 004 D 60 70 90
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:2005年06月19日まで
[5] while まで習っています。また課題はフローチャートも
作りなさいと言う状況ですので作っていただけると
ありがたいです。覚えが悪く愚かな私ですが
よろしくお願いいたします。
426 :
423:2005/06/16(木) 22:18:22
>>424様
素早いレスに感謝します。
どうもありがとうございました。
427 :
デフォルトの名無しさん:2005/06/17(金) 00:40:46
>>425 whileまでしか習ってないのにこんなの出来るのか?
テンプレに追加しないか?
[6]既習:for,while,do~while,break,continue,if,else,switch,struct,class,new
429 :
デフォルトの名無しさん:2005/06/17(金) 00:52:52
>>427 先生がかなり最悪と評判の人物ですからかもしれないです。
>>430 struct MyDate {
int month;
int day;
MyDate() month(1), day(1) {}
void print() { std::cout << month << '/' << day }
};
433 :
デフォルトの名無しさん:2005/06/17(金) 01:22:12
>>396 #include<stdio.h>
#include<ctype.h>
void main(void)
{
int key;
int i;
char str[50];
i = 0;
while(1) {
key = getch();
putchar(key);
if (key == 0x0d) {
str[i] = '\0';
break;
}
else if ((key >= 0x61) && (key <= 0x7a)) {
key = toupper(key);
}
else if ((key >= 0x41) && (key <= 0x5a)) {
key = tolower(key);
}
str[i] = (char)key;
i++;
}
printf("\n%s",str);
}
微妙?w
434 :
432:2005/06/17(金) 01:24:31
あ,面倒なんで入力のデータは
>>425 の二行目からの形式を,半角スペース区切りで
標準入力から読むことにした.どうしてもファイルから読みたいなら fscanf にでも変えとくれ.
getchのとこ全角空白はいったったから
消してコンパイルしてねw
436 :
430:2005/06/17(金) 01:37:43
お答えいただきありがとうございます
連投稿で申し訳ないのですが
[1] 授業単元:
[2] 問題文(含コード&リンク):
このMyDate型を引数とし、1月1日からの日数を返すような関数
month_dayを作成し、例に挙げるプログラムを完成せよ。
ただし、閏年は考慮しなくてよい。(この場合のプログラム
の結果は「121 Days」となる。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C++
[4] 期限:05年06月17日AM8:00まで
[5] その他の制限:
どうしてもなのでお力添えをいただきたいと思います。
よろしくお願いします。ほんとうにすみません・・・
437 :
430:2005/06/17(金) 01:38:27
#include <stdio.h>
struct MyDate {
int month; /* 月 */
int day; /* 日 */
};
int month_day(struct MyDate date)
{
/* ここに処理を書く */
}
int main(int, char*[])
{
struct Date date;
int Days;
date.month = 5;
date.day = 1;
Days = month_day(date);
pirintf("%d Days\n", Days);
return 0;
}
438 :
404:2005/06/17(金) 02:04:55
>>418 ありがとうございます。
クーポンコレクターズ問題というのが何なのかわからないのですが助かりました。
439 :
デフォルトの名無しさん:2005/06/17(金) 02:05:16
>>430 こんな感じかな?
#include <stdio.h>
struct MyDate {
int month; /* 月 */
int day; /* 日 */
};
int month_day(struct MyDate date)
/*0 1 2 3 4 5 6 7 8 9 10 11 12*/
{ int days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int sum=0,i;
for(i=0;i<date.month;i++) sum += days[i];
return sum+date.day;
}
int main(int argc, char *args[]){
struct MyDate date;
int Days;
date.month = 5;
date.day = 1;
Days = month_day(date);
printf("%d Days\n", Days);
return 0;
}
441 :
デフォルトの名無しさん:2005/06/17(金) 02:22:39
Very Long Instructionset
445 :
デフォルトの名無しさん:2005/06/17(金) 02:42:58
>>442 すいません、専用でしたね
Not foundになるのですが・・・
VeryLoveisImportant
447 :
デフォルトの名無しさん:2005/06/17(金) 02:45:58
448 :
デフォルトの名無しさん:2005/06/17(金) 02:48:17
>>432 ありがとうございます。
明日とりあえず。実行してみます。
足りなかったらまた聞きに来たいと思いますので。
よろしくお願いいたします。
449 :
デフォルトの名無しさん:2005/06/17(金) 02:49:26
VaticalLabIntersect
450 :
デフォルトの名無しさん:2005/06/17(金) 02:50:09
無理みたいなのでここに張りますorz
次のプログラムは共通変数を用いて関数の値の受け渡しをしているが、これを全て因数での値を受け渡しをするように変更せよ。なお値を返すときはポインタ変数を使う
#include <stdio.h>
void readdata(void)
void calculate(void)
int x, y, wa, sa, seki, sho, joyo
451 :
デフォルトの名無しさん:2005/06/17(金) 02:50:35
int main(void){
readdata()
calculate()
printresult()
}
void readdata(void) {
printf("input integers (x y): ");
scanf ("%d%d", &x, &y);
}
void calculate(void)
wa = x + y;
sa = x - y;
seki = x * y;
joyo = x % y;
}
void printresult(void) {
printf("%d + %d = %d\n", x, y, wa);
printf("%d - %d = %d\n", x, y, sa);
printf("%d * %d = %d\n", x, y, seki);
printf("%d / %d = %d\n", x, y, sho);
printf("%d %% %d = %d\n", x, y, joyo);
}
VariableLifeIrimasennka
sho
どうする?
455 :
デフォルトの名無しさん:2005/06/17(金) 03:02:45
引数でしたorz
sho = x / y が抜けましたorz
456 :
デフォルトの名無しさん:2005/06/17(金) 03:07:16
>>456 さきこされたか。内容もほぼ同じなので省略。
>>450 できれば構造体つかってまとめた方が扱いやすいと思うよ。
459 :
デフォルトの名無しさん:2005/06/17(金) 03:15:46
>>456 これならできそうです、明日学校でやってみます。ありがとうございました。
>>458 構造体とは??
struct _tbl{
int x, y, wa, sa, seki, sho, joyo;
}t;
>>459 ああ、まだ習ってないんだね。
ならかまわないよ。
C言語にはそういう名前の機能があるんだよ。
機能
w
464 :
デフォルトの名無しさん:2005/06/17(金) 03:30:56
>>461 なるほど、見たことないのでまだやってないと思いますorz
465 :
デフォルトの名無しさん:2005/06/17(金) 03:34:01
VibrationLet'sIYAN
VictoryLicenseItadakimasu.
467 :
439:2005/06/17(金) 03:39:31
[1] 授業単元: デバック
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/564.txt [3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン): Borland C
[3.3] 言語:C
[4] 期限:本日中
このソースだと「ファイルに保存したデータを読み取ることができない」のでちゃんと読み取ることができるソースにしたいです。
ヒントとして「永久保存のファイルには、ポインタでなくポインタが指す実態を保存する。また、書き出しと読み取りの両用モードでファイルをオープンする」というのが与えられました。
というかまだ勉強して1週間なんですが課題が難しい過ぎると思うのは私だけでしょうか?
オレサマ オマエ マルカジリ
469 :
430:2005/06/17(金) 03:50:01
470 :
430:2005/06/17(金) 03:51:23
サンプルを張っておきます
class MyDate {
private:
int day,month;
public:
MyDate(int, int);
void cDay(int Day) { day = Day;}
void cMonth(int Month) {month = Month}
void print(void) {cout << day << ","<< month << "\n";}
};
MyDate::Mydate(int Day, int Month)
{
day = Day;
month = Month;
}
int main()
{
MyDate a(30,9);
return 0;
}
471 :
430:2005/06/17(金) 03:52:27
class MyDate {
:
MyDate(int = 1, int =1);
:
};
int main()
{
MyDate date1; // 1/1 が設定される
MyDate date2(5,2); // 5/2 が設定される
return 0;
}
472 :
439:2005/06/17(金) 03:57:52
自己解決しました。ありがとうございました。
473 :
デフォルトの名無しさん:2005/06/17(金) 04:15:59
>>469-470 そこまでできてるのだからあとちょっとだ。
#include <iostream>
class MyDate {
private:
int day,month;
public:
MyDate(int Day=1, int Month=1);
void cDay(int Day) { day = Day;}
void cMonth(int Month) {month = Month;}
void print(void) {std::cout << day << ","<< month << "\n";}
};
MyDate::MyDate(int Day, int Month)
{
day = Day;
month = Month;
}
int main()
{
MyDate a(30,9);
a.print();
return 0;
}
おやすみー。
475 :
デフォルトの名無しさん:2005/06/17(金) 04:35:54
10進数を8ビットの2進数に変換するプログラムです。
分からない点は、int binNum[8]; で2進数を宣言して、
binNum[0]を一番左binNum[7] が、一番右を格納するように
しなければいけない点です。教えて下さい。お願いします。
>>475 各ビットが1か0を調べて格納
ビットシフト演算と
最下位ビットが1か0を調べるためnum&1とやって調べている
1101なら
1101 AND 0001 =1これを右端 1101を右にビットシフトで 0110
0110 AND 0001 =0これを右2へ 0110を右にビットシフトで 0011
0011 AND 0001 =1これを以下略
C言語でなら
#include<stdio.h>
#define BITS 8
int main(int argc,char **argv){
int i,num,binNum[BITS]={0};
printf("input num");
scanf("%d",&num);
for(i=0;i<BITS;i++){
binNum[BITS-1-i]=num&1;
num>>=1;
}
for(i=0;i<BITS;i++)
printf("%1d",binNum[i]);
printf("\n");
return 0;
}
改良の余地ありまくりなので適当に直すこと
[1] 授業単元:
[2] 問題文(含コード&リンク):
以下のプログラムは、与えられた文字列を引数の回数
出力する関数「myPrint」である。
void myPrint(char *str, int n)
{
for(int i = 0; i<n ; i++){
printf("%s\n",str);
}
}
この関数に対し二番目の引数を省略した場合は一回だけ
出力するように変更を施したプログラムを作成せよ。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C++
[4] 期限:05年06月17日AM8:00まで
[5] その他の制限:
どなたかできたらよろしくお願いします。
今日までが滅茶苦茶切羽詰ってるのでほんとうにすみません・・・
できれば文字列の入力、表示ができるようにしてもらいたいです。
>>417 void myPrint(char *str=" ", int n=1)
{
for(int i = 0; i<n ; i++){
printf("%s\n",str);
}
}
じゃダメ?
479 :
477:2005/06/17(金) 05:32:23
文字列を入力して出力できるようなプログラムに
myPrint関数を使いたいのですが使い方がわからないのです・・・
どう入力して
どう結果が表示されるのかを教えてほしいな☆
意図するものとは違うかもしれないが、とりあえず置いておく
#include <iostream>
using namespace std;
void myPrint(char *str, int n = 1){
for(int i = 0; i<n ; i++){
printf("%s\n",str);
}
}
int main(){
char str[120];
cin >> str;
cout << "引数を指定したとき\n";
myPrint(str, 3);
cout << "引数を指定しないとき\n";
myPrint(str);
return 0;
}
482 :
477:2005/06/17(金) 08:01:00
大変参考になりました
どうもありがとうございました。
483 :
デフォルトの名無しさん:2005/06/17(金) 10:10:35
14年度のC言語プログラミング能力認定試験3級の過去問をやっているんですが、回答を持っている方いませんか?
484 :
デフォルトの名無しさん:2005/06/17(金) 10:15:40
14年度のC言語プログラミング能力認定試験3級の過去問をやっているんですが、回答を持っている方いませんか?
[1] 授業単元:
[2] 問題文(含コード&リンク):標準関数memcpyを使いメモり領域をコピーするプログラム
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):Visual C++ Toolkit 2003
[3.3] 言語:C
[4] 期限:無期限
[5] その他の制限:スピードを重視する
コピー元とコピー先の領域が重ならないようにする。
memcpy関数を使ったプログラムはできました。
他にはmemmove関数を使えばいいと思うのですが、スピードが遅くなりますよね?
どうすればいいのでしょうか?
487 :
425:2005/06/17(金) 14:30:25
488 :
425:2005/06/17(金) 14:31:59
あっ、return 0;のあとに { は付けてます。
画像の関係でうつらなかったです。
>>487 ・画像を張るな画像を。
・どんな警告が出たか書け。
・コンパイラを書け。
恐らくint iの定義の位置の問題に関する警告だろうから、それなら無視してもよい。
>>486 そう思ったら試してみたらいいでしょう。
あとはmmxとかSSE2使うくらいしか思いつかんが。
491 :
デフォルトの名無しさん:2005/06/17(金) 15:21:45
[1]授業単元 プログラミング論
[2]範囲 関数ーポインタ
[3]期限 6月22日(水)午後5時 です
[4]C言語 コンパイラgcc
どうか作成をお願いします
以下は、ポインタの1次元配列を使った国名と首都名を結び付ける文字列テーブ
ルである。
char *na[]={"Japan Tokyo", "USA Washington", "UK London", "France
Paris", "China Beijing", "Russia Moscow", "Germany Berlin", "India New
Delhi", "Brazil Brasilia",""}
これを用いて、国名を入力すると、その首都名を表示するプログラムを作成し、
実行しなさい。
<仕様>
1、国名は、main()への引数として入力する。(例 % ./a.out France)
2、int main(int argc,char *argv[])とするならば、argv[1]は入力した国名
第一文字を指すポインタとなる。これを用いて、上記文字列テーブル (*na[])内
構成要素の国名部を対象としたマッチングを行う
3、*na[]内の要素の国名部とargv[1]によって指される入力国名が一致すれば、
前者要素の首都部を表示させる。
argv[1]によって指される入力国名の長さが処理に必要であるならば、strlen()
を使用せず、各自関数を定義して文字長を求めること。ただし、その関数のプロ
トタイプを必ず宣言しておくとともに、それには参照渡しによって引数を与える
こと、また、処理終了には、exit()を適宜使用してよい
>>491 char *na[] = { "Japan Tokyo", "USA Washington", "UK London", "France Paris", "China Beijing", "Russia Moscow", "Germany Berlin", "India NewDelhi", "Brazil Brasilia", "" };
int main( int argc, char* argv[] )
{
int i, j;
for ( i = 0; na[ i ][ 0 ] != '\0'; i++ ) {
for ( j = 0; argv[ 1 ][ j ] != '\0'; j++ ) if ( argv[ 1 ][ j ] != na[ i ][ j ] ) break;
if ( argv[ 1 ][ j ] == '\0' ) { printf( "%s\n", &na[ i ][ j + 1 ] ); return 0; }
}
return 0;
}
493 :
492:2005/06/17(金) 16:02:15
ごめん。ちょっと修正。
int main( int argc, char* argv[] )
{
int i, j;
if ( argc < 2 ) return 0;
for ( i = 0; na[ i ][ 0 ] != '\0'; i++ ) {
for ( j = 0; argv[ 1 ][ j ] != '\0'; j++ ) if ( argv[ 1 ][ j ] != na[ i ][ j ] ) break;
if ( argv[ 1 ][ j ] == '\0' && na[ i ][ j ] == ' ' ) { printf( "%s\n", &na[ i ][ j + 1 ] ); return 0; }
}
return 0;
}
ここで質問する人って周りに出来る友達いないの?
いるならその友達に相談した方が速くね?
495 :
デフォルトの名無しさん:2005/06/17(金) 18:36:33
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
ビットマップで画面に線を引く問題を考えたとき。n個の実数のペア(ai,bi)がn本の直線y=aix+biを表すとします。また、ここでxの範囲は[0,1]とし、iが0からn-2の間で「(i番目の線のy)<(i+1番目の線のy)」がすべての[0,1]内のxについて成り立っているとします。
簡単に言うと図のようにどの直線も[0,1]で交わっていないということです。0 <= x >=1のある点(x,y)が与えられたとき、この点を囲む2つの直線を速く求める方法を考えよ。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン):
[3.3] 言語:C
[4] 期限:2005年6月19日まで
[5] すみません。ai,biのiは実際には添え字(小文字)です。
また問題には図として、縦線がx=0とx=1の2本で、横の線が交わることのない、あみだくじのような図が載っています。なにとぞお力添えをおねがいいたします。
つ「二分検索木」
あと、
>> 0 <= x >=1
0 <= x <= 1
な。
497 :
デフォルトの名無しさん:2005/06/17(金) 19:21:54
>>449さん
おっしゃるとおりです。失礼しました。
>>497 あんたは何者で、>449の何に反応してるんだ?
int linear_search(int n, double a[], double b[], int x, int y)
{
int i;
for(i=0; i<n && y > a[i]*x+b[i]; i++);
return i;
}
int binary_search(int i, int j, double a[], double b[], int x, int y)
{
int m;
if(i+1 == j)
return i;
m = (i+j)/2;
if( y > a[m]*x+b[m] )
i=m;
else
j=m;
return binary_search(i,j,a,b,x,y);
}
500 :
デフォルトの名無しさん:2005/06/17(金) 20:44:32
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): とにかく入力した文字を1文字ずつリスト構造に直す
プログラムを教えてほしい。ちなみに下に書いたのが俺が作った不良品
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):
[3.3] 言語:C
[4] 期限:早ければ早いほど
typedef char elementtype;
struct node{
elementtype element;
struct node* next;
};
typedef struct node * link;
とおいて
501 :
デフォルトの名無しさん:2005/06/17(金) 20:45:07
int main(int argc, char *argv[]){
struct node dmy={'\0',NULL}; /*NULLを終端マークにする*/
link start=&dmy; /*先頭管理用の構造体を示す*/
link wk; /*作業用*/
link ip;
link moji; /*データを示す構造体*/
char k[128];
int i,j;
ip=start;
printf("文字列を入力せよ:");
fgets(k,128,stdin);
for(i=0;k[i]!='\0';i++){
/*構造体1個分のメモリを獲保する*/
wk=(link )malloc(sizeof(struct node));
if(wk==NULL){
printf("メモリを確保できません。\n");
exit(1);
}
/*確保した構造体に文字を設定する*/
wk->element=k[i];
/*リストのチェーンの作成*/
ip->next=wk;
wk->next=NULL;
ip=wk;}
といった具合。何が悪いのかも教えてください
>>500 何をもって「不良品」と判断したのか知らないが、
「終端マークにする」つもりのdmyを先頭にしてしまっているな。
>>500 あまり美くはないけれども
結果としてリストにはなってると思うんだが
504 :
デフォルトの名無しさん:2005/06/17(金) 20:52:22
struct nodeと linkの定義を書いて下さい。
>>502 別にdmyを終端にしたいわけじゃなくて、nextがNULLだったら
リストの終端って意味じゃないかと思う
ここに出てくるコードって、今使っている独習C、C++より難しそうなのが沢山出てきて
いるのですが、教科書は一体何を使っているんでしょ?独自の問題なんだろうか。
うちの大学プログラミングの授業糞過ぎorz
>>508 free_listがおかしいべ。
最後しかfreeされないべ。
かといって、全部freeするように書き換えると
今度は、headまでfreeされるからやばいべ。
510 :
デフォルトの名無しさん:2005/06/17(金) 23:23:02
>>500 リストをちゃんと解放してないから不良品ってこと?
コンパイルしたらちゃんと動いたぞ
わざわざ再帰せんでもポインタをたどりつつfreeすればいいじゃないか
void free_list( CHAR_LIST * head)
{
CHAR_LIST * pin = head;
CHAR_LIST * buf;
while(pin != NULL) {
buf = pin->next;
free(pin);
pin = buf;
}
}
512 :
デフォルトの名無しさん:2005/06/18(土) 00:31:07
[1] 授業単元: programing
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/566.txt このリンク先にある、キーボードから整数が入力される度にリストの末尾に挿入し、その都度リスト全体を表示させるプログラムを改良して、
入力されたすべての整数がリスト内で昇順(小さい数から大きい数へ)に並ぶようにしてください。
また、既にリストに入っている整数が再度入力された場合は、挿入を行わないようにしてください。
例えばリスト内の要素が
[ 1, 5, 7, 11, 15 ]であるとき:
0 が入力されたら, [ 0, 1, 5, 7, 11, 15 ] となり,
9 が入力されたら, [ 1, 5, 7, 9, 11, 15 ] となり,
17 が入力されたら, [ 1, 5, 7, 11, 15, 17 ] となり,
7 が入力されたら, [ 1, 5, 7, 11, 15 ] のまま変化しません。
[3] 環境
[3.1] OS:Windows/Linux/等々 WindowsXP
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C/C++/どちらでも可 のいずれか C
[4] 期限:yyyy年mm月dd日hh:mmまで または 無期限 のいずれか 6月19日
よろしくお願いします。
それと、リスト構造ではnextがnullならそこが終端なんだからわざわざ終端データを作る必要はないと思われ
514 :
486:2005/06/18(土) 01:06:58
[1] 授業単元:
[2] 問題文(含コード&リンク):関数memcpyの作成
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):Visual C++ Toolkit 2003
[3.3] 言語:C
[4] 期限:無期限
[5] その他の制限:書式は標準関数と同じです。
ただし、コピー元とコピー先の領域は重ならないようにする
どなたかよろしくお願いします。
void *memcpy(void *to, const void *from, size_t size)
{
char *p = (char *) to;
char *q = (char *) from;
for ( ; size; --size)
*p++ = *q++;
return to;
}
>>514 if( to+size > from || to < from+size ) return NULL;
&&だまちがえた
518 :
デフォルトの名無しさん:2005/06/18(土) 02:23:27
519 :
514:2005/06/18(土) 02:23:59
520 :
課題くん:2005/06/18(土) 02:25:17
こんにちわ。私も大学の課題がでたんですけど、急にむづかしくなってさっぱりわからないんです。
課題をここに書きたいと思うんですがよろしいでしょうか?
522 :
デフォルトの名無しさん:2005/06/18(土) 02:45:06
523 :
デフォルトの名無しさん:2005/06/18(土) 03:34:23
[1] 授業単元:二次元配列
[2] 問題文:次の値を配列に格納し縦と横を加算した結果を表示しなさい。
---実行結果---
10 30 50 答
10 30 20 答
50 20 20 答
答 答 答 答
--------------
"答"と表記したところに縦、横の加算結果を表示。
※例--右上の答には10+30+50の加算結果"90"が入ります。
一番下の行の左から二番目の"答"には30+30+20の加算結果"80"ガ入ります。
右下の"答"は縦の答、横の答のどちらでも良いです。
[3] 環境
[3.1] OS:Windows2000
[3.2] コンパイラ:フリーのBCCの最新バージョン
[3.3] 言語:C
[4] 期限:2005年6月18日 18:00まででお願いします。
[5] その他の制限:特にありません。よろしくお願いします。
#include <stdio.h>
int main()
{
int i, j, sum_yoko = 0, sum_tate = 0, array[3][3] = { {10,30,50}, {10,30,20}, {50,20,20} };
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
printf("%3d", array[i][j]);
sum_yoko += array[i][j];
}
printf(" = %3d\n", sum_yoko);
sum_yoko = 0;
}
printf(" --------------\n");
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
sum_tate += array[j][i];
}
sum_yoko += sum_tate;
printf("%3d", sum_tate);
sum_tate = 0;
}
printf(" = %3d\n", sum_yoko);
return 0;
}
>>522 の方針なら insert_nodeは↓でOK.
void insert_node(node_t **n, int val)
{
if(*n && (*n)->value <= val){
if((*n)->value != val)
insert_node(&((*n)->next), val);
} else {
node_t *new_node=malloc(sizeof(node_t));
if(!new_node)
return;
new_node->value=val;
new_node->next=*n;
*n=new_node;
}
}
オリジナルの方針なら↓。ただし、main(とprint_list)は適切に書き換える
node_t *insert_node(node_t *n, int val)
{
if(n && n->value <=val){
if(n->value != val)
n->next=insert_node(n->next, val);
return n;
} else {
node_t *new_node=malloc(sizeof(node_t));
if(!new_node)
exit(1);
new_node->value=val;
new_node->next=n;
return new_node;
}
}
526 :
デフォルトの名無しさん:2005/06/18(土) 04:20:27
>>523 もうでてるけど一応作ったからUP
#include <stdio.h>
#define WIDTH (3)
#define HEIGHT (3)
int main(){
int buf[HEIGHT+1][WIDTH+1]={{10,30,50},{10,30,20},{50,20,20},};
int i,j;
for(i=0;i<HEIGHT;i++){/*縦の合計を求める*/
buf[i][WIDTH]=0;
for(j=0;j<WIDTH;j++){
buf[i][WIDTH] += buf[i][j];
}
}
for(j=0;j<WIDTH;j++){/*横の合計を求める。*/
buf[HEIGHT][j]=0;
for(i=0;i<HEIGHT;i++){
buf[HEIGHT][j] += buf[i][j];
}
}
buf[HEIGHT][WIDTH]=0;
for(j=0;j<WIDTH;j++){/*合計の合計を求める。*/
buf[HEIGHT][WIDTH]+=buf[HEIGHT][j];
}
for(i=0;i<=HEIGHT;i++){
for(j=0;j<=WIDTH;j++){
printf("%d ",buf[i][j]);/*表示*/
}
printf("\n");
}
return 0;
}
528 :
デフォルトの名無しさん:2005/06/18(土) 04:25:17
529 :
デフォルトの名無しさん:2005/06/18(土) 04:26:54
530 :
デフォルトの名無しさん:2005/06/18(土) 04:35:58
>>526 いくらなんでも、(3)てのは括弧つけすぎだろ。
532 :
デフォルトの名無しさん:2005/06/18(土) 04:51:08
>>524 のソースをコンパイルしたところ、エラーが発生しました。
エラー E2209 課題02.c 1: インクルードファイル 'stdio.h' をオープンできない
どういうことでしょうか?
>>532 helloworld みたいな短いプログラムはコンパイルできる?
534 :
デフォルトの名無しさん:2005/06/18(土) 05:05:54
>>533 あ、できない!!
すみません。コンパイラの設定がおかしいのかなぁ??
この環境で、コンパイル通したことなかったんで・・・。
んー。何ででしょう(´д⊂
535 :
522:2005/06/18(土) 05:05:57
>>525 なるほど、そうすれば簡潔に書けますね。勉強になりました。
>>531 単なる癖なんですけど。
まずいことあったかなぁ??
>>534 INCLUDEのpathが通ってないんじゃないの?
make書くとかなにかするべし。
stdio.hが開けないのはmake書くとかそういう問題じゃないだろ
ccが正しくセットアップされてない可能性が高い
ナンダ、インストールでコケテルノカ。
オレサマ ・・・ マルカジリ。
540 :
デフォルトの名無しさん:2005/06/18(土) 05:41:29
>>532 gcc file.c -I/usr/include
とかやってコンパイルしてもだめかい?
-Iはエルじゃなくて大文字のアイな
>>514 > [2] 問題文(含コード&リンク):関数memcpyの作成
これは undefined behavior ではないかと思うんだがどうだろう。
543 :
デフォルトの名無しさん:2005/06/18(土) 11:41:58
[1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク): char alph[20]; n で定義した配列に乱数を用いて作成した20個のでたらめなアルファベットを記入したとき、
alph[ ] の文字列と alph[ ] の各文字をアルファベット順に並べ替えた結果を表示せよ。文字は全て小文字とする。
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ(バージョン): Visual C++ 6.0
[3.3] 言語:C++
[4] 期限:06/18 12:30まで
[5] その他の制限:乱数
お願いします
>>543 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
int func( char *p1, char *p2 )
{
return *p1 > *p2;
}
int main( void )
{
char alph[20],n;
srand(time(NULL));
for(n=0;n<sizeof(alph);n++){
alph[n]='a' + random() % 26;
}
printf( "%.*s\n", sizeof(alph), alph );
qsort( alph, sizeof(alph), sizeof(alph[0]), func );
printf( "%.*s\n", sizeof(alph), alph );
return 0;
}
545 :
543:2005/06/18(土) 12:46:57
ありがとうございました!助かりました
546 :
デフォルトの名無しさん:2005/06/18(土) 13:45:53
[1] 授業単元:
[2] 問題文(含コード&リンク):
再帰降下法で以下の文法の解析木を作るプログラム
e := t { ( '+' | '-' ) t }
t := f { ( '*' | '/' ) f }
f := '(' e ')' | number
[3] 環境
[3.1] OS:Windows
[3.2] gcc 3.3.3 (cygwin)
[3.3] 言語:C
[4] 期限:2005 6/19
[5] その他の制限:
547 :
デフォルトの名無しさん:2005/06/18(土) 14:41:00
[1] 授業単元:プログラミングI
[2] 問題文(含コード&リンク):
整数a,b,cを入力したとき、2次方程式(ax^2+bx+c=0)に対し、
ポインタを用いて2個の解が求まる関数を作成し、その解を出力しなさい。
虚数の場合は、「2虚数解」と出力せよ。
[3.1] OS:Windows
[3.2] Borland C++ Compiler 5.5
[3.3] 言語:C
[4] 期限:2005 6/18 24:00
[5] その他の制限:
548 :
デフォルトの名無しさん:2005/06/18(土) 14:43:23
C++ですが、dIの最小値を表示するという問題なのですが、無限ループ内が間違っているらしく・・・
どう直せば正常に動きそうですか?
(ちなみに正しい結果は、だいたいf=50でdI=2.64くらいになるはずです。)
#include <stdio.h>
#include <math.h>
#include <iostream>
#include <complex>
using namespace std;
#define Complex complex<double>
#define PI 3.141592653
Complex circuit(double f)
{
int m=3,i,j,k;
double r=1.0,L=10e-3,C=1.0e-3,E=10.0;
Complex s,c,d,g,dI;
double w=2*PI*f;
s=Complex(0.0,1.0)*w;
Complex z1,z2,z3,z4,z5;
z1=r+s*L;
z2=r+1.0/(s*C);
z3=z2;
z4=z1;
z5=r;
549 :
デフォルトの名無しさん:2005/06/18(土) 14:43:56
Complex a[3][3]={(z2+z4),(-z2),(-z4),
(-z2),(z1+z2+z5),(-z5),
(-z4),(-z5),(z3+z4+z5)};
Complex b[3]={E,0,0};
Complex x[3];
for(k=0;k<m-1;++k)
{
c=a[k][k];
for(j=k+1;j<m;++j)
a[k][j]/=c;
b[k]/=c;
for(i=k+1;i<m;++i)
{
d=a[i][k];
for(j=k+1;j<m;++j)
a[i][j]-=d*a[k][j];
b[i]-=d*b[k];
}
}
550 :
デフォルトの名無しさん:2005/06/18(土) 14:44:26
x[m-1]=b[m-1]/a[m-1][m-1];
for(k=m-2; k>=0;--k)
{
g=b[k];
for(j=k+1;j<m;++j)
g-=a[k][j]*x[j];
x[k]=g;
}
dI=abs(x[1]-x[2]);
return dI;
}
551 :
デフォルトの名無しさん:2005/06/18(土) 14:44:38
void main()
{
double f,minI=0.0;
Complex dI;
FILE *fp;
fp=fopen("kadai4_3.xls","w");
if(fp==NULL)
{
printf("*****ERROR*****\n");
exit(0);
}
f=1.0;
for( ; ; )
{
dI=circuit(f);
f=f*sqrt(sqrt(sqrt(sqrt(sqrt(sqrt(sqrt(sqrt(sqrt(0.0)))))))));
if(minI<dI)
break;
minI=dI;
}
printf("%2.6f %2.6f\n",f,minI);
fprintf(fp,"%2.6f %2.6f\n",f,minI);
fclose(fp);
}
ループが
for(k=0;k<m-1;++k)
{
c=a[k][k];
for(j=k+1;j<m;++j){ a[k][j]/=c; }
b[k]/=c;
for(i=k+1;i<m;++i)
{
d=a[i][k];
for(j=k+1;j<m;++j){ a[i][j]-=d*a[k][j]; }
b[i]-=d*b[k];
}
}
こうなっているのは正しいのか?
>>547 #include <stdio.h>
#include <math.h>
void solve(double a, double b, double c, int* mode, double* s1, double* s2) {
double d = b * b - 4 * a * c;
if (d < 0)
*mode = 0;
else if (d == 0) {
*mode = 1;
*s1 = -b / 2 / a;
} else {
*mode = 2;
*s1 = (-b + sqrt(d)) / 2 / a;
*s2 = (-b - sqrt(d)) / 2 / a;
}
}
int main(void) {
int a, b, c, mode;
double s1, s2;
printf("a?:"); scanf("%d", &a);
printf("b?:"); scanf("%d", &b);
printf("c?:"); scanf("%d", &c);
solve(a, b, c, &mode, &s1, &s2);
if (mode == 0)
printf("solution:2虚数解");
else if (mode == 1)
printf("solution:%f", s1);
else
printf("solution:%f, %f", s1, s2);
return 0;
}
554 :
425:2005/06/18(土) 14:56:06
[1] 授業単元:プログラミングC
[2] 問題文(含コード&リンク):
次のデータをエディタで入力し、テキストファイルを作成せよ。
---------------------
防御率 名前 誕生日(月) 誕生日(日)
---------------------
626 野茂英雄 8 31
289 長谷川滋利 8 1
396 石井一久 9 9
404 大家友和 3 18
556 高津臣吾 11 25
233 大塚晶則 1 13
320 藪恵壹 9 28
問題:
4月~3月の順で誕生日が早い順にソートするプログラムを作れ。
(結果は全ての選手の情報をファイルに出力する)
[3.1] OS:Windows
[3.2] Borland C++ Compiler 5.5
[3.3] 言語:C
[4] 期限:2005 6/19 am6:00
[5] その他の制限:
556 :
デフォルトの名無しさん:2005/06/18(土) 14:58:36
>552
以前、同じ条件でfの値を変化させて出力・エクセルで波形を描くという課題のとき、
正しい数値が出たので、circuit内の関数はあってるはずです(丸々コピーなので)。
今回はfの最小値だけを求める問題なのですが・・・
557 :
556:2005/06/18(土) 14:59:45
訂正・dIが最小のときのfの値
>>554 6: int gakka_ninzu[100]; →int i, gakka_ninzu[100];
11: for (int i = 0; i < 100; ++i) { → for (i = 0; i < 100; ++i) {
30: for (int i = 0; i < 100; ++i) { → for (i = 0; i < 100; ++i) {
for()の中で変数を宣言できるのはC99で、君がやっているのは
1個古い(しかし未だに一般的な)C89。
>554
C99に対応したコンパイラを入手汁!
>4月~3月の順で
4,5,...,12,1,2,3 の順という忌みだよね?
561 :
67:2005/06/18(土) 15:06:47
>>551 > f=f*sqrt(sqrt(sqrt(sqrt(sqrt(sqrt(sqrt(sqrt(sqrt(0.0)))))))));
なにがしたいの?
562 :
556:2005/06/18(土) 15:08:52
あ、そこは10.0の間違いです・・・
いろいろいじってるうちに1を消してしまったみたいです。済みません。
>555
本当の項目の区切り文字は2バイトスペース文字なのか?
タブ文字とかでないの?
564 :
563:2005/06/18(土) 15:21:36
もしくは各項目の始まりの位置(先頭からの文字数)が固定なのかna?
565 :
425:2005/06/18(土) 15:21:41
>>562 > if(minI<dI)
複素数の大小関係って数学的に定義されてたっけ?
circuitはabs()を返すのだから、戻り値の型はdoubleでいいはず。
よって、dIの型もdoubleでいいはず。
minIの初期値が0だと、circuit()が0を返さない限り
minI<dIが成り立つので望む結果は得られない。
minIの初期値をDBL_MAXにでもしておけばちゃんと動くよ。
567 :
556:2005/06/18(土) 15:45:47
>566
丁寧な回答をありがとうございます。
おかげさまでエラーはほとんど消えましたが、ただひとつ
dI=circuit(f);
の行に対して
error C2679: 二項演算子 '=' : 型 'class std::complex<double>' の右オペランドを扱う演算子は定義されていません。(または変換できません)(新しい動作; ヘルプを参照)
というエラーが出ます(VISUAL C++ 6.0)。
どうすればよいでしょうか・・・?
>>567 だから、circuit()は実数しか返さないんだから、戻り値の型を
Complexではなくdoubleにすればいい。
どうしてもcircuit()から複素数を戻したいなら、
dI=circuit(f).real();
とすればいい。
569 :
556:2005/06/18(土) 15:57:13
>568
無事動きました・・・本当に色々とありがとうございました!
[OS] Windows2000
[コンパイラ]gcc VC どちらでも
[言語] C/C++/どちらでも
B'sCLIP使って、バックアップ取ろうとしたら、
1.『ファイル名に使用できない文字が使われています。』
2.『ファイル名が64文字を超えています。』
と出て、正常に焼きこみが出来ません。しかも、1.に関しては、どのファイルに
使用できない文字が入っているのか、メッセージも出してくれないのです。
そこで
バックアップを取ろうとしてる、あるディレクトリから64文字以上、もしくは、
a-zA-Z_. 以外の文字が使われている場合、そのファイルのパスを表示する
プログラムは作成可能でしょうか? しかも、ディレクトリは階層構造をなして
いるのです。不可能かもしれませんが、できる凄腕の方がいらっしゃいましたら、
ぜひともヨロシクお願いします。
>570
とりあえず、
dir /s /b
>>571 ありがとうございます。
それがわかった今、何とかなりそうです。
>570
-----
#include <stdio.h>
#include <string.h>
int main(void)
{
char buf[1024];
while(fgets(buf,sizeof(buf),stdin)) if(strlen(buf)>64) printf("%s",buf);
return 0;
}
-----
dir /s /b | 実行プログラム
>64文字以上
あ...
>= に直して
576 :
555:2005/06/18(土) 17:31:52
>>560 はい。そういう意味です。
分かりにくい表現ですいません。
>>563 特に指定はないので、スペース、タブ等どのような区切り方でも問題ないと思います。
577 :
デフォルトの名無しさん:2005/06/18(土) 17:42:31
遅れまして500の発言をしたものです。
>>502,510
コンパイルしてもセグメントエラー引き起こすんです。それで不良品といったんです。
>>503 褒めていただいて真にありがとうございました。
>>507 俺のとこは講師の先生がtexかなんかで作ったプリントが教科書。
見本となるプログラムの一部しかなってないから難しい・・・
単位落としそうで怖い。
>>508,511
早速参考とさせていただきます。
[1] 授業単元: 情報処理技術
[2] 問題文(含コード&リンク):
ランダムに並んだ数と公差を与える。
ここから、最も長い等差数列を発見せよ
出力は項数のみでよい
例
6 1 3 5 2 9 8 7 0
n=2を仮定するなら
1 3 5 7 9が最大となり、項数を出力するのだから5
6 8もあるがこれは項数が2なので最大ではない。
(例以下は私がつけたものです。
なお、同じ数字は二度と出てきません。
与えられる数の最大は100だそうです)
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン): bcc32
[3.3] 言語:C (ANSI Cで。C99はご勘弁下さい)
[4] 期限:2005年06月20日07:00(家出る時間)
[5] その他の制限:特にありません。文法事項は分からなければ自分で調べます。
例がわからんな
与えられた数列を並べ替えるのか?
1 3 5 の項数3
9 8 7 の項数3
ならわかるんだが
ソートして動的計画法?
もまえらもちつけ
6 1 3 5 2 9 8 7 0
ソートしたら
0 1 2 3 5 6 7 8 9
だろ?
>1 3 5 7 9が最大となり、項数を出力するのだから5
>6 8もあるがこれは項数が2なので最大ではない。
おかしいだろ?
>>582 ソートしたら
0 1 2 3 5 6 7 8 9
こうなる。
この中から与えられたnを公差とする等差数列を
最も項数が多くなるようにとるってこと。
いま、n=2だから
1 3 5 7 9
6 8
0 2
の3つが考えられて
そのうち最大の項数を取れるのは
1 3 5 7 9だから5を出力するってこと
多分交差の意味が分かっていない人がいる悪寒
>>581 コンパイルできない。
ので、
qsort( kazu, KAZU_SIZE, sizeof(kazu[0]), func);
↓
qsort( kazu, KAZU_SIZE, sizeof(kazu[0]), (int(*)(const void *,const void *))func);
random()
↓
rand()
に変えてやってみた
だけど動かない。
どうやら、qsortまで行っているようなんだけど。
それ以降が実行されてないみたいです。
交差に吹かれて~さまy
>>585 > (int(*)(const void *,const void *))func
qsort なんかで
よくこういうキャストしている奴がいるがハッキリ言ってマズイ
関数へのポインタはキャストしてはいけない
「clとかbccでうまくいくから」なんて思ってる奴は逝ってよし
>>587 ではやはり、funcの方を
int func(const void *a,const void *b)
{
int *ap=(int*)a;
int *bp=(int*)b;
(処理)
}
とかにするべきなのですか・・・。
分かりました。
そっちでためしてみます。
>>581 ・・・・それでも動きません。
>>587 ただ、関数へのポインタの指し示す先は
関数のアドレスですよね。
ならば、キャストしても良いのではないでしょうか?
すみません。理解し切れてないのでしょうけど
結局スタックに引数を詰め込むだけの話ですから
この場合は、void型のポインタを渡すものとして捉えられても
呼び出された関数側では受け取るアドレスは同じで
挙動はint*と変わらない気が・・・・OTL
やっぱり勉強してきます。
確認だけど
>>581のはうまくいっていないよね?
不必要なものを省いた上で最長に続くのを見つけるんだよね?
>>590 上手くいってません。
そうです。
不要なものを除いて最長の物を見つけるんです。
>>588 const/volatileは極力外さない方がいい
たとえ記憶域期間が短くても俺なら
int func(const void *a,const void *b) {
const int *ap=(const int*)a;
const int *bp=(const int*)b;
って感じにする
>>589 再掲する
>「clとかbccでうまくいくから」なんて思ってる奴は逝ってよし
規格書のどこかに説明があったはず
あーなんかスレ違いっぽ
594 :
592:2005/06/18(土) 22:27:24
#include <stdlib.h>
#include <time.h>
忘れ(w
項数が同じケースは最初に見つけたものが優先されます。
>>592 C++のコードになってるっぽいです。
boolとか分かりません・・・。
ここで宣言できませんっていうコンパイルエラーはどうやって直せばいいですか?
いままでに見たことがないエラーなので。
わがままですみません。
最大値は100と言っているのに、最小値に言及がないのは、問題として不自然な気が…
もし、勝手に最小値は0だと仮定してしまえば、
int have[101];
というテーブルを作ることで、sortは必要なく、こんな感じでできるのでは?
int get_length(int x, int step)
{
int cnt;
if( 0 <= x-step && have[x-step])
return 0;
for(cnt=0; x<=100 && have[x]; x+=step, cnt++);
return cnt;
}
int length;
for(start=0;start<=100;start++){
if(have[start]){
for(step=1;start+max_length*step<=100;step++){
length=get_length(start,step);
if(max_length < length)
max_length=length;
}
}
}
>>596 >最大値は100と言っているのに、最小値に言及がないのは、問題として不自然な気が…
多分先生のミスでしょうね・・・。
コード参考にしてみます
598 :
592:2005/06/18(土) 22:43:33
全部書くとこんな感じ
#include <stdio.h>
int have[101];
int get_length(int x, int step)
{
int cnt;
if( 0 <= x-step && have[x-step])
return 0;
for(cnt=0; x<=100 && have[x]; x+=step, cnt++);
return cnt;
}
int main()
{
int length,i,start,step,max_length=1;
int data[9]={6,1,3,5,2,9,8,7,0};
for(i=0;i<9;i++)
have[data[i]]=1;
for(start=0;start<=100;start++){
if(have[start]){
for(step=1;start+max_length*step<=100;step++){
length=get_length(start,step);
if(max_length < length)
max_length=length;
}
}
}
printf("max_length=%d\n",max_length);
}
>>598 ありがとうございます。
ですが
42:stTohsamax = {nums[0],nums[1] - nums[0]};
50:const int yohso = getYohso(nums,TEST_DIM,i,nums[k]-nums[i]);
以上の2行でエラーが出ています。
>>599 ありがとうございます。
動作しています。
若干仕様と異なりますが、参考にしたいと思います。。
>>600 失礼、仕様を誤解していた。ループ部分をこうする。
for(start=0;start+(max_length-1)*step<=100;start++){
length=get_length(start,step);
if(max_length < length)
max_length=length;
}
602 :
592:2005/06/18(土) 23:46:31
[1] 授業単元: プログラミング言語C
[2] 問題文(含コード&リンク):
C-第6講課題:出力例を遵守したプログラムを作成せよ。
問題1.ループ文(for,while,do)の比較
キーボードから数字nを読み込み、出力するプログラムを作成せよ。(for,while,doを使い、3通りのソースを作成すること)
出力例
1
2
3
・
・
・
n
問題2.複利計算のループ処理
銀行に1万円を預金したとき、15年後の預金残高を求めるプログラムを作成せよ。年利10%で、利息は複利で計算するものとする。
(預金のデータ型は整数型として作成すること)
出力例
元金1万円、年利10%のとき
15年後の預金残高はOOOOO円です
[3] 環境
[3.1] OS:Windows XP Home Edition
[3.2] コンパイラ:Visual Studio 6.0
[3.3] 言語:C++
[4] 期限:2005年06月20日14:00まで
[5] その他の制限:どこまで習っているか
就職活動のため、殆ど出席していなく、さっぱりでした・・・。習ったと記憶しているのはintの変数宣言・printf関数・scanf関数・・・です。どうかお助け下さいm(_ _)m
>>602 公差は見つけるのではなく、与えられるらしいよ。問題文も
「ランダムに並んだ数と公差を与える。」
となってる。
そうだったのか ○| ̄|_
>>603 質問が幾つかある。
問題1は、nのみ全角で出力するのか?
ということは問題2の答えも?
[1] 授業単元:
[2] 問題文(含コード&リンク):ファイルの違いをチェックするプログラム作成
テキストベースで比較するか、バイナリベースで比較する選択する。
ファイル1とファイル2を比較する
違いがある場合は違いのある行数と文字を表示
最後に比較した行数とバイト数を表示する。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):VC++2003
[3.3] 言語:C
[4] 期限:無期限
[5] その他の制限:
どうかよろしくおねがいします。
608 :
606:2005/06/19(日) 00:14:56
>>603 とりあえず。
全て#include <stdio.h>という件を先頭に追加すること
問題1
int main(void) {
int i, n;
scanf("%d", &n);
for (i = 1; i <= n; i++) printf("%d\n", i);
return 0;
}
int main(void) {
int i = 0, n;
scanf("%d", &n);
while (++i <= n) printf("%d\n", i);
return 0;
}
int main(void) {
int i = 1, n;
scanf("%d", &n);
do printf("%d\n", i); while (++i <= n);
return 0;
}
問題2
int main(void) {
int i, n;
double d;
scanf("%d", &n);
d = n;
for (i = 0; i < 15; i++) d *= 1.1;
printf("元金1万円、年利10%のとき\n15年後の預金残高は%d円です", (int)d);
return 0;
}
>>607 いくつか質問
・ファイル名の指定方法
・比較は違いが見つかった時点で停止するのか
・停止しない場合はどのように再開するのか
r;ァ'N;:::::::::::::,ィ/ >::::::::::ヽ
. 〃 ヽル1'´ ∠:::::::::::::::::i
i′ ___, - ,. = -一  ̄l:::::::::::::::l
. ! , -==、´r' l::::::/,ニ.ヽ
l _,, -‐''二ゝ l::::l f゙ヽ |、 日記はこれにでも書いてろ
レー-- 、ヽヾニ-ァ,ニ;=、_ !:::l ) } ト
ヾ¨'7"ry、` ー゙='ニ,,,` }::ヽ(ノ な!
:ーゝヽ、 !´ " ̄ 'l,;;;;,,,.、 ,i:::::::ミ
::::::::::::::::ヽ.-‐ ト、 r'_{ __)`ニゝ、 ,,iリ::::::::ミ
::::::::::::::::::::Vi/l:::V'´;ッ`ニ´ー-ッ-,、:::::`"::::::::::::::;゙ ,
http://yuukiremix.s33.xrea.com/chirashi/ :::::::::::::::::::::::::N. ゙、::::ヾ,.`二ニ´∠,,.i::::::::::::::::::::///
:::::::::::::::::::::::::::::l ヽ;:::::::::::::::::::::::::::::::::::::::::::/ /
::::::::::::::::::::::::::::::! :|.\;::::::::::::::::::::::::::::::/ /
611 :
607:2005/06/19(日) 00:59:25
>>609 ファイル名はファイルポインタを使う。
比較は違いが見つかった時点で停止します。
612 :
555:2005/06/19(日) 01:32:51
できた方いませんか・・・
tab区切りとかなら
#include <stdio.h>
#include <string.h>
int main(void)
{char buff[256];
int i,j, man,day, n;
struct _list{ int key; char data[256]; }tbl[1000],tmp;
/* 見出しの分 */
for(i=0; i<3; ++i){
fgets(buff,sizeof(buff),stdin); printf("%s",buff);
}
/* dataの分 */
n=0;
while(fgets(buff,sizeof(buff),stdin)){
sscanf(buff,"%*s%*s%d%d",&man,&day);
tbl[n].key=(((3>=man)?1:0)*100+man)*100+day;
strcpy(tbl[n].data, buff);
++n;
}
for(i=0; i<n-1; ++i)
for(j=i+1; j<n; ++j)
if(tbl[i].key>tbl[j].key){
tmp=tbl[i]; tbl[i]=tbl[j]; tbl[j]=tmp;
}
for(i=0; i<n; ++i) printf("%s", tbl[i].data);
return 0;
}
実行プログラム < データテキスト > 出力ファイル って感じで
manあげw
615 :
603:2005/06/19(日) 08:39:20
>>606さん
ありがとうございます、説明不足だったことをお許し下さい。。。
当方の講師は、プログラムを書くときに以下のように始めます。
#include<stdio.h>
void main(void)
↑のように書き始めて、
>>603のプログラムを動かすには
どうすればよい良いでしょうか?
ループ文の問題に関して、nというのは問題として分かりやすくするために
講師が書いただけのようでした。実際は半角での出力を求めているようです。
複利計算の問題に関して、doubleという関数?を習っていないようです・・・
友人から借りたノートにはdoubleを習ったような記述がありませんでした。
doubleを使わず動かすにはどうすれば良いでしょうか?
質問厨で申し訳ありませんが、宜しくおねがいしますm(_ _)m
>>615 doubleは小数の型。
問題文には整数型と書いてあるな。
void main(void)は正しくなくてint main(void)が正しいものだからだから気にするな。
#include <stdio.h>
#define PRINCIPAL 10000
#define INTEREST 10
#define YEAR 15
int main( void )
{
int i, account;
account = PRINCIPAL;
for( i=0; i<YEAR; i++ )
account = account * ( 100 + INTEREST ) / 100;
printf("元金%d円、年利%d%のとき\n%d年後の預金残高は%d円です。\n",
PRINCIPAL, INTEREST, YEAR, account);
return 0;
}
>>616 関数の返り値や引数がわかってないやつにそういうこと教えるなよ
講師に聞かれたりして面倒なことになるだろ
説明するならちゃんと説明してやれ
>>616 > void main(void)は正しくなくてint main(void)が正しいものだからだから気にするな。
いいえ。
くだらん。
main()
でいいよ。もう
621 :
607:2005/06/19(日) 11:50:17
622 :
607:2005/06/19(日) 11:54:21
どなたかできた方います?
607は何がしたいんだ?
624 :
607:2005/06/19(日) 12:00:06
625 :
606:2005/06/19(日) 12:04:34
>>615 int main(void)が正しい。どうしてもvoid main(void)にしたければ
return 0;を削れ。たまには無知な人間に合わせることも必要。
問題1は半角で出力してる。
問題2は浮動小数点型を使わないならば整数で何倍かして計算
してまた元に戻すことになる。そのくらいは自分でやれ。
626 :
547:2005/06/19(日) 12:24:37
どなたかできませんか(つД`)
628 :
547:2005/06/19(日) 12:37:45
すいません失礼しました
ありがとうございます。
(*´∀`*)
629 :
デフォルトの名無しさん:2005/06/19(日) 13:52:14
まだ答えてもらってない人いる?
今、暇だから作るよ。
630 :
606:2005/06/19(日) 14:07:18
631 :
555:2005/06/19(日) 14:14:43
>>613 誕生日が月ではソートされるのですが、
日でソートできでいないんですが出来るようになりませんか?
あと出来ればこのプログラムのアルゴリズムを教えていただきたいのですが。
贅沢言ってすいません
632 :
607:2005/06/19(日) 14:17:26
>>607 たとえば1000 行のテキストファイル。
それとそのファイルの101行目に一行挿入したファイルを比較すると…
違いは何行って出せと?
バイナリでも似たようなことがいえるけど。
634 :
607:2005/06/19(日) 14:27:49
>>633
そうです
>>634 A
B
C
と
A
x
B
C
を比べて、何行違うと出せばいいのかと。
>>607 一行の最大文字数を固定(例えば、1024文字とか)しちゃってもいい?
それとも任意にする?
640 :
607:2005/06/19(日) 14:39:18
つーかバイナリファイルに行という概念があるのか?
>>641 テキストファイルって何?
バイナリファイルって何?
diffを使った事無いのか?
まともに説明できない香具師って、相手も理解できているつもりで言葉が足りなくなるんだろうなぁ。
だから逆に、相手の言ったことも自分に理解できている範疇の内容としか思わないと。
#まさか、相手から「どうしていいのか判らない」と言われるとは思ってもいないようだ。
>>643 diffと宿題,、どこに関係があると書いてあるんだ?
>>645 diffと宿題,、どこに関係がないと書いてあるんだ?
晒し
diffよりは遥かに単純な働きしかしないけどテキスト版はこれでいい?
#include <stdio.h>
#define BUFFER_SIZE 1024
char buf1[BUFFER_SIZE], buf2[BUFFER_SIZE];
int main(int argc, char *argv[])
{
FILE *fp1,*fp2;
int line;
if(argc<3)
return 1;
fp1=fopen(argv[1],"r");
fp2=fopen(argv[2],"r");
if(!fp1 || !fp2)
return 1;
for(line=0;;line++){
fgets(buf1,BUFFER_SIZE,fp1);
fgets(buf2,BUFFER_SIZE,fp2);
if(feof(fp1) && feof(fp2))
break;
if(strcmp(buf1,buf2))
printf("line %d:\n %s%s\n",line,buf1,buf2);
}
fclose(fp1);
fclose(fp2);
return 0;
}
>>631 ぱっと見>613で動きそうなんだけど、どういう入力を与えたらどういう出力になった?
#まぁ、>613が小汚いとかmanってなんだとか、突っ込みどころはあるけど。
で、diffと関係あるの?無いの?
658 :
603:2005/06/19(日) 15:11:07
659 :
607:2005/06/19(日) 15:19:03
>>659 バイナリ版も作った。長くなったのでいまウプロダ探してる。
他に答えてもらってない人いる?
664 :
607:2005/06/19(日) 15:37:03
[1] 授業単元: プログラミング言語C
[2] 問題文(含コード&リンク):
標準入力から入力される文字列を読み取り
そのまま表示しなさい。
ただし、文字列の最大の長さは半角100文字とします。
文字列の終端は!でこれが入力されると
直ちに表示するようにしなさい。
ANSI Cで答えるようにしなさい。
分かりにくいかもしれませんが
2ch saiko-! (入力)
2ch saiko- (出力)
となり、エンターもなにも押さないで
!を押したら、即表示せよとのことです
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ:Lsic86
[3.3] 言語:C
[4] 期限:2005年06月20日12:00まで
[5] その他の制限:特に無し
皆さんの大学のプログラミングの授業ってどんな感じですか?
もうどうしようもなく糞で参ってますorz
>>667 lsicで改行を待たずにキーボードの入力を受けとる関数ってなんだっけ?
>>668 中高生じゃあるまいし、プログラムの勉強したかったら
自力で勉強すりゃいいじゃないか
>>669 分からない。
調べてみたけどANSI Cで見当たらない・・・。
見落としてると思うんだけど
>>671 リターンを押さなくてもキーを読み取る関数はgetch(やgetche)だったと思うけど、
この振る舞いはコンパイラによって微妙に違った気がする。
一応書いて見たけど、これがlsicでちゃんと動くかは分からない。
#include <stdio.h>
#include <conio.h>
int main()
{
int i;
char buf[101];
for(i=0;i<101;i++){
buf[i]=getche();
if(buf[i]=='!'){
buf[i]=0;
printf("\n%s\n",buf);
return 0;
}
}
return 1;
}
>>671 そのgetchなどはANSI Cにはない非標準だから見つからなくて当然。
>>665 「リターンを押さなくてもキーを読み取る関数」などANSI標準で
規定されていない。よって問題がおかしい。
いまどき ANSI C って…
化石状態のガッコだな…
ISO C89だのC99だのじゃなくて"ANSI"ってとこが「ふるい」んじゃねーのか
678 :
675:2005/06/19(日) 17:39:07
まあそれでなくともLSI C-86って時点で化石状態なのはバレバレだがな
ANSIって言うのが何故古いのか無知な漏れに教えてくれ
ググったらANSI C=C89ってのが出てきたが、C89っていう
言い方よりオサーン臭いってことか?
たぶん
>>675はC++とかJavaとかC#とかを教えろよと思っているのではないだろうか。
言葉なんて飾りですよ
古い人にはそれがわからんのです
>>681 C89の時点ではCの標準規格はそんだけだったが
現在は規格が複数あるんだからそれを明示すべしということでしょ
まあANSI Cと書かれれば意味はわかるけど、な
いやだから、ANSI CといいつつLSI-C使っている辺りが怠慢でしょう。
>>670 独学でプログラミングを学ぶほど非効率なモノはないと思うが。
プログラミングで苦労するのは初めだけ。
慣れてくれば、何をすれば良いのかなんてすぐに解かるようになる。
1に調べる、2に調べる、3も4も5も調べる。だな。
で、6で挫折する、と
691 :
デフォルトの名無しさん:2005/06/19(日) 21:22:21
よろしくお願いします。
[1] 授業単元:Linuxプログラミング
[2] 問題文:引数にファイル名を指定すると、そのファイルのサイズ、種類(一般ファイル、ディレクトリ、パイプ等)、
そして最終変更時刻を表示するコマンド(fviewという名称とする)を作成せよ。
ただし、引数には、複数のファイルを指定できるようにすること。
また、fstatシステムコールを用いること。
実行例:$fview aaa.txt bbb.txt ccc.txt ・・・<RET>
[3] 環境 :
[3.1] OS:Linux
[3.2] コンパイラ:gcc
[4] 期限:2005年6月20日23:59まで
スレちがいだったらすみません。
よろしくお願いします。
692 :
ccc:2005/06/19(日) 21:26:26
【質問テンプレ】
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): 要素数がnoであるint型の配列vcの並びを逆順にしたものを配列vc1に格納する関数
void intary_rcpy(int v1[],const int v2[],int no) を使って作成せよ
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:どちらでも可
[4] 期限:できるだけ早く
[5] if文 ループ 配列はしました。
>>692 void intary_rcpy(int v1[], const int v2[], int no)
{
for (int i = 0; i <= no; i++)
v1[i] = v2[no - i - 1];
}
695 :
693:2005/06/19(日) 21:32:07
i < noだった
○| ̄|_
一応、C言語らしいから、愛の宣言を外に移動してな。
可搬性アップ!
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <time.h>
const char *get_type(mode_t m)
{
if(S_ISREG(m))
return "normal file";
if(S_ISDIR(m))
return "directory";
if(S_ISFIFO(m))
return "pipe";
return "unknown";
}
int main(int argc, char *argv[])
{
for(;argc>1;argc--,argv++){
struct stat buf;
int fd=open(argv[1],O_RDONLY);
if(!fd)
continue;
if(!fstat(fd,&buf))
printf("size=%d, type=%s, update_time=%s\n",
buf.st_size, get_type(buf.st_mode), ctime(&buf.st_mtime));
close(fd);
}
return 0;
}
700 :
デフォルトの名無しさん:2005/06/19(日) 22:24:28
1] 授業単元: COBOL テーブル基礎
[2] 問題文(含コード&リンク):
――――――――――――――――――――――――
| KURASU-TAB |
――――――――――――――――――――――――
|SEITO(1)|SEITO(2)|SEITO(3)|~~|SEITO(40)|
――――――――――――――――――――――――
テーブルKURASU-TABのSEITO(1)に1を、(2)に2を・・・
SEITO(40)に40を初期値として空欄をうめなさぃ。
MOVE (ア)
PERFORM UNTIL (イ)
COMPUTE SOE = SOE + 1
MOVE (ウ) TO SEITO(SOE)
END-PERFORM
[3] 環境
[3.1] Windows
[3.2] ?
[3.3] ?
[4] 今日の11時まで
[5] テーブルまで
ほんとすぃません、ちゃんとテンプレ使えてませnooo
ぁと高1の実業高校でプログラミング習ってますww
>>700 ウソついちゃいけません。
小学生でしょうあなた。
703 :
デフォルトの名無しさん:2005/06/19(日) 22:29:32
>>701すぃませnooo
COBOLわからなかったらどこで聞いていいんですか?
「COBOL テーブル基礎」の担当の先生(50代後半)に聞きなさい。
705 :
デフォルトの名無しさん:2005/06/19(日) 22:33:00
学校のってことですか?
706 :
デフォルトの名無しさん:2005/06/19(日) 22:36:56
しかしCOBOLなんて古いなあ。
708 :
ccc:2005/06/19(日) 22:39:47
[1] 授業単元: c言語
[2] 問題文:五人の学生の3教科(国語、数学、英語)の点数を
2次元配列を用いて科目別の最高点を求めるプログラムを作成せよ。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:どちらでも可
[4] 期限:できるだけ早くお願いします・・・
[5]関数までやりました
何回もすみませんよろしくお願いします。
709 :
デフォルトの名無しさん:2005/06/19(日) 22:40:10
#include <stdio.h>
int main()
{
int i,j;
char *subj[3]={"国語","数学","英語"};
int score[5][3]={{70,40,60},{20,50,30},{50,90,20},{60,30,30},{20,0,50}};
for(i=0;i<3;i++){
int high_score=0;
printf("%sの最高点は.... ",subj[i]);
for(j=0;j<5;j++)
if(high_score<score[j][i])
high_score=score[j][i];
printf("%d点です!!! オメデトー!\n",high_score);
}
return 0;
}
712 :
ccc:2005/06/19(日) 23:08:29
>>711 結果はどのように表示されますか?コピペしてください・・・
715 :
ccc:2005/06/19(日) 23:23:31
>>714 いや違うんです。実行はしましたけど確認したいもので・・・(´_`。)
国語の最高点は.... 60点です!!! オメデトー!
英語の最高点は.... 90点です!!! オメデトー!
数学の最高点は.... 60点です!!! オメデトー!
717 :
ccc:2005/06/19(日) 23:26:51
[1] 授業単元:
[2] 問題文(含コード&リンク):正弦波データの作成
サンプリング周波数:32KHz
チャンネル数:モノラル(1ch)
周波数:1KHz
フォーマット:WAV
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):VC++6.0 Professional
[3.3] 言語:C
[4] 期限:6月20日17:00
[5] その他の制限:
よろしくお願いします。
719 :
718:2005/06/19(日) 23:30:42
追記
GUIでなくCUIです。
それ、wavファイル操作するライブラリとか無しで素で書く訳?
wav、Cマガでやってたような・・・。
確かにCマガ6月号にのってたな。
724 :
718:2005/06/19(日) 23:53:45
>>720 すみません、素で書くと大変ですよね。
フォーマット関しては何を使っても構いません。
726 :
718:2005/06/20(月) 00:11:52
>>725 なんですかそれは?
後、あまり音に関してはあまり知識がないため平易にお願いします
727 :
デフォルトの名無しさん:2005/06/20(月) 00:15:05
>>725 1サンプルを何ビットで表すかってこと、普通8か16
728 :
718:2005/06/20(月) 00:22:34
量子化8ビットなら、
0, 2, 9, 21, 37, 56, 78, 102, 127, 151, 175, 197, 216, 232, 244, 251, 254, 251, 244, 232, 216, 197, 175, 151, 127, 102, 78, 56, 37, 21, 9, 2,
の繰り返し。
731 :
デフォルトの名無しさん:2005/06/20(月) 00:39:58
732 :
729:2005/06/20(月) 00:42:37
733 :
718:2005/06/20(月) 00:42:41
734 :
デフォルトの名無しさん:2005/06/20(月) 00:43:02
[1] 授業単元: プログラム
[2] 問題文(含コード&リンク):
int型の配列を表すクラス IntArray を作って下さい. このクラスは以下のような仕様にして下さい.
コンストラクタで配列の長さを設定し, 要素を全て0にする.
インデクスを指定して, 配列の要素を取得するためのメンバ関数を持つ.
インデクスを指定して, 配列の要素を書き換えるメンバ関数を持つ.
インデクスを指定して, 配列の途中に一つ値を挿入するメンバ関数を持つ.
インデクスを指定して, 配列の要素を一つ削除するメンバ関数を持つ.
配列の長さを取得するためのメンバ関数がある.
このクラスのインスタンス全てが確保しているメモリの量の合計を見る手段がある.
そしてアクセスコントロールを適切に行ない, 安全なクラスを設計でオネガイシマス。
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ(バージョン):VC++6.0
[3.3] 言語:C++
[4] 期限:出来るだけ早く
[5] その他の制限: なし
ヨロシクお願いします(o*。_。)o
735 :
731:2005/06/20(月) 00:45:29
すまん、振幅に200掛けてるとこ100にしといて。
736 :
718:2005/06/20(月) 00:51:20
自分なりに考えたコードくらいは書けよと思うんだが、大学の講義の実態を考えるとそれも酷か。
何の話?
>>731 AUってビッグエンディアンじゃなかったっけ?
740 :
731:2005/06/20(月) 00:57:29
>>739 8bit量子化ならエンディアン関係ないかなーって思った
auって符号付きだっけ?
743 :
731:2005/06/20(月) 01:26:56
そ、そのへんの微調整は
>>718ががんばってくれ、、
744 :
691:2005/06/20(月) 01:30:33
>>699 どうもありがとうございます。
助かりました。
745 :
デフォルトの名無しさん:2005/06/20(月) 01:38:43
[1] 授業単元: プログラム
[2] 問題文(含コード&リンク): バタフライ演算をするプログラム。
どのようにプログラムすればいいのか教えて。
[3] 環境
[3.1] OS:Windows/
[3.2] コンパイラ(バージョン):borland5.0
[3.3] 言語:C/C++/どちらでも可
[4] 期限:2005年7月21日まで
748 :
デフォルトの名無しさん:2005/06/20(月) 02:14:00
749 :
デフォルトの名無しさん:2005/06/20(月) 02:20:11
>>748 C言語初めて3ヶ月なので全然分かんない。
もっと簡単ではムリ??
>>749 要求がC++なのにCかYO。
僕のコーディングじゃこれ以上コードは短くならないよ。
とはいえ、そんなに凝ったロジックはくんでないんだけどなー。
749が734とは限らないからな。
753 :
デフォルトの名無しさん:2005/06/20(月) 03:05:33
>>752 それもそうだな。
あーぁ、そろそろねるかな。
おやすみ。
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):自分の好きな型の配列a[ ]を宣言し、
配列名a、aのアドレス&a、先頭要素a[0]のアドレス&a[0]を出力し、
皆同じ値になることを確かめよ
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):
[3.3] 言語:C
[4] 期限:2005年 6月22日
[5] その他の制限:なし
>>755 #include <stdio.h>
int main() {short a[1]; printf("%p, %p, %p\n", a, &a, &a[0]); return 0;}
757 :
266:2005/06/20(月) 10:06:53
[1] 授業単元:C言語入門
[2] 問題文(含コード&リンク):
以下の表は、1から100までの整数を、5で割ったときの余りと7で割ったときの余りを用いて分類し、
個数を数えた結果を表している。
例えば、表の「3」の行の「1」の列(第2列目)に書いてある数字(2)は、
「1から100までの整数のうち、7で割った余りが3で、 しかも5で割った余り
が1になるようなもの」の個数は2個しかない、ということを表している。
0 1 2 3 4
--------------------
0: 2 3 3 3 3
1: 3 3 3 3 3
2: 3 3 3 3 3
3: 3 2 3 3 3
4: 3 3 2 3 3
5: 3 3 3 2 3
6: 3 3 3 3 2
横軸: 5で割った余り
縦軸: 7で割った余り
同様の表を、1 から348までの整数について作り、表示するprogramを書く。
[3] 環境
[3.1] OS:Windows2000
[3.2] コンパイラ(バージョン):
[3.3] 言語:C++
[4] 期限:2005年6月21日午後10時まで
[5] その他の制限:配列まで
お願いします。
>>757 授業はC言語入門なのに C++ で書くのか?
>>757 int yxInt[7][5] = {{0}},i,k;
for(i=1;i<348;i++){
++yxInt[i%7][i%5];
}
printf(" 0 1 2 3 4\n-------------------\n");
for(i=0;i<7;i++){
printf("\n%d: ",i);
for(k=0;k<5;k++)
printf("%d ",yxInt[i][k]);
}
int yxInt[7][5] = {{0}},i,k;
for(i=1;i<=348;i++){
++yxInt[i%7][i%5];
}
printf(" 0 1 2 3 4\n-------------------");
for(i=0;i<7;i++){
printf("\n%d: ",i);
for(k=0;k<5;k++)
printf("%d ",yxInt[i][k]);
}
<→<=
762 :
デフォルトの名無しさん:2005/06/20(月) 15:34:13
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):ボウリングのスコア集計のプログラム作成
ボウリング大会のスコアの集計をするプログラムを作成する。
[条件]
名前と2ゲーム分のスコアが入力できる
全体のアベレージを出力する
[オプション機能]
・最高点の人の名前とスコア、最低点の人の名前とスコアを表示させる
・順位を入れると、その順位の名前が出力される
・名前を入れると、その人のアベレージが出力される
※同点の場合、ひらがな入力の場合はあいうえお順
アルファベット入力の場合はabc順
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン): ?/テラタームでVI使って実行してます。
[3.3] 言語:C
[4] 期限:2005年6月22日まで
[5] その他の制限:4月に事務で入った会社でなぜかプログラマーになる勉強してます。
当方女なんですがまったくわからず困っています。。。
よろしくお願いします。
763 :
762:2005/06/20(月) 15:35:12
すみません。あげてしまいました・・・
764 :
デフォルトの名無しさん:2005/06/20(月) 15:43:14
[1] 授業単元:AprogrammingC
[2] 問題文(含コード&リンク):
ndPtr から始まる線形リスト中のノードで,データ値が dt であるものを探してそのノードへのポインタを返す関数
node_t * nodeSearch(node_t * ndPtr, data_t dt)
を作れ.
[3] 環境
[3.1] OS:VineLinux
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:2005年6月20日24:00まで
[5] その他の制限:関数仕様は自由。
すいませんがおねがいいたします。
>>762 名前とスコアの入力方法は?
入力される人数は?
767 :
762:2005/06/20(月) 15:57:49
すみません、書いてなかったですね。
名前とスコアは手操作入力で行い、
人数は最大150人までです。
よろしくお願いします・・・!
768 :
デフォルトの名無しさん:2005/06/20(月) 16:10:05
>>766 すいません、これだとおもわれます。
関数 int nodeDelete(node_t ** ndPrtPtr, int n) の仕様
*ndPrtPtr が指すリストの n 番目のノード(ノード番号は 0 番から始まる)
を削除する.削除したノードに割り当てられていたメモリは解放される.
ただし,リスト中のノード数が n 以下で,n番目のノードがない場合には,
何もしない.戻り値は,n番目のノードが削除できたときには SUCCESS,
n番目のノードが存在せず,削除できなかったときには FAILURE を返す.
>>767 150人分手入力させんの?
>>768 それではない。
node_t と、data_t の「構造体定義」が分からないと書けない。
適当でいいなら適当に定義するぞ。
ほれ
typedef int data_t;
typedef struct _node_t
{
struct _node_t *next;
data_t data;
} node_t;
node_t * nodeSearch(node_t * ndPtr, data_t dt)
{
while( ndPtr )
{
if( ndPtr->data == dt ) return ndPtr;
ndPtr = ndPtr->next;
}
return NULL;
}
770 :
762:2005/06/20(月) 16:21:59
>>769 何度も説明不足で申し訳ないです。
150人全員手操作入力ではなく、
最大、150人分入力できるようにメモリ(?)を確保する。
といった感じです。
[1] 授業単元:プログラミング技術
[2] 問題文(含コード&リンク):
(1)
changeMonth関数を以下のように修正せよ。
1~12以外の数値が与えられた場合には内部の数値が
変更されないようにする。
(2)
(1)のプログラムに対し、changeDay関数を以下のように
修正せよ。
monthに入っている値に対応して、異常な数値が入力された
場合には内部の数値が変更されないようにする。例えば
monthが4の時には1~30以外の数値がchangeDayで与えられた
場合には内部の数値が変更されないようにする。なお、閏年
は考慮しなくてよい。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C++
[4] 期限:05年06月20日22時まで
[5] その他の制限:
よろしくお願いします。
以下変更を行うプログラムです。
#include <iostream>
class MyDate {
private:
int day,month;
public:
MyDate(int Day=1, int Month=1);
void changeDay(int Day) { day = Day;}
void changeMonth(int Month) {month = Month;}
void print(void) {std::cout << day << ","<< month << "\n";}
};
MyDate::MyDate(int Day, int Month)
{
day = Day;
month = Month;
}
int main()
{
MyDate a(30,9);
a.print();
return 0;
}
774 :
768:2005/06/20(月) 16:29:07
>>769 ありがうございました。説明不足ですいませんでした。
>>762 ボーリングのスコアっていうのは単に 0 から 300 の整数?
それとも各レーンの点数レベルで保持する必要があるのかな?
ま、問題文にある機能を実現するのには必要ないとは思うんだけど。
776 :
762:2005/06/20(月) 16:46:50
>>775 ボーリングのスコアは単に0から300の整数です。
あと、最大150人入力ってゆう所ですが、ifで150人になるまで
入力できるようにする。逆に151人目入れては駄目・・・
とゆう感じです。
なんか説明がうまくできてなくて申し訳ないです(´・ω・`)
どうやら期限がもう少し早まって21日までになりそうです。。。
class MyDate {
private:
static const int maxDays[12];
int day,month;
public:
MyDate(int Day=1, int Month=1);
void changeDay(int Day) { if(Day > 0 && Day <= maxDays[month]) day = Day;}
void changeMonth(int Month) {if(Month > 0 && Month <= 12) month = Month;}
void print(void) {std::cout << day << ","<< month << "\n";}
};
const int MyDate::maxDays[12]={31,28,31,30,31,30,31,31,30,31,30,31};
MyDate::MyDate(int Day, int Month)
:day(1),month(1)//仕様には無いようだが初期化時のミスを確実に防ぐ
{
changeMonth(Month);
changeDay(Day);
}
778 :
777:2005/06/20(月) 17:00:02
訂正
void changeDay(int Day) { if(Day > 0 && Day <= maxDays[month]) day = Day;}
↓
void changeDay(int Day) { if(Day > 0 && Day <= maxDays[month-1]) day = Day;}
780 :
デフォルトの名無しさん:2005/06/20(月) 17:17:11
[1] 授業単元:programming C
[2] 問題文(含コード&リンク):
線形リストを複写する関数を作れ.
[3] 環境
[3.1] OS:VineLinux
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:2005年6月20日24:00まで
[5] その他の制限:関数仕様は自由。
すいませんがおねがいできますか。
781 :
デフォルトの名無しさん:2005/06/20(月) 17:39:24
問題文(含コード&リンク): バタフライ演算
nv2=n/2;
for(i=1;i<=m;i) /* m 段階バタフライ演算の第i 段階*/
{
l=1;
l<<=i;
l2=l/2;
jj=0;
ii=n/l;
for (j=0;j<12;j++) /* ブロック内第j 番データを起点とする*/
{ /* バタフライ演算を*/
for (k=j;k<n;k+=1) /* 第k/l ブロックについて実行*/
{ /* バタフライ演算ペアは*/
il=k+l2; /* 第k 番,il 番データ*/
xx=x[il]*wx[jj]-y[il]*wy[jj]; /* バ*/
xy=y[il]*wx[jj]+x[il]*wy[jj]; /* タ*/
x[il]=x[k]-xx; /* フ*/
y[il]=y[k]-xy; /* ラ*/
x[k]+=xx; /* イ*/
y[k]+=xy; /* 演*/
} /*算*/
jj+=ii;
}
}
if (inv==-1) for (i=0;i<n;i++) /* 逆変換の場合は*/
{ /* 点数n で割る*/
*(x+i)/=n;
*(y+i)/=n;
}
}
を、コンパイルできるように。
782 :
デフォルトの名無しさん:2005/06/20(月) 17:40:29
>>781 続き
3] 環境
[3.1] OS:win
[3.2] コンパイラ(バージョン):borland
[3.3] 言語:C,c++
[4] 期限:2005年6月21日1:00まで
783 :
デフォルトの名無しさん:2005/06/20(月) 19:15:22
>>781-782 頭に
main(){
int nv2, n, i, l2, m, l, jj, ii, j, k, il, xx,x[100], wx[100], y[100], wy[100], xy, inv;
お尻に
}
でコンパイル&リンクできますた。動作は保障しません。
>>783 とりあえずclientがconnect()に指定してるポート:1357
serverがbind()してるポート:1456
となってる訳だが、typoか?
787 :
783:2005/06/20(月) 20:01:57
ポート番号やIPアドレスとかがあまりよくわかっていないので、適当に指定してしまいました。
しばらくここに滞在して動作確認するつもりなのでいろいろ指摘お願いします。
断る。
789 :
785:2005/06/20(月) 20:06:07
>>787 > しばらくここに滞在して動作確認するつもりなので
おいおい....
つか、
>>783のコード見る限り、多少は分かってんのかと
思いきや、コピペか何かだったのか?
うん、鯖がポート1456で誘ってたら、
ちゃんと1456に入れてあげるのが以下略。
792 :
783:2005/06/20(月) 20:11:11
プロセス間通信のプログラムがあったので、そこに自分で変更してやってみました。
多少TCPのやり方なども配布プリントに書いてあったのですが、ポート番号の指定条件
みたいなことはぜんぜん書いてなかったので、適当にやってしまいましたが、やはり駄目でしょうか?
1357号室で待ってるのに、1456号室に問い合わせてもしょうがないべ。
「適当にやってしまいましたが、やはり駄目でしょうか? 」
結構ですよ。
そういう人生もありです。
795 :
783:2005/06/20(月) 20:16:00
ポート番号同じにしてみましたが、やはり結果は変わりませんでした。
fprintf(stderr, "Connection establishd: socket %d used.\n", soc);
この部分も出ません
>>792 サーバマシンのIPアドレスと、サーバが待機してるポートを
指定してconnect()せんと、つながらないよ
基本中の基本
サーバとクライアントを同じ端末で実行してるんなら、IPアドレスは
ループバック(127.0.0.1)でよい。
ソケットとか、その前にインデントくらいちゃんとしような?
798 :
783:2005/06/20(月) 20:28:59
bind:Address already in use と出ました・・・
>>797 すみません・・
>>798 同じアドレス/ポートに複数のソケットをbind()することはできない。
多分、プログラムがTCP/IPにおけるTIME_WAIT状態に入ってる状態で
終了し、もう一度起動したせいで出たんだろう。
1) プログラムが多重起動してないか確認する
2) 多重起動してないんなら、しばらく(せいぜい数分程度)待つ
で試してみ。それを避ける方法もあるが、面倒なので説明しない。
率直に他のポート使ったほうが早い気がする・・・。
801 :
783:2005/06/20(月) 20:44:37
出来ました!長々とありがとうございました。
それからネ、鯖でret分だけreadしたのに、変換後のバッファは1024バイト固定で返してるアルネ。
クライアントでゴミ出るアルヨ。
ここで答えてくれている人たちは誰?
デフォルトの名無しさんたちです。
達? 俺一人だよ?
806 :
デフォルトの名無しさん:2005/06/20(月) 21:45:25
[1] 授業単元: プロ言
[2] 問題文(含コード&リンク):クイックソートを用いて、配列に入ったN個のデータを昇順に並び替えるプログラムを作成する。
quick関数を完成させ、比較回数と交換回数を表示させよ。
Nは最初20個とし、100個、1000個と増やし、timeコマンドを使用し各実行時間を測定せよ。
[3] 環境
[3.1] OS:unix
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C
[4] 期限:2005年6月25日24:00まで
[5] その他の制限:基本的に関数仕様を変更することはできない。 -cursesのオプションをつけて実行させる。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/580.txt Nの値が20個の時はうまく動いているように見えるのですが、値を100に変更するとソートが途中で止まってしまいます。
一見うまく動いているように見えるのですが。。。
よろしくお願いします。
俺だよ、俺俺
808 :
607:2005/06/20(月) 21:55:06
>>808 精神がちょっと嫌な感じになった。
俺も迂闊だったが、お前も今後配慮してくれ。
>>808 これがこのスレの主アルカ・・・。
>>806 アノネ、片方「<」で見てってもう片方が「>」で見てったら、
「=」の部分とおりこしちゃうアルヨ。
それで分割統治が破綻してるアルネ。
通り越すんじゃない、寸止めしちゃうだったネ。
>806
N=20でも
for( i=0; i<N; i++ ){
data[i] = 1;
}
とかだと停まらないよね?
813 :
デフォルトの名無しさん:2005/06/20(月) 23:11:59
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):入力を要求し、入力された文字列を使って何か応答(出力)するプログラムを作れ。
[3] 環境
[3.1] OS:linux
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C
[4] 期限:2005年06月24日16:30まで
[5] その他の制限:特になし
内容は自分で考えるとして、「入力した文字列の内容で出力が変化する」という一連の流れをご指南下さい。お願いします。
(1)文字列を受け取る
(2)受け取った文字列を評価する
(3) (2)の結果で処理を分岐させる。
以上。
>>
>>814 別に受け取った文字列によって処理を分岐させる必要はないと思うんだが。
char id[10], pass[10];
printf("Login:");
scanf("%9s", id);
printf("Password:");
scanf("%9s", pass);
printf("Howdy, %s\n", id);
うーむ。標準関数だけでわ、パスワードがコンソールに表示されてしまう...orz
例えば
氏名と性別を入力させて
Mr.~とかMs.~と表示
とか
>>757 この問題面白いな。
#include <stdio.h>
void
foo(unsigned n)
{
unsigned nq = n/35;
unsigned nr = n%35;
for (unsigned y = 0; y < 3*5*7; y += 3*5) {
for (unsigned x = 0; x < 3*5*7; x += 3*7) {
printf("%2u ", nq+((y+x)%35 <= nr));
}
printf("\n");
}
}
int
main()
{
foo(348);
return 0;
}
818 :
デフォルトの名無しさん:2005/06/20(月) 23:30:37
>>815 何か「応答例が多く、気の利いたことを答えられるプログラムに高い評価を与える」らしいので
たくさん答えられるやつが良いみたいです。
>>814 「文字列を評価」ってのが分かりませぬ。
数字の場合と同じように条件文に(変数) = (文字列)ってやっちゃってもダイジョブですか?
初歩的ですみません。
819 :
デフォルトの名無しさん:2005/06/20(月) 23:39:14
[1] 授業単元: C入門
[2] 問題文(含コード&リンク): 個人のボウリングのスコア合計と平均を出力するプログラム
whileまたはforを用いて無限ループを作成し、
マイナス数値が入力された次点で無限ループを終了する
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン): C++6.0
[3.3] 言語:C
[4] 期限:6/21まで
[5] その他の制限:特になし
上に似たようなのあったな。俺のほうがずっと簡単そうだ
ちょっと作ってみたがうまくいかない
だれか救助求
>>814 くだらないけど・・・。
#include<stdio.h>
int main(void)
{
int n1;
/*数を入力してもらう*/
printf("( ´Д`)大小ゲームしまそ♪なにか数字を入れてくださいな:\n");
scanf("%d" , &n1);
if (n1 < 25 )
puts("(゜∀。)ワヒャヒャヒャヒャヒャヒャ、カッタ");
else if (n1 == 25)
puts("(((( ;゚д゚))))アワワワワ、ナカナカヤルナ\n");
else
printf("(;´∀`)…うわぁ…マケタ\n");
return (0);
}
821 :
デフォルトの名無しさん:2005/06/20(月) 23:49:43
>>806 while( data[j]>data[pivot] ){
j--;
compare++;
}
ここを
while( i < --j && data[j]>data[pivot] ){
compare++;
}
こうする
>821
>810嫁
>>806 >>810 >>821 >>822 while 連続のとこはコレが正解。
while (data[++i] < data[pivot]) { compare ++; }
while (data[--j] > data[pivot]) { compare ++; }
でないとdata[i]==data[pivot]&&data[j]==data[pivot]の状態で確実に無限ループ。
>824
もうねアフォかと
while( data[i]<data[pivot] ){
i++;
compare++;
}
while( data[j]>=data[pivot] ){
j--;
compare++;
}
でええやん
827 :
819:2005/06/21(火) 00:22:26
>>819は自己解決
単なるfloatの入力ミスだった
>>824 プリインクレメントしたら、ピボット除いた端の数値を飛ばしちゃうネ。
829 :
762:2005/06/21(火) 09:34:48
>>825 どうもありがとうございます。
かなりの初心者な私にはわからないことだらけですが
頑張って理解したいと思います。
あ、全体のアベレージは個人のアベレージの他に
入力した人数全員分の平均を出す、とゆうことです。
(5人入力したなら5人の平均も出す)
ずうずうしいお願いなんですが、実行した時、
入力を途中でやめるプログラミングは組み込めないでしょうか?
例>>
name>普通に入力
1st>普通に入力
2st>普通に入力
のあとに
---まだ入力するなら1・それ以外なら0-----
のようなものをお願いしたいのですが・・・
入力を終了するとその後普通にアベレージが出る
という感じにしたいのです。
自分でも頑張ってるんですが全くはかどらず(つД`)
830 :
762:2005/06/21(火) 10:26:25
何度もすいません(´Д`)
ボーリングの問題はこれの応用だ、上司に言われたんですがこの問題すらサパーリで。
問題>>手操作入力で名前と点数を入力して、合計点が一番高い人の名前と
合計を出力させよ(MAX5人まで)また各教科毎に点数が一番高い人の名前と点数も出力させよ。
(同点者もいるものと考える)
これが答え例らしんですが。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct test{
char name[10];
int lang;
int math;
int engl;
};
main()
{
int i,j=0,s;
char l[5],m[5],e[5];
int cnt=0,flag=1,goukei[5],la_max=0,ma_max=0,en_max=0,sum_max=0;
char a[5];
struct test test_tbl[5];
for(i=0;flag==1;i++){
printf("名前を入力→");
while((a[j]=getchar())!='\n'){
j++;
}
a[j]='\0';
j=0;
strcpy(test_tbl[i].name,a);
printf("国語の点数を入力→");
while((l[j]=getchar())!='\n'){
j++;
}
l[j]='\0';
j=0;
test_tbl[i].lang=atoi(l);
if(la_max < test_tbl[i].lang){
la_max=test_tbl[i].lang;
}
printf("\n");
printf("数学の点数を入力→");
while((m[j]=getchar())!='\n'){
j++;
}
m[j]='\0';
j=0;
test_tbl[i].math=atoi(m);
if(ma_max < test_tbl[i].math){
ma_max=test_tbl[i].math;
}
printf("\n");
printf("英語の点数を入力→");
while((e[j]=getchar())!='\n'){
j++;
}
e[j]='\0';
j=0;
test_tbl[i].engl=atoi(e);
if(en_max < test_tbl[i].engl){
en_max=test_tbl[i].engl;
}
printf("\n");
goukei[i]=test_tbl[i].lang + test_tbl[i].math + test_tbl[i].engl;
if(sum_max < goukei[i]){
sum_max=goukei[i];
}
if(i<4){
printf("++++++++%d人目入力続行?++++++++\n",i+2);
printf("続行--->1\n終了--->1以外\n");
while((a[j]=getchar())!='\n'){
j++;
}
a[j]='\0';
j=0;
flag=atoi(a);
}
else{
flag=0;
}
}
printf("************** 結果発表 **************\n\n");
printf("\n<<<<< 国語 >>>>>\nTOP:");
printf("%d\n",la_max);
printf("最高点者は\n");
for(j=0;j<=i;j++){
if(test_tbl[j].lang==la_max){
printf("【 %s 】さん\n",test_tbl[j].name);
}
}
printf("\n");
printf("\n<<<<< 数学 >>>>>\nTOP:");
printf("%d\n",ma_max);
printf("最高点者は\n");
for(j=0;j<=i;j++){
if(test_tbl[j].math==ma_max){
printf("【 %s 】さん\n",test_tbl[j].name);
}
}
printf("\n");
printf("\n<<<<< 英語 >>>>>\nTOP:");
printf("%d\n",en_max);
printf("最高点者は\n");
for(j=0;j<=i;j++){
if(test_tbl[j].engl==en_max){
printf("【 %s 】さん\n",test_tbl[j].name);
}
}
printf("\n");
printf("\n<<<<< 最高得点者 >>>>>\nTOATAL:");
printf("%d\n",sum_max);
printf("最高点者は\n");
for(j=0;j<=i;j++){
if(goukei[j]==sum_max){
printf("【 %s 】さん\n",test_tbl[j].name);
}
}
}
何度も申し訳ないでつ。
難しいよボーリング・・・
>>829 実行してねーけど、こんな感じじゃねーのかな。
/* データの入力 */
for( nmember=0; nmember<SCORE_MAX_NO; nmember++){
char c;
printf("-- input data no.%d --\n", nmember+1);
if( ( score[nmember] = make_data() ) == NULL ) break;
printf(" ---まだ入力するなら1・それ以外なら0----- \n");
scanf("%c", &c);
if (c == '1') {
;
} else if (c == '0') {
break;
} else {
printf("Fu$k yo$!");
}
}
837 :
762:2005/06/21(火) 10:46:24
>>836 申し訳ないです(つД`)
以後気をつけます・・・
会社は、こんな初心者にいきなりポインタとか構造体やれ言ってくる
微妙なIT会社です(藁
>while((a[j]=getchar())!='\n'){
>j++;
>}
すげぇ、こんな糞みたいなコード久しぶりに見たよ。
840 :
762:2005/06/21(火) 10:58:45
みなさん申し訳ないです・・・
事務で入ったのにPGになれって特訓うけてます。
もうだめぽ(´・ω・`)
>>762 入った会社が悪すぎる。
プログラマになるにしても、もう少しまともに教えられるところでナイトね。
私の勤める会社なら、教えるのも懇切丁寧、手取り足取りフレンドリー(ぉぃ
ちょっと不安になってきたなぁ。>762には社名を晒してほしいよ。
まさか>830みたいなコードを出荷しちゃいないとは思うけど……
844 :
762:2005/06/21(火) 11:14:21
短大卒業してまだハタチなんでねだれば経費で出してくれますかね?w
同僚の人?は林晴比古のがオススメって言われましたが・・・
上司はプログラミングは動けばなんでもいー
って言ってあんまり教えてくれません(´ω`)
会社名はさすがにまずいんですが頭文字はsがつく会社です
>>844 危機感が無いようだから教えておく。
仮に、>830のようなコードを「動けばいい」として出荷すると、
外部からの進入に対してまったく無防備だったり突然暴走して死亡事故を起こす原因になったりする。
そんなコードを仮令研修用としてでも使っているような会社は、信頼に値しない。
#まぁ、ハルピコお勧めなんて言ってるようじゃそんなもんだろうけど。
Sか・・・。
>843の二冊は自分の金でかっておけ。
もし762がエイダ女史の亡霊たる女性コーダーとして、
現代に蘇りたいなら、まずは財布の紐を緩めるしかない(何の話だ)。
830のコードは最悪に近いレベルのコードです。
誰か同じ動作をする模範コードをうpしる!
848 :
762:2005/06/21(火) 11:37:06
まずい会社ディスカ・・・・
わかりやすいプログラミングでお願いしますっていったら
君はこんくらいかーってこれ渡されました。
ボーリングのプログラミングもサパーリ進まないしもうダメポ。
みなさん知恵を貸してください・・・!
教えてチャソで申し訳ないです。
>>762 期限今日までなんでしょう?
とりあえず動かなくてもいいから、出来たとこまでをうpしてみれば?
ここの住人がボーリングの集計プログラムを書くのは訳ないと思うけど、
それであなたが上司に過大評価されてもっと遥かに難しい問題を
出題されるかもしれない。
そういうことは無いんでしょうか?
考えてません?
上司だって大脳を標準装備してる人間なんですから、
違う人が書いたプログラムだって分かると思いますよ。
あんなコードしか書けなくても。
>>762 おい!そりゃハッキリ言ってまずい会社だ。
CMのオー人事オー人事を思い出しちまったぞ。
お前さんはこんな自分の会社に注文したいと思うか?
事務志望だったPGには酷というものだ
852 :
762:2005/06/21(火) 12:54:51
>>849 んーこれを乗り切れば他のやらなきゃいけない雑務が結構
あるんでとりあえずは大丈夫かなぁと思ったんですが・・
>>852 そーすかぁ、、んじゃ昼飯食ったあとちょっと書くから、
冷えたビール用意して待っててくださいよ。
854 :
762:2005/06/21(火) 13:33:51
>>853 あああありがとうございます
とりあえずビール・・・
__
| ̄ ̄ ̄ ̄ ̄ ̄ |
|_______. |━━┓
| |┏┓┃
| |┃┃┃
| |┗┛┃
| |━━┛
| |
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
855 :
762:2005/06/21(火) 13:35:15
と思ったけどビールくずれてますた(´・ω・`)スマソ
>853は満漢全席でも食べているんだろうかw
>>762 事務で採った人間をプログラマとして使うという段階でとんでもない会社だ。
事務職募集に応募して、それが雇用条件になっているのなら労働基準監督局に申し立てるべき。
#>762自身がプログラマになりたいなら別だが。
もし、プログラマになりたいなら自力で作れ。間に合わないなら間に合わない旨を報告しろ。
何故なら、私のところで中途採用した場合などは敢えて間に合わない期限を設定して
それに対してどう対処するかを観察するということを行なうから。
そこで他人の作ったものを提出して誤魔化すようなら、適性はないものと見なさざるを得ない。
というわけで、いずれにしてもここでプログラムを作ってもらうのはやめた方がいい。
やべー今見ると荒削りだわ、まぁ、キニスンナ。
漏れは「プログラマになりたい人」がこんなとこに課題をまる投げするとは思えない。
会社としては、たぶん、
・事務職だが一応IT会社なのでプロダクトや基礎的なプログラミングは知っておいて欲しい。
・オトコばっかなので、士気を上げる為女神として開発部に居座って欲しい。
のどちらかかと。
859 :
デフォルトの名無しさん:2005/06/21(火) 15:20:59
[1] 授業単元: Cプログラミング基礎
[2] 問題文(含コード&リンク): t ∈ [0, 3.14] の区間で x が 0 から 0.01 刻みずつ +3.14 まで変化するものとする。
このとき
x(t) = exp( a * t ) * cos( w * t )
y(t) = exp( a * t ) * sin( w * t )
の x-y データは、どのようなグラフになるか?
[3] 環境
[3.1] OS:Redhat Linux(大学のもの)
[3.2] コンパイラ(バージョン): ??
[3.3] 言語:C言語
[4] 期限:6/22まで
[5] その他の制限:基礎的なことしか習ってません。
・・・文系が、興味本位で他学部履修科目として選択したので、こういうのが出てくると数学的に意味がわかりません・・・。
860 :
762:2005/06/21(火) 15:23:18
>>857 ありがとうございまつ(´Д`)ノ
ビール冷えてなかったですか・・・
とりあえず事務じゃなきゃヤダとは言ってるんで
今後はそっちに移してくれると思うんですが。
周りの同期に聞きながらやってることはやってるんで
もうちょっとガンガッテみます!!
でもこのプログラミングめいっぱい
参考にさせていただきます(´∀`)
本当にありがとうございます。
861 :
773:2005/06/21(火) 15:55:53
>>777さま
遅れましたがありがとうございました
#include <stdio.h>
#include <string.h>
#include <math.h>
#include "lib_bmp_io.h"
#define SIZE1024
unsigned char header[] = {0x42, 0x4d, 0xe6, 04, 00, 00, 00, 00, 00, 00, 0x36, 00, 00, 00, 0x28,00, 00, 00, 00, 04, 00, 00, 00, 04, 00, 00, 01, 00, 0x18, 00, 00, 00, 00, 00, 0xb0, 04, 00, 00, 00, 00, 00, 00, 00, 00, 00,00, 00, 00, 00, 01, 00, 00, 00, 00};
#define ADD_usb(a, b)if((a + b) > 255) a = 255; else a +=b
int main(void)
{
float a, w, t, x, y; unsigned char *p; int ix, iy; FILE *fp;
p = malloc(SIZE * SIZE * 3); memset(p, 0, sizeof(p));a = 0.1;w = 0.1;/*ま適当に*/
for (; a < 10.0; a += 0.01, w -= 0.01) {for (t = 0; t <= 3.14; t += 0.01) {
x = exp( a * t ) * cos( w * t ); y = exp( a * t ) * sin( w * t );
ix = (int)(x * 2.0) + SIZE/2; iy = (int)(y * 2.0) + SIZE/2;
if (ix >= 0 && ix < SIZE && iy >= 0 && iy < SIZE) {
ADD_usb(p[(iy * SIZE * 3) + ix * 3 + 0], 64);
ADD_usb(p[(iy * SIZE * 3) + ix * 3 + 1], 64);
ADD_usb(p[(iy * SIZE * 3) + ix * 3 + 2], 64);
}
}}
fp = fopen("a.bmp", "wb");fwrite(header, 1, sizeof(header), fp); fwrite(p, 1, SIZE * SIZE * 3, fp);
fclose(fp);free(p);return 0;
}
>>859 Excelでグラフ作ってみればすぐ分かるけど、等角螺旋のグラフになるよ。
>361にほぼ同じ問題が、>363にそのプログラムがある。
866 :
856:2005/06/21(火) 16:26:07
>>858 scanf()の辺りが……
それはさておき、「プログラマをやりたい人」と言うべきだった。
私のところで、研修期間(⊂試用期間)にメールでプログラムを作ってもらってた香具師がいたもんでね。
本人実力もセンスもないのにできる振りしてたから気づくまでずっと彼氏に作らせてた。
仕事なら、自分の能力を偽っても
自分もまわりも後で困るだけなんだよな。
全く薦められない。
>>865 暇なんですよw
ま、いまから出かけるんですけどw
>>866 スマンです。ちゃんとやるなら、fgets+sscanfですかね。
まぁ、デリゲーションするのも処世術の一つなんでしょかね。
自分が苦手な事は、それが得意な他人がやるべきだ。
まぁ、自分の能力の向上の事を考えなければ、もっともなんだが。
[1] 授業単元: プログラミング演習
[2] 問題文:
英単語を入力すると対応する和訳が出る簡易英単語辞書を作成せよ。使用は次の通り
英単語と和訳の対応のための辞書をファイルtango.dicとして作成する。
辞書ファイルの形式は英単語コンマ和訳改行から構成させるソートはしなくてもよい。
例 book,hon
またqを入力することで終了するものとする。
出力例
Prompt> ./.out tango.dic
English word : book
book in Japanese.
English word : q
Prompt >
[3] 環境
[3.1] OS:mac
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C
[4] 期限:明日の昼ごろまで
[5] ファイル操作は一通り習いました
よろしくお願いします
870 :
869:2005/06/21(火) 18:55:57
hon in Japanese.
すみません間違えました。
後日本語入力が不可能なので
和訳がローマ字にならないといけないので
そこを踏まえたうえでお願いします。
>>869 辞書ファイルの大きさは任意?
malloc系は習っている?
872 :
869:2005/06/21(火) 19:44:21
辞書ファイルの大きさは任意?
大規模ではなく英単語&和訳は4、5行位でもいいようです。
malloc系は習っている?
すみませんわかりません。
>>869 #include <stdio.h>
#include <string.h>
#define TOALPHA(c) (('a'<=(c)&&(c)<='z')?(c)+'A'-'a':(c))
#define DIC_MAX 8
#define DIC_LEN 256
int main( int argc, char* argv[] )
{
FILE *pf; int i, j; char dic[ DIC_MAX ][ DIC_LEN ], eng[ DIC_LEN ];
if ( argc >= 2 ) {
pf = fopen( argv[ 1 ], "rt" );
if ( pf == NULL ) return 0;
for ( i = 0; fscanf( pf, "%s\n", dic[ i ] ) != EOF; ) { i++; if ( i == DIC_MAX ) break; }
for ( ; i < DIC_MAX; i++ ) dic[ i ][ 0 ] = '\0';
fclose( pf );
while ( 1 ) {
printf( "English word : " ); scanf( "%s", eng );
if ( strcmp( eng, "q" ) == 0 ) break;
for ( i = 0; i < DIC_MAX; i++ ) {
if ( dic[ i ][ 0 ] == '\0' ) break;
for ( j = 0; eng[ j ] != '\0'; j++ ) if ( TOALPHA( eng[ j ] ) != TOALPHA( dic[ i ][ j ] ) ) break;
if ( eng[ j ] == '\0' && dic[ i ][ j ] == ',' ) printf( "%s in Japanese.\n", &dic[ i ][ j + 1 ] );
}
}
}
return 0;
}
ん、ん?
875 :
869:2005/06/21(火) 22:04:06
遅れましたが
>>873さまありがとうございました
876 :
デフォルトの名無しさん:2005/06/21(火) 22:04:31
先生!なんかこのスレ急にカラフルになってきています!
877 :
デフォルトの名無しさん:2005/06/22(水) 00:27:46
プログラム演習
文字列の後半と前半の文字が同じならくっつけて出力(長い方があればそっち)
サンプル
ABB
BCCB
出力
ABBCCB
サンプル
ACC
CCCA
出力
ACCCA
[3] 環境
OS:Linux
言語:C
[4] 期限:明日の昼ごろまでにできえれば・・
こんな情報だけではむりですかね?
最後と最初の参照だけでなく 二文字 三文字の参照のやり方がまったくわかりません
一通りのプログラムはならいました(/□≦、)
878 :
877:2005/06/22(水) 00:34:30
まちがえました・・
二個目の問題は 長い方だとCCCACC が出力されますね。
入力
ABC
BCD
出力
ABCD にしてください。。。二文字目どー判別させるんだ・・
同じ文字数ならどうすんだ?
880 :
877:2005/06/22(水) 00:39:14
両方出力します
ペコm(_ _;m)三(m;_ _)mペコ
>>877 問題の条件が妙に複雑だな。
「長い方があればそっち」ってそういう意味なのか?
# include <stdio.h>
# include <string.h>
int wrap_length(const char *a, const char *b) {
int al = strlen(a);
int bl = strlen(b);
int l;
if(al > bl) {
a += al - bl;
al = bl;
}
for(l = al; l >= 0; l--)
if(strncmp(a + (al - l), b, l) == 0) return l;
return 0;
}
int main(void) {
char a[128], b[128];
int wla, wlb;
gets(a);
gets(b);
wla = wrap_length(a, b);
wlb = wrap_length(b, a);
if(wla && (!wlb || wla <= wlb))
printf("%s%s\n", a, b + wla);
if(wlb && (!wla || wlb <= wla))
printf("%s%s\n", b, a + wlb);
return 0;
}
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[256];
char *p;
int len, i;
printf("1番目のアレを入力してください:");
fgets(str, sizeof(str), stdin);
len = strlen(str) - 1;
p = str + len;
printf("2番目のアレを入力してください:");
fgets(p, sizeof(str) - len, stdin);
if (str[strlen(str)-1] == '\n') str[strlen(str)-1] = '\0';
if (strlen(str) < len) len = strlen(str);
for (i = len; i >= 1; i--) {
if (strncmp(p - i, p, i) == 0) {
memmove(p - i, p, strlen(p) + 1);
break;
}
}
printf("[%s]", str);
return 0;
}
883 :
863:2005/06/22(水) 01:02:22
2分35秒負けたか・・・。
884 :
863:2005/06/22(水) 01:03:57
すまん、双方チェックすんのか。鬱だ。
885 :
877:2005/06/22(水) 01:10:48
ぬお はや・・・881さんありがとう。
ちなみに文字が長い方じゃなくてくっつけて文字列が長くなる方を出力。
でした。。と、適当に勉強してたら なに聞けばいいのかも
わからない始末・・
もっと精進します。ありがとうございました。
886 :
881:2005/06/22(水) 01:21:58
同じ文字列が二回出力されるバグがあった…
許容範囲かな?
887 :
877:2005/06/22(水) 01:24:00
>863さんもありがとう! がんばってきます
888 :
881:2005/06/22(水) 01:29:49
>>877 mainを以下のように訂正する。
汚いソースですまん。
nt main(void)
{
char a[128], b[128];
char out[128] = {0};
int wla, wlb;
gets(a);
gets(b);
wla = wrap_length(a, b);
wlb = wrap_length(b, a);
if(wla && (!wlb || wla <= wlb))
{
sprintf(out, "%s%s", a, b + wla);
puts(out);
}
if(wlb && (!wla || wlb <= wla))
{
char out1[128];
sprintf(out1, "%s%s", b, a + wlb);
if(out[0] && strcmp(out, out1) != 0)
puts(out1);
}
return 0;
}
889 :
881:2005/06/22(水) 01:31:55
>>888のntはintの誤りだ。
永眠してくる。
891 :
デフォルトの名無しさん:2005/06/22(水) 10:29:36
[1] 授業単元:プログラム
[2] 問題文(含コード&リンク):整数を決められた回数(三回)だけ入力し、
その偶奇を判定する
[3] 環境
[3.1] OS:UNIX
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:2005年6月23日
[5] その他の制限:
宜しくお願いします
[1] 授業単元: プログラミング演習
[2] 問題文:1)一次元データを読み込む関数1{a)下のファイル、b)乱数}を作成
2)そのデータを読み込み、データ数、最大最小、平均値、標準偏差を求める関数2
3)一次元データを他の関数より取り込み、その結果を表示する関数3
4)三つの関数をつないでmain関数を完成させよ
英語 数学 国語 理科 社会
70 56 66 45 88
66 85 68 55 73
55 65 53 67 55
85 72 76 58 65
[3] 環境
[3.1] OS:UNIX
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:6月23日まで
[5] その他の制限:ポインタ、構造体はまだ習っていません
お願いします
学校名、会社名もテンプレに入れて欲しい。
無茶言うな、さすがに釣れない
>>891 #include <stdio.h>
int main(int argc, char *argv[])
{
int input, i;
for(i = 0; i < 3; i++)
{
scanf("%d", &input);
if(input % 2 == 0)
{
printf("偶数");
}
else
{
printf("奇数");
}
}
return 0;
}
898 :
892:2005/06/22(水) 11:54:58
test
SUBSET_SUMの解が存在する場合に(x0,x1,…,xn-1)を出力する形にしたいんですがこれからどうすればいいんですか?
int subset_sum_dp_1(int a[],int b,int n){
int y[N][B],q[N][B],k,p;
for(k=0;k<n;k++){
for(p=0;p<=b;p++)
y[k][p]=0;q[k][p]=0;
}
y[0][0]=1;
if(a[0]<=b)
y[0][a[0]]=1;
}
for(k=1,k<n;k++){
for(p=0;p<=b;p++){
if(y[k-1][p]==1)
y[k][p]=1;
else if(p-a[k]>=0&&y[k-1][p-a[k]]==1)
y[k][p]=1;
}
}
if(y[n-1][b]==1){
p=b;
for(k=n-1;k>=0;k--){
if(q[k][p]==1){
x[k]=1;p-=a[k];
}else
x[k]=0;
}
return 1;
}
return 0;
}
[1] 授業単元:プログラミング技術
[2] 問題文(含コード&リンク):
(1)changeMonth関数を以下のように修正せよ。
・変更しようとする月に対し、dayが入っている値が大きすぎる
場合、dayを変更後の最後の日に修正するようにする。例えば
5/31に設定されているときにchangeMonth(2)が呼ばれたとき、
monthに2を、dayに28を代入する。
(2)
(1)のプログラムに対し、MyDate型の中のデータを一日繰り上げる
メンバ関数inclementを実装し、1/1,1/31,2/28,10/10,12/31の場合
で動作することを確認せよ。例えば次のプログラムの実行結果は
4月3日となる。
MyDate date;
date.changeMonth(3);
date.changeDay(31);
date.inclement();
date.inclement();
date.inclement();
date.print();
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C++
[4] 期限:05年06月22日23時頃まで
[5] その他の制限:
できれば(1),(2)別々に記述していただければと思います。
すみませんがよろしくお願いします。
902 :
デフォルトの名無しさん:2005/06/22(水) 14:01:08
[1] 授業単元:プログラミング演習I
[2] 問題文:
テストの点数(65 91 39 31 56 72 54 52 62 70 -1)
(-1はデータの終わりを表すものとする)を入力すると、
最高点、最低点が表示されるようなプログラムを作成せよ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:6/28まで
[5] その他の制限:配列まで習いました
*テストの点数の入力はリダイレクト入力で別のファイルから読み込ませるので、
その元になるプログラムを作成します。
以下は変更を行うプログラムです。
#include <iostream>
class MyDate {
private:
static const int maxDays[12];
int day,month;
public:
MyDate(int Day=1, int Month=1);
void changeDay(int Day) { if(Day > 0 && Day <= maxDays[month-1]) day = Day;}
void changeMonth(int Month) {if(Month > 0 && Month <= 12) month = Month;}
void print(void) {std::cout << day << ","<< month << "\n";}
};
const int MyDate::maxDays[12]={31,28,31,30,31,30,31,31,30,31,30,31};
MyDate::MyDate(int Day, int Month)
:day(1),month(1)
{
changeMonth(Month);
changeDay(Day);
}
int main()
{
MyDate date(31,5);
date.print();
return 0;
}
904 :
902:2005/06/22(水) 14:05:00
#include <stdio.h>
#define NMAX 200
int main (void)
{
int i;
double tmax=-1;
double tmin;
double data[NMAX];
for( i = 0 ; i < NMAX ; i++ ){
printf( "%d 番目の点数は?\n", i );
scanf( "%lf", &data[i] );
if(data[i]==-1){
break;}
if(tmax < data[i] ){
tmax=data[i];}
if(tmin > data[i]){
tmin=data[i]; }
}
printf("最高点: %d\n",tmax );
printf("最低点: %d\n",tmin );
return(0);
}
ここまで自分で作成してみましたが、最低点がちゃんと表示されないので、
どこをどう直せばいいか、どなたか教えてください。
>>902 #include <stdio.h>
int main(int argc, char *argv[])
{
int max, min, i;
const int dat[] = {65, 91, 39, 31, 56, 72, 54, 52, 62, 70, -1};
max = dat[0];
min = dat[0];
i = 1;
while(dat[i] != -1)
{
if(max < dat[i])
{
max = dat[i];
}
else if(min > dat[i])
{
min = dat[i];
}
i++;
}
printf("max = %d, min = %d\n", max, min);
return 0;
}
907 :
901:2005/06/22(水) 14:14:18
その通りです・・・
908 :
906:2005/06/22(水) 14:17:17
>>902 すまん、レス最後まで読んでなかった...orz
void
MyDate::changeMonth(int Month){
if(Month > 0 && Month <= 12){
month = Month;
if(maxDays[month-1] < day)
day = maxDays[month-1];
}
void
MyDate::increment(){
if(maxDays[month-1] < ++day){
day = 1;
if(++month > 12)
month = 1;
}
}
910 :
902:2005/06/22(水) 14:26:40
やべ、ミスってる。
printf("最高点: %f\n",tmax );
printf("最低点: %f\n",tmin );
%d ×
%f ○
の訂正がありました。どなたかご教授お願いします。
>>902 いえいえ、ありがとうございます。
僕もミスってました。。
911 :
909:2005/06/22(水) 14:31:13
} 足りなかった
void
MyDate::changeMonth(int Month){
if(Month > 0 && Month <= 12){
month = Month;
if(maxDays[month-1] < day)
day = maxDays[month-1];
}
}
912 :
906:2005/06/22(水) 14:35:39
>>910 tmaxはdoubleにする必要は無いんじゃない?
とりあえず、さっきの修正版。
#include <stdio.h>
int main(int argc, char *argv[])
{
int dat;
int max, min;
scanf("%d", &dat);
max = dat;
min = dat;
while(1)
{
scanf("%d", &dat);
if(dat == -1)
{
break;
}
else if(max < dat)
{
max = dat;
}
else if(min > dat)
{
min = dat;
}
}
printf("max = %d, min = %d\n", max, min);
return 0;
}
913 :
902:2005/06/22(水) 14:44:04
>>912 入力値が変数なので一応doubleにしました。
僕の作成したプログラムでは出力結果が
最高点:91.00000
最低点:5.541873
と表示されてしまうのですが、何故なんでしょうか。
914 :
912:2005/06/22(水) 15:01:21
>>913 *入力値は変数ではなく整数。だからtmax や tminはint型で宣言する。
*最小値がおかしいのはtminを初期化していないから。
>>912のように、一番最初に入力された数値でtmaxとtminを初期化するといい。
*入力がリダイレクトなので、デバッグ目的でないならprintf( "%d 番目の点数は?\n", i );は必要ない。
*
>>912を見れば分かるが、君のdata[NMAX]は意味がない。
915 :
デフォルトの名無しさん:2005/06/22(水) 15:06:36
916 :
877:2005/06/22(水) 15:33:05
昨日は助かりました。 でですね、問題が発展してもうむりです。。
今回は 前回同様 後半と前半の文字列が同じならくっつける
例 AA AB =AAB ABC BCD = ABCD
問題のサンプル出力
5 /*何個の文字列で作るか*/
ACTC
ATG
TCAG
GTCG
1つの最長のシーケンスを見つけました:ACTCGTCAGTCG
と、複数の文字列を全部組み合わせて最長の組み合わせを表示。
です。今晩暇な神な方 おねがいします。。
環境 OS:Linux
言語:C プログラムは一通り習いました。
>>916 >と、複数の文字列を全部組み合わせて最長の組み合わせを表示。
上の例だとATGを使ってないけど良いのか?
自分で勝手に理解したところだけ出さないでできるだけ問題をそのまま出すニダ
お願いする方より回答者の方が質問を把握してるって妙な現象がw
919 :
デフォルトの名無しさん:2005/06/22(水) 16:00:50
>>916 文字列が連結可能かどうかを数値の大小に置き換えると
「最長上昇部分列」の問題に帰着する希ガス。
>>920 文字列の連結可能性は順序関係じゃないけど良いのか?