09/06/08 23:16:45
[1] 授業単元:Linux
[2] 問題文(含コード&リンク):
サンプルコード URLリンク(kansai2channeler.hp.infoseek.co.jp)
に手を加え、パス検索機能を追加する。
例えば、/bin/ls と入力することで動いていたが、lsだけで実行可能とする。
>ls
>ls?r
>date?I
>gcc-oexp1exp1.c
>./exp1
>./exp1 1 この6つのコマンドを実行し、実行結果を提出する。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C
[4] 期限: 明日中にはお願いします。
[5] その他の制限: わかりやすい内容でお願いします。
40:デフォルトの名無しさん
09/06/08 23:42:27
>>39
35行目を修正でいいんじゃない?
35c35
< if(execv(argv[0],argv[])==(-1)){
---
> if(execvp(argv[0],argv)==(-1)){
関数 execlp() と execvp() は、指定されたファイル名がスラッシュ (/) を含んでいない場合、シェルと同じ動
作 で実行可能なファイルを探索する。検索パスは環境変数 PATH で指定されたパスである。
41:デフォルトの名無しさん
09/06/08 23:43:14
前スレ>>974の問題3、10000桁まで計算できるようにした。
ただし、えれぇ高速なマシンが必要。最適化とか皆無^^;
やりかたがアレだとかメモリがナニだとかはナシな方向で・・・
URLリンク(kansai2channeler.hp.infoseek.co.jp)
42:デフォルトの名無しさん
09/06/09 00:02:17
>>41
ウホッ!
約10KBの構造体をそのまま関数引数や戻り値にするところが豪気だねw
でもプログラムはすごくわかりやすくて性格のいい人が書いたのではという
印象を持った。
43:デフォルトの名無しさん
09/06/09 00:04:10
>>39
whileの中の
p=(char *)&command;
がかなりヤバげに見えるんだが。
キャストもアンドもいらない。
44:デフォルトの名無しさん
09/06/09 00:06:58
>>41
i[n]に0~9でなく0~99を割り当てたら、効率良くね?
45:デフォルトの名無しさん
09/06/09 00:15:19
>>44
>>41が実装したのはBCD
それじゃただの多倍長
効率はいいが実装が面倒、特に除算
階乗を使う、とかいう糞縛りがなければnCrの答えはパスカルの三角形をDPで作った方が速い
46:デフォルトの名無しさん
09/06/09 00:16:31
多倍長演算の肝は、自然数をどう表現するか。
自然数 10000を10進で表現するか、16進で表現するか。2進で表現するか。または1234進数とか
その解釈で色々と実装が変わってくる。
PCは2進が効率良いから2進がベーすで、人がわかりやすいようにバイトで数字を表記する。
47:46
09/06/09 00:25:12
BCDぐぐってみた。
こういう表現もあるんだねぇ。
48:デフォルトの名無しさん
09/06/09 00:46:42
BCDは通常、頻繁にそれを文字?(????表現)に直すニーズが
ありながらも、???な計算が必要な(もっぱら??関係)用途に
用いられる。桁数が?えるとそれを???に変換する処理コストは
バカにならない。???に直すのに便利な形式が取られるのが普通。
なんで殆どの場合??のベキ乗進法が取られる。
49:39
09/06/09 01:15:05
>>40
execvpとしてみたのですが、
>gcc -o exp1 exp1.cでとても長いエラーが出力されます。
テストですので、hello worldで普通に実行できましたのでソースが悪い訳じゃないと思います。
50:デフォルトの名無しさん
09/06/09 01:28:31
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
姓,名,年齢,郵便番号,電話番号の各データをメンバとする構造体配列を下記のように宣言し
その構造体配列にキーボードからデータを逐次入力して,最大100名のデータを格納できるようにしなさい。
但し,入力の終了は,姓入力の際にnullと入力することによって判定しなさい。
また,入力が終了した時点で,格納された複数名のデータをすべて出力するようにしなさい。
#define MAXREC 100
struct namelist {
char last_name[21], first_name[21];
int age;
char zip[9], tel[13];
} meibo[MAXREC];
また、入力が終了した時点で,格納された複数名のデータを郵便番号順に出力するようにプログラムを変更しなさい。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:6月9日23:59
[5] その他の制限:特になし
51:デフォルトの名無しさん
09/06/09 01:32:42
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
共用体を用いて、2バイト整数の上下バイトを入れ換えて暗号化する関数 short encode(short)を作り
キーボードから入力した整数を暗号化/復号化するプログラムを作りなさい
[3] 環境
[3.1] OS: linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C言語
[4] 期限:6月10日
[5] その他の制限:
main関数の部分は次のコードを用いなさい。
short encode(short);
main()
{
int n, m, k;
while (1) {
printf("整数を入力して下さい(終了は0) = ");
scanf("%d", &n);
if (n == 0) break;
m = encode(n); /* 暗号化 */
printf("\n\t%d を暗号化すると %d になります。\n", n, m);
k = encode(m); /* 復号化 */
printf("\n\t%d を復号化すると %d になります。\n\n", m, k);
}
}
52:デフォルトの名無しさん
09/06/09 01:50:27
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
整数係数の多項式について,その次数と係数をキーボードから入力して連結リストに格納し
次に格納された多項式を画面に出力する。
そして、xの実数値をキーボードから入力して多項式の値を求めるプログラムを作れ。
出力例
整数次数の多項式を入力します!
最大次数を入力してください:5↵
小さい次数から整数係数を順に入力してください
X^0の整数係数:-1↵
X^1の整数係数:2↵
X^2の整数係数:3↵
X^3の整数係数:0↵
X^4の整数係数:0↵
X^5の整数係数:-1↵
多項式は次の通り
-X^5+3X^2+2X-1
Xの値を入力してください:0.8↵
多項式の値は 2.192320 です
[3] 環境
[3.1] OS: linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C言語
[4] 期限:6月10日
[5] その他の制限: なし
53:デフォルトの名無しさん
09/06/09 01:50:44
>>28
URLリンク(kansai2channeler.hp.infoseek.co.jp)
54: ◆N8hH7z85ug
09/06/09 04:25:21
[1] 授業単元: 文字列とポインタ
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: ([09年6月10日10:00まで]
[5] その他の制限: 検索していてよく見かけた#include <string.h>というのは習っていません。
#include<stdio.h>しか使ったことはありません。
よろしくお願いします。
55:デフォルトの名無しさん
09/06/09 06:15:46
>>52
URLリンク(kansai2channeler.hp.infoseek.co.jp)
56:デフォルトの名無しさん
09/06/09 09:35:13
>>49
何故かgcc固有のインクルードパスを無効と判定するみたい。
-vで出力みると違いがでるね。
原因とか回避方法はわからない。宿題テーマとは離れてしまうかも?
57:デフォルトの名無しさん
09/06/09 11:14:25
>>54
#include <stdio.h>
int is_non_wordc(int c)
{
if (0x30 <= c && c <= 0x39) /* 数字 */
return 0;
if (0x40 <= c && c <= 0x5a) /* 大文字英字 */
return 0;
if (0x61 <= c && c <= 0x7a) /* 小文字英字 */
return 0;
return 1;
}
int main(void)
{
char word[100];
int i = 0, c;
while ((c = getchar()) != EOF) {
if (!is_non_wordc(c)) { word[i++] = c; }
else { word[i] = '\0'; if (i != 0) printf("%s\n", word); i = 0; }
}
return 0;
}
58:デフォルトの名無しさん
09/06/09 11:29:51
fscanfの引数の場合分けがうまくいかないんだけどどうして?
引数がfloatとcharで20こあって"%d%f・・・・・",hairetu,&suuji・・・・とあるんだけど返り値=1にした時しかうまくいかない
switchにしてcase20はおkだけどcase 2とかdefaultにはcaseが正しくありませんってなる
59:デフォルトの名無しさん
09/06/09 11:38:17
>>58
>>1
60:デフォルトの名無しさん
09/06/09 11:41:22
>>59
すまん
61:デフォルトの名無しさん
09/06/09 14:07:57
>>050 姓,名,年齢,郵便番号*,電話番号の各データをメンバとする構造体配列
>>028の選択ソート使ってます。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
62:デフォルトの名無しさん
09/06/09 15:03:43
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: g++
[3.3] 言語: C++
[4] 期限: 6月11日9:00
[5] その他の制限: 特になし
よろしくお願いします
63:デフォルトの名無しさん
09/06/09 15:34:52
>>62
URLリンク(kansai2channeler.hp.infoseek.co.jp)
64:デフォルトの名無しさん
09/06/09 15:39:08
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 6月12日24:00まで]
[5] その他の制限:特になし
よろしくお願いします
65:デフォルトの名無しさん
09/06/09 15:50:26
>>63
ありがとうございました。助かりました
66:デフォルトの名無しさん
09/06/09 15:51:25
>>62
#include <iostream>
using namespace std;
template<class T, int N> class Counting {
T* array_;
public:
Counting(T* Array) { array_ = Array; }
T sum()
{
T result = 0; for (int i = 0; i < N; ++i) result += array_[i];
return result;
}
T ave() { return sum() / N; }
void modify(int index, T value) { array_[index] = value; }
};
int main()
{
const int s1 = 5, s2 = 3;
int a[s1] = { 1, 2, 3, 4, 5 };
Counting<int, s1> ca(a);
cout << ca.sum() << " " << ca.ave() << "\n";
ca.modify(2, 10);
cout << ca.sum() << " " << ca.ave() << "\n";
double b[s2] = { 1.2, 2.5, 3.5 };
Counting<double, s2> cb(b);
cout << cb.sum() << " " << cb.ave() << "\n";
cb.modify(1, 4.8);
cout << cb.sum() << " " << cb.ave() << endl;
return 0;
}
67:66
09/06/09 15:52:06
解決済みでしたね。ごめんなさい。
68:デフォルトの名無しさん
09/06/09 16:25:57
>>051 unionを使った暗号化と複合化。
#include <stdio.h>
short encode(short);
main()
{
int n, m, k;
while (1) {
printf("整数を入力して下さい(終了は0) = ");
if(scanf("%d", &n) != 1) { scanf("%*s"); continue; }
if (n == 0) break;
m = encode(n); /* 暗号化 */
printf("\n\t%d を暗号化すると %d になります。\n", n, m);
printf("\n\t0x%04hx を暗号化すると 0x%04hx になります。\n", n, m);
k = encode(m); /* 復号化 */
printf("\n\t0x%04hx を復号化すると 0x%04hx になります。\n", m, k);
printf("\n\t%d を復号化すると %d になります。\n\n", m, k);
}
}
short encode(short data) {
union {
short sdata;
struct {
char cdata1, cdata2;
} c;
} u;
char tmp;
u.sdata = data;
tmp = u.c.cdata1, u.c.cdata1 = u.c.cdata2, u.c.cdata2 = tmp;
return u.sdata;
}
69:デフォルトの名無しさん
09/06/09 16:59:14
[1] 授業単元: 情報処理
>[2] 問題文(含コード&リンク):
>URLリンク(kansai2channeler.hp.infoseek.co.jp)
>[3] 環境
> [3.1] OS: Windows
> [3.2] コンパイラ名とバージョン: gcc
> [3.3] 言語: C/C++
>[4] 期限: 2009年6月11日23:30まで
>[5] その他の制限: 問題文にもありますが、3問目以外規制があります。
>
>全三問です。 よろしくお願いいたします。
70:デフォルトの名無しさん
09/06/09 18:18:19
1] 授業単元: c++
[2] 1次元配列a[1]~a[10]の各要素に任意の数値を格納した後すべて加算した合計値を表示せよ。
[3] 環境
[3.1] OS: XP
[3.2] turbo c
[3.3] c++
[4] 今週金曜日まで。
[5] まだ習いはじめて一年なのでそんなには進んでません。
71:66
09/06/09 18:25:46
>>70
#include <iostream>
using namespace std;
int main()
{
double a[11];
a[0] = 0;
for (int i = 1; i <= 10; ++i) {
cout << "input a[" << i << "] > ";
cin >> a[i];
a[0] += a[i];
}
cout << "total: " << a[0] << endl;
return 0;
}
72:デフォルトの名無しさん
09/06/09 18:27:21
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: visual C++
[3.3] 言語: C++
[4] 期限: 今日中
[5] その他の制限: 特になし
よろしくお願いします
73:デフォルトの名無しさん
09/06/09 18:29:51
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: visual C++
[3.3] 言語: C++
[4] 期限: 今日中
[5] その他の制限:特になし
72共々よろしくお願いします
74:デフォルトの名無しさん
09/06/09 19:43:45
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):最大256文字の文字列を入力し、単語数を出力しなさい。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:6月11日 8:00
[5] その他の制限:最大256文字の文字列を引数とし、最初の単語の文字数を返す関数を作成し、それを用いる。